1 /*
2  * Copyright (c) 2011-2015, Intel Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without modification,
6  * are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice, this
9  * list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation and/or
13  * other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its contributors
16  * may be used to endorse or promote products derived from this software without
17  * specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 #include "ParameterMgrPlatformConnector.h"
31 #include "ParameterMgr.h"
32 #include "ParameterMgrLogger.h"
33 #include <assert.h>
34 
35 using std::string;
36 
37 // Construction
CParameterMgrPlatformConnector(const string & strConfigurationFilePath)38 CParameterMgrPlatformConnector::CParameterMgrPlatformConnector(
39     const string &strConfigurationFilePath)
40     : _pParameterMgrLogger(new CParameterMgrLogger<CParameterMgrPlatformConnector>(*this)),
41       _pParameterMgr(new CParameterMgr(strConfigurationFilePath, *_pParameterMgrLogger)),
42       _bStarted(false), _pLogger(NULL)
43 {
44 }
45 
~CParameterMgrPlatformConnector()46 CParameterMgrPlatformConnector::~CParameterMgrPlatformConnector()
47 {
48     delete _pParameterMgr;
49     delete _pParameterMgrLogger;
50 }
51 
52 // Selection Criteria interface. Beware returned objects are lent, clients shall not delete them!
createSelectionCriterionType(bool bIsInclusive)53 ISelectionCriterionTypeInterface *CParameterMgrPlatformConnector::createSelectionCriterionType(
54     bool bIsInclusive)
55 {
56     assert(!_bStarted);
57 
58     return _pParameterMgr->createSelectionCriterionType(bIsInclusive);
59 }
60 
createSelectionCriterion(const string & strName,const ISelectionCriterionTypeInterface * pSelectionCriterionType)61 ISelectionCriterionInterface *CParameterMgrPlatformConnector::createSelectionCriterion(
62     const string &strName, const ISelectionCriterionTypeInterface *pSelectionCriterionType)
63 {
64     assert(!_bStarted);
65 
66     return _pParameterMgr->createSelectionCriterion(
67         strName, static_cast<const CSelectionCriterionType *>(pSelectionCriterionType));
68 }
69 
70 // Selection criterion retrieval
getSelectionCriterion(const string & strName) const71 ISelectionCriterionInterface *CParameterMgrPlatformConnector::getSelectionCriterion(
72     const string &strName) const
73 {
74     return _pParameterMgr->getSelectionCriterion(strName);
75 }
76 
77 // Configuration application
applyConfigurations()78 void CParameterMgrPlatformConnector::applyConfigurations()
79 {
80     assert(_bStarted);
81 
82     _pParameterMgr->applyConfigurations();
83 }
84 
85 // Dynamic parameter handling
createParameterHandle(const string & strPath,string & strError) const86 CParameterHandle *CParameterMgrPlatformConnector::createParameterHandle(const string &strPath,
87                                                                         string &strError) const
88 {
89     assert(_bStarted);
90 
91     return _pParameterMgr->createParameterHandle(strPath, strError);
92 }
93 
createElementHandle(const string & strPath,string & strError) const94 ElementHandle *CParameterMgrPlatformConnector::createElementHandle(const string &strPath,
95                                                                    string &strError) const
96 {
97     return _pParameterMgr->createElementHandle(strPath, strError);
98 }
99 
100 // Logging
setLogger(CParameterMgrPlatformConnector::ILogger * pLogger)101 void CParameterMgrPlatformConnector::setLogger(CParameterMgrPlatformConnector::ILogger *pLogger)
102 {
103     _pLogger = pLogger;
104 }
105 
getForceNoRemoteInterface() const106 bool CParameterMgrPlatformConnector::getForceNoRemoteInterface() const
107 {
108     return _pParameterMgr->getForceNoRemoteInterface();
109 }
110 
setForceNoRemoteInterface(bool bForceNoRemoteInterface)111 void CParameterMgrPlatformConnector::setForceNoRemoteInterface(bool bForceNoRemoteInterface)
112 {
113     _pParameterMgr->setForceNoRemoteInterface(bForceNoRemoteInterface);
114 }
115 
setFailureOnMissingSubsystem(bool bFail,string & strError)116 bool CParameterMgrPlatformConnector::setFailureOnMissingSubsystem(bool bFail, string &strError)
117 {
118     if (_bStarted) {
119 
120         strError = "Can not set missing subsystem policy while running";
121         return false;
122     }
123 
124     _pParameterMgr->setFailureOnMissingSubsystem(bFail);
125     return true;
126 }
127 
getFailureOnMissingSubsystem() const128 bool CParameterMgrPlatformConnector::getFailureOnMissingSubsystem() const
129 {
130     return _pParameterMgr->getFailureOnMissingSubsystem();
131 }
132 
setFailureOnFailedSettingsLoad(bool bFail,std::string & strError)133 bool CParameterMgrPlatformConnector::setFailureOnFailedSettingsLoad(bool bFail,
134                                                                     std::string &strError)
135 {
136     if (_bStarted) {
137 
138         strError = "Can not set failure on failed settings load policy while running";
139         return false;
140     }
141 
142     _pParameterMgr->setFailureOnFailedSettingsLoad(bFail);
143     return true;
144 }
145 
getFailureOnFailedSettingsLoad() const146 bool CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad() const
147 {
148     return _pParameterMgr->getFailureOnFailedSettingsLoad();
149 }
150 
getSchemaUri() const151 const string &CParameterMgrPlatformConnector::getSchemaUri() const
152 {
153     return _pParameterMgr->getSchemaUri();
154 }
155 
setSchemaUri(const string & schemaUri)156 void CParameterMgrPlatformConnector::setSchemaUri(const string &schemaUri)
157 {
158     _pParameterMgr->setSchemaUri(schemaUri);
159 }
160 
setValidateSchemasOnStart(bool bValidate,std::string & strError)161 bool CParameterMgrPlatformConnector::setValidateSchemasOnStart(bool bValidate,
162                                                                std::string &strError)
163 {
164     if (_bStarted) {
165 
166         strError = "Can not enable xml validation after the start of the parameter-framework";
167         return false;
168     }
169 
170     _pParameterMgr->setValidateSchemasOnStart(bValidate);
171     return true;
172 }
173 
getValidateSchemasOnStart() const174 bool CParameterMgrPlatformConnector::getValidateSchemasOnStart() const
175 {
176     return _pParameterMgr->getValidateSchemasOnStart();
177 }
178 
179 // Start
start(string & strError)180 bool CParameterMgrPlatformConnector::start(string &strError)
181 {
182     // Create data structure
183     if (!_pParameterMgr->load(strError)) {
184 
185         return false;
186     }
187 
188     _bStarted = true;
189 
190     return true;
191 }
192 
193 // Started state
isStarted() const194 bool CParameterMgrPlatformConnector::isStarted() const
195 {
196     return _bStarted;
197 }
198 
199 // Private logging
info(const string & log)200 void CParameterMgrPlatformConnector::info(const string &log)
201 {
202     if (_pLogger) {
203 
204         _pLogger->info(log);
205     }
206 }
207 
warning(const string & log)208 void CParameterMgrPlatformConnector::warning(const string &log)
209 {
210     if (_pLogger) {
211 
212         _pLogger->warning(log);
213     }
214 }
215