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 */ 3068a912857707864bbaaff9808717813105072a6ePatrick Benavoli#pragma once 3168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3229fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner#include "XmlSerializingContext.h" 3329fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner#include "XmlDomainImportContext.h" 349368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "XmlDomainExportContext.h" 3568a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "SyncerSet.h" 369368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "Results.h" 3768a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <list> 3868a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <set> 3963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli#include <map> 40d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve#include <string> 4168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4268a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CConfigurableElement; 4368a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CDomainConfiguration; 4468a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CParameterBlackboard; 450bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoliclass CSelectionCriteriaDefinition; 4668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 479368eea42a1afb01dd44110582f997115b50e742François Gaffieclass CConfigurableDomain : public CElement 4868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 499368eea42a1afb01dd44110582f997115b50e742François Gaffie typedef std::list<CConfigurableElement *>::const_iterator ConfigurableElementListIterator; 509368eea42a1afb01dd44110582f997115b50e742François Gaffie typedef std::map<const CConfigurableElement *, CSyncerSet *>::const_iterator 519368eea42a1afb01dd44110582f997115b50e742François Gaffie ConfigurableElementToSyncerSetMapIterator; 529368eea42a1afb01dd44110582f997115b50e742François Gaffie 5368a912857707864bbaaff9808717813105072a6ePatrick Benavolipublic: 549368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain() = default; 559368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableDomain(const std::string &strName); 5668a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual ~CConfigurableDomain(); 5768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Sequence awareness 5963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli void setSequenceAwareness(bool bSequenceAware); 6063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli bool getSequenceAwareness() const; 6163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 6268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configuration Management 639368eea42a1afb01dd44110582f997115b50e742François Gaffie bool createConfiguration(const std::string &strName, 649368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard, std::string &strError); 659368eea42a1afb01dd44110582f997115b50e742François Gaffie bool deleteConfiguration(const std::string &strName, std::string &strError); 669368eea42a1afb01dd44110582f997115b50e742François Gaffie bool renameConfiguration(const std::string &strName, const std::string &strNewName, 679368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 689368eea42a1afb01dd44110582f997115b50e742François Gaffie 699368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Restore a configuration 709368eea42a1afb01dd44110582f997115b50e742François Gaffie * 719368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] configurationName the configuration name 729368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] mainBlackboard the application main blackboard 739368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] autoSync boolean which indicates if auto sync mechanism is on 749368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] errors, errors encountered during restoration 759368eea42a1afb01dd44110582f997115b50e742François Gaffie * @return true if success false otherwise 769368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 779368eea42a1afb01dd44110582f997115b50e742François Gaffie bool restoreConfiguration(const std::string &configurationName, 789368eea42a1afb01dd44110582f997115b50e742François Gaffie CParameterBlackboard *mainBlackboard, bool autoSync, 799368eea42a1afb01dd44110582f997115b50e742François Gaffie core::Results &errors) const; 809368eea42a1afb01dd44110582f997115b50e742François Gaffie 819368eea42a1afb01dd44110582f997115b50e742François Gaffie bool saveConfiguration(const std::string &strName, const CParameterBlackboard *pMainBlackboard, 829368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 839368eea42a1afb01dd44110582f997115b50e742François Gaffie bool setElementSequence(const std::string &strConfiguration, 849368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::vector<std::string> &astrNewElementSequence, 859368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 869368eea42a1afb01dd44110582f997115b50e742François Gaffie bool getElementSequence(const std::string &strConfiguration, std::string &strResult) const; 879368eea42a1afb01dd44110582f997115b50e742François Gaffie bool setApplicationRule(const std::string &strConfiguration, 889368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::string &strApplicationRule, 899368eea42a1afb01dd44110582f997115b50e742François Gaffie const CSelectionCriteriaDefinition *pSelectionCriteriaDefinition, 909368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 919368eea42a1afb01dd44110582f997115b50e742François Gaffie bool clearApplicationRule(const std::string &strConfiguration, std::string &strError); 929368eea42a1afb01dd44110582f997115b50e742François Gaffie bool getApplicationRule(const std::string &strConfiguration, std::string &strResult) const; 9368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 948b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Last applied configuration name 95d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve std::string getLastAppliedConfigurationName() const; 9668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 978b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Pending configuration name 98d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve std::string getPendingConfigurationName() const; 998b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 10068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Associated Configurable elements 1019368eea42a1afb01dd44110582f997115b50e742François Gaffie void gatherConfigurableElements( 1029368eea42a1afb01dd44110582f997115b50e742François Gaffie std::set<const CConfigurableElement *> &configurableElementSet) const; 1039368eea42a1afb01dd44110582f997115b50e742François Gaffie void listAssociatedToElements(std::string &strResult) const; 1049368eea42a1afb01dd44110582f997115b50e742François Gaffie 1059368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Add a configurable element to the domain 1069368eea42a1afb01dd44110582f997115b50e742François Gaffie * 1079368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pConfigurableElement pointer to the element to add 1089368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pMainBlackboard pointer to the application main blackboard 1099368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] infos useful information we can provide to client 1109368eea42a1afb01dd44110582f997115b50e742François Gaffie * @return true if succeed false otherwise 1119368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1129368eea42a1afb01dd44110582f997115b50e742François Gaffie bool addConfigurableElement(CConfigurableElement *pConfigurableElement, 1139368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard, core::Results &infos); 11468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1159368eea42a1afb01dd44110582f997115b50e742François Gaffie bool removeConfigurableElement(CConfigurableElement *pConfigurableElement, 1169368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 11768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 118e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard // Blackboard Configuration and Base Offset retrieval 1199368eea42a1afb01dd44110582f997115b50e742François Gaffie CParameterBlackboard *findConfigurationBlackboard( 1209368eea42a1afb01dd44110582f997115b50e742François Gaffie const std::string &strConfiguration, const CConfigurableElement *pConfigurableElement, 1219368eea42a1afb01dd44110582f997115b50e742François Gaffie size_t &baseOffset, bool &bIsLastApplied, std::string &strError) const; 122e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 1239368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Split the domain in two. 1249368eea42a1afb01dd44110582f997115b50e742François Gaffie * Remove an element of a domain and create a new domain which owns the element. 1259368eea42a1afb01dd44110582f997115b50e742François Gaffie * 1269368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pConfigurableElement pointer to the element to remove 1279368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] infos useful information we can provide to client 1289368eea42a1afb01dd44110582f997115b50e742François Gaffie * @return true if succeed false otherwise 1299368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1309368eea42a1afb01dd44110582f997115b50e742François Gaffie bool split(CConfigurableElement *pConfigurableElement, core::Results &infos); 13168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 13268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Ensure validity on whole domain from main blackboard 1339368eea42a1afb01dd44110582f997115b50e742François Gaffie void validate(const CParameterBlackboard *pMainBlackboard); 13468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1359368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Apply the configuration if required 1369368eea42a1afb01dd44110582f997115b50e742François Gaffie * 1379368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pParameterBlackboard the blackboard to synchronize 1389368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pSyncerSet pointer to the set containing application syncers 1399368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] bForced boolean used to force configuration application 1409368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] info string containing useful information we can provide to client 1419368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 1429368eea42a1afb01dd44110582f997115b50e742François Gaffie void apply(CParameterBlackboard *pParameterBlackboard, CSyncerSet *pSyncerSet, bool bForced, 1439368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &info) const; 14468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Return applicable configuration validity for given configurable element 1469368eea42a1afb01dd44110582f997115b50e742François Gaffie bool isApplicableConfigurationValid(const CConfigurableElement *pConfigurableElement) const; 14768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // From IXmlSink 1499368eea42a1afb01dd44110582f997115b50e742François Gaffie virtual bool fromXml(const CXmlElement &xmlElement, CXmlSerializingContext &serializingContext); 15068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // From IXmlSource 1529368eea42a1afb01dd44110582f997115b50e742François Gaffie virtual void toXml(CXmlElement &xmlElement, CXmlSerializingContext &serializingContext) const; 1539368eea42a1afb01dd44110582f997115b50e742François Gaffie virtual void childrenToXml(CXmlElement &xmlElement, 1549368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlSerializingContext &serializingContext) const; 15568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Class kind 157d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve virtual std::string getKind() const; 1588b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 1590bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoliprotected: 1600bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Content dumping 1619368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string logValue(utility::ErrorContext &errorContext) const override; 1628b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 16368a912857707864bbaaff9808717813105072a6ePatrick Benavoliprivate: 1648b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Get pending configuration 1659368eea42a1afb01dd44110582f997115b50e742François Gaffie const CDomainConfiguration *getPendingConfiguration() const; 1668b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 1678b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Search for an applicable configuration 1689368eea42a1afb01dd44110582f997115b50e742François Gaffie const CDomainConfiguration *findApplicableDomainConfiguration() const; 1698b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 1709368eea42a1afb01dd44110582f997115b50e742François Gaffie // Returns true if children dynamic creation is to be dealt with (here, will allow child 1719368eea42a1afb01dd44110582f997115b50e742François Gaffie // deletion upon clean) 17268a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual bool childrenAreDynamic() const; 17368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 17468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Ensure validity on areas related to configurable element 1759368eea42a1afb01dd44110582f997115b50e742François Gaffie void validateAreas(const CConfigurableElement *pConfigurableElement, 1769368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard); 17768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1789368eea42a1afb01dd44110582f997115b50e742François Gaffie // Attempt validation for all configurable element's areas, relying on already existing valid 1799368eea42a1afb01dd44110582f997115b50e742François Gaffie // configuration inside domain 18068a912857707864bbaaff9808717813105072a6ePatrick Benavoli void autoValidateAll(); 18168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1829368eea42a1afb01dd44110582f997115b50e742François Gaffie // Attempt validation for one configurable element's areas, relying on already existing valid 1839368eea42a1afb01dd44110582f997115b50e742François Gaffie // configuration inside domain 1849368eea42a1afb01dd44110582f997115b50e742François Gaffie void autoValidateAreas(const CConfigurableElement *pConfigurableElement); 18568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1869368eea42a1afb01dd44110582f997115b50e742François Gaffie // Attempt configuration validation for all configurable elements' areas, relying on already 1879368eea42a1afb01dd44110582f997115b50e742François Gaffie // existing valid configuration inside domain 1889368eea42a1afb01dd44110582f997115b50e742François Gaffie bool autoValidateConfiguration(CDomainConfiguration *pDomainConfiguration); 18968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 19068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Search for a valid configuration for given configurable element 1919368eea42a1afb01dd44110582f997115b50e742François Gaffie const CDomainConfiguration *findValidDomainConfiguration( 1929368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableElement *pConfigurableElement) const; 19368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 19468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // In case configurable element was removed 19568a912857707864bbaaff9808717813105072a6ePatrick Benavoli void computeSyncSet(); 19668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 19768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Check configurable element already attached 1989368eea42a1afb01dd44110582f997115b50e742François Gaffie bool containsConfigurableElement( 1999368eea42a1afb01dd44110582f997115b50e742François Gaffie const CConfigurableElement *pConfigurableCandidateElement) const; 20068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2019368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Merge any descended configurable element to this one 2029368eea42a1afb01dd44110582f997115b50e742François Gaffie * 2039368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] newElement pointer to element which has potential descendants which can be merged 2049368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] infos useful information we can provide to client 2059368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 2069368eea42a1afb01dd44110582f997115b50e742François Gaffie void mergeAlreadyAssociatedDescendantConfigurableElements(CConfigurableElement *newElement, 2079368eea42a1afb01dd44110582f997115b50e742François Gaffie core::Results &infos); 20868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2099368eea42a1afb01dd44110582f997115b50e742François Gaffie void mergeConfigurations(CConfigurableElement *pToConfigurableElement, 2109368eea42a1afb01dd44110582f997115b50e742François Gaffie CConfigurableElement *pFromConfigurableElement); 2119368eea42a1afb01dd44110582f997115b50e742François Gaffie 2129368eea42a1afb01dd44110582f997115b50e742François Gaffie /** Actually realize the association between the domain and a configurable element 2139368eea42a1afb01dd44110582f997115b50e742François Gaffie * 2149368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] pConfigurableElement pointer to the element to add 2159368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[out] infos useful information we can provide to client 2169368eea42a1afb01dd44110582f997115b50e742François Gaffie * @param[in] (optional) pMainBlackboard, pointer to the application main blackboard 2179368eea42a1afb01dd44110582f997115b50e742François Gaffie * Default value is NULL, when provided, blackboard area concerning the configurable 2189368eea42a1afb01dd44110582f997115b50e742François Gaffie * element are validated. 2199368eea42a1afb01dd44110582f997115b50e742François Gaffie */ 2209368eea42a1afb01dd44110582f997115b50e742François Gaffie void doAddConfigurableElement(CConfigurableElement *pConfigurableElement, core::Results &infos, 2219368eea42a1afb01dd44110582f997115b50e742François Gaffie const CParameterBlackboard *pMainBlackboard = NULL); 2229368eea42a1afb01dd44110582f997115b50e742François Gaffie 2239368eea42a1afb01dd44110582f997115b50e742François Gaffie void doRemoveConfigurableElement(CConfigurableElement *pConfigurableElement, 2249368eea42a1afb01dd44110582f997115b50e742François Gaffie bool bRecomputeSyncSet); 22568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 22668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // XML parsing 22729fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner /** 22829fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * Deserialize domain configurations from an Xml document and add them to 22929fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * the domain. 23029fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 23129fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] xmlElement the XML element to be parsed 23229fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] serializingContext context for the deserialization 23329fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 23429fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @return false if an error occurs, true otherwise. 23529fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner */ 2369368eea42a1afb01dd44110582f997115b50e742François Gaffie bool parseDomainConfigurations(const CXmlElement &xmlElement, 2379368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlDomainImportContext &serializingContext); 23829fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner /** 23929fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * Deserialize domain elements from an Xml document and add them to 24029fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * the domain. 24129fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 24229fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] xmlElement the XML element to be parsed 24329fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] serializingContext context for the deserialization 24429fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 24529fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @return false if an error occurs, true otherwise. 24629fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner */ 2479368eea42a1afb01dd44110582f997115b50e742François Gaffie bool parseConfigurableElements(const CXmlElement &xmlElement, 2489368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlDomainImportContext &serializingContext); 24929fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner /** 25029fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * Deserialize settings from an Xml document and add them to 25129fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * the domain. 25229fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 25329fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] xmlElement the XML element to be parsed 25429fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @param[in] xmlDomainImportContext context for the deserialization 25529fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * 25629fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner * @return false if an error occurs, true otherwise. 25729fa61fc5bc02f72f99e66ad50e4de8cb6b8490bDavid Wagner */ 2589368eea42a1afb01dd44110582f997115b50e742François Gaffie bool parseSettings(const CXmlElement &xmlElement, CXmlDomainImportContext &serializingContext); 25968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // XML composing 2619368eea42a1afb01dd44110582f997115b50e742François Gaffie void composeDomainConfigurations(CXmlElement &xmlElement, 2629368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlSerializingContext &serializingContext) const; 2639368eea42a1afb01dd44110582f997115b50e742François Gaffie void composeConfigurableElements(CXmlElement &xmlElement) const; 2649368eea42a1afb01dd44110582f997115b50e742François Gaffie void composeSettings(CXmlElement &xmlElement, CXmlDomainExportContext &context) const; 26563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 26663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Syncer set retrieval from configurable element 2679368eea42a1afb01dd44110582f997115b50e742François Gaffie CSyncerSet *getSyncerSet(const CConfigurableElement *pConfigurableElement) const; 26868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2690bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Configuration retrieval 2709368eea42a1afb01dd44110582f997115b50e742François Gaffie CDomainConfiguration *findConfiguration(const std::string &strConfiguration, 2719368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError); 2729368eea42a1afb01dd44110582f997115b50e742François Gaffie const CDomainConfiguration *findConfiguration(const std::string &strConfiguration, 2739368eea42a1afb01dd44110582f997115b50e742François Gaffie std::string &strError) const; 2740bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 27568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configurable elements 2769368eea42a1afb01dd44110582f997115b50e742François Gaffie std::list<CConfigurableElement *> _configurableElementList; 27768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 27863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Associated syncer sets 2799368eea42a1afb01dd44110582f997115b50e742François Gaffie std::map<const CConfigurableElement *, CSyncerSet *> _configurableElementToSyncerSetMap; 28063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 28163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Sequence awareness 2829368eea42a1afb01dd44110582f997115b50e742François Gaffie bool _bSequenceAware{false}; 28363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 28468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Syncer set used to ensure propoer synchronization of restored configurable elements 28568a912857707864bbaaff9808717813105072a6ePatrick Benavoli CSyncerSet _syncerSet; 28668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 28768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Last applied configuration 2889368eea42a1afb01dd44110582f997115b50e742François Gaffie mutable const CDomainConfiguration *_pLastAppliedConfiguration{nullptr}; 28968a912857707864bbaaff9808717813105072a6ePatrick Benavoli}; 290