]> Creatis software - creaImageIO.git/blobdiff - src2/creaImageIOSQLiteTreeHandler.h
move directory
[creaImageIO.git] / src2 / creaImageIOSQLiteTreeHandler.h
index c1ada2d266ed1ac3b85401272632fe4ec31dc56b..1172298500f114096ee6195b71b0687251853084 100644 (file)
@@ -13,93 +13,127 @@ namespace creaImageIO
    * \ingroup Model
    */
   //=======================================================================
-  /// Concrete TreeHandler which manages a tree stored in a sqlite database
+  /// Concrete TreeHandler which manages a Tree stored in a sqlite database
   class SQLiteTreeHandler : virtual public TreeHandler
   {
   public:
-    ///====================================================================
+    //====================================================================
     /// Ctor with database file name 
     SQLiteTreeHandler(const std::string& filename);
     /// Dtor
     virtual ~SQLiteTreeHandler();
-    ///====================================================================
+    //====================================================================
 
-    ///====================================================================
+    //====================================================================
     /// Returns the sqlite db file name 
     const std::string& GetFileName() const { return mFileName; }
-    ///====================================================================
+    //====================================================================
  
-    ///====================================================================
-    /// QUERY METHODS
+    //====================================================================
+    // QUERY METHODS
     /// Is the 'source' readable ?
     virtual bool IsReadable() { return true; }
     /// Is the 'source' writable ?
     virtual bool IsWritable() { return true; }
-    ///====================================================================
+    //====================================================================
 
 
-    ///====================================================================
-    /// INITIALIZATION / FINALIZATION
-    ///====================================================================
+    //====================================================================
+    // INITIALIZATION / FINALIZATION
+    //====================================================================
 
-    ///====================================================================
+    //====================================================================
     /// Opens an existing 'source' 
-    /// Default mode is read only 
-    /// If IsWritable and writable==true then opens in read/write mode
+    // Default mode is read only 
+    // If IsWritable and writable==true then opens in read/write mode
     virtual bool Open(bool writable = false);
     /// Closes the 'source'
     virtual bool Close();
     /// Creates a new 'source' 
-    /// Default mode is read only 
-    /// If IsWritable and writable==true then opens in read/write mode
+    // Default mode is read only 
+    // If IsWritable and writable==true then opens in read/write mode
     virtual bool Create(bool writable = false);
     /// Destroys the 'source'
     virtual bool Destroy();
-    ///====================================================================
+       /// Begins a transaction
+       virtual void BeginTransaction();
+       ///Commits results and ends transaction
+       virtual void EndTransaction();
+    //====================================================================
 
 
-    ///====================================================================
+    //====================================================================
     // READ METHODS
-    ///====================================================================
+    //====================================================================
 
 
-    ///====================================================================
+    //====================================================================
     /// Returns the number of children of the Node *WITHOUT LOADING THEM*
-    /// REM : The Tree itself is a Node and asking for its number of 
-    ///       children returns the number of children of level 1.
+    // REM : The Tree itself is a Node and asking for its number of 
+    //       children returns the number of children of level 1.
     virtual unsigned int GetNumberOfChildren(tree::Node* n);
-    ///====================================================================
+    //====================================================================
 
-    ///====================================================================
+       //====================================================================
+    /// Returns the attribute requested. Useful for synchronization.
+       virtual void GetAttribute(std::string levelDescriptor,
+                                                                          std::string searchParam, 
+                                                                          std::string searchVal, 
+                                                                          std::string key, 
+                                                                          std::string& result);
+    //====================================================================
+
+
+    //====================================================================
     /// Recursively loads the children of node 'parent' until maxlevel 
-    /// is reached.
-    /// If parent == NULL or parent == tree then starts with the 'children' of 
-    /// the tree itself.
-    /// Returns the total number of children loaded.
+    // is reached.
+    // If parent == NULL or parent == tree then starts with the 'children' of 
+    // the tree itself.
+    // Returns the total number of children loaded.
     virtual int LoadChildren(tree::Node* parent, int maxlevel);
-    ///====================================================================
+    //====================================================================
 
-    ///====================================================================
+    //====================================================================
     /// Unloads the Node and its descendants
-    /// WITHOUT altering the source, e.g. the database
+    // WITHOUT altering the source, e.g. the database
     virtual void UnLoad(tree::Node* n);
     ///====================================================================
-
-
-    ///====================================================================
-    /// WRITE METHODS : WORK ONLY IN WRITE MODE
+       
+       //====================================================================
+    /// Returns the top level node id for the given search param and search value
+    virtual void GetTopLevelNodeId(const std::string& searchParam, 
+                                                                                       const std::string& searchValue, 
+                                                                                       std::string& parent_id);
     ///====================================================================
+
+    //====================================================================
+    // WRITE METHODS : WORK ONLY IN WRITE MODE
+    //====================================================================
     /// Adds a branch in the tree with the attributes provided
-    /// returns the Level in the tree where the branch was connected 
-    /// (-1 for error, 0 for top level, etc. ) 
-    /// Of course the branch is loaded on exit
+    // returns the Level in the tree where the branch was connected 
+    // (-1 for error, 0 for top level, etc. ) 
+    // Of course the branch is loaded on exit
     virtual int AddBranch( const AttributeMapType& attr );
-    /// Removes the node and its descendants 
+    // Removes the node and its descendants 
     virtual bool Remove(tree::Node*);
-    /// Sets an attribute of a Node
+    // Sets an attribute of a Node
     virtual bool SetAttribute(tree::Node*, 
                              const std::string& key,
                              const std::string& value);
+       // Sets an attribute
+    virtual void SetAttribute(const std::string& levelDescriptor, 
+                             const std::string& key,
+                             const std::string& value,
+                                 const std::string& searchParam, 
+                                 const std::string& searchVal);
+       //Deletes the tuple that matches the parameters given
+       virtual void DeleteTuple(std::string levelDescriptor, std::string key, std::string value);
+       //Deletes the entries that match the parameters given
+       virtual void RemoveEntries(const std::string i_table, 
+               const std::string i_attribute, 
+               const std::string i_operand, 
+               const std::string i_val);
     //====================================================================
     
 
@@ -120,79 +154,70 @@ namespace creaImageIO
     //======================================================================
 
     //======================================================================
+
     /// Returns the parent to which the branch defined by the attributes 
-    /// provided must be grafted 
+    // provided must be grafted 
     tree::Node* DBGetParent( const AttributeMapType& attr);
     //======================================================================
 
     //======================================================================
+
     /// Loads the children of Node parent
-    /// Can recurse to numberoflevels levels
-    /// \return The total number of Node loaded (may be at different levels)
+    // Can recurse to numberoflevels levels
+    // \return The total number of Node loaded (may be at different levels)
     int DBLoadChildren( tree::Node* parent, int numberoflevels = 1);
     //======================================================================
 
     //======================================================================
+
     /// Appends to string s the SQL command to set the attributes values 
-    /// of node n
+    // of node n
     void SQLAppendAttributesValues(tree::Node* n, std::string& s);
     //======================================================================
 
     //======================================================================
+
     /// Graft the branch defined by the attributes to the parent
     void DBGraftToParent( tree::Node* parent, const AttributeMapType& attr);
     //======================================================================
     //======================================================================
+
     /// Sets an attribute of a Node and updates the database
     bool DBSetAttribute(tree::Node*, 
                        const std::string& key,
                        const std::string& value);
     //======================================================================
     //======================================================================
+       /// Sets an attribute and updates the database
+       void DBSetAttribute(const std::string& levelDescriptor, 
+                             const std::string& key,
+                             const std::string& value,
+                                 const std::string& searchParam, 
+                                 const std::string& searchVal);
+    //======================================================================
+    //======================================================================
+       
     /// Inserts the Node in the database
     void DBInsert(tree::Node* n);
     //======================================================================
-    /*
-    /// 
-    int DBQueryNumberOfChildren(tree::Node* n);
-    
-    // Insertion
-    bool DBInsert(tree::Node* alien_node) ; //, UpdateSummary& summary);
-    
-    //
-    std::string DBGetNodeId(tree::Node* node, const std::string& parent_id);
-
-    tree::Node* GetNodeFromTypeId(int level, 
-                                 const std::string& id);
-
-    // 
-    tree::Node* DBGetOrCreateNode(tree::Node* alien_node, 
-                                     tree::Node* internal_parent,
-                                     std::string parentid,
-                                 std::string& created_id);
-    //                               UpdateSummary& summary);
-    
-    tree::Node* DBGetOrCreateParent(tree::Node* alien_node,
-                                   std::string& parent_id);
-                                   //                             UpdateSummary& summary);
-    
-    void DBRecursiveGetOrCreateNode(tree::Node* alien_node, 
-                                        tree::Node* parent, 
-                                   const std::string& parent_id);
-    //                                  UpdateSummary& summary);
-    
 
-    // 
-    void DBRecursiveRemoveNode(tree::Node* node);
+       
+       //======================================================================
 
+    /// Deletes the tuple that matches the value specified in the given key and that belongs to the given level
+       void DBDelete(std::string levelDescriptor, std::string key, std::string value);
+    //======================================================================
 
-    void BuildSQLFieldsValues(tree::Node* n,
-                             std::string& str);
+       //======================================================================
 
+       /// Recursively Removes the nodes whose parent is given as a parameter
+    void DBRecursiveRemoveNode(tree::Node* node);
+       /// Recursively Removes the nodes found in the given level with the given parent id
+       void DBRecursiveRemoveNode(int level, std::string parentId);
+       //======================================================================
 
-    tree::Node* GetChildrenLike(tree::Node* internal_parent,
-                              tree::Node* alien_node);
-    */
+  
   private:
     /// The DB
     CppSQLite3DB* mDB;
@@ -200,24 +225,11 @@ namespace creaImageIO
     std::string mFileName;
     /// Is the DB writable ?
     bool mWritable;
-    void SetWritable(bool w) { mWritable; }
+    void SetWritable(bool w) { mWritable = w; }
     bool GetWritable() const { return mWritable; }
+       bool mIsAdding;
 
-    /*
-    struct TypeId
-    {
-      int type;
-      std::string id;
-      bool operator< (const TypeId& o) const 
-      {
-       return ((type<o.type) ||
-               ((type==o.type)&&id<o.id));
-      }
-    };
-    
-    typedef std::map<TypeId,tree::Node*> TypeIdToNodeMapType;
-    TypeIdToNodeMapType mTypeIdToNodeMap;
-    */
+   
   };
   // EO class SQLiteTreeHandler
   //=======================================================================