Update privilege string, PackageAppInfo for wgt
[platform/framework/native/appfw.git] / src / app / FApp_AppSettingImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17
18 /**
19  * @file        FApp_AppSetting.h
20  * @brief       This is the header file for the %_AppSettingImpl class.
21  *
22  * This header file contains the declarations of the %_AppSettingImpl class.
23  */
24
25 #ifndef _FAPP_INTERNAL_APP_SETTING_IMPL_H_
26 #define _FAPP_INTERNAL_APP_SETTING_IMPL_H_
27
28 #include <dbus/dbus.h>
29 #include <dbus/dbus-glib-lowlevel.h>
30 #include <libxml/parser.h>
31 #include <FBaseObject.h>
32 #include <FBaseString.h>
33 #include <FBaseColHashMap.h>
34 #include <FBaseColLinkedListT.h>
35 #include <FAppAppSetting.h>
36
37
38 namespace Tizen { namespace App
39 {
40
41 enum _ElementType { ELEMENT_INVALID, ELEMENT_BOOL, ELEMENT_INTEGER, ELEMENT_STRING, ELEMENT_EXPANDLIST };
42
43 class _AppSettingImpl
44         : public Tizen::Base::Object
45 {
46 public:
47         static _AppSettingImpl* GetInstance(void);
48         static AppSetting* GetInstance(const Tizen::Base::String& version);
49         static AppSetting* GetInstanceByAppId(const AppId& appId);
50         static result ReleaseInstanceByAppId(const AppId& appId);
51         static result ReleaseOtherAppInstances(void);
52         static Tizen::Base::Collection::IList* GetAppSettingVersionListN(void);
53         result GetValue(const Tizen::Base::String& id, bool& value) const;
54         result GetValue(const Tizen::Base::String& id, int& value) const;
55         result GetValue(const Tizen::Base::String& id, Tizen::Base::String& value) const;
56         result SetValue(const Tizen::Base::String& id, bool value, bool save = true);
57         result SetValue(const Tizen::Base::String& id, int value, bool save = true);
58         result SetValue(const Tizen::Base::String& id, const Tizen::Base::String& value, bool save = true);
59         result SetAppSettingEventListener(IAppSettingEventListener* pListener);
60
61         //
62         // Gets the implementation.
63         //
64         // @return              The implementation
65         // @param[in]   The interface instance pointer
66         // @since 2.1
67         //
68         static _AppSettingImpl* GetInstance(AppSetting& appSetting);
69
70         //
71         // Gets the implementation.
72         //
73         // @return              The implementation
74         // @param[in]   The interface instance pointer
75         // @since 2.1
76         //
77         static const _AppSettingImpl* GetInstance(const AppSetting& appSetting);
78
79         _AppSettingImpl(void);
80         virtual ~_AppSettingImpl(void);
81         static AppSetting* CreateAppSetting(void);
82         static void SetImplInstance(AppSetting& appSetting, _AppSettingImpl& impl);
83
84 private:
85         result Construct(const AppId& correspondAppId, const Tizen::Base::String& version = L"");
86         result ConstructByAppPath(const AppId& correspondAppId, const Tizen::Base::String& appRootPath);
87         result Load(void);
88         result Save(void);
89         void VisitNode(xmlNodePtr pCurrentNode);
90         void CheckNodeNameAndAddToCollection(xmlNodePtr pNode);
91         _ElementType GetElementType(xmlNodePtr pNode);
92         void GetMinMaxValue(xmlNodePtr pNode, _ElementType type, int& min, int& max);
93         Object* GetValueObjectN(_ElementType type, Tizen::Base::String& strValue, bool validValue);
94         bool UpdateProperty(xmlNodePtr pNode, const Tizen::Base::String& value);
95         bool InitizlizeDBus(void);
96         static DBusHandlerResult HandleDBusMessage(DBusConnection* connection, DBusMessage* message, void* user_data);
97         void SetValueFromDBusData(const char* pId, const char* pValue);
98         bool SendMessage(const Tizen::Base::String& id, const Tizen::Base::String& value, bool intType);
99
100         _AppSettingImpl(const _AppSettingImpl& rhs);
101         _AppSettingImpl& operator =(const _AppSettingImpl& rhs);
102
103 private:
104         bool __oldVersionInstance;
105         IAppSettingEventListener* __pEventListener;
106         xmlDocPtr __pDoc;
107         AppId __correspondAppId;
108         Tizen::Base::String __filePath;
109         Tizen::Base::Collection::HashMap __settingContainer;
110
111         class _MutiInstanceManager
112         {
113         public:
114                 _MutiInstanceManager(void);
115                 ~_MutiInstanceManager(void);
116                 AppSetting* GetInstance(const Tizen::Base::String& version);
117                 AppSetting* GetInstanceByAppId(const AppId& appId);
118                 result ReleaseInstanceByAppId(const AppId& appId);
119                 result ReleaseOtherAppInstances(void);
120         private:
121                 Tizen::Base::Collection::HashMap __stringToInstanceMap;
122         };
123         static _MutiInstanceManager __appIdMultiInstanceMgr;
124
125         friend class AppSetting;
126 }; // _AppSettingImpl
127 } } // Tizen::App
128
129 #endif // _FAPP_INTERNAL_APP_SETTING_IMPL_H_