]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOSQLiteTreeHandler.cpp
*** empty log message ***
[creaImageIO.git] / src2 / creaImageIOSQLiteTreeHandler.cpp
index c35ae61bc64ac33b5eee140997c2c24f7062c150..7d9f7ef4587ffeffbfb42abac854f05dff4666ff 100644 (file)
@@ -21,7 +21,6 @@
 //#include <icons/close.xpm>
 
 #include <creaWx.h>
-#include <creaMessageManager.h>
 using namespace crea;
 
 #include <boost/filesystem.hpp>
@@ -107,13 +106,7 @@ namespace creaImageIO
   {
     return false;
   }
-  //=====================================================================
-
-  //===================================================================== 
-  unsigned int SQLiteTreeHandler::GetNumberOfChildren(tree::Node* n) 
-  { 
-    return 0; 
-  }
+  
   //===================================================================== 
 
   //===================================================================== 
@@ -145,10 +138,24 @@ namespace creaImageIO
  
 
   //===================================================================== 
-   bool SQLiteTreeHandler::Remove(tree::Node*)
+   bool SQLiteTreeHandler::Remove(tree::Node* node)
    {
-     return false;
+   DBRecursiveRemoveNode(node);
+    //    std::cout << "DELETE"<<std::endl;
+    if (node->GetParent())
+      {
+       node->GetParent()->RemoveChildrenFromList(node);
+      }
+    delete node;
+    //    std::cout << "DELETE OK"<<std::endl;
+    return true;
    }
+
+    //========================================================================
+
+  
+  
   //===================================================================== 
 
   //===================================================================== 
@@ -323,22 +330,22 @@ namespace creaImageIO
            
            
            // Add Attribute 'ID' to Description
-           GetTree().GetLevelDescriptor(l).Add
+           GetTree().GetDescriptor().Add
              (AttributeDescriptor( "ID",
                                    "Database Identifier",
                                    0,0,
                                    AttributeDescriptor::PRIVATE
-                                   ));
+                                   ),l);
            
            if (l>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);
              }
            
          }
@@ -427,7 +434,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";
@@ -438,7 +445,7 @@ namespace creaImageIO
       {
        std::string name = q.getStringField(0);
        GimmickMessage(2," * Importing level '"<<name<<"'"<<std::endl);
-       desc.GetLevelDescriptorList().push_back(LevelDescriptor(name));
+       desc.Add(LevelDescriptor(name));
        nblevel++;
        q.nextRow();
       }   
@@ -476,13 +483,13 @@ namespace creaImageIO
            std::string name(q.getStringField(1));
            GimmickMessage(2,"  - Importing attribute '"<<key<<"' '"<<name
                           <<"'"<<std::endl);
-           desc.GetLevelDescriptor(level).Add
+           desc.Add
              (AttributeDescriptor( key, // Key
                                    name, // Name
                                    q.getIntField(2), // Group
                                    q.getIntField(3), // Element 
                                    q.getIntField(4) // Flags
-                                   ));
+                                   ),level);
            if ( key == "ID" ) 
              {
                ID_found = true;
@@ -669,6 +676,7 @@ namespace creaImageIO
     // Query DB
     int level = node->GetLevel();
     std::string query = "SELECT * FROM ";
+       
     query += GetTree().GetLevelDescriptor(level+1).GetName();
     if (level>0)
       {
@@ -721,6 +729,7 @@ namespace creaImageIO
     std::string insert("INSERT INTO ");
     insert += GetTree().GetLevelDescriptor(n->GetLevel()).GetName();
     insert += " " + val + ";";
+
     UPDATEDB(insert);
        
     // Store DB id of newly created node;
@@ -812,6 +821,64 @@ 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 '"
+                               <<node->GetLabel()<<"' with ID '"
+                           <<node->GetAttribute("ID")
+                           <<"' in level "<< GetTree().GetLevelDescriptor(node->GetLevel()).GetName()
+                           <<std::endl);
+
+    Node::ChildrenListType::iterator i;
+    for (i  = node->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,
@@ -1098,12 +1165,14 @@ namespace creaImageIO
     //    std::cout << " ** Node = "<<i->second<<std::endl;
     return i->second;
   }
   //=====================================================================
 
   //=====================================================================
   bool SQLiteTreeHandler::Remove(Node* node)
   {
-    DBRecursiveRemoveNode(node);
+
+    //DBRecursiveRemoveNode(node);
  
     //    std::cout << "DELETE"<<std::endl;
     if (node->GetParent())
@@ -1114,6 +1183,8 @@ namespace creaImageIO
     //    std::cout << "DELETE OK"<<std::endl;
     return true;
   }
+  
+  
   //========================================================================
 
   //=====================================================================
@@ -1136,6 +1207,7 @@ namespace creaImageIO
        DBRecursiveRemoveNode((*i));
       }
   }
+  
   //=====================================================================
   
   //=====================================================================