/* * * * INTEL CONFIDENTIAL * Copyright © 2011 Intel * Corporation All Rights Reserved. * * The source code contained or described herein and all documents related to * the source code ("Material") are owned by Intel Corporation or its suppliers * or licensors. Title to the Material remains with Intel Corporation or its * suppliers and licensors. The Material contains trade secrets and proprietary * and confidential information of Intel or its suppliers and licensors. The * Material is protected by worldwide copyright and trade secret laws and * treaty provisions. No part of the Material may be used, copied, reproduced, * modified, published, uploaded, posted, transmitted, distributed, or * disclosed in any way without Intel’s prior express written permission. * * No license under any patent, copyright, trade secret or other intellectual * property right is granted to or conferred upon you by disclosure or delivery * of the Materials, either expressly, by implication, inducement, estoppel or * otherwise. Any license under such intellectual property rights must be * express and approved by Intel in writing. * * AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com) * CREATED: 2011-06-01 * UPDATED: 2011-07-27 * * * */ #pragma once #include #include #include #include "XmlSink.h" #include "XmlSource.h" #include "PathNavigator.h" using namespace std; class CXmlElementSerializingContext; class CErrorContext; class CElement : public IXmlSink, public IXmlSource { friend class CAutoLog; public: CElement(const string& strName = ""); virtual ~CElement(); // Logging void log(const string& strMessage, ...) const; // Description void setDescription(const string& strDescription); const string& getDescription() const; // Name / Path const string& getName() const; bool rename(const string& strName, string& strError); string getPath() const; string getQualifiedPath() const; // Creation / build virtual bool init(string& strError); virtual void clean(); // Children management void addChild(CElement* pChild); bool removeChild(CElement* pChild); void listChildren(string& strChildList) const; string listQualifiedPaths(bool bDive, uint32_t uiLevel = 0) const; void listChildrenPaths(string& strChildPathList) const; // Hierarchy query uint32_t getNbChildren() const; CElement* findChildOfKind(const string& strKind); const CElement* findChildOfKind(const string& strKind) const; const CElement* getParent() const; const CElement* getChild(uint32_t uiIndex) const; CElement* getChild(uint32_t uiIndex); const CElement* findChild(const string& strName) const; CElement* findChild(const string& strName); const CElement* findDescendant(CPathNavigator& pathNavigator) const; CElement* findDescendant(CPathNavigator& pathNavigator); bool isDescendantOf(const CElement* pCandidateAscendant) const; // From IXmlSink virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext); // From IXmlSource virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const; // Content structure dump void dumpContent(string& strContent, CErrorContext& errorContext, const uint32_t uiDepth = 0) const; // Element properties virtual void showProperties(string& strResult) const; // Conversion utilities static string toString(uint32_t uiValue); static string toString(int32_t iValue); // Checksum for integrity checks uint8_t computeStructureChecksum() const; // Class kind virtual string getKind() const = 0; protected: // Content dumping virtual void logValue(string& strValue, CErrorContext& errorContext) const; // Name setting void setName(const string& strName); // Utility to underline static void appendTitle(string& strTo, const string& strTitle); // Hierarchy CElement* getLastChild(); CElement* getParent(); CElement* findAscendantOfKind(const string& strKind); CElement* getRoot(); const CElement* getRoot() const; private: // Logging (done by root) virtual void doLog(const string& strLog) const; virtual void nestLog() const; virtual void unnestLog() const; // Returns Name or Kind if no Name string getPathName() const; // Returns true if children dynamic creation is to be dealt with virtual bool childrenAreDynamic() const; // House keeping void removeChildren(); // For logging uint32_t getDepth() const; // Fill XmlElement during XML composing void setXmlNameAttribute(CXmlElement& xmlElement) const; // Name string _strName; // Description string _strDescription; // Child iterators typedef vector::iterator ChildArrayIterator; typedef vector::reverse_iterator ChildArrayReverseIterator; // Children vector _childArray; // Parent CElement* _pParent; };