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
35using std::string;
36
37// Construction
38CParameterMgrPlatformConnector::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
46CParameterMgrPlatformConnector::~CParameterMgrPlatformConnector()
47{
48    delete _pParameterMgr;
49    delete _pParameterMgrLogger;
50}
51
52// Selection Criteria interface. Beware returned objects are lent, clients shall not delete them!
53ISelectionCriterionTypeInterface *CParameterMgrPlatformConnector::createSelectionCriterionType(
54    bool bIsInclusive)
55{
56    assert(!_bStarted);
57
58    return _pParameterMgr->createSelectionCriterionType(bIsInclusive);
59}
60
61ISelectionCriterionInterface *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
71ISelectionCriterionInterface *CParameterMgrPlatformConnector::getSelectionCriterion(
72    const string &strName) const
73{
74    return _pParameterMgr->getSelectionCriterion(strName);
75}
76
77// Configuration application
78void CParameterMgrPlatformConnector::applyConfigurations()
79{
80    assert(_bStarted);
81
82    _pParameterMgr->applyConfigurations();
83}
84
85// Dynamic parameter handling
86CParameterHandle *CParameterMgrPlatformConnector::createParameterHandle(const string &strPath,
87                                                                        string &strError) const
88{
89    assert(_bStarted);
90
91    return _pParameterMgr->createParameterHandle(strPath, strError);
92}
93
94ElementHandle *CParameterMgrPlatformConnector::createElementHandle(const string &strPath,
95                                                                   string &strError) const
96{
97    return _pParameterMgr->createElementHandle(strPath, strError);
98}
99
100// Logging
101void CParameterMgrPlatformConnector::setLogger(CParameterMgrPlatformConnector::ILogger *pLogger)
102{
103    _pLogger = pLogger;
104}
105
106bool CParameterMgrPlatformConnector::getForceNoRemoteInterface() const
107{
108    return _pParameterMgr->getForceNoRemoteInterface();
109}
110
111void CParameterMgrPlatformConnector::setForceNoRemoteInterface(bool bForceNoRemoteInterface)
112{
113    _pParameterMgr->setForceNoRemoteInterface(bForceNoRemoteInterface);
114}
115
116bool 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
128bool CParameterMgrPlatformConnector::getFailureOnMissingSubsystem() const
129{
130    return _pParameterMgr->getFailureOnMissingSubsystem();
131}
132
133bool 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
146bool CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad() const
147{
148    return _pParameterMgr->getFailureOnFailedSettingsLoad();
149}
150
151const string &CParameterMgrPlatformConnector::getSchemaUri() const
152{
153    return _pParameterMgr->getSchemaUri();
154}
155
156void CParameterMgrPlatformConnector::setSchemaUri(const string &schemaUri)
157{
158    _pParameterMgr->setSchemaUri(schemaUri);
159}
160
161bool 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
174bool CParameterMgrPlatformConnector::getValidateSchemasOnStart() const
175{
176    return _pParameterMgr->getValidateSchemasOnStart();
177}
178
179// Start
180bool 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
194bool CParameterMgrPlatformConnector::isStarted() const
195{
196    return _bStarted;
197}
198
199// Private logging
200void CParameterMgrPlatformConnector::info(const string &log)
201{
202    if (_pLogger) {
203
204        _pLogger->info(log);
205    }
206}
207
208void CParameterMgrPlatformConnector::warning(const string &log)
209{
210    if (_pLogger) {
211
212        _pLogger->warning(log);
213    }
214}
215