1 /* 2 * Copyright (c) 2011-2015, 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 "SyncerSet.h" 34 #include "Results.h" 35 36 class CConfigurableElement; 37 class CXmlElement; 38 class CConfigurationAccessContext; 39 40 class CAreaConfiguration 41 { 42 public: 43 CAreaConfiguration(const CConfigurableElement *pConfigurableElement, 44 const CSyncerSet *pSyncerSet); 45 46 virtual ~CAreaConfiguration() = default; 47 48 // Save data from current 49 void save(const CParameterBlackboard *pMainBlackboard); 50 51 /** Restore the configuration area 52 * 53 * @param[in] pMainBlackboard the application main blackboard 54 * @param[in] bSync indicates if a synchronisation has to be done 55 * @param[out] errors, errors encountered during restoration 56 * @return true if success false otherwise 57 */ 58 bool restore(CParameterBlackboard *pMainBlackboard, bool bSync, core::Results *errors) const; 59 60 // Ensure validity 61 void validate(const CParameterBlackboard *pMainBlackboard); 62 63 // Return validity 64 bool isValid() const; 65 66 // Ensure validity against given valid area configuration 67 void validateAgainst(const CAreaConfiguration *pValidAreaConfiguration); 68 69 // Compound handling 70 const CConfigurableElement *getConfigurableElement() const; 71 72 // Configuration merging 73 virtual void copyToOuter(CAreaConfiguration *pToAreaConfiguration) const; 74 75 // Configuration splitting 76 virtual void copyFromOuter(const CAreaConfiguration *pFromAreaConfiguration); 77 78 // XML configuration settings parsing/composing 79 bool serializeXmlSettings(CXmlElement &xmlConfigurableElementSettingsElementContent, 80 CConfigurationAccessContext &configurationAccessContext); 81 82 // Fetch the Configuration Blackboard 83 CParameterBlackboard &getBlackboard(); 84 const CParameterBlackboard &getBlackboard() const; 85 86 protected: 87 CAreaConfiguration(const CConfigurableElement *pConfigurableElement, 88 const CSyncerSet *pSyncerSet, size_t size); 89 90 private: 91 // Blackboard copies 92 virtual void copyTo(CParameterBlackboard *pToBlackboard, size_t offset) const; 93 virtual void copyFrom(const CParameterBlackboard *pFromBlackboard, size_t offset); 94 95 // Store validity 96 void setValid(bool bValid); 97 98 protected: 99 // Associated configurable element 100 const CConfigurableElement *_pConfigurableElement; 101 102 // Configurable element settings 103 CParameterBlackboard _blackboard; 104 105 private: 106 // Syncer set (required for immediate synchronization) 107 const CSyncerSet *_pSyncerSet; 108 109 // Area configuration validity (invalid area configurations can't be restored) 110 bool _bValid{false}; 111 }; 112