X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=src2%2FcreaImageIOSQLiteTreeHandler.cpp;h=4363e7c0a99de19d39fc44b4e0570f0598a9496d;hb=8d73d5f58d80abb928a7f60037837c2933b16bbd;hp=ef16549321508e95cbd4a5ee7a1d9dab86d8cd23;hpb=fcfe92562365cb738cf919d095d2f8d3608ec389;p=creaImageIO.git diff --git a/src2/creaImageIOSQLiteTreeHandler.cpp b/src2/creaImageIOSQLiteTreeHandler.cpp index ef16549..4363e7c 100644 --- a/src2/creaImageIOSQLiteTreeHandler.cpp +++ b/src2/creaImageIOSQLiteTreeHandler.cpp @@ -106,13 +106,7 @@ namespace creaImageIO { return false; } - //===================================================================== - - //===================================================================== - unsigned int SQLiteTreeHandler::GetNumberOfChildren(tree::Node* n) - { - return 0; - } + //===================================================================== //===================================================================== @@ -132,22 +126,36 @@ namespace creaImageIO } //===================================================================== - //===================================================================== int SQLiteTreeHandler::AddBranch( const AttributeMapType& attr ) { tree::Node* parent = DBGetParent(attr); DBGraftToParent(parent,attr); return (parent->GetLevel()+1); + } //===================================================================== //===================================================================== - bool SQLiteTreeHandler::Remove(tree::Node*) + bool SQLiteTreeHandler::Remove(tree::Node* node) { - return false; + DBRecursiveRemoveNode(node); + + // std::cout << "DELETE"<GetParent()) + { + node->GetParent()->RemoveChildrenFromList(node); + } + delete node; + // 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); } } @@ -373,7 +381,6 @@ namespace creaImageIO << i->GetGroup() << "," << i->GetElement() << "," << i->GetFlags() << ");"; - UPDATEDB(insert.str()); } @@ -426,7 +433,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"; @@ -437,7 +444,7 @@ namespace creaImageIO { std::string name = q.getStringField(0); GimmickMessage(2," * Importing level '"<GetChildrenLoaded()) { // Iterate the children - tree::Node::ChildrenListType::iterator i; + + /*tree::Node::ChildrenListType::iterator i; for (i = node->GetChildrenList().begin(); i!= node->GetChildrenList().end(); ++i) { nbloaded += DBLoadChildren(*i,numberoflevels-1); - } + }*/ return nbloaded; + } /// If children not loaded : do it and recurse @@ -668,6 +677,7 @@ namespace creaImageIO // Query DB int level = node->GetLevel(); std::string query = "SELECT * FROM "; + query += GetTree().GetLevelDescriptor(level+1).GetName(); if (level>0) { @@ -679,6 +689,7 @@ namespace creaImageIO while (!q.eof()) { + // std::cout<<"Name in q: "<GetLevel()).GetName(); insert += " " + val + ";"; + UPDATEDB(insert); // Store DB id of newly created node; @@ -811,6 +823,62 @@ namespace creaImageIO } //===================================================================== + + //===================================================================== + void SQLiteTreeHandler::DBRecursiveRemoveNode(Node* node) + { + + std::string query = "DELETE FROM "; + + query += GetTree().GetLevelDescriptor(node->GetLevel()).GetName(); + query += " WHERE ID='"+ node->GetAttribute("ID") + "';"; + + UPDATEDB(query); + GimmickDebugMessage(2, + " Deleting '" + <GetLabel()<<"' with ID '" + <GetAttribute("ID") + <<"' in level "<< GetTree().GetLevelDescriptor(node->GetLevel()).GetName() + <GetChildrenList().begin(); + i != node->GetChildrenList().end(); + i++) + { + DBRecursiveRemoveNode((*i)); + } + } + + //===================================================================== + unsigned int SQLiteTreeHandler::GetNumberOfChildren(tree::Node* n) + { + // Query DB + int nb=0; + int level = n->GetLevel(); + if(GetTree().GetNumberOfLevels()!=(level+1)) + { + std::string query = "SELECT * FROM "; + query += GetTree().GetLevelDescriptor(level+1).GetName(); + if (level>0) + { + query += " WHERE PARENT_ID='" + n->UnsafeGetAttribute("ID") + + "'"; + } + + CppSQLite3Query q; + QUERYDB(query,q); + + + while (!q.eof()) + { + nb++; + q.nextRow(); + } + } + return nb; + } + /* //===================================================================== bool SQLiteTreeHandler::DBInsert(Node* alien_node, @@ -1097,12 +1165,14 @@ namespace creaImageIO // std::cout << " ** Node = "<second<second; } + //===================================================================== //===================================================================== bool SQLiteTreeHandler::Remove(Node* node) { - DBRecursiveRemoveNode(node); + + //DBRecursiveRemoveNode(node); // std::cout << "DELETE"<GetParent()) @@ -1113,6 +1183,8 @@ namespace creaImageIO // std::cout << "DELETE OK"<