Applied latest source code
[apps/native/preloaded/Settings.git] / inc / StAppSettingManager.h
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://floralicense.org/license/
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file                StAppSettingManager.h
19  * @brief               This is the header file for AppSetting Manager class.
20  */
21
22 #ifndef _ST_APPSETTING_MANAGER_H_
23 #define _ST_APPSETTING_MANAGER_H_
24
25 #include <FApp.h>
26 #include <FBase.h>
27
28 class ElementEnumerator;
29 class Enumerator;
30 class NullEnumerator;
31 class ObserverAttribute;
32
33 class Node
34         : public Tizen::Base::Object
35 {
36 public:
37         enum NodeType
38         {
39                 NODE_TYPE_ELEMENT,
40                 NODE_TYPE_LEAF
41         };
42
43         virtual ~Node(void);
44
45         Tizen::Base::String GetId(void);
46         Tizen::Base::String GetType(void);
47         Tizen::Base::String GetParentId(void);
48         Node* GetParent(void);
49
50         result AddAttribute(Tizen::Base::String key, Tizen::Base::String value);
51         result SetAttribute(Tizen::Base::String key, Tizen::Base::String value);
52         result RemoveAttriube(Tizen::Base::String key);
53         Tizen::Base::String* GetAttributeN(Tizen::Base::String key);
54         int GetAttriubteCount(void);
55         Tizen::Base::Collection::IMapEnumerator* GetAttributeIEnumeratorN(void);
56
57         void RegisterObserverlistener(ObserverAttribute* pObserver);
58         void UnRegisterObserverlistener(ObserverAttribute* pObserver);
59
60         virtual Enumerator* CreateEnumerator(void) = 0;
61         virtual Tizen::Base::Collection::IEnumerator* GetCurrentIEnumerator(void) = 0;
62         virtual NodeType GetNodeType(void) = 0;
63         virtual void DebugLog(void) = 0;
64
65 protected:
66         Node(void){}
67         explicit Node(Tizen::Base::String id, Tizen::Base::String type, Node* pParent = null, Tizen::Base::String parentId = "NONE");
68
69         void RemoveAllAttribute(void);
70         void RemoveAllObserverListener(void);
71         void ChangedAttributeValue(Tizen::Base::String value);
72
73 protected:
74         Node* __pParent;
75
76         Tizen::Base::Collection::LinkedListT<ObserverAttribute*>* __pRegisteredObserverList;
77         Tizen::Base::Collection::HashMap* __pNodeAttribute;
78
79         Tizen::Base::String __parentId;
80         Tizen::Base::String __id;
81         Tizen::Base::String __type;
82 };
83
84 class ElementLeaf
85         : public Node
86 {
87 public:
88         explicit ElementLeaf(Tizen::Base::String id, Tizen::Base::String type, Node* pParent, Tizen::Base::String parentId)
89                 : Node(id, type, pParent, parentId){}
90         virtual ~ElementLeaf(void){}
91
92         virtual Node::NodeType GetNodeType(void);
93         virtual Enumerator* CreateEnumerator(void);
94         virtual void DebugLog(void);
95
96 protected:
97         ElementLeaf(void){}
98
99         virtual  Tizen::Base::Collection::IEnumerator* GetCurrentIEnumerator(void);
100 };
101
102 class ElementNode
103         : public Node
104 {
105 public:
106         explicit ElementNode(Tizen::Base::String id, Tizen::Base::String type, Node* pParent = null, Tizen::Base::String parentId = "NONE");
107         virtual ~ElementNode(void);
108
109         Node* AddChild(Tizen::Base::String id, Tizen::Base::String type, NodeType nodetype = NODE_TYPE_ELEMENT);
110         Node* AddSilbing(Tizen::Base::String id, Tizen::Base::String type, NodeType nodetype = NODE_TYPE_ELEMENT);
111         Node* GetChild(Tizen::Base::String id);
112         Node* GetChild(int index);
113         int GetChildCount(void);
114
115         result RemoveChildAt(Tizen::Base::String id);
116         result RemoveSilbingAt(Tizen::Base::String id);
117
118         virtual Enumerator* CreateEnumerator(void);
119         virtual Node::NodeType GetNodeType(void);
120         virtual void DebugLog(void);
121
122 private:
123         ElementNode(void){}
124
125         result Add(Node& node);
126         result Remove(Tizen::Base::String id, Node* pParent);
127         void RemoveAllChild(void);
128         void ResetCurrentIEnumerator(void);
129
130         virtual Tizen::Base::Collection::IEnumerator* GetCurrentIEnumerator(void);
131
132 private:
133         friend class ElementEnumerator;
134
135         Tizen::Base::Collection::IEnumerator* __pCurrentEnum;
136         Tizen::Base::Collection::LinkedList* __pChild;
137 };
138
139 class Enumerator
140 {
141 public:
142         virtual ~Enumerator(void){}
143
144         virtual result MoveNext(void) = 0;
145         virtual Tizen::Base::Object* GetCurrentObject(void) = 0;
146
147 protected:
148         Enumerator(void){}
149 };
150
151 class ElementEnumerator
152         : public Enumerator
153 {
154 public:
155         virtual ~ElementEnumerator(void);
156
157         result MoveNext(void);
158         Tizen::Base::Object* GetCurrentObject(void);
159
160 protected:
161         explicit ElementEnumerator(Node* pRootNode);
162         ElementEnumerator(void);
163
164         bool IsEmpty(void);
165         void Reset(void);
166
167 protected:
168         friend class ElementNode;
169
170         Node* __pRootNode;
171         Tizen::Base::Collection::IEnumerator* __pCurrentIEnumerator;
172         Tizen::Base::Collection::StackT<Node*> __enumeratorStack;
173 };
174
175 class NullEnumerator
176         : public Enumerator
177 {
178 public:
179         virtual ~NullEnumerator(void){}
180
181         result MoveNext(void);
182         Tizen::Base::Object* GetCurrentObject(void);
183
184 protected:
185         explicit NullEnumerator(ElementLeaf* pRootNode) : __pRootNode(pRootNode){}
186         NullEnumerator(void){}
187
188 protected:
189         friend class ElementLeaf;
190
191         ElementLeaf* __pRootNode;
192 };
193
194 class ObserverAttribute
195         : public Tizen::Base::Object
196 {
197 public:
198         virtual ~ObserverAttribute(void){}
199
200         virtual result OnChangedAttributeValue(Tizen::Base::String id, Tizen::Base::String value, Tizen::Base::String type) = 0;
201         virtual void UpdateChangedValue(void) = 0;
202
203 protected:
204         ObserverAttribute(void){}
205 };
206
207 class IOAppSetting
208         : public ObserverAttribute
209         , public Tizen::App::IAppSettingEventListener
210 {
211 public:
212         IOAppSetting(void);
213         virtual ~IOAppSetting(void);
214
215         result Constructor(Tizen::Base::String appId);
216         virtual result OnChangedAttributeValue(Tizen::Base::String id, Tizen::Base::String value, Tizen::Base::String type);
217         virtual void UpdateChangedValue(void);
218
219         virtual void OnAppSettingChanged(const Tizen::Base::String& id){}
220
221 private:
222         bool GetStringToBoolValue(Tizen::Base::String value);
223         int GetStringToIntegerValue(Tizen::Base::String value);
224
225 private:
226         Tizen::Base::String __appId;
227         Tizen::App::AppSetting* __pAppSettingInstance;
228         Tizen::Base::Collection::HashMap* __pChangedAttributeHashMap;
229 };
230
231 class AppSettingManager
232 {
233 public:
234         virtual ~AppSettingManager(void);
235
236         result XmlAppSettingFileRead(Tizen::Base::String filePath, ElementNode* pRootNode);
237         ElementNode* AddAppSettingRootNode(Tizen::Base::String rootId);
238         ElementNode* GetAppSettingRootNode(Tizen::Base::String rootId);
239         result RemoveAppSettingRootNode(Tizen::Base::String rootId);
240         Tizen::Base::Collection::IMapEnumerator* GetRottNodeIEnumeratorN(void);
241         int GetRootNodeCount(void);
242
243         static AppSettingManager* GetInstance(void);
244
245 private:
246         AppSettingManager(void);
247         result Construct(void);
248         static void CreateInstance(void);
249         static void DestroyInstance(void);
250
251 private:
252         static AppSettingManager* __pAppSettingManagerInstance;
253         Tizen::Base::Collection::HashMap* __pRootListHashMap;
254 };
255
256 #endif // _ST_APPSETTING_MANAGER_H_