blob: 981ef777a8d4aa67574c02c6146238735ceb37ad [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 Benavoli68a91282011-08-31 11:23:23 +020042
43class CDomainConfiguration : public CBinarySerializableElement
44{
45 enum ChildElementType {
46 ECompoundRule
47 };
48 typedef list<CAreaConfiguration*>::const_iterator AreaConfigurationListIterator;
49public:
50 CDomainConfiguration(const string& strName);
51 virtual ~CDomainConfiguration();
52
53 // Configurable Elements association
Patrick Benavoli63499d42011-10-24 18:50:03 +020054 void addConfigurableElement(const CConfigurableElement* pConfigurableElement, const CSyncerSet* pSyncerSet);
Patrick Benavoli68a91282011-08-31 11:23:23 +020055 void removeConfigurableElement(const CConfigurableElement* pConfigurableElement);
56
Patrick Benavoli63499d42011-10-24 18:50:03 +020057 // Sequence management
58 bool setElementSequence(const vector<string>& astrNewElementSequence, string& strError);
59 void getElementSequence(string& strResult) const;
60
Patrick Benavoli68a91282011-08-31 11:23:23 +020061 // Save data from current
62 void save(const CParameterBlackboard* pMainBlackboard);
63 // Apply data to current
Patrick Benavoli63499d42011-10-24 18:50:03 +020064 bool restore(CParameterBlackboard* pMainBlackboard, bool bSync, string& strError) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +020065 // Ensure validity for configurable element area configuration
66 void validate(const CConfigurableElement* pConfigurableElement, const CParameterBlackboard* pMainBlackboard);
67 // Ensure validity of all area configurations
68 void validate(const CParameterBlackboard* pMainBlackboard);
69 // Return configuration validity for given configurable element
70 bool isValid(const CConfigurableElement* pConfigurableElement) const;
71 // Ensure validity of configurable element's area configuration by copying in from a valid one
72 void validateAgainst(const CDomainConfiguration* pValidDomainConfiguration, const CConfigurableElement* pConfigurableElement);
73 // Ensure validity of all configurable element's area configuration by copying in from a valid ones
74 void validateAgainst(const CDomainConfiguration* pValidDomainConfiguration);
75 // Applicability checking
76 bool isApplicable() const;
77 // Merge existing configurations to given configurable element ones
78 void merge(CConfigurableElement* pToConfigurableElement, CConfigurableElement* pFromConfigurableElement);
79 // Domain splitting
80 void split(CConfigurableElement* pFromConfigurableElement);
81
82 // XML configuration settings parsing/composing
Patrick Benavoli63499d42011-10-24 18:50:03 +020083 bool parseSettings(CXmlElement& xmlConfigurationSettingsElement, CXmlSerializingContext& serializingContext);
84 void composeSettings(CXmlElement& xmlConfigurationSettingsElement, CXmlSerializingContext& serializingContext) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +020085
86 // Presence of application condition
87 bool hasRule() const;
88
89 // Serialization
90 virtual void binarySerialize(CBinaryStream& binaryStream);
91
92 // Data size
93 virtual uint32_t getDataSize() const;
94
95 // Class kind
96 virtual string getKind() const;
97private:
98 // Returns true if children dynamic creation is to be dealt with (here, will allow child deletion upon clean)
99 virtual bool childrenAreDynamic() const;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200100 // XML configuration settings serializing
101 bool serializeConfigurableElementSettings(CAreaConfiguration* pAreaConfiguration, CXmlElement& xmlConfigurableElementSettingsElement, CXmlSerializingContext& serializingContext, bool bSerializeOut);
Patrick Benavoli68a91282011-08-31 11:23:23 +0200102 // AreaConfiguration retrieval from configurable element
103 CAreaConfiguration* getAreaConfiguration(const CConfigurableElement* pConfigurableElement) const;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200104 // AreaConfiguration retrieval from present area configurations
105 CAreaConfiguration* findAreaConfiguration(const string& strConfigurableElementPath) const;
106 // AreaConfiguration retrieval from given area configuration list
107 CAreaConfiguration* findAreaConfiguration(const string& strConfigurableElementPath, const list<CAreaConfiguration*>& areaConfigurationList) const;
108 // Area configuration ordering
109 void reorderAreaConfigurations(const list<CAreaConfiguration*>& areaConfigurationList);
110 // Find area configuration rank from regular list: for ordered list maintainance
111 uint32_t getAreaConfigurationRank(const CAreaConfiguration* pAreaConfiguration) const;
112 // Find area configuration from regular list based on rank: for ordered list maintainance
113 CAreaConfiguration* getAreaConfiguration(uint32_t uiAreaConfigurationRank) const;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200114
115 // Rule
116 const CCompoundRule* getRule() const;
117
118 // AreaConfigurations
119 list<CAreaConfiguration*> _areaConfigurationList;
Patrick Benavoli63499d42011-10-24 18:50:03 +0200120 list<CAreaConfiguration*> _orderedAreaConfigurationList;
Patrick Benavoli68a91282011-08-31 11:23:23 +0200121};