1e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard/* 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 */ 30ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard#include <cassert> 3168a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ConfigurableDomains.h" 3268a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ConfigurableDomain.h" 3368a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "ConfigurableElement.h" 3468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 359368eea42a1afb01dd44110582f997115b50e742François Gaffie#define base CElement 3668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 37d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalveusing std::string; 38d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve 3968a912857707864bbaaff9808717813105072a6ePatrick Benavolistring CConfigurableDomains::getKind() const 4068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return "ConfigurableDomains"; 4268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 4368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4468a912857707864bbaaff9808717813105072a6ePatrick Benavolibool CConfigurableDomains::childrenAreDynamic() const 4568a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 4768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 4868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4968a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Ensure validity on whole domains from main blackboard 509368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::validate(const CParameterBlackboard *pMainBlackboard) 5168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 5268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate to domains 53911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavoli size_t uiNbConfigurableDomains = getNbChildren(); 5468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 559368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 5668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 579368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pChildConfigurableDomain = 589368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<CConfigurableDomain *>(getChild(child)); 5968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 6068a912857707864bbaaff9808717813105072a6ePatrick Benavoli pChildConfigurableDomain->validate(pMainBlackboard); 6168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 6268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 6368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 6468a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Configuration application if required 659368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::apply(CParameterBlackboard *pParameterBlackboard, CSyncerSet &syncerSet, 669368eea42a1afb01dd44110582f997115b50e742François Gaffie bool bForce, core::Results &infos) const 6768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 68f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin /// Delegate to domains 6963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 70f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin // Start with domains that can be synchronized all at once (with passed syncer set) 71911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavoli size_t uiNbConfigurableDomains = getNbChildren(); 7268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 739368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 7468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 759368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pChildConfigurableDomain = 769368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(getChild(child)); 7768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 789368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string info; 79f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin // Apply and collect syncers when relevant 809368eea42a1afb01dd44110582f997115b50e742François Gaffie pChildConfigurableDomain->apply(pParameterBlackboard, &syncerSet, bForce, info); 819368eea42a1afb01dd44110582f997115b50e742François Gaffie 829368eea42a1afb01dd44110582f997115b50e742François Gaffie if (!info.empty()) { 839368eea42a1afb01dd44110582f997115b50e742François Gaffie infos.push_back(info); 849368eea42a1afb01dd44110582f997115b50e742François Gaffie } 8568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 86f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin // Synchronize those collected syncers 87ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard syncerSet.sync(*pParameterBlackboard, false, NULL); 8863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 89f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin // Then deal with domains that need to synchronize along apply 909368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 9163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 929368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pChildConfigurableDomain = 939368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(getChild(child)); 9463499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 959368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string info; 96f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin // Apply and synchronize when relevant 979368eea42a1afb01dd44110582f997115b50e742François Gaffie pChildConfigurableDomain->apply(pParameterBlackboard, NULL, bForce, info); 989368eea42a1afb01dd44110582f997115b50e742François Gaffie if (!info.empty()) { 999368eea42a1afb01dd44110582f997115b50e742François Gaffie infos.push_back(info); 1009368eea42a1afb01dd44110582f997115b50e742François Gaffie } 10163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 10268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 10368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 10468a912857707864bbaaff9808717813105072a6ePatrick Benavoli// From IXmlSource 1059368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::toXml(CXmlElement &xmlElement, 1069368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlSerializingContext &serializingContext) const 10768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 10868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Set attribute 1099368eea42a1afb01dd44110582f997115b50e742François Gaffie xmlElement.setAttribute("SystemClassName", getName()); 11068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1118cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner base::childrenToXml(xmlElement, serializingContext); 11268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 11368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 11468a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Configuration/Domains handling 11568a912857707864bbaaff9808717813105072a6ePatrick Benavoli/// Domains 1169368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::createDomain(const string &strName, string &strError) 11768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 11868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Already exists? 11968a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (findChild(strName)) { 12068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12168a912857707864bbaaff9808717813105072a6ePatrick Benavoli strError = "Already existing configurable domain"; 12268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12368a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 12468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 12568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Creation/Hierarchy 12768a912857707864bbaaff9808717813105072a6ePatrick Benavoli addChild(new CConfigurableDomain(strName)); 12868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12968a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 13068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 13168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1329368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::addDomain(CConfigurableDomain &domain, bool bOverwrite, string &strError) 13368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 134fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner string strErrorDrop; 13568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 136fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner string strDomainName(domain.getName()); 1379368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pExistingDomain = findConfigurableDomain(strDomainName, strErrorDrop); 13868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 139fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner if (pExistingDomain) { 140fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner if (!bOverwrite) { 141fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner strError = "Can't add domain \"" + strDomainName + 1429368eea42a1afb01dd44110582f997115b50e742François Gaffie "\" because it already exists and overwrite was not requested."; 143fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner return false; 144fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner } 14568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 146fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner deleteDomain(*pExistingDomain); 147fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner } 14868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 149fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner addChild(&domain); 15068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 15268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 15368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1549368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::deleteDomain(CConfigurableDomain &configurableDomain) 155fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner{ 156fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner removeChild(&configurableDomain); 157fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner 158fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner delete &configurableDomain; 159fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner} 160fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner 1619368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::deleteDomain(const string &strName, string &strError) 162fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner{ 1639368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strName, strError); 164fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner 165fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner if (pConfigurableDomain) { 166fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner deleteDomain(*pConfigurableDomain); 167fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner return true; 168fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner } 169fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner 170fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner return false; 171fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner} 172fd21197b84f46ba53ace3a1b9d0c05596815dd51David Wagner 173170f0a44b8309a954cd4802e85ac3dd6944a35faKevin Rocardvoid CConfigurableDomains::deleteAllDomains() 174170f0a44b8309a954cd4802e85ac3dd6944a35faKevin Rocard{ 1759368eea42a1afb01dd44110582f997115b50e742François Gaffie // remove Children 176170f0a44b8309a954cd4802e85ac3dd6944a35faKevin Rocard clean(); 177170f0a44b8309a954cd4802e85ac3dd6944a35faKevin Rocard} 178170f0a44b8309a954cd4802e85ac3dd6944a35faKevin Rocard 1799368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::renameDomain(const string &strName, const string &strNewName, 1809368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 18168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 1829368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strName, strError); 18368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 18468a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 18568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 18668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 18768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 18868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 18968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Rename 19068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pConfigurableDomain->rename(strNewName, strError); 19168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 19268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1939368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::setSequenceAwareness(const string &strDomain, bool bSequenceAware, 1949368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 19563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli{ 1969368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 19763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 19863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli if (!pConfigurableDomain) { 19963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 20063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return false; 20163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 20263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 20363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli pConfigurableDomain->setSequenceAwareness(bSequenceAware); 20463499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 20563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return true; 20663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli} 20763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 2089368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::getSequenceAwareness(const string &strDomain, bool &bSequenceAware, 2099368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) const 21063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli{ 2119368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 21263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 21363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli if (!pConfigurableDomain) { 21463499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 21563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return false; 21663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 21763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 21863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli bSequenceAware = pConfigurableDomain->getSequenceAwareness(); 21963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 22063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return true; 22163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli} 22263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 22368a912857707864bbaaff9808717813105072a6ePatrick Benavoli/// Configurations 2249368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::listConfigurations(const string &strDomain, string &strResult) const 22568a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 2269368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strResult); 22768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 22868a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 22968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 23068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 23168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 23268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // delegate 23368a912857707864bbaaff9808717813105072a6ePatrick Benavoli pConfigurableDomain->listChildren(strResult); 23468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 23568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 23668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 23768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2389368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::createConfiguration(const string &strDomain, 2399368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, 2409368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard, 2419368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 24268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 24368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 2449368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 24568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 24668a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 24768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 24868a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 24968a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 25068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 25168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pConfigurableDomain->createConfiguration(strConfiguration, pMainBlackboard, strError); 25268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 25368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2549368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::deleteConfiguration(const string &strDomain, 2559368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, string &strError) 25668a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 25768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 2589368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 25968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26068a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 26168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26268a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 26368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 26468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 26568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pConfigurableDomain->deleteConfiguration(strConfiguration, strError); 26668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 26768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2689368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::renameConfiguration(const string &strDomain, 2699368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfigurationName, 2709368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strNewConfigurationName, 2719368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 27268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 27368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 2749368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 27568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 27668a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 27768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 27868a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 27968a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 28068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 2819368eea42a1afb01dd44110582f997115b50e742François Gaffie return pConfigurableDomain->renameConfiguration(strConfigurationName, strNewConfigurationName, 2829368eea42a1afb01dd44110582f997115b50e742François Gaffie strError); 28368a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 28468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2859368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::listDomainElements(const string &strDomain, string &strResult) const 28668a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 28768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 2889368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strResult); 28968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 29068a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 29168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 29268a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 29368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 29468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 29568a912857707864bbaaff9808717813105072a6ePatrick Benavoli pConfigurableDomain->listAssociatedToElements(strResult); 29668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 29768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 29868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 29968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3009368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::split(const string &domainName, CConfigurableElement *element, 3019368eea42a1afb01dd44110582f997115b50e742François Gaffie core::Results &infos) 30268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 30368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 3049368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string error; 3059368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *domain = findConfigurableDomain(domainName, error); 30668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3079368eea42a1afb01dd44110582f997115b50e742François Gaffie if (domain == NULL) { 30868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3099368eea42a1afb01dd44110582f997115b50e742François Gaffie infos.push_back(error); 31068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 31168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 31268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 3139368eea42a1afb01dd44110582f997115b50e742François Gaffie domain->split(element, infos); 31468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 31568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 31668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 31768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3189368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::listAssociatedElements(string &strResult) const 31968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 3209368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *> configurableElementSet; 32168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 32268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Get all owned configurable elements 32368a912857707864bbaaff9808717813105072a6ePatrick Benavoli gatherAllOwnedConfigurableElements(configurableElementSet); 32468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 32568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Fill result 3269368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *>::const_iterator it; 32768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 32868a912857707864bbaaff9808717813105072a6ePatrick Benavoli for (it = configurableElementSet.begin(); it != configurableElementSet.end(); ++it) { 32968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3309368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableElement *pConfigurableElement = *it; 33168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 33268a912857707864bbaaff9808717813105072a6ePatrick Benavoli string strAssociatedDomainList; 33368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 33468a912857707864bbaaff9808717813105072a6ePatrick Benavoli pConfigurableElement->listAssociatedDomains(strAssociatedDomainList, false); 33568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 33668a912857707864bbaaff9808717813105072a6ePatrick Benavoli strResult += pConfigurableElement->getPath() + " [" + strAssociatedDomainList + "]\n"; 33768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 33868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 33968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3409368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::listConflictingElements(string &strResult) const 34168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 3429368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *> configurableElementSet; 34368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 34468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Get all owned configurable elements 34568a912857707864bbaaff9808717813105072a6ePatrick Benavoli gatherAllOwnedConfigurableElements(configurableElementSet); 34668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 34768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Fill result 3489368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *>::const_iterator it; 34968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 35068a912857707864bbaaff9808717813105072a6ePatrick Benavoli for (it = configurableElementSet.begin(); it != configurableElementSet.end(); ++it) { 35168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3529368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableElement *pConfigurableElement = *it; 35368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 35468a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (pConfigurableElement->getBelongingDomainCount() > 1) { 35568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 35668a912857707864bbaaff9808717813105072a6ePatrick Benavoli string strBelongingDomainList; 35768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 35868a912857707864bbaaff9808717813105072a6ePatrick Benavoli pConfigurableElement->listBelongingDomains(strBelongingDomainList, false); 35968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3609368eea42a1afb01dd44110582f997115b50e742François Gaffie strResult += pConfigurableElement->getPath() + " contained in multiple domains: " + 3619368eea42a1afb01dd44110582f997115b50e742François Gaffie strBelongingDomainList + "\n"; 36268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 36368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 36468a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 36568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3669368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::listDomains(string &strResult) const 36763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli{ 36863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // List domains 369911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavoli size_t uiNbConfigurableDomains = getNbChildren(); 37063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 3719368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 37263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 3739368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pChildConfigurableDomain = 3749368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(getChild(child)); 37563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 37663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Name 37763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli strResult += pChildConfigurableDomain->getName(); 37863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 37963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Sequence awareness 38063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli if (pChildConfigurableDomain->getSequenceAwareness()) { 38163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 3829bed7cea60c371df60ab53c2e7ade186f04266f3Patrick Benavoli strResult += " [sequence aware]"; 38363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 3849bed7cea60c371df60ab53c2e7ade186f04266f3Patrick Benavoli strResult += "\n"; 38563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 38663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli} 38763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 38868a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Gather configurable elements owned by any domain 3899368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::gatherAllOwnedConfigurableElements( 3909368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *> &configurableElementSet) const 39168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 39268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate to domains 393911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavoli size_t uiNbConfigurableDomains = getNbChildren(); 39468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3959368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 39668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3979368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pChildConfigurableDomain = 3989368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(getChild(child)); 39968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 40068a912857707864bbaaff9808717813105072a6ePatrick Benavoli pChildConfigurableDomain->gatherConfigurableElements(configurableElementSet); 40168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 40268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 40368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 40468a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Config restore 4059368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::restoreConfiguration(const string &domainName, 4069368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &configurationName, 4079368eea42a1afb01dd44110582f997115b50e742François Gaffie CParameterBlackboard *mainBlackboard, bool autoSync, 4089368eea42a1afb01dd44110582f997115b50e742François Gaffie core::Results &errors) const 40968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4109368eea42a1afb01dd44110582f997115b50e742François Gaffie string error; 41168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 4129368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *domain = findConfigurableDomain(domainName, error); 41368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4149368eea42a1afb01dd44110582f997115b50e742François Gaffie if (domain == NULL) { 41568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4169368eea42a1afb01dd44110582f997115b50e742François Gaffie errors.push_back(error); 41768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 41868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 41968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 4209368eea42a1afb01dd44110582f997115b50e742François Gaffie return domain->restoreConfiguration(configurationName, mainBlackboard, autoSync, errors); 42168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 42268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 42368a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Config save 4249368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::saveConfiguration(const string &strDomain, 4259368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, 4269368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard, 4279368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 42868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 42968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 4309368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 43168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 43268a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 43368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 43468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 43568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 43668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 43768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pConfigurableDomain->saveConfiguration(strConfiguration, pMainBlackboard, strError); 43868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 43968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4409368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::setElementSequence(const string &strDomain, 4419368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, 4429368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::vector<string> &astrNewElementSequence, 4439368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 44463499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli{ 44563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Find domain 4469368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 44763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 44863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli if (!pConfigurableDomain) { 44963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 45063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return false; 45163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 45263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 45363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Delegate to domain 4549368eea42a1afb01dd44110582f997115b50e742François Gaffie return pConfigurableDomain->setElementSequence(strConfiguration, astrNewElementSequence, 4559368eea42a1afb01dd44110582f997115b50e742François Gaffie strError); 45663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli} 45763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 4589368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::getElementSequence(const string &strDomain, 4599368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, 4609368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strResult) const 46163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli{ 46263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Find domain 4639368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strResult); 46463499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 46563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli if (!pConfigurableDomain) { 46663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 46763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return false; 46863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli } 46963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Delegate to domain 47063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli return pConfigurableDomain->getElementSequence(strConfiguration, strResult); 47163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli} 47263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 4739368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::setApplicationRule( 4749368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strDomain, const string &strConfiguration, const string &strApplicationRule, 4759368eea42a1afb01dd44110582f997115b50e742François Gaffie const CSelectionCriteriaDefinition *pSelectionCriteriaDefinition, string &strError) 4760bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli{ 4779368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 4780bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4790bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli if (!pConfigurableDomain) { 4800bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4810bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return false; 4820bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli } 4830bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4840bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Delegate to domain 4859368eea42a1afb01dd44110582f997115b50e742François Gaffie return pConfigurableDomain->setApplicationRule(strConfiguration, strApplicationRule, 4869368eea42a1afb01dd44110582f997115b50e742François Gaffie pSelectionCriteriaDefinition, strError); 4870bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli} 4880bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4899368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::clearApplicationRule(const string &strDomain, 4909368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, string &strError) 4910bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli{ 4929368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 4930bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4940bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli if (!pConfigurableDomain) { 4950bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4960bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return false; 4970bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli } 4980bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 4990bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Delegate to domain 5000bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return pConfigurableDomain->clearApplicationRule(strConfiguration, strError); 5010bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli} 5020bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 5039368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::getApplicationRule(const string &strDomain, 5049368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strConfiguration, 5059368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strResult) const 5060bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli{ 5079368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strResult); 5080bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 5090bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli if (!pConfigurableDomain) { 5100bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 5110bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return false; 5120bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli } 5130bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 5140bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Delegate to domain 5150bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return pConfigurableDomain->getApplicationRule(strConfiguration, strResult); 5160bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli} 5170bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 51868a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Last applied configurations 5199368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CConfigurableDomains::listLastAppliedConfigurations(string &strResult) const 52068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 52168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Browse domains 522911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavoli size_t uiNbConfigurableDomains = getNbChildren(); 52368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5249368eea42a1afb01dd44110582f997115b50e742François Gaffie for (size_t child = 0; child < uiNbConfigurableDomains; child++) { 52568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5269368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pChildConfigurableDomain = 5279368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(getChild(child)); 52868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5299368eea42a1afb01dd44110582f997115b50e742François Gaffie strResult += pChildConfigurableDomain->getName() + ": " + 5309368eea42a1afb01dd44110582f997115b50e742François Gaffie pChildConfigurableDomain->getLastAppliedConfigurationName() + " [" + 5319368eea42a1afb01dd44110582f997115b50e742François Gaffie pChildConfigurableDomain->getPendingConfigurationName() + "]\n"; 53268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 53368a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 53468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 53568a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Configurable element - domain association 5369368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::addConfigurableElementToDomain( 5379368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &domainName, CConfigurableElement *element, 5389368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *mainBlackboard, core::Results &infos) 53968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 54068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 5419368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string error; 5429368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *domain = findConfigurableDomain(domainName, error); 54368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5449368eea42a1afb01dd44110582f997115b50e742François Gaffie if (domain == NULL) { 54568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5469368eea42a1afb01dd44110582f997115b50e742François Gaffie infos.push_back(error); 54768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 54868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 54968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 5509368eea42a1afb01dd44110582f997115b50e742François Gaffie return domain->addConfigurableElement(element, mainBlackboard, infos); 55168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 55268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5539368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CConfigurableDomains::removeConfigurableElementFromDomain( 5549368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strDomain, CConfigurableElement *pConfigurableElement, string &strError) 55568a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 55668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Find domain 5579368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 55868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 55968a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pConfigurableDomain) { 56068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 56168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 56268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 56368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delegate 56468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pConfigurableDomain->removeConfigurableElement(pConfigurableElement, strError); 56568a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 56668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5679368eea42a1afb01dd44110582f997115b50e742François GaffieCParameterBlackboard *CConfigurableDomains::findConfigurationBlackboard( 5689368eea42a1afb01dd44110582f997115b50e742François Gaffie const string &strDomain, const string &strConfiguration, 5699368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableElement *pConfigurableElement, size_t &baseOffset, bool &bIsLastApplied, 5709368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) const 571e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard{ 572e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard // Find domain 5739368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = findConfigurableDomain(strDomain, strError); 574e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 575e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard if (!pConfigurableDomain) { 576e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 577e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard return NULL; 578e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard } 579e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 580e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard // Check that element belongs to the domain 581e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard if (!pConfigurableElement->belongsTo(pConfigurableDomain)) { 582e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 5839368eea42a1afb01dd44110582f997115b50e742François Gaffie strError = "Element \"" + pConfigurableElement->getPath() + 5849368eea42a1afb01dd44110582f997115b50e742François Gaffie "\" does not belong to domain \"" + strDomain + "\""; 585e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 586e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard return NULL; 587e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard } 588e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 589e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard // Find Configuration Blackboard and Base Offset 5909368eea42a1afb01dd44110582f997115b50e742François Gaffie return pConfigurableDomain->findConfigurationBlackboard(strConfiguration, pConfigurableElement, 5919368eea42a1afb01dd44110582f997115b50e742François Gaffie baseOffset, bIsLastApplied, strError); 59268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 5930bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 5940bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli// Domain retrieval 5959368eea42a1afb01dd44110582f997115b50e742François GaffieCConfigurableDomain *CConfigurableDomains::findConfigurableDomain(const string &strDomain, 5969368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) 5970bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli{ 59812de2f264c693736a0157847578f6231309cf395David Wagner // Call the const equivalent 5999368eea42a1afb01dd44110582f997115b50e742François Gaffie return const_cast<CConfigurableDomain *>( 6009368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomains *>(this)->findConfigurableDomain(strDomain, 6019368eea42a1afb01dd44110582f997115b50e742François Gaffie strError)); 6020bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli} 6030bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 6049368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CConfigurableDomain *CConfigurableDomains::findConfigurableDomain(const string &strDomain, 6059368eea42a1afb01dd44110582f997115b50e742François Gaffie string &strError) const 6060bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli{ 6070bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Find domain 6089368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableDomain *pConfigurableDomain = 6099368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<const CConfigurableDomain *>(findChild(strDomain)); 6100bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 6110bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli if (!pConfigurableDomain) { 6120bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 6130bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli strError = "Configurable domain " + strDomain + " not found"; 6140bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 6150bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return NULL; 6160bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli } 6170bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 6180bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli return pConfigurableDomain; 6190bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli} 620