Fixed a typo.
[platform/framework/native/appfw.git] / src / app / FApp_AppSettingImpl.h
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (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://www.apache.org/licenses/LICENSE-2.0
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        FApp_AppSetting.h
19  * @brief       This is the header file for the %_AppSettingImpl class.
20  *
21  * This header file contains the declarations of the %_AppSettingImpl class.
22  */
23
24 #ifndef _FAPP_INTERNAL_APP_SETTING_IMPL_H_
25 #define _FAPP_INTERNAL_APP_SETTING_IMPL_H_
26
27 #include <dbus/dbus.h>
28 #include <dbus/dbus-glib-lowlevel.h>
29 #include <libxml/parser.h>
30 #include <FBaseObject.h>
31 #include <FBaseString.h>
32 #include <FBaseColHashMap.h>
33 #include <FBaseColLinkedListT.h>
34 #include <FAppAppSetting.h>
35
36
37 namespace Tizen { namespace App
38 {
39
40 enum _ElementType { ELEMENT_INVALID, ELEMENT_BOOL, ELEMENT_INTEGER, ELEMENT_STRING, ELEMENT_EXPANDLIST };
41
42 class _AppSettingImpl
43         : public Tizen::Base::Object
44 {
45 public:
46         static _AppSettingImpl* GetInstance(void);
47         static AppSetting* GetInstance(const Tizen::Base::String& version);
48         static AppSetting* GetInstanceByAppId(const AppId& appId);
49         static result ReleaseInstanceByAppId(const AppId& appId);
50         static result ReleaseOtherAppInstances(void);
51         static Tizen::Base::Collection::IList* GetAppSettingVersionListN(void);
52         result GetValue(const Tizen::Base::String& id, bool& value) const;
53         result GetValue(const Tizen::Base::String& id, int& value) const;
54         result GetValue(const Tizen::Base::String& id, Tizen::Base::String& value) const;
55         result SetValue(const Tizen::Base::String& id, bool value, bool save = true);
56         result SetValue(const Tizen::Base::String& id, int value, bool save = true);
57         result SetValue(const Tizen::Base::String& id, const Tizen::Base::String& value, bool save = true);
58         result SetAppSettingEventListener(IAppSettingEventListener* pListener);
59
60         //
61         // Gets the implementation.
62         //
63         // @return              The implementation
64         // @param[in]   The interface instance pointer
65         // @since 2.1
66         //
67         static _AppSettingImpl* GetInstance(AppSetting& appSetting);
68
69         //
70         // Gets the implementation.
71         //
72         // @return              The implementation
73         // @param[in]   The interface instance pointer
74         // @since 2.1
75         //
76         static const _AppSettingImpl* GetInstance(const AppSetting& appSetting);
77
78         _AppSettingImpl(void);
79         virtual ~_AppSettingImpl(void);
80         static AppSetting* CreateAppSetting(void);
81         static void SetImplInstance(AppSetting& appSetting, _AppSettingImpl& impl);
82
83 private:
84         result Construct(const AppId& correspondAppId, const Tizen::Base::String& version = L"");
85         result ConstructByAppPath(const AppId& correspondAppId, const Tizen::Base::String& appRootPath);
86         result Load(void);
87         result Save(void);
88         void VisitNode(xmlNodePtr pCurrentNode);
89         void CheckNodeNameAndAddToCollection(xmlNodePtr pNode);
90         _ElementType GetElementType(xmlNodePtr pNode);
91         void GetMinMaxValue(xmlNodePtr pNode, _ElementType type, int& min, int& max);
92         Object* GetValueObjectN(_ElementType type, Tizen::Base::String& strValue, bool validValue);
93         bool UpdateProperty(xmlNodePtr pNode, const Tizen::Base::String& value);
94         bool InitializeDBus(void);
95         static DBusHandlerResult HandleDBusMessage(DBusConnection* connection, DBusMessage* message, void* user_data);
96         void SetValueFromDBusData(const char* pId, const char* pValue);
97         bool SendMessage(const Tizen::Base::String& id, const Tizen::Base::String& value, bool intType);
98
99         _AppSettingImpl(const _AppSettingImpl& rhs);
100         _AppSettingImpl& operator =(const _AppSettingImpl& rhs);
101
102 private:
103         bool __oldVersionInstance;
104         IAppSettingEventListener* __pEventListener;
105         xmlDocPtr __pDoc;
106         AppId __correspondAppId;
107         Tizen::Base::String __filePath;
108         Tizen::Base::Collection::HashMap __settingContainer;
109
110         class _MutiInstanceManager
111         {
112         public:
113                 _MutiInstanceManager(void);
114                 ~_MutiInstanceManager(void);
115                 AppSetting* GetInstance(const Tizen::Base::String& version);
116                 AppSetting* GetInstanceByAppId(const AppId& appId);
117                 result ReleaseInstanceByAppId(const AppId& appId);
118                 result ReleaseOtherAppInstances(void);
119         private:
120                 Tizen::Base::Collection::HashMap __stringToInstanceMap;
121         };
122         static _MutiInstanceManager __appIdMultiInstanceMgr;
123
124         friend class AppSetting;
125 }; // _AppSettingImpl
126 } } // Tizen::App
127
128 #endif // _FAPP_INTERNAL_APP_SETTING_IMPL_H_