1 /* 2 * Copyright (c) 2011-2014, Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this 9 * list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, 12 * this list of conditions and the following disclaimer in the documentation and/or 13 * other materials provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors 16 * may be used to endorse or promote products derived from this software without 17 * specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 #pragma once 31 32 #include "ParameterBlackboard.h" 33 #include "BinaryStream.h" 34 #include "SyncerSet.h" 35 36 class CConfigurableElement; 37 class CXmlElement; 38 class CConfigurationAccessContext; 39 40 class CAreaConfiguration 41 { 42 public: 43 CAreaConfiguration(const CConfigurableElement* pConfigurableElement, const CSyncerSet* pSyncerSet); 44 45 /* FIXME this was missing and probably buggy*/ ~CAreaConfiguration()46 virtual ~CAreaConfiguration() {} 47 48 // Save data from current 49 void save(const CParameterBlackboard* pMainBlackboard); 50 51 // Apply data to current 52 bool restore(CParameterBlackboard* pMainBlackboard, bool bSync, std::list<std::string>* plstrError) const; 53 54 // Ensure validity 55 void validate(const CParameterBlackboard* pMainBlackboard); 56 57 // Return validity 58 bool isValid() const; 59 60 // Ensure validity against given valid area configuration 61 void validateAgainst(const CAreaConfiguration* pValidAreaConfiguration); 62 63 // Compound handling 64 const CConfigurableElement* getConfigurableElement() const; 65 66 // Configuration merging 67 virtual void copyToOuter(CAreaConfiguration* pToAreaConfiguration) const; 68 69 // Configuration splitting 70 virtual void copyFromOuter(const CAreaConfiguration* pFromAreaConfiguration); 71 72 // XML configuration settings parsing/composing 73 bool serializeXmlSettings(CXmlElement& xmlConfigurableElementSettingsElementContent, CConfigurationAccessContext& configurationAccessContext); 74 75 // Serialization 76 void serialize(CBinaryStream& binaryStream); 77 78 // Data size 79 uint32_t getSize() const; 80 81 // Fetch the Configuration Blackboard 82 CParameterBlackboard& getBlackboard(); 83 const CParameterBlackboard& getBlackboard() const; 84 85 protected: 86 CAreaConfiguration(const CConfigurableElement* pConfigurableElement, const CSyncerSet* pSyncerSet, uint32_t uiSize); 87 88 private: 89 // Blackboard copies 90 virtual void copyTo(CParameterBlackboard* pToBlackboard, uint32_t uiOffset) const; 91 virtual void copyFrom(const CParameterBlackboard* pFromBlackboard, uint32_t uiOffset); 92 93 // Store validity 94 void setValid(bool bValid); 95 96 protected: 97 // Associated configurable element 98 const CConfigurableElement* _pConfigurableElement; 99 100 // Configurable element settings 101 CParameterBlackboard _blackboard; 102 103 private: 104 // Syncer set (required for immediate synchronization) 105 const CSyncerSet* _pSyncerSet; 106 107 // Area configuration validity (invalid area configurations can't be restored) 108 bool _bValid; 109 }; 110 111