blob: 40e1d4ae1f481a07ad1ab9d556a9291fd3e63ea9 [file] [log] [blame]
Patrick Benavoli68a91282011-08-31 11:23:23 +02001/* <auto_header>
2 * <FILENAME>
3 *
4 * INTEL CONFIDENTIAL
5 * Copyright © 2011 Intel
6 * Corporation All Rights Reserved.
7 *
8 * The source code contained or described herein and all documents related to
9 * the source code ("Material") are owned by Intel Corporation or its suppliers
10 * or licensors. Title to the Material remains with Intel Corporation or its
11 * suppliers and licensors. The Material contains trade secrets and proprietary
12 * and confidential information of Intel or its suppliers and licensors. The
13 * Material is protected by worldwide copyright and trade secret laws and
14 * treaty provisions. No part of the Material may be used, copied, reproduced,
15 * modified, published, uploaded, posted, transmitted, distributed, or
16 * disclosed in any way without Intel’s prior express written permission.
17 *
18 * No license under any patent, copyright, trade secret or other intellectual
19 * property right is granted to or conferred upon you by disclosure or delivery
20 * of the Materials, either expressly, by implication, inducement, estoppel or
21 * otherwise. Any license under such intellectual property rights must be
22 * express and approved by Intel in writing.
23 *
24 * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
25 * CREATED: 2011-06-01
26 * UPDATED: 2011-07-27
27 *
28 *
29 * </auto_header>
30 */
31#pragma once
32
33#include "BinarySerializableElement.h"
34#include <list>
35
36class CConfigurableElement;
37class CAreaConfiguration;
38class CParameterBlackboard;
39class CConfigurationAccessContext;
40class CCompoundRule;
Patrick Benavoli63499d42011-10-24 18:50:03 +020041class CSyncerSet;
Patrick Benavoli0bd50542011-11-29 11:10:27 +010042class CSelectionCriteriaDefinition;
Patrick Benavoli68a91282011-08-31 11:23:23 +020043
44class CDomainConfiguration : public CBinarySerializableElement
45{
46 enum ChildElementType {
47 ECompoundRule
48 };
49 typedef list<CAreaConfiguration*>::const_iterator AreaConfigurationListIterator;
50public:
51 CDomainConfiguration(const string& strName);
52 virtual ~CDomainConfiguration();
53
54 // Configurable Elements association
Patrick Benavoli63499d42011-10-24 18:50:03 +020055 void addConfigurableElement(const CConfigurableElement* pConfigurableElement, const CSyncerSet* pSyncerSet);
Patrick Benavoli68a91282011-08-31 11:23:23 +020056 void removeConfigurableElement(const CConfigurableElement* pConfigurableElement);
57
Patrick Benavoli63499d42011-10-24 18:50:03 +020058 // Sequence management
59 bool setElementSequence(const vector<string>& astrNewElementSequence, string& strError);
60 void getElementSequence(string& strResult) const;
61
Patrick Benavoli0bd50542011-11-29 11:10:27 +010062 // Application rule
63 bool setApplicationRule(const string& strApplicationRule, const CSelectionCriteriaDefinition* pSelectionCriteriaDefinition, string& strError);
64 void clearApplicationRule();
65 void getApplicationRule(string& strResult) const;
66
Patrick Benavoli68a91282011-08-31 11:23:23 +020067 // Save data from current
68 void save(const CParameterBlackboard* pMainBlackboard);
69 // Apply data to current
Patrick Benavoli63499d42011-10-24 18:50:03 +020070 bool restore(CParameterBlackboard* pMainBlackboard, bool bSync, string& strError) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +020071 // Ensure validity for configurable element area configuration
72 void validate(const CConfigurableElement* pConfigurableElement, const CParameterBlackboard* pMainBlackboard);
73 // Ensure validity of all area configurations
74 void validate(const CParameterBlackboard* pMainBlackboard);
75 // Return configuration validity for given configurable element
76 bool isValid(const CConfigurableElement* pConfigurableElement) const;
77 // Ensure validity of configurable element's area configuration by copying in from a valid one
78 void validateAgainst(const CDomainConfiguration* pValidDomainConfiguration, const CConfigurableElement* pConfigurableElement);
79 // Ensure validity of all configurable element's area configuration by copying in from a valid ones
80 void validateAgainst(const CDomainConfiguration* pValidDomainConfiguration);
81 // Applicability checking
82 bool isApplicable() const;
83 // Merge existing configurations to given configurable element ones
84 void merge(CConfigurableElement* pToConfigurableElement, CConfigurableElement* pFromConfigurableElement);
85 // Domain splitting
86 void split(CConfigurableElement* pFromConfigurableElement);
87
88 // XML configuration settings parsing/composing
Patrick Benavoli63499d42011-10-24 18:50:03 +020089 bool parseSettings(CXmlElement& xmlConfigurationSettingsElement, CXmlSerializingContext& serializingContext);
90 void composeSettings(CXmlElement& xmlConfigurationSettingsElement, CXmlSerializingContext& serializingContext) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +020091
Patrick Benavoli68a91282011-08-31 11:23:23 +020092 // Serialization
93 virtual void binarySerialize(CBinaryStream& binaryStream);
94
95 // Data size
96 virtual uint32_t getDataSize() const;
97
98 // Class kind
99 virtual string getKind() const;
100private:
101 // Returns true if children dynamic creation is to be dealt with (here, will allow child deletion upon clean)
102 virtual bool childrenAreDynamic() const;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200103 // XML configuration settings serializing
104 bool serializeConfigurableElementSettings(CAreaConfiguration* pAreaConfiguration, CXmlElement& xmlConfigurableElementSettingsElement, CXmlSerializingContext& serializingContext, bool bSerializeOut);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200105 // AreaConfiguration retrieval from configurable element
106 CAreaConfiguration* getAreaConfiguration(const CConfigurableElement* pConfigurableElement) const;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200107 // AreaConfiguration retrieval from present area configurations
108 CAreaConfiguration* findAreaConfiguration(const string& strConfigurableElementPath) const;
109 // AreaConfiguration retrieval from given area configuration list
110 CAreaConfiguration* findAreaConfiguration(const string& strConfigurableElementPath, const list<CAreaConfiguration*>& areaConfigurationList) const;
111 // Area configuration ordering
112 void reorderAreaConfigurations(const list<CAreaConfiguration*>& areaConfigurationList);
113 // Find area configuration rank from regular list: for ordered list maintainance
114 uint32_t getAreaConfigurationRank(const CAreaConfiguration* pAreaConfiguration) const;
115 // Find area configuration from regular list based on rank: for ordered list maintainance
116 CAreaConfiguration* getAreaConfiguration(uint32_t uiAreaConfigurationRank) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200117
118 // Rule
119 const CCompoundRule* getRule() const;
Patrick Benavoli0bd50542011-11-29 11:10:27 +0100120 CCompoundRule* getRule();
121 void setRule(CCompoundRule* pRule);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200122
123 // AreaConfigurations
124 list<CAreaConfiguration*> _areaConfigurationList;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200125 list<CAreaConfiguration*> _orderedAreaConfigurationList;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200126};