1 #ifndef __creaImageIOTreeHandler_h_INCLUDED__
2 #define __creaImageIOTreeHandler_h_INCLUDED__
4 #include <creaImageIOTree.h>
10 //=======================================================================
11 //class TreeHandlerStatistics;
12 //=======================================================================
16 //=======================================================================
18 /// Abstract class which 'handles' a Tree structure
23 //====================================================================
24 // typedef TreeHandlerStatistics Statistics;
25 //====================================================================
27 //====================================================================
31 virtual ~TreeHandler() {}
32 //====================================================================
34 //====================================================================
35 /// Returns the Tree handled
36 tree::Tree& GetTree() { return mTree; }
37 /// Returns the Tree handled (const)
38 const tree::Tree& GetTree() const { return mTree; }
39 //====================================================================
41 //====================================================================
43 /// Is the 'source' readable ?
44 virtual bool IsReadable() { return false; }
45 /// Is the 'source' writable ?
46 virtual bool IsWritable() { return false; }
47 //====================================================================
50 //====================================================================
51 // INITIALIZATION / FINALIZATION
52 //====================================================================
54 //====================================================================
55 /// Opens an existing 'source'
56 // Default mode is read only
57 // If IsWritable and writable==true then opens in read/write mode
58 virtual bool Open(bool writable = false) { return false; }
59 /// Closes the 'source'
60 virtual bool Close() { return false; }
61 /// Creates a new 'source'
62 // Default mode is read only
63 // If IsWritable and writable==true then opens in read/write mode
64 virtual bool Create(bool writable = false) { return false; }
65 /// Destroys the 'source'
66 virtual bool Destroy() { return false; }
67 /// Begins a transaction
68 virtual void BeginTransaction(){}
69 ///Commits results and ends transaction
70 virtual void EndTransaction(){}
71 //====================================================================
74 //====================================================================
76 //====================================================================
79 //====================================================================
80 /// Returns the number of children of the Node *WITHOUT LOADING THEM*
81 // REM : The Tree itself is a Node and asking for its number of
82 // children returns the number of children of level 1.
83 virtual unsigned int GetNumberOfChildren(tree::Node* n) { return 0; }
84 //====================================================================
86 //====================================================================
87 /// Returns the attribute requested. Useful for synchronization.
88 virtual void GetAttribute(std::string levelDescriptor,
89 std::string searchParam,
90 std::string searchVal,
92 std::string& result){}
93 //====================================================================
95 //====================================================================
96 /// Recursively loads the children of node 'parent' until maxlevel
98 // If maxlevel <= 0 then loads all the sub-tree rooted at parent
99 // If parent == NULL or parent == tree then starts with the 'children' of
101 // Returns the total number of children loaded.
102 virtual int LoadChildren(tree::Node* parent, int maxlevel)
104 //====================================================================
106 //====================================================================
107 /// Unloads the Node and its descendants
108 // WITHOUT altering the source, e.g. the database
109 virtual void UnLoad(tree::Node* n) { return; }
110 //====================================================================
112 //====================================================================
113 /// Returns the top level node id for the given search param and search value
114 virtual void GetTopLevelNodeId(const std::string& searchParam,
115 const std::string& searchValue,
116 std::string& parent_id){ return; }
117 ///====================================================================
120 //====================================================================
121 // WRITE METHODS : WORK ONLY IN WRITE MODE
122 //====================================================================
123 typedef tree::Node::AttributeMapType AttributeMapType;
124 /// Adds a branch in the tree with the attributes provided
125 // returns the Level in the tree where the branch was connected
126 // (-1 for error, 0 for top level, etc. )
127 // Of course the branch is loaded on exit
128 virtual int AddBranch( const AttributeMapType& ) { return -1; }
129 /// Removes the node and its descendants
130 virtual bool Remove(tree::Node*) { return false; }
131 /// Sets an attribute of a Node
132 virtual bool SetAttribute(tree::Node*,
133 const std::string& key,
134 const std::string& value) { return false; }
136 virtual void SetAttribute(const std::string& levelDescriptor,
137 const std::string& key,
138 const std::string& value,
139 const std::string& searchParam,
140 const std::string& searchVal){}
141 //Deletes the tuple that matches the parameters given
142 virtual void DeleteTuple(std::string levelDescriptor, std::string key, std::string value){}
143 //Deletes the entries that match the parameters given
144 virtual void RemoveEntries(const std::string i_table,
145 const std::string i_attribute,
146 const std::string i_operand,
147 const std::string i_val){}
149 //====================================================================
157 // EO class TreeHandler
158 //=======================================================================
160 //=======================================================================
161 /// Memorizes statistics on operations done by a tree handler
162 // (nodes created, removed, ...)
163 class TreeHandlerStatistics
166 //====================================================================
168 TreeHandler(TreeHandler* tree) : mTreeHandler(tree) { Reset(); }
177 void CreateNode(int level) { mNumberCreatedNode[level]++; }
178 void DeleteNode(int level) { mNumberDeletedNode[level]++; }
181 TreeHandler* mTreeHandler;
182 std::vector<int> mNumberCreatedNode;
183 std::vector<int> mNumberDeletedNode;
186 ///====================================================================
188 // EO class TreeHandlerStatistics
189 //=======================================================================
192 } // EO namespace creaImageIO