aboutsummaryrefslogtreecommitdiffstats
path: root/parameter
diff options
context:
space:
mode:
authorDavid Wagner <david.wagner@intel.com>2014-12-09 15:26:06 +0100
committerDavid Wagner <david.wagner@intel.com>2015-01-22 11:53:51 +0100
commit8cb5d8815da673747b729d5e0a05a5cdc11a9081 (patch)
tree515424632d44e6f650a8eccab18c93c4730a05af /parameter
parent1404cf730742a1adb0359bbc8c0ff79f216c4cb6 (diff)
downloadexternal_parameter-framework-8cb5d8815da673747b729d5e0a05a5cdc11a9081.zip
external_parameter-framework-8cb5d8815da673747b729d5e0a05a5cdc11a9081.tar.gz
external_parameter-framework-8cb5d8815da673747b729d5e0a05a5cdc11a9081.tar.bz2
Allow more flexibility in overriding CElement::toXml
The toXml method has a default implementation that recursively calls toXml on the children and set their "Name" attribute. With this approach, the toplevel element's name isn't set unless its overrided implementation explicitly does so. A first approach for fixing that is to set the XmlElement's name and recursively call toXml on children (without setting their name because it will be done by their toXml method). However, the "CXmlElement" being created may or may not be the object on which the toXml method is called, in which case the name will be set on the wrong XmlElement. Instead, in CElement::toXml, we set the XmlElement's name and call a new virtual method, childrenToXml which only recursively call toXml on children. This gives full flexibility to elements to choose how they want to serialize themselves and how they want to serialize their children. CConfigurableDomain::toXml is modified to take that change into account. Change-Id: Id12a1023e91cb000e55c242c13643b1db7d46871 Signed-off-by: David Wagner <david.wagner@intel.com>
Diffstat (limited to 'parameter')
-rw-r--r--parameter/ConfigurableDomain.cpp8
-rw-r--r--parameter/ConfigurableDomain.h2
-rw-r--r--parameter/ConfigurableDomains.cpp2
-rwxr-xr-xparameter/Element.cpp14
-rw-r--r--parameter/Element.h14
5 files changed, 32 insertions, 8 deletions
diff --git a/parameter/ConfigurableDomain.cpp b/parameter/ConfigurableDomain.cpp
index 61a8d5b..f81baec 100644
--- a/parameter/ConfigurableDomain.cpp
+++ b/parameter/ConfigurableDomain.cpp
@@ -111,9 +111,15 @@ bool CConfigurableDomain::getSequenceAwareness() const
// From IXmlSource
void CConfigurableDomain::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
{
+ base::toXml(xmlElement, serializingContext);
+
// Sequence awareness
xmlElement.setAttributeBoolean("SequenceAware", _bSequenceAware);
+}
+void CConfigurableDomain::childrenToXml(CXmlElement& xmlElement,
+ CXmlSerializingContext& serializingContext) const
+{
// Configurations
composeDomainConfigurations(xmlElement, serializingContext);
@@ -133,7 +139,7 @@ void CConfigurableDomain::composeDomainConfigurations(CXmlElement& xmlElement, C
xmlElement.createChild(xmlConfigurationsElement, "Configurations");
// Delegate to base
- base::toXml(xmlConfigurationsElement, serializingContext);
+ base::childrenToXml(xmlConfigurationsElement, serializingContext);
}
void CConfigurableDomain::composeConfigurableElements(CXmlElement& xmlElement) const
diff --git a/parameter/ConfigurableDomain.h b/parameter/ConfigurableDomain.h
index e91a5cb..a7cbf73 100644
--- a/parameter/ConfigurableDomain.h
+++ b/parameter/ConfigurableDomain.h
@@ -103,6 +103,8 @@ public:
// From IXmlSource
virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+ virtual void childrenToXml(CXmlElement& xmlElement,
+ CXmlSerializingContext& serializingContext) const;
// Class kind
virtual std::string getKind() const;
diff --git a/parameter/ConfigurableDomains.cpp b/parameter/ConfigurableDomains.cpp
index f11a155..dd7ede3 100644
--- a/parameter/ConfigurableDomains.cpp
+++ b/parameter/ConfigurableDomains.cpp
@@ -104,7 +104,7 @@ void CConfigurableDomains::toXml(CXmlElement& xmlElement, CXmlSerializingContext
// Set attribute
xmlElement.setAttributeString("SystemClassName", getName());
- base::toXml(xmlElement, serializingContext);
+ base::childrenToXml(xmlElement, serializingContext);
}
// Configuration/Domains handling
diff --git a/parameter/Element.cpp b/parameter/Element.cpp
index 2c8393d..4ccf149 100755
--- a/parameter/Element.cpp
+++ b/parameter/Element.cpp
@@ -292,8 +292,8 @@ bool CElement::fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& se
return true;
}
-// From IXmlSource
-void CElement::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+void CElement::childrenToXml(CXmlElement& xmlElement,
+ CXmlSerializingContext& serializingContext) const
{
// Browse children and propagate
uint32_t uiNbChildren = getNbChildren();
@@ -308,15 +308,17 @@ void CElement::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializin
xmlElement.createChild(xmlChildElement, pChild->getKind());
- // Set attributes
- pChild->setXmlNameAttribute(xmlChildElement);
-
-
// Propagate
pChild->toXml(xmlChildElement, serializingContext);
}
}
+void CElement::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ setXmlNameAttribute(xmlElement);
+ childrenToXml(xmlElement, serializingContext);
+}
+
void CElement::setXmlNameAttribute(CXmlElement& xmlElement) const
{
// By default, set Name attribute if any
diff --git a/parameter/Element.h b/parameter/Element.h
index 8469ab6..4636dbd 100644
--- a/parameter/Element.h
+++ b/parameter/Element.h
@@ -94,6 +94,20 @@ public:
// From IXmlSource
virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+ /**
+ * Serialize the children to XML
+ *
+ * This method is virtual, to be derived in case a special treatment is
+ * needed before doing so.
+ *
+ * @param[in,out] xmlElement the XML Element below which the children must
+ * be serialized (which may or may not be the CElement
+ * object upon which this method is called)
+ * @param[in,out] serializingContext information about the serialization
+ */
+ virtual void childrenToXml(CXmlElement& xmlElement,
+ CXmlSerializingContext& serializingContext) const;
+
// Content structure dump
void dumpContent(std::string& strContent, CErrorContext& errorContext, const uint32_t uiDepth = 0) const;