X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOSQLiteTreeHandler.cpp;h=596a92a17492e963abea3cabcd061ccb084549e4;hb=b029354f54449e058d14c671e7155e65b4086de6;hp=3a01e117f8a78f3861ede83c5200f4e054f57e8c;hpb=ff9cfd68812d5dd296fa71fbcc21e7e867d4da23;p=creaImageIO.git diff --git a/src2/creaImageIOSQLiteTreeHandler.cpp b/src2/creaImageIOSQLiteTreeHandler.cpp index 3a01e11..596a92a 100644 --- a/src2/creaImageIOSQLiteTreeHandler.cpp +++ b/src2/creaImageIOSQLiteTreeHandler.cpp @@ -36,6 +36,7 @@ namespace creaImageIO : mFileName(filename) { mDB = new CppSQLite3DB; + mIsAdding=false; GimmickMessage(1,"SQLite version : " <SQLiteVersion())<< std::endl); } @@ -106,13 +107,7 @@ namespace creaImageIO { return false; } - //===================================================================== - - //===================================================================== - unsigned int SQLiteTreeHandler::GetNumberOfChildren(tree::Node* n) - { - return 0; - } + //===================================================================== //===================================================================== @@ -132,13 +127,13 @@ namespace creaImageIO } //===================================================================== - //===================================================================== int SQLiteTreeHandler::AddBranch( const AttributeMapType& attr ) { tree::Node* parent = DBGetParent(attr); DBGraftToParent(parent,attr); return (parent->GetLevel()+1); + } //===================================================================== @@ -149,18 +144,31 @@ namespace creaImageIO DBRecursiveRemoveNode(node); // std::cout << "DELETE"<GetParent()) + bool remove=false; + tree::Node* parent=node->GetParent(); + if (parent) { - node->GetParent()->RemoveChildrenFromList(node); + int nC = parent->RemoveChildrenFromList(node); + if(nC>0 && parent->GetLevel()>0) + { + std::stringstream out; + out <GetLevel()>0) + { + Remove(parent); + } // std::cout << "DELETE OK"<1) { // Add Attribute 'PARENT_ID' to Description - GetTree().GetLevelDescriptor(l).Add + GetTree().GetDescriptor().Add (AttributeDescriptor( "PARENT_ID", "Database Parent Identifier", 0,0, AttributeDescriptor::PRIVATE - )); + ),l); } } @@ -387,7 +413,6 @@ namespace creaImageIO << i->GetGroup() << "," << i->GetElement() << "," << i->GetFlags() << ");"; - UPDATEDB(insert.str()); } @@ -440,7 +465,7 @@ namespace creaImageIO tree::Descriptor& desc = GetTree().GetDescriptor(); // clears the existing one - desc.GetLevelDescriptorList().clear(); + desc.Clear(); int nblevel = 0; std::string query = "SELECT * FROM LEVELS"; @@ -451,7 +476,7 @@ namespace creaImageIO { std::string name = q.getStringField(0); GimmickMessage(2," * Importing level '"<GetChildrenLoaded()) { // Iterate the children + tree::Node::ChildrenListType::iterator i; for (i = node->GetChildrenList().begin(); i!= node->GetChildrenList().end(); @@ -674,14 +700,18 @@ namespace creaImageIO { nbloaded += DBLoadChildren(*i,numberoflevels-1); } + node->SetChildrenLoaded(true); return nbloaded; + } - + else + { /// If children not loaded : do it and recurse // Query DB int level = node->GetLevel(); std::string query = "SELECT * FROM "; + query += GetTree().GetLevelDescriptor(level+1).GetName(); if (level>0) { @@ -691,8 +721,12 @@ namespace creaImageIO CppSQLite3Query q; QUERYDB(query,q); + int p=0; while (!q.eof()) { + + // std::cout << "DBLoadCh : creating node level "<SetChildrenLoaded(true); + // msw[2].Pause(); return nbloaded; + } } //===================================================================== @@ -750,8 +786,8 @@ namespace creaImageIO void SQLiteTreeHandler::DBGraftToParent( tree::Node* parent, const AttributeMapType& attr) { - GimmickMessage(2,"Grafting to parent '"<GetLabel() - <<"'"<GetLabel() + // <<"'"<GetLevel()+1; level < GetTree().GetNumberOfLevels(); @@ -759,7 +795,17 @@ namespace creaImageIO { // Create Node tree::Node* child = new tree::Node(parent,attr); - + child->SetChildrenLoaded(true); + if (level>1) + { + int nc = GetNumberOfChildren(parent)+1; + + // std::cout<<"Number of children "<GetNumberOfChildren()<GetLevel()>0 ) child->SetAttribute("PARENT_ID",parent->GetAttribute("ID")); @@ -817,17 +863,39 @@ namespace creaImageIO sql += GetTree().GetLevelDescriptor(n->GetLevel()).GetName(); sql += " SET "; sql += key; - sql += "='"; + sql += " = '"; sql += value; - sql += "' WHERE ID="; + sql += "' WHERE ID = '"; sql += n->GetAttribute("ID"); + sql +="'"; // sql += " LIMIT 1"; UPDATEDB(sql); } - //===================================================================== + //===================================================================== + /// Sets an attribute of a Node + void SQLiteTreeHandler::DBSetAttribute(const std::string& levelDescriptor, + const std::string& key, + const std::string& value, + const std::string& searchParam, + const std::string& searchVal) + { - //===================================================================== + std::string sql = "UPDATE "; + sql += levelDescriptor; + sql += " SET "; + sql += key; + sql += " = '"; + sql += value; + sql += "' WHERE "; + sql += searchParam; + sql += " = '"; + sql += searchVal; + sql += "'"; + std::cout<GetLevel()).GetName() <GetChildrenList().begin(); - i != node->GetChildrenList().end(); - i++) + + if(node->GetNumberOfChildren()!=0) + { + Node::ChildrenListType::iterator i; + for (i = node->GetChildrenList().begin(); + i != node->GetChildrenList().end(); + i++) + { + DBRecursiveRemoveNode((*i)); + } + } + else if(node->GetLevel()GetLevel()+1,node->GetAttribute("ID")); + } + } + + //===================================================================== + void SQLiteTreeHandler::DBRecursiveRemoveNode(int level, std::string parentId) + { + std::stringstream out; + std::stringstream result; + out<<"SELECT ID FROM "<GetLevel(); + + if(level0) { - DBRecursiveRemoveNode((*i)); + std::string query = "SELECT NumberOfChildren FROM "; + query += GetTree().GetLevelDescriptor(level).GetName(); + if (level>0) + { + query += " WHERE ID='" + n->UnsafeGetAttribute("ID") + + "'"; + } + CppSQLite3Query q; + QUERYDB(query,q); + + + while (!q.eof()) + { + for (int fld = 0; fld < q.numFields(); fld++) + { + nb=q.getIntField(fld); + } + q.nextRow(); + } + } + /* + if(nb==0) + { + nb=1; } + */ + return nb; } + //===================================================================== + void SQLiteTreeHandler::GetTopLevelNodeId(const std::string& searchParam, const std::string& searchValue, std::string& parent_id) + { + int level=GetTree().GetNumberOfLevels()-1; + std::string sp=searchParam.c_str(); + std::string sv=searchValue.c_str(); + + while(level>1) + { + std::stringstream out; + std::stringstream results; + out<<"SELECT PARENT_ID FROM "<