04a821948a4cf8ce45d3e1930710198546bcf505
[profile/ivi/ico-uxf-homescreen.git] / lib / common / CicoSystemConfig.h
1 /*
2  * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
3  *
4  * This program is licensed under the terms and conditions of the
5  * Apache License, version 2.0.  The full text of the Apache License is at
6  * http://www.apache.org/licenses/LICENSE-2.0
7  *
8  */
9
10 //==========================================================================
11 /**
12  *  @file   CicoSystemConfig.h
13  *
14  *  @brief  This file is definition of CicoSystemConfig class
15  */
16 //==========================================================================
17 #ifndef __CICO_SYSTEM_CONFIG_H__
18 #define __CICO_SYSTEM_CONFIG_H__
19
20 #include <boost/property_tree/ptree.hpp>
21 #include <boost/property_tree/xml_parser.hpp>
22 #include <boost/foreach.hpp>
23 #include <boost/lexical_cast.hpp>
24
25 #include <string>
26 #include <map>
27 #include <vector>
28 using namespace std;
29 using namespace boost;
30 using namespace boost::property_tree;
31
32 //==========================================================================
33 //  Forward declaration
34 //==========================================================================
35 #ifndef __CICO_SC_CONF_H__
36 class CicoSCNodeConf;
37 class CicoSCLayerConf;
38 class CicoSCDisplayZoneConf;
39 class CicoSCDisplayConf;
40 class CicoSCSoundZoneConf;
41 class CicoSCSoundConf;
42 class CicoSCCategoryConf;
43 class CicoSCAppKindConf;
44 class CicoSCSwitchConf;
45 class CicoSCInputDevConf;
46 class CicoSCDefaultConf;
47 class CicoSCResourceConf;
48 class CicoSCUserConf;
49 class CicoSCVehicleInfoConf;
50 class CicoSCRoleConf;
51 class CicoSCPositionOSConf;
52 #endif
53
54 //==========================================================================
55 //  Default configuration file
56 //==========================================================================
57 #define ICO_SYSTEM_CONFIG_PATH  "/usr/apps/org.tizen.ico.system-controller/res/config/system.xml"
58
59 //==========================================================================
60 /**
61  *  @brief  This class has function of access to system config information
62  */
63 //==========================================================================
64 class CicoSystemConfig
65 {
66 public:
67     static CicoSystemConfig* getInstance(void);
68
69     bool load(const string & confFile);
70
71     const vector<CicoSCNodeConf*> &    getNodeConfList(void) const;
72     const vector<CicoSCDisplayConf*> & getDisplayConfList(void) const;
73     const vector<CicoSCSoundConf*> &   getSoundConfList(void) const;
74     const vector<CicoSCInputDevConf*> &  getInputDevConfList(void) const;
75     const vector<CicoSCCategoryConf*> & getCategoryConfList(void) const;
76     const vector<CicoSCAppKindConf*> &  getAppKindConfList(void) const;
77
78     const CicoSCNodeConf* findNodeConfbyName(const string & name);
79     const CicoSCDisplayConf* findDisplayConfbyName(const string & name);
80     const CicoSCDisplayConf* findDisplayConfbyName(const string& ECU,
81                                                    const string& name);
82     const CicoSCDisplayConf* findDisplayConfbyId(int id);
83
84     const CicoSCLayerConf* findLayerConfbyName(const string & displayName,
85                                                const string & layerName);
86     const CicoSCLayerConf* findLayerConfbyName(const string& ECU,
87                                                const string& display,
88                                                const string& layer,
89                                                const string& layout,
90                                                const string& area);
91     const CicoSCLayerConf*  findLayerConfbyIdx(int displayid, int idx);
92
93     const CicoSCDisplayZoneConf* findDisplayZoneConfbyName(const string & displayName,
94                                                        const string & zoneName);
95     const CicoSCSoundConf* findSoundConfbyName(const string & name);
96     const CicoSCSoundZoneConf* findSoundZoneConfbyName(const string & soundName,
97                                                        const string & zoneName);
98     const CicoSCInputDevConf* findInputDevConfbyName(const string & name);
99     const CicoSCSwitchConf* findSwitchConfbyName(const string & inputDevName,
100                                                  const string & switchName);
101
102     const CicoSCAppKindConf* findAppKindConfbyName(const string & name);
103     const CicoSCCategoryConf* findCategoryConfbyName(const string & name);
104
105     const CicoSCDisplayZoneConf* findDisplayZoneConfbyId(int id);
106
107     const CicoSCSoundZoneConf* findSoundZoneConfbyId(int id);
108     const CicoSCCategoryConf* findCategoryConfbyId(int id);
109     const CicoSCAppKindConf* findAppKindConfbyId(int id);
110
111     const CicoSCDefaultConf* getDefaultConf(void);
112
113     int getNodeIdbyName(const string & name);
114     int getDisplayIdbyName(const string & name);
115     int getDisplayIdbyNo(int no);
116     int getDisplayIdbyType(int type);
117     int getNumberofDisplay(void);
118     int getLayerIdfbyName(const string & displayName,
119                           const string & layerName);
120     int getLayerIdfbyName(const string& ECU,
121                           const string& display,
122                           const string& layer,
123                           const string& layout,
124                           const string& area);
125     int getDizplayZoneIdbyName(const string & displayName,
126                                const string & zoneName);
127     int getDizplayZoneIdbyFullName(const string & zoneFullName);
128     int getSoundIdbyName(const string & name);
129
130     int getSoundZoneIdbyName(const string & soundName,
131                              const string & zoneName);
132     int getSoundZoneIdbyFullName(const string & zoneFullName);
133     int getInputDevIdbyName(const string & name);
134     int getSwitchIdbyName(const string & inputDevName,
135                           const string & switchName);
136     int getAppKindIdbyName(const string & name);
137     int getCategoryIdbyName(const string & name);
138     const CicoSCResourceConf* getResourceConf() const
139     {
140         return m_resourceConf;
141     };
142     const CicoSCCategoryConf* getCategoryObjbyCaategoryID(int id);
143
144     const CicoSCUserConf* getUserConf() const
145     {
146         return m_userConf;
147     };
148
149     CicoSCVehicleInfoConf* getVehicleInfoConf(void);
150     short getRoleStt(const string& key);
151     const CicoSCRoleConf* getRoleConf() const
152     {
153         return m_roleConf;
154     };
155     const CicoSCPositionOSConf* positionOSConf() const
156     {
157         return m_positionOSConf;
158     };
159 private:
160     // default constructor
161     CicoSystemConfig();
162
163     // destructor
164     ~CicoSystemConfig();
165
166     // assignment operator
167     CicoSystemConfig& operator=(const CicoSystemConfig &object);
168
169     // copy constructor
170     CicoSystemConfig(const CicoSystemConfig &object);
171
172     void createNodeConfList(const ptree & root);
173     void createDisplayConfList(const ptree & root);
174     void createLayoutConfContainedArea(const ptree::value_type& layout,
175                                        const optional<int>& layer_id,
176                                        const optional<string>& layer_name,
177                                        const optional<int>& layout_id,
178                                        const optional<string>& layout_name,
179                                        CicoSCDisplayConf* displayConf);
180     void createLayerConfContainedLayout(const ptree::value_type& layer,
181                                         const optional<int>& layer_id,
182                                         const optional<string>& layer_name,
183                                         CicoSCDisplayConf* displayConf);
184     void createLayerConf(const ptree::value_type & child,
185                          CicoSCDisplayConf* displayConf);
186     void createDisplayZoneConf(const ptree::value_type & child,
187                                CicoSCDisplayConf* displayConf);
188
189     void createSoundConfList(const ptree & root);
190     void createSoundZoneConf(const ptree::value_type & child,
191                              CicoSCSoundConf* soundConf);
192     void createPortConf(const ptree & root);
193     void createCategoryConf(const ptree & root);
194     void createAppKindConf(const ptree & root);
195     void createInputDevList(const ptree & root);
196     void createSwitchList(const ptree::value_type & child,
197                           CicoSCInputDevConf* inputDevConf);
198     void createDefaultConf(const ptree & root);
199     void createResourceConf(const ptree & root);
200     void createUserConf(const ptree & root);
201     void createVehicleInfoConf(const ptree & root);
202
203     int calcGeometryExpr(const string & expr, CicoSCDisplayConf* conf);
204     void createRoleConf(const ptree& root);
205     void createPositionOSConf(const ptree& root);
206
207 private:
208     static CicoSystemConfig* ms_myInstance;
209     string m_confFile;
210     map<string,int> m_typeTable;
211     map<string,int> m_displayTypeTable;
212     map<string,int> m_categoryTalbe;
213     map<string,int> m_privilegeTable;
214     vector<CicoSCNodeConf*> m_nodeConfList;
215     vector<CicoSCDisplayConf*> m_displayConfList;
216     vector<CicoSCSoundConf*> m_soundConfList;
217     vector<CicoSCInputDevConf*> m_inputDevConfList;
218     vector<CicoSCCategoryConf*> m_categoryConfList;
219     vector<CicoSCAppKindConf*> m_appKindConfList;
220     int m_sysconPort;
221     int m_soundPluginPort;
222     CicoSCDefaultConf *m_defaultConf;
223     CicoSCResourceConf *m_resourceConf;
224     CicoSCUserConf *m_userConf;
225     CicoSCVehicleInfoConf *m_vehicleInfoConf;
226     CicoSCRoleConf *m_roleConf;
227     CicoSCPositionOSConf *m_positionOSConf;
228     int     numDisplay;
229 };
230 #endif  // __CICO_SYSTEM_CONFIG_H__
231 // vim:set expandtab ts=4 sw=4: