ConfigurableDomain.h revision e42dacdeaf82d63000be61c6f1583a2ab08e0a98
1e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard/* 268a912857707864bbaaff9808717813105072a6ePatrick Benavoli * INTEL CONFIDENTIAL 368a912857707864bbaaff9808717813105072a6ePatrick Benavoli * Copyright © 2011 Intel 468a912857707864bbaaff9808717813105072a6ePatrick Benavoli * Corporation All Rights Reserved. 568a912857707864bbaaff9808717813105072a6ePatrick Benavoli * 668a912857707864bbaaff9808717813105072a6ePatrick Benavoli * The source code contained or described herein and all documents related to 768a912857707864bbaaff9808717813105072a6ePatrick Benavoli * the source code ("Material") are owned by Intel Corporation or its suppliers 868a912857707864bbaaff9808717813105072a6ePatrick Benavoli * or licensors. Title to the Material remains with Intel Corporation or its 968a912857707864bbaaff9808717813105072a6ePatrick Benavoli * suppliers and licensors. The Material contains trade secrets and proprietary 1068a912857707864bbaaff9808717813105072a6ePatrick Benavoli * and confidential information of Intel or its suppliers and licensors. The 1168a912857707864bbaaff9808717813105072a6ePatrick Benavoli * Material is protected by worldwide copyright and trade secret laws and 1268a912857707864bbaaff9808717813105072a6ePatrick Benavoli * treaty provisions. No part of the Material may be used, copied, reproduced, 1368a912857707864bbaaff9808717813105072a6ePatrick Benavoli * modified, published, uploaded, posted, transmitted, distributed, or 1468a912857707864bbaaff9808717813105072a6ePatrick Benavoli * disclosed in any way without Intel’s prior express written permission. 1568a912857707864bbaaff9808717813105072a6ePatrick Benavoli * 1668a912857707864bbaaff9808717813105072a6ePatrick Benavoli * No license under any patent, copyright, trade secret or other intellectual 1768a912857707864bbaaff9808717813105072a6ePatrick Benavoli * property right is granted to or conferred upon you by disclosure or delivery 1868a912857707864bbaaff9808717813105072a6ePatrick Benavoli * of the Materials, either expressly, by implication, inducement, estoppel or 1968a912857707864bbaaff9808717813105072a6ePatrick Benavoli * otherwise. Any license under such intellectual property rights must be 2068a912857707864bbaaff9808717813105072a6ePatrick Benavoli * express and approved by Intel in writing. 2168a912857707864bbaaff9808717813105072a6ePatrick Benavoli * 2268a912857707864bbaaff9808717813105072a6ePatrick Benavoli * CREATED: 2011-06-01 2368a912857707864bbaaff9808717813105072a6ePatrick Benavoli * UPDATED: 2011-07-27 2468a912857707864bbaaff9808717813105072a6ePatrick Benavoli */ 2568a912857707864bbaaff9808717813105072a6ePatrick Benavoli#pragma once 2668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2768a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "BinarySerializableElement.h" 2868a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "SyncerSet.h" 2968a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <list> 3068a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <set> 3163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli#include <map> 3268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3368a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CConfigurableElement; 3468a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CDomainConfiguration; 3568a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CParameterBlackboard; 360bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoliclass CSelectionCriteriaDefinition; 3768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3868a912857707864bbaaff9808717813105072a6ePatrick Benavoliclass CConfigurableDomain : public CBinarySerializableElement 3968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4068a912857707864bbaaff9808717813105072a6ePatrick Benavoli typedef list<CConfigurableElement*>::const_iterator ConfigurableElementListIterator; 4163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli typedef map<const CConfigurableElement*, CSyncerSet*>::const_iterator ConfigurableElementToSyncerSetMapIterator; 4268a912857707864bbaaff9808717813105072a6ePatrick Benavolipublic: 4368a912857707864bbaaff9808717813105072a6ePatrick Benavoli CConfigurableDomain(const string& strName); 4468a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual ~CConfigurableDomain(); 4568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Sequence awareness 4763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli void setSequenceAwareness(bool bSequenceAware); 4863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli bool getSequenceAwareness() const; 4963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 5068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configuration Management 5168a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool createConfiguration(const string& strName, const CParameterBlackboard* pMainBlackboard, string& strError); 5268a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool deleteConfiguration(const string& strName, string& strError); 5368a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool renameConfiguration(const string& strName, const string& strNewName, string& strError); 54ace81f873b910493ab884dc5a6a38ba6ec3d56d3Kevin Rocard bool restoreConfiguration(const string& strName, CParameterBlackboard* pMainBlackboard, bool bAutoSync, list<string>& strError) const; 5568a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool saveConfiguration(const string& strName, const CParameterBlackboard* pMainBlackboard, string& strError); 560bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli bool setElementSequence(const string& strConfiguration, const vector<string>& astrNewElementSequence, string& strError); 570bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli bool getElementSequence(const string& strConfiguration, string& strResult) const; 580bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli bool setApplicationRule(const string& strConfiguration, const string& strApplicationRule, const CSelectionCriteriaDefinition* pSelectionCriteriaDefinition, string& strError); 590bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli bool clearApplicationRule(const string& strConfiguration, string& strError); 600bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli bool getApplicationRule(const string& strConfiguration, string& strResult) const; 6168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 628b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Last applied configuration name 6368a912857707864bbaaff9808717813105072a6ePatrick Benavoli string getLastAppliedConfigurationName() const; 6468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 658b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Pending configuration name 668b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard string getPendingConfigurationName() const; 678b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 6868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Associated Configurable elements 6968a912857707864bbaaff9808717813105072a6ePatrick Benavoli void gatherConfigurableElements(set<const CConfigurableElement*>& configurableElementSet) const; 7068a912857707864bbaaff9808717813105072a6ePatrick Benavoli void listAssociatedToElements(string& strResult) const; 7168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 7268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configurable elements association 7368a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool addConfigurableElement(CConfigurableElement* pConfigurableElement, const CParameterBlackboard* pMainBlackboard, string& strError); 7468a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool removeConfigurableElement(CConfigurableElement* pConfigurableElement, string& strError); 7568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 76e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard // Blackboard Configuration and Base Offset retrieval 77e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard CParameterBlackboard* findConfigurationBlackboard(const string& strConfiguration, 78e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard const CConfigurableElement* pConfigurableElement, 79e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard uint32_t& uiBaseOffset, 80e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard bool& bIsLastApplied, 81e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard string& strError) const; 82e42dacdeaf82d63000be61c6f1583a2ab08e0a98Frédéric Boisnard 8368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Domain splitting 8468a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool split(CConfigurableElement* pConfigurableElement, string& strError); 8568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 8668a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Ensure validity on whole domain from main blackboard 8768a912857707864bbaaff9808717813105072a6ePatrick Benavoli void validate(const CParameterBlackboard* pMainBlackboard); 8868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 8968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configuration application if required 90f2fd15a331fd3b5b63f0dc6f492651330adcedf9Guillaume Denneulin void apply(CParameterBlackboard* pParameterBlackboard, CSyncerSet* pSyncerSet, bool bForced) const; 9168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 9268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Return applicable configuration validity for given configurable element 9368a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool isApplicableConfigurationValid(const CConfigurableElement* pConfigurableElement) const; 9468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 9568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // From IXmlSink 9668a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); 9768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 9868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // From IXmlSource 9968a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; 10068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 10168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Class kind 10268a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual string getKind() const; 1038b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 1040bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoliprotected: 1050bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Content dumping 1060bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli virtual void logValue(string& strValue, CErrorContext& errorContext) const; 1078b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 10868a912857707864bbaaff9808717813105072a6ePatrick Benavoliprivate: 1098b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Get pending configuration 1108b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard const CDomainConfiguration* getPendingConfiguration() const; 1118b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 1128b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard // Search for an applicable configuration 1138b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard const CDomainConfiguration* findApplicableDomainConfiguration() const; 1148b243f50a38a26e6b373287e07cb7e4743a8cd28Frédéric Boisnard 11568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Returns true if children dynamic creation is to be dealt with (here, will allow child deletion upon clean) 11668a912857707864bbaaff9808717813105072a6ePatrick Benavoli virtual bool childrenAreDynamic() const; 11768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 11868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Ensure validity on areas related to configurable element 11968a912857707864bbaaff9808717813105072a6ePatrick Benavoli void validateAreas(const CConfigurableElement* pConfigurableElement, const CParameterBlackboard* pMainBlackboard); 12068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Attempt validation for all configurable element's areas, relying on already existing valid configuration inside domain 12268a912857707864bbaaff9808717813105072a6ePatrick Benavoli void autoValidateAll(); 12368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Attempt validation for one configurable element's areas, relying on already existing valid configuration inside domain 12568a912857707864bbaaff9808717813105072a6ePatrick Benavoli void autoValidateAreas(const CConfigurableElement* pConfigurableElement); 12668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 12768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Attempt configuration validation for all configurable elements' areas, relying on already existing valid configuration inside domain 12868a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool autoValidateConfiguration(CDomainConfiguration* pDomainConfiguration); 12968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 13068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Search for a valid configuration for given configurable element 13168a912857707864bbaaff9808717813105072a6ePatrick Benavoli const CDomainConfiguration* findValidDomainConfiguration(const CConfigurableElement* pConfigurableElement) const; 13268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 13368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 13468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // In case configurable element was removed 13568a912857707864bbaaff9808717813105072a6ePatrick Benavoli void computeSyncSet(); 13668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 13768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Check configurable element already attached 13868a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool containsConfigurableElement(const CConfigurableElement* pConfigurableCandidateElement) const; 13968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Merge any descended configurable element to this one 14168a912857707864bbaaff9808717813105072a6ePatrick Benavoli void mergeAlreadyAssociatedDescendantConfigurableElements(CConfigurableElement* pNewConfigurableElement); 14268a912857707864bbaaff9808717813105072a6ePatrick Benavoli void mergeConfigurations(CConfigurableElement* pToConfigurableElement, CConfigurableElement* pFromConfigurableElement); 14368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configurable elements association 1459620e44c6c7605bf589f60331eb5b05b71336853Frédéric Boisnard void doAddConfigurableElement(CConfigurableElement* pConfigurableElement, const CParameterBlackboard* pMainBlackboard = NULL); 14668a912857707864bbaaff9808717813105072a6ePatrick Benavoli void doRemoveConfigurableElement(CConfigurableElement* pConfigurableElement, bool bRecomputeSyncSet); 14768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // XML parsing 14968a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool parseDomainConfigurations(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); 15068a912857707864bbaaff9808717813105072a6ePatrick Benavoli bool parseConfigurableElements(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); 15163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli bool parseSettings(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); 15268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // XML composing 15468a912857707864bbaaff9808717813105072a6ePatrick Benavoli void composeDomainConfigurations(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; 15563499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli void composeConfigurableElements(CXmlElement& xmlElement) const; 15663499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli void composeSettings(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; 15763499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 15863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Syncer set retrieval from configurable element 15963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli CSyncerSet* getSyncerSet(const CConfigurableElement* pConfigurableElement) const; 16068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1610bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli // Configuration retrieval 1620bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli CDomainConfiguration* findConfiguration(const string& strConfiguration, string& strError); 1630bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli const CDomainConfiguration* findConfiguration(const string& strConfiguration, string& strError) const; 1640bd50546a8d06a6865d32c695adf8893fa71250aPatrick Benavoli 16568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Configurable elements 16668a912857707864bbaaff9808717813105072a6ePatrick Benavoli list<CConfigurableElement*> _configurableElementList; 16768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 16863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Associated syncer sets 16963499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli map<const CConfigurableElement*, CSyncerSet*> _configurableElementToSyncerSetMap; 17063499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 17163499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli // Sequence awareness 17263499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli bool _bSequenceAware; 17363499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli 17468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Syncer set used to ensure propoer synchronization of restored configurable elements 17568a912857707864bbaaff9808717813105072a6ePatrick Benavoli CSyncerSet _syncerSet; 17668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 17768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Last applied configuration 17863499d4763e42d76bfd39b79871f611381d2d164Patrick Benavoli mutable const CDomainConfiguration* _pLastAppliedConfiguration; 17968a912857707864bbaaff9808717813105072a6ePatrick Benavoli}; 18068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 181