1b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner/* 29368eea42a1afb01dd44110582f997115b50e742François Gaffie * Copyright (c) 2011-2015, Intel Corporation 3b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * All rights reserved. 4b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 5b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * Redistribution and use in source and binary forms, with or without modification, 6b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * are permitted provided that the following conditions are met: 7b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 8b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 1. Redistributions of source code must retain the above copyright notice, this 9b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * list of conditions and the following disclaimer. 10b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 11b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 2. Redistributions in binary form must reproduce the above copyright notice, 12b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * this list of conditions and the following disclaimer in the documentation and/or 13b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * other materials provided with the distribution. 14b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 15b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 3. Neither the name of the copyright holder nor the names of its contributors 16b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * may be used to endorse or promote products derived from this software without 17b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * specific prior written permission. 18b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * 19b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 20b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR 23b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 26b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28b76c9d6de717a9a1cfd94e7a8eca7ee4a2035cd7David Wagner * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2968a912857707864bbaaff9808717813105072a6ePatrick Benavoli */ 3068a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include "Element.h" 317f26582e6a732524231af95aefab829c9f0b92d2Kevin Rocard#include "XmlElementSerializingContext.h" 327f26582e6a732524231af95aefab829c9f0b92d2Kevin Rocard#include "ElementLibrary.h" 339368eea42a1afb01dd44110582f997115b50e742François Gaffie#include "ErrorContext.hpp" 349368eea42a1afb01dd44110582f997115b50e742François Gaffie#include <algorithm> 3568a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <assert.h> 3668a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <stdio.h> 3768a912857707864bbaaff9808717813105072a6ePatrick Benavoli#include <stdarg.h> 382aab8716b2302c196349326a228e82b881d5fde3Guillaume Denneulin#include <stdlib.h> 3968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 40d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalveusing std::string; 41d9526499d6ab53b7d13d1434f748f6f2161c2e0aSebastien Gonzalve 42a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Triviconst std::string CElement::gDescriptionPropertyName = "Description"; 43a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi 449368eea42a1afb01dd44110582f997115b50e742François GaffieCElement::CElement(const string &strName) : _strName(strName) 4568a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 4768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4868a912857707864bbaaff9808717813105072a6ePatrick BenavoliCElement::~CElement() 4968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 5068a912857707864bbaaff9808717813105072a6ePatrick Benavoli removeChildren(); 5168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 5268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 539368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::setDescription(const string &strDescription) 5468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 5568a912857707864bbaaff9808717813105072a6ePatrick Benavoli _strDescription = strDescription; 5668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 5768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 589368eea42a1afb01dd44110582f997115b50e742François Gaffieconst string &CElement::getDescription() const 5968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 6068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _strDescription; 6168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 6268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 6368a912857707864bbaaff9808717813105072a6ePatrick Benavolibool CElement::childrenAreDynamic() const 6468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 6568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // By default, children are searched and not created during xml parsing 6668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 6768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 6868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 699368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CElement::init(string &strError) 7068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 7168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 729368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *child : _childArray) { 7368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 749368eea42a1afb01dd44110582f997115b50e742François Gaffie if (!child->init(strError)) { 7568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 7668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 7768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 7868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 7968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 8068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 8168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 8268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 839368eea42a1afb01dd44110582f997115b50e742François Gaffiestring CElement::dumpContent(utility::ErrorContext &errorContext, const size_t depth) const 8468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 859368eea42a1afb01dd44110582f997115b50e742François Gaffie string output; 8668a912857707864bbaaff9808717813105072a6ePatrick Benavoli string strIndent; 8768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 8868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Level 899368eea42a1afb01dd44110582f997115b50e742François Gaffie size_t indents = depth; 9068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 919368eea42a1afb01dd44110582f997115b50e742François Gaffie while (indents--) { 9268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 9368a912857707864bbaaff9808717813105072a6ePatrick Benavoli strIndent += " "; 9468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 9568a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Type 969368eea42a1afb01dd44110582f997115b50e742François Gaffie output += strIndent + "- " + getKind(); 9768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 9868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Name 9968a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!_strName.empty()) { 10068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1019368eea42a1afb01dd44110582f997115b50e742François Gaffie output += ": " + getName(); 10268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 10368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 10468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Value 1059368eea42a1afb01dd44110582f997115b50e742François Gaffie string strValue = logValue(errorContext); 10668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 10768a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!strValue.empty()) { 10868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1099368eea42a1afb01dd44110582f997115b50e742François Gaffie output += " = " + strValue; 11068a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 11168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1129368eea42a1afb01dd44110582f997115b50e742François Gaffie output += "\n"; 11368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1149368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 11568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1169368eea42a1afb01dd44110582f997115b50e742François Gaffie output += pChild->dumpContent(errorContext, depth + 1); 11768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 1189368eea42a1afb01dd44110582f997115b50e742François Gaffie 1199368eea42a1afb01dd44110582f997115b50e742François Gaffie return output; 12068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 12168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1222ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli// Element properties 1239368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::showProperties(string &strResult) const 1242ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli{ 1252ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli strResult += "Kind: " + getKind() + "\n"; 126a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi showDescriptionProperty(strResult); 1272ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli} 1282ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli 129a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivivoid CElement::showDescriptionProperty(std::string &strResult) const 1302ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli{ 131a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi if (!getDescription().empty()) { 132a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi strResult += gDescriptionPropertyName + ": " + getDescription() + "\n"; 133a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi } 134ee65e6d992e5fd7c81f62ced1cbed532989c09f7Patrick Benavoli} 135ee65e6d992e5fd7c81f62ced1cbed532989c09f7Patrick Benavoli 1362ecf900ad8c30ce9f8e81f57977a1a80a6f6d8afPatrick Benavoli// Content dumping 1379368eea42a1afb01dd44110582f997115b50e742François Gaffiestring CElement::logValue(utility::ErrorContext & /*ctx*/) const 13868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 1399368eea42a1afb01dd44110582f997115b50e742François Gaffie return ""; 14068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 14168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 14268a912857707864bbaaff9808717813105072a6ePatrick Benavoli// From IXmlSink 1439368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CElement::fromXml(const CXmlElement &xmlElement, CXmlSerializingContext &serializingContext) 14468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 1459368eea42a1afb01dd44110582f997115b50e742François Gaffie xmlElement.getAttribute(gDescriptionPropertyName, _strDescription); 146a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi 14768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Propagate through children 14868a912857707864bbaaff9808717813105072a6ePatrick Benavoli CXmlElement::CChildIterator childIterator(xmlElement); 14968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15068a912857707864bbaaff9808717813105072a6ePatrick Benavoli CXmlElement childElement; 15168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15268a912857707864bbaaff9808717813105072a6ePatrick Benavoli while (childIterator.next(childElement)) { 15368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1549368eea42a1afb01dd44110582f997115b50e742François Gaffie CElement *pChild; 15568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15668a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!childrenAreDynamic()) { 15768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 15868a912857707864bbaaff9808717813105072a6ePatrick Benavoli pChild = findChildOfKind(childElement.getType()); 15968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 16068a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pChild) { 16168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1629368eea42a1afb01dd44110582f997115b50e742François Gaffie serializingContext.setError("Unable to handle XML element: " + 1639368eea42a1afb01dd44110582f997115b50e742François Gaffie childElement.getPath()); 16468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 16568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 16668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 16768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 16868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } else { 16968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Child needs creation 1703ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin pChild = createChild(childElement, serializingContext); 17168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1723ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin if (!pChild) { 17368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 17468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 17568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 17668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 17768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 17868a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Dig 1799368eea42a1afb01dd44110582f997115b50e742François Gaffie if (!pChild->fromXml(childElement, serializingContext)) { 18068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 18168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 18268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 18368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 18468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 18568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 18668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 18768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1889368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::childrenToXml(CXmlElement &xmlElement, 1899368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlSerializingContext &serializingContext) const 19068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 19168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Browse children and propagate 1929368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 19368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 19468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Create corresponding child element 19568a912857707864bbaaff9808717813105072a6ePatrick Benavoli CXmlElement xmlChildElement; 19668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 1979368eea42a1afb01dd44110582f997115b50e742François Gaffie xmlElement.createChild(xmlChildElement, pChild->getXmlElementName()); 19868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 19968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Propagate 20068a912857707864bbaaff9808717813105072a6ePatrick Benavoli pChild->toXml(xmlChildElement, serializingContext); 20168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 20268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 20368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2049368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::toXml(CXmlElement &xmlElement, CXmlSerializingContext &serializingContext) const 2058cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner{ 2068cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner setXmlNameAttribute(xmlElement); 207a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi setXmlDescriptionAttribute(xmlElement); 2088cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner childrenToXml(xmlElement, serializingContext); 2098cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner} 2108cb5d8815da673747b729d5e0a05a5cdc11a9081David Wagner 2119368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::setXmlDescriptionAttribute(CXmlElement &xmlElement) const 212a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi{ 213a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi const string &description = getDescription(); 214a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi if (!description.empty()) { 2159368eea42a1afb01dd44110582f997115b50e742François Gaffie xmlElement.setAttribute(gDescriptionPropertyName, description); 216a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi } 217a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi} 218a9be2d378b7ad84e679a48efa81f42fb54f85d9aJean-Michel Trivi 2199368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::setXmlNameAttribute(CXmlElement &xmlElement) const 22068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 22168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // By default, set Name attribute if any 22268a912857707864bbaaff9808717813105072a6ePatrick Benavoli string strName = getName(); 22368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 22468a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!strName.empty()) { 22568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 22668a912857707864bbaaff9808717813105072a6ePatrick Benavoli xmlElement.setNameAttribute(strName); 22768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 22868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 22968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 23068a912857707864bbaaff9808717813105072a6ePatrick Benavoli// Name 2319368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::setName(const string &strName) 23268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 23368a912857707864bbaaff9808717813105072a6ePatrick Benavoli _strName = strName; 23468a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 23568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2369368eea42a1afb01dd44110582f997115b50e742François Gaffieconst string &CElement::getName() const 23768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 23868a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _strName; 23968a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 24068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2419368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CElement::rename(const string &strName, string &strError) 24268a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 24368a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Check for conflict with brotherhood if relevant 24468a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (_pParent && _pParent->childrenAreDynamic()) { 24568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2469368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pParentChild : _pParent->_childArray) { 24768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 24868a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (pParentChild != this && pParentChild->getName() == strName) { 24968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 25068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Conflict 25168a912857707864bbaaff9808717813105072a6ePatrick Benavoli strError = "Name conflicts with brother element"; 25268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 25368a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 25468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 25568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 25668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 25768a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Change name 25868a912857707864bbaaff9808717813105072a6ePatrick Benavoli setName(strName); 25968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 26168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 26268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26368a912857707864bbaaff9808717813105072a6ePatrick Benavolistring CElement::getPathName() const 26468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 26568a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!_strName.empty()) { 26668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 26768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _strName; 26868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } else { 26968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 27068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return getKind(); 27168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 27268a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 27368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2746ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli// Hierarchy 2759368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::addChild(CElement *pChild) 27668a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 27768a912857707864bbaaff9808717813105072a6ePatrick Benavoli _childArray.push_back(pChild); 27868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 27968a912857707864bbaaff9808717813105072a6ePatrick Benavoli pChild->_pParent = this; 28068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 28168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2829368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::getChild(size_t index) 28368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 2849368eea42a1afb01dd44110582f997115b50e742François Gaffie assert(index <= _childArray.size()); 28568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2869368eea42a1afb01dd44110582f997115b50e742François Gaffie return _childArray[index]; 28768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 28868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2899368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CElement *CElement::getChild(size_t index) const 29068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 2919368eea42a1afb01dd44110582f997115b50e742François Gaffie assert(index <= _childArray.size()); 29268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2939368eea42a1afb01dd44110582f997115b50e742François Gaffie return _childArray[index]; 29468a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 29568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 2969368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::createChild(const CXmlElement &childElement, 2979368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlSerializingContext &serializingContext) 2983ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin{ 2993ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin // Context 3009368eea42a1afb01dd44110582f997115b50e742François Gaffie CXmlElementSerializingContext &elementSerializingContext = 3019368eea42a1afb01dd44110582f997115b50e742François Gaffie static_cast<CXmlElementSerializingContext &>(serializingContext); 3023ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3033ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin // Child needs creation 3049368eea42a1afb01dd44110582f997115b50e742François Gaffie CElement *pChild = elementSerializingContext.getElementLibrary()->createElement(childElement); 3053ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3063ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin if (!pChild) { 3073ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3089368eea42a1afb01dd44110582f997115b50e742François Gaffie elementSerializingContext.setError("Unable to create XML element " + 3099368eea42a1afb01dd44110582f997115b50e742François Gaffie childElement.getPath()); 3103ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3113ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin return NULL; 3123ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin } 3133ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin // Store created child! 3143ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin addChild(pChild); 3153ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3163ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin return pChild; 3173ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin} 3183ba083ee0b0ff7e01caeb3bc7395377071e20fe6Guillaume Denneulin 3199368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CElement::removeChild(CElement *pChild) 32068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 3219368eea42a1afb01dd44110582f997115b50e742François Gaffie auto childIt = find(begin(_childArray), end(_childArray), pChild); 3229368eea42a1afb01dd44110582f997115b50e742François Gaffie if (childIt != end(_childArray)) { 32368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3249368eea42a1afb01dd44110582f997115b50e742François Gaffie _childArray.erase(childIt); 3259368eea42a1afb01dd44110582f997115b50e742François Gaffie return true; 32668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 32768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 32868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 32968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3309368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::listChildren(string &strChildList) const 33168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 33268a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Get list of children names 3339368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 33468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 33568a912857707864bbaaff9808717813105072a6ePatrick Benavoli strChildList += pChild->getName() + "\n"; 33668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 33768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 33868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3399368eea42a1afb01dd44110582f997115b50e742François Gaffiestring CElement::listQualifiedPaths(bool bDive, size_t level) const 34068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 3416ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli string strResult; 3426ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli 3436ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli // Dive Will cause only leaf nodes to be printed 3449368eea42a1afb01dd44110582f997115b50e742François Gaffie if (!bDive || !getNbChildren()) { 3456ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli 3466ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli strResult = getQualifiedPath() + "\n"; 3476ba361d96bc2581667b3400f87ff89fae6449e1fPatrick Benavoli } 34868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3499368eea42a1afb01dd44110582f997115b50e742François Gaffie if (bDive || !level) { 35068a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Get list of children paths 3519368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 35268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3539368eea42a1afb01dd44110582f997115b50e742François Gaffie strResult += pChild->listQualifiedPaths(bDive, level + 1); 35468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 35568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 35668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return strResult; 35768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 35868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3599368eea42a1afb01dd44110582f997115b50e742François Gaffievoid CElement::listChildrenPaths(string &strChildList) const 36068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 36168a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Get list of children paths 3629368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 36368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 36468a912857707864bbaaff9808717813105072a6ePatrick Benavoli strChildList += pChild->getPath() + "\n"; 36568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 36668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 36768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 368911844b16c6b627f421bc3368de427de3ca9f60cPatrick Benavolisize_t CElement::getNbChildren() const 36968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 37068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _childArray.size(); 37168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 37268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3739368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CElement *CElement::getParent() const 37468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 37568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _pParent; 37668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 37768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3789368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::getParent() 37968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 38068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _pParent; 38168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 38268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 38368a912857707864bbaaff9808717813105072a6ePatrick Benavolivoid CElement::clean() 38468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 38568a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (childrenAreDynamic()) { 38668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 38768a912857707864bbaaff9808717813105072a6ePatrick Benavoli removeChildren(); 38868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } else { 38968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Just propagate 3909368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 39168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 3929368eea42a1afb01dd44110582f997115b50e742François Gaffie pChild->clean(); 39368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 39468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 39568a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 39668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 39768a912857707864bbaaff9808717813105072a6ePatrick Benavolivoid CElement::removeChildren() 39868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 39968a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Delete in reverse order 40068a912857707864bbaaff9808717813105072a6ePatrick Benavoli ChildArrayReverseIterator it; 40168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 40268a912857707864bbaaff9808717813105072a6ePatrick Benavoli for (it = _childArray.rbegin(); it != _childArray.rend(); ++it) { 40368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 40468a912857707864bbaaff9808717813105072a6ePatrick Benavoli delete *it; 40568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 40668a912857707864bbaaff9808717813105072a6ePatrick Benavoli _childArray.clear(); 40768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 40868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4099368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CElement *CElement::findDescendant(CPathNavigator &pathNavigator) const 41068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4119368eea42a1afb01dd44110582f997115b50e742François Gaffie string *pStrChildName = pathNavigator.next(); 41268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 41368a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pStrChildName) { 41468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 41568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return this; 41668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 41768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4189368eea42a1afb01dd44110582f997115b50e742François Gaffie const CElement *pChild = findChild(*pStrChildName); 41968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 42068a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pChild) { 42168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 42268a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 42368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 42468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 42568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pChild->findDescendant(pathNavigator); 42668a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 42768a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4289368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::findDescendant(CPathNavigator &pathNavigator) 42968a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4309368eea42a1afb01dd44110582f997115b50e742François Gaffie string *pStrChildName = pathNavigator.next(); 43168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 43268a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pStrChildName) { 43368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 43468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return this; 43568a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 43668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4379368eea42a1afb01dd44110582f997115b50e742François Gaffie CElement *pChild = findChild(*pStrChildName); 43868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 43968a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!pChild) { 44068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 44168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 44268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 44368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 44468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return pChild->findDescendant(pathNavigator); 44568a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 44668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4479368eea42a1afb01dd44110582f997115b50e742François Gaffiebool CElement::isDescendantOf(const CElement *pCandidateAscendant) const 44868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 44968a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (!_pParent) { 45068a912857707864bbaaff9808717813105072a6ePatrick Benavoli 45168a912857707864bbaaff9808717813105072a6ePatrick Benavoli return false; 45268a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 45368a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (_pParent == pCandidateAscendant) { 45468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 45568a912857707864bbaaff9808717813105072a6ePatrick Benavoli return true; 45668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 45768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _pParent->isDescendantOf(pCandidateAscendant); 45868a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 45968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4609368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::findChild(const string &strName) 46168a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4629368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 46368a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4649368eea42a1afb01dd44110582f997115b50e742François Gaffie if (pChild->getPathName() == strName) { 46568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4669368eea42a1afb01dd44110582f997115b50e742François Gaffie return pChild; 46768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 46868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 46968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 47068a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 47168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 47268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4739368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CElement *CElement::findChild(const string &strName) const 47468a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4759368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 47668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4779368eea42a1afb01dd44110582f997115b50e742François Gaffie if (pChild->getPathName() == strName) { 47868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4799368eea42a1afb01dd44110582f997115b50e742François Gaffie return pChild; 48068a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 48168a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 48268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 48368a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 48468a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 48568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4869368eea42a1afb01dd44110582f997115b50e742François GaffieCElement *CElement::findChildOfKind(const string &strKind) 48768a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 4889368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 48968a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4909368eea42a1afb01dd44110582f997115b50e742François Gaffie if (pChild->getKind() == strKind) { 49168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4929368eea42a1afb01dd44110582f997115b50e742François Gaffie return pChild; 49368a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 49468a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 49568a912857707864bbaaff9808717813105072a6ePatrick Benavoli 49668a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 49768a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 49868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 4999368eea42a1afb01dd44110582f997115b50e742François Gaffieconst CElement *CElement::findChildOfKind(const string &strKind) const 50068a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 5019368eea42a1afb01dd44110582f997115b50e742François Gaffie for (CElement *pChild : _childArray) { 50268a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5039368eea42a1afb01dd44110582f997115b50e742François Gaffie if (pChild->getKind() == strKind) { 50468a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5059368eea42a1afb01dd44110582f997115b50e742François Gaffie return pChild; 50668a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 50768a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 50868a912857707864bbaaff9808717813105072a6ePatrick Benavoli 50968a912857707864bbaaff9808717813105072a6ePatrick Benavoli return NULL; 51068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 51168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 51268a912857707864bbaaff9808717813105072a6ePatrick Benavolistring CElement::getPath() const 51368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 51468a912857707864bbaaff9808717813105072a6ePatrick Benavoli // Take out root element from the path 51568a912857707864bbaaff9808717813105072a6ePatrick Benavoli if (_pParent && _pParent->_pParent) { 51668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 51768a912857707864bbaaff9808717813105072a6ePatrick Benavoli return _pParent->getPath() + "/" + getPathName(); 51868a912857707864bbaaff9808717813105072a6ePatrick Benavoli } 51968a912857707864bbaaff9808717813105072a6ePatrick Benavoli return "/" + getPathName(); 52068a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 52168a912857707864bbaaff9808717813105072a6ePatrick Benavoli 52268a912857707864bbaaff9808717813105072a6ePatrick Benavolistring CElement::getQualifiedPath() const 52368a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 52468a912857707864bbaaff9808717813105072a6ePatrick Benavoli return getPath() + " [" + getKind() + "]"; 52568a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 52668a912857707864bbaaff9808717813105072a6ePatrick Benavoli 5279368eea42a1afb01dd44110582f997115b50e742François Gaffiestring CElement::getXmlElementName() const 52868a912857707864bbaaff9808717813105072a6ePatrick Benavoli{ 5299368eea42a1afb01dd44110582f997115b50e742François Gaffie // Default to element kind 5309368eea42a1afb01dd44110582f997115b50e742François Gaffie return getKind(); 53168a912857707864bbaaff9808717813105072a6ePatrick Benavoli} 532