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