1b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner/*
29368eea42a1afb01dd44110582f997115b50e742François Gaffie * Copyright (c) 2011-2015, Intel Corporation
3b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * All rights reserved.
4b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
5b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * Redistribution and use in source and binary forms, with or without modification,
6b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * are permitted provided that the following conditions are met:
7b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
8b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 1. Redistributions of source code must retain the above copyright notice, this
9b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * list of conditions and the following disclaimer.
10b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
11b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 2. Redistributions in binary form must reproduce the above copyright notice,
12b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * this list of conditions and the following disclaimer in the documentation and/or
13b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * other materials provided with the distribution.
14b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
15b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 3. Neither the name of the copyright holder nor the names of its contributors
16b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * may be used to endorse or promote products derived from this software without
17b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * specific prior written permission.
18b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner *
19b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
23b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
26b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2968a912857707864bbaaff9808717813105072a6ePatrick Benavoli */
3068a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ParameterMgrPlatformConnector.h"
3168a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ParameterMgr.h"
3268a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ParameterMgrLogger.h"
3368a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <assert.h>
3468a912857707864bbaaff9808717813105072a6ePatrick Benavoli
35d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalveusing std::string;
36d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve
3768a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Construction
38ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin RocardCParameterMgrPlatformConnector::CParameterMgrPlatformConnector(
399368eea42a1afb01dd44110582f997115b50e742François Gaffie    const string &strConfigurationFilePath)
409368eea42a1afb01dd44110582f997115b50e742François Gaffie    : _pParameterMgrLogger(new CParameterMgrLogger<CParameterMgrPlatformConnector>(*this)),
419368eea42a1afb01dd44110582f997115b50e742François Gaffie      _pParameterMgr(new CParameterMgr(strConfigurationFilePath, *_pParameterMgrLogger)),
429368eea42a1afb01dd44110582f997115b50e742François Gaffie      _bStarted(false), _pLogger(NULL)
4368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
4468a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
4568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
4668a912857707864bbaaff9808717813105072a6ePatrick BenavoliCParameterMgrPlatformConnector::~CParameterMgrPlatformConnector()
4768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
4868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    delete _pParameterMgr;
4968a912857707864bbaaff9808717813105072a6ePatrick Benavoli    delete _pParameterMgrLogger;
5068a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
5168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
52b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli// Selection Criteria interface. Beware returned objects are lent, clients shall not delete them!
539368eea42a1afb01dd44110582f997115b50e742François GaffieISelectionCriterionTypeInterface *CParameterMgrPlatformConnector::createSelectionCriterionType(
549368eea42a1afb01dd44110582f997115b50e742François Gaffie    bool bIsInclusive)
5568a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
5668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    assert(!_bStarted);
5768a912857707864bbaaff9808717813105072a6ePatrick Benavoli
5868a912857707864bbaaff9808717813105072a6ePatrick Benavoli    return _pParameterMgr->createSelectionCriterionType(bIsInclusive);
5968a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
6068a912857707864bbaaff9808717813105072a6ePatrick Benavoli
619368eea42a1afb01dd44110582f997115b50e742François GaffieISelectionCriterionInterface *CParameterMgrPlatformConnector::createSelectionCriterion(
629368eea42a1afb01dd44110582f997115b50e742François Gaffie    const string &strName, const ISelectionCriterionTypeInterface *pSelectionCriterionType)
6368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
6468a912857707864bbaaff9808717813105072a6ePatrick Benavoli    assert(!_bStarted);
6568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
669368eea42a1afb01dd44110582f997115b50e742François Gaffie    return _pParameterMgr->createSelectionCriterion(
679368eea42a1afb01dd44110582f997115b50e742François Gaffie        strName, static_cast<const CSelectionCriterionType *>(pSelectionCriterionType));
6868a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
6968a912857707864bbaaff9808717813105072a6ePatrick Benavoli
70b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli// Selection criterion retrieval
719368eea42a1afb01dd44110582f997115b50e742François GaffieISelectionCriterionInterface *CParameterMgrPlatformConnector::getSelectionCriterion(
729368eea42a1afb01dd44110582f997115b50e742François Gaffie    const string &strName) const
73b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli{
74b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli    return _pParameterMgr->getSelectionCriterion(strName);
75b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli}
76b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli
77b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli// Configuration application
78ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocardvoid CParameterMgrPlatformConnector::applyConfigurations()
79b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli{
80b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli    assert(_bStarted);
81b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli
82ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard    _pParameterMgr->applyConfigurations();
83b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli}
84b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli
854bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli// Dynamic parameter handling
869368eea42a1afb01dd44110582f997115b50e742François GaffieCParameterHandle *CParameterMgrPlatformConnector::createParameterHandle(const string &strPath,
879368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                        string &strError) const
884bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli{
89065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    assert(_bStarted);
904bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli
91065264a93ce9c63b6a5c95e985188ee33ba587d3Patrick Benavoli    return _pParameterMgr->createParameterHandle(strPath, strError);
924bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli}
934bed9212041d94d52e55e624bd081fcbf01ee04ePatrick Benavoli
949368eea42a1afb01dd44110582f997115b50e742François GaffieElementHandle *CParameterMgrPlatformConnector::createElementHandle(const string &strPath,
959368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                   string &strError) const
969368eea42a1afb01dd44110582f997115b50e742François Gaffie{
979368eea42a1afb01dd44110582f997115b50e742François Gaffie    return _pParameterMgr->createElementHandle(strPath, strError);
989368eea42a1afb01dd44110582f997115b50e742François Gaffie}
999368eea42a1afb01dd44110582f997115b50e742François Gaffie
10068a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Logging
1019368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CParameterMgrPlatformConnector::setLogger(CParameterMgrPlatformConnector::ILogger *pLogger)
10268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
10368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    _pLogger = pLogger;
10468a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
10568a912857707864bbaaff9808717813105072a6ePatrick Benavoli
106962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagnerbool CParameterMgrPlatformConnector::getForceNoRemoteInterface() const
107962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner{
108962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    return _pParameterMgr->getForceNoRemoteInterface();
109962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner}
110962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner
111962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagnervoid CParameterMgrPlatformConnector::setForceNoRemoteInterface(bool bForceNoRemoteInterface)
112962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner{
113962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner    _pParameterMgr->setForceNoRemoteInterface(bForceNoRemoteInterface);
114962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner}
115962ff7b523d81249dfc1eb6870b7a6249893e2eaDavid Wagner
116ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocardbool CParameterMgrPlatformConnector::setFailureOnMissingSubsystem(bool bFail, string &strError)
117ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard{
118ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    if (_bStarted) {
119ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
120ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard        strError = "Can not set missing subsystem policy while running";
121ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard        return false;
122ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    }
123ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
124ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    _pParameterMgr->setFailureOnMissingSubsystem(bFail);
125ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    return true;
126ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard}
127ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
1289368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::getFailureOnMissingSubsystem() const
129ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard{
130ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard    return _pParameterMgr->getFailureOnMissingSubsystem();
131ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard}
132ecf9310061f47da0fd9f3d604e8b20f4fcb5749cKevin Rocard
1339368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::setFailureOnFailedSettingsLoad(bool bFail,
1349368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                                    std::string &strError)
135d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard{
136d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    if (_bStarted) {
137d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard
138d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard        strError = "Can not set failure on failed settings load policy while running";
139d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard        return false;
140d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    }
141d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard
142d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    _pParameterMgr->setFailureOnFailedSettingsLoad(bFail);
143d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    return true;
144d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard}
145d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard
1469368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::getFailureOnFailedSettingsLoad() const
147d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard{
148d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard    return _pParameterMgr->getFailureOnFailedSettingsLoad();
149d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard}
150d6909ebe19bf6e2817dadea32e06dda9d22bf073Kevin Rocard
1519368eea42a1afb01dd44110582f997115b50e742François Gaffieconst string &CParameterMgrPlatformConnector::getSchemaUri() const
152faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner{
1539368eea42a1afb01dd44110582f997115b50e742François Gaffie    return _pParameterMgr->getSchemaUri();
154faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner}
155faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner
1569368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CParameterMgrPlatformConnector::setSchemaUri(const string &schemaUri)
157faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner{
1589368eea42a1afb01dd44110582f997115b50e742François Gaffie    _pParameterMgr->setSchemaUri(schemaUri);
159faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner}
160faa623c40bcfba17f222b738c036cd8fdcdd3a4dDavid Wagner
1619368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::setValidateSchemasOnStart(bool bValidate,
1629368eea42a1afb01dd44110582f997115b50e742François Gaffie                                                               std::string &strError)
163cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek{
164cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    if (_bStarted) {
165cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
166cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek        strError = "Can not enable xml validation after the start of the parameter-framework";
167cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek        return false;
168cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    }
169cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
170cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    _pParameterMgr->setValidateSchemasOnStart(bValidate);
171cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    return true;
172cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek}
173cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
1749368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::getValidateSchemasOnStart() const
175cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek{
176cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek    return _pParameterMgr->getValidateSchemasOnStart();
177cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek}
178cce85f6b6691e4b1ddb81171e3ca5b5aeb71e6b9Mattijs Korpershoek
17968a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Start
1809368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CParameterMgrPlatformConnector::start(string &strError)
18168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
18268a912857707864bbaaff9808717813105072a6ePatrick Benavoli    // Create data structure
18368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    if (!_pParameterMgr->load(strError)) {
18468a912857707864bbaaff9808717813105072a6ePatrick Benavoli
18568a912857707864bbaaff9808717813105072a6ePatrick Benavoli        return false;
18668a912857707864bbaaff9808717813105072a6ePatrick Benavoli    }
187ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard
188b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli    _bStarted = true;
189b71ccf75a1b2c718543783b277bb9c104c97e490Patrick Benavoli
19068a912857707864bbaaff9808717813105072a6ePatrick Benavoli    return true;
19168a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
19268a912857707864bbaaff9808717813105072a6ePatrick Benavoli
193848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffie// Started state
194848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffiebool CParameterMgrPlatformConnector::isStarted() const
195848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffie{
196848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffie    return _bStarted;
197848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffie}
198848488afb8b2f950c01eb35444f54d93e69db570Francois Gaffie
19968a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Private logging
2009368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CParameterMgrPlatformConnector::info(const string &log)
2019368eea42a1afb01dd44110582f997115b50e742François Gaffie{
2029368eea42a1afb01dd44110582f997115b50e742François Gaffie    if (_pLogger) {
2039368eea42a1afb01dd44110582f997115b50e742François Gaffie
2049368eea42a1afb01dd44110582f997115b50e742François Gaffie        _pLogger->info(log);
2059368eea42a1afb01dd44110582f997115b50e742François Gaffie    }
2069368eea42a1afb01dd44110582f997115b50e742François Gaffie}
2079368eea42a1afb01dd44110582f997115b50e742François Gaffie
2089368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CParameterMgrPlatformConnector::warning(const string &log)
20968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{
21068a912857707864bbaaff9808717813105072a6ePatrick Benavoli    if (_pLogger) {
21168a912857707864bbaaff9808717813105072a6ePatrick Benavoli
2129368eea42a1afb01dd44110582f997115b50e742François Gaffie        _pLogger->warning(log);
21368a912857707864bbaaff9808717813105072a6ePatrick Benavoli    }
21468a912857707864bbaaff9808717813105072a6ePatrick Benavoli}
215