PFW: Add two commands to print xml settings and structure
BZ: 44910
Creates two commands that can be called through the command
line of the parameter-framework. First command getDomainXML
returns a string containing the xml structure of the
domains, configurations and settings. Second command
getSystemClassXML returns a string containing the xml
structure of all the instantiated parameter with their
attributes.
Change-Id: I9a35333802049a2177b8fc416754fdb67e6efff0
Signed-off-by: Georges-Henri Baron <georges-henrix.baron@intel.com>
Reviewed-on: http://android.intel.com:8080/55155
Reviewed-by: Rocard, KevinX <kevinx.rocard@intel.com>
Reviewed-by: Centelles, Sylvain <sylvain.centelles@intel.com>
Tested-by: Mendi, EduardoX <eduardox.mendi@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/parameter/BaseParameter.cpp b/parameter/BaseParameter.cpp
index caa9daa..7ca96a7 100644
--- a/parameter/BaseParameter.cpp
+++ b/parameter/BaseParameter.cpp
@@ -218,3 +218,10 @@
return accessAsString(strValue, bSet, parameterAccessContext);
}
+
+void CBaseParameter::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+
+ // Delegate to type element
+ getTypeElement()->toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/BaseParameter.h b/parameter/BaseParameter.h
index a9dc0e5..80636cb 100644
--- a/parameter/BaseParameter.h
+++ b/parameter/BaseParameter.h
@@ -64,6 +64,9 @@
bool accessAsString(string& strValue, bool bSet, CParameterAccessContext& parameterAccessContext) const;
virtual bool accessAsStringArray(vector<string>& astrValues, bool bSet, CParameterAccessContext& parameterAccessContext) const;
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
protected:
// Parameter Access
virtual bool accessValue(CPathNavigator& pathNavigator, string& strValue, bool bSet, CParameterAccessContext& parameterAccessContext) const;
diff --git a/parameter/BitParameterBlockType.cpp b/parameter/BitParameterBlockType.cpp
index f89651a..e219553 100644
--- a/parameter/BitParameterBlockType.cpp
+++ b/parameter/BitParameterBlockType.cpp
@@ -62,3 +62,12 @@
{
return new CBitParameterBlock(getName(), this);
}
+
+// From IXmlSource
+void CBitParameterBlockType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Size
+ xmlElement.setAttributeString("Size", toString(_uiSize * 8));
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/BitParameterBlockType.h b/parameter/BitParameterBlockType.h
index c074f43..36845ff 100644
--- a/parameter/BitParameterBlockType.h
+++ b/parameter/BitParameterBlockType.h
@@ -37,6 +37,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// CElement
virtual string getKind() const;
private:
diff --git a/parameter/BitParameterType.cpp b/parameter/BitParameterType.cpp
index 83865dc..6c5a90f 100644
--- a/parameter/BitParameterType.cpp
+++ b/parameter/BitParameterType.cpp
@@ -233,3 +233,19 @@
return true;
}
+
+// From IXmlSource
+void CBitParameterType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Position
+ xmlElement.setAttributeString("Pos", toString(_uiBitPos));
+
+ // Size
+ xmlElement.setAttributeString("Size", toString(_uiBitSize));
+
+ // Maximum
+ xmlElement.setAttributeString("Max", toString(_uiMax));
+
+ base::toXml(xmlElement, serializingContext);
+
+}
diff --git a/parameter/BitParameterType.h b/parameter/BitParameterType.h
index fcf96c2..08201da 100644
--- a/parameter/BitParameterType.h
+++ b/parameter/BitParameterType.h
@@ -38,6 +38,8 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
/// Conversion
// String
bool toBlackboard(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const;
diff --git a/parameter/EnumParameterType.cpp b/parameter/EnumParameterType.cpp
index c89aaf4..dcdbfaa 100644
--- a/parameter/EnumParameterType.cpp
+++ b/parameter/EnumParameterType.cpp
@@ -333,3 +333,11 @@
return false;
}
+// From IXmlSource
+void CEnumParameterType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Size
+ xmlElement.setAttributeString("Size", toString(getSize() * 8));
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/EnumParameterType.h b/parameter/EnumParameterType.h
index 3e4c3a2..ea5f857 100644
--- a/parameter/EnumParameterType.h
+++ b/parameter/EnumParameterType.h
@@ -36,6 +36,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
/// Conversion
// String
virtual bool toBlackboard(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const;
diff --git a/parameter/EnumValuePair.cpp b/parameter/EnumValuePair.cpp
index 1a03134..49ee017 100644
--- a/parameter/EnumValuePair.cpp
+++ b/parameter/EnumValuePair.cpp
@@ -67,3 +67,15 @@
// Convert value
strValue = getNumericalAsString();
}
+
+// From IXmlSource
+void CEnumValuePair::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Literal
+ xmlElement.setAttributeString("Literal", this->getName());
+
+ // Numerical
+ xmlElement.setAttributeString("Numerical", getNumericalAsString());
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/EnumValuePair.h b/parameter/EnumValuePair.h
index a9e8245..84c755e 100644
--- a/parameter/EnumValuePair.h
+++ b/parameter/EnumValuePair.h
@@ -38,6 +38,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// CElement
virtual string getKind() const;
protected:
diff --git a/parameter/FixedPointParameterType.cpp b/parameter/FixedPointParameterType.cpp
index aa93ac2..3c9e20f 100644
--- a/parameter/FixedPointParameterType.cpp
+++ b/parameter/FixedPointParameterType.cpp
@@ -340,3 +340,18 @@
// Convert
return (double)iValue / (1UL << _uiFractional);
}
+
+// From IXmlSource
+void CFixedPointParameterType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Size
+ xmlElement.setAttributeString("Size", toString(getSize() * 8));
+
+ // Integral
+ xmlElement.setAttributeString("Integral", toString(_uiIntegral));
+
+ // Fractional
+ xmlElement.setAttributeString("Fractional", toString(_uiFractional));
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/FixedPointParameterType.h b/parameter/FixedPointParameterType.h
index 30922a0..617f121 100644
--- a/parameter/FixedPointParameterType.h
+++ b/parameter/FixedPointParameterType.h
@@ -34,6 +34,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// XML Serialization value space handling
// Value space handling for configuration import
virtual void handleValueSpaceAttribute(CXmlElement& xmlConfigurableElementSettingsElement, CConfigurationAccessContext& configurationAccessContext) const;
diff --git a/parameter/IntegerParameterType.cpp b/parameter/IntegerParameterType.cpp
index 8fadf27..b6784d9 100644
--- a/parameter/IntegerParameterType.cpp
+++ b/parameter/IntegerParameterType.cpp
@@ -428,3 +428,33 @@
{
return static_cast<const CParameterAdaptation*>(findChildOfKind("Adaptation"));
}
+
+// From IXmlSource
+void CIntegerParameterType::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Sign
+ xmlElement.setAttributeBoolean("Signed", _bSigned);
+
+ if (_bSigned) {
+
+ // Mininmum
+ xmlElement.setAttributeString("Min", toString((int32_t)_uiMin));
+
+ // Maximum
+ xmlElement.setAttributeString("Max", toString((int32_t)_uiMax));
+
+ } else {
+
+ // Minimum
+ xmlElement.setAttributeString("Min", toString(_uiMin));
+
+ // Maximum
+ xmlElement.setAttributeString("Max", toString(_uiMax));
+ }
+
+ // Size
+ xmlElement.setAttributeString("Size", toString(getSize() * 8));
+
+ base::toXml(xmlElement, serializingContext);
+
+}
diff --git a/parameter/IntegerParameterType.h b/parameter/IntegerParameterType.h
index b29f0ac..9fb0dfd 100644
--- a/parameter/IntegerParameterType.h
+++ b/parameter/IntegerParameterType.h
@@ -36,6 +36,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
/// Conversion
// String
virtual bool toBlackboard(const string& strValue, uint32_t& uiValue, CParameterAccessContext& parameterAccessContext) const;
diff --git a/parameter/ParameterMgr.cpp b/parameter/ParameterMgr.cpp
index ddce610..9f1d160 100644
--- a/parameter/ParameterMgr.cpp
+++ b/parameter/ParameterMgr.cpp
@@ -23,7 +23,6 @@
* UPDATED: 2011-07-27
*/
#include "ParameterMgr.h"
-#include "XmlParser.h"
#include "XmlParameterSerializingContext.h"
#include "XmlElementSerializingContext.h"
#include "SystemClass.h"
@@ -54,7 +53,6 @@
#include "ConfigurableDomains.h"
#include "ConfigurableDomain.h"
#include "DomainConfiguration.h"
-#include "XmlComposer.h"
#include "XmlDomainSerializingContext.h"
#include "BitParameterBlockType.h"
#include "BitParameterType.h"
@@ -74,6 +72,11 @@
#include "ParameterHandle.h"
#include "LinearParameterAdaptation.h"
#include "EnumValuePair.h"
+#include "XmlFileDocSink.h"
+#include "XmlFileDocSource.h"
+#include "XmlStringDocSink.h"
+#include "XmlMemoryDocSink.h"
+#include "XmlMemoryDocSource.h"
#define base CElement
@@ -166,7 +169,10 @@
{ "exportDomainsWithSettingsXML", &CParameterMgr::exportConfigurableDomainsWithSettingsToXMLCommmandProcess, 1, "<file path> ", "Export domains including settings to XML file" },
{ "importDomainsWithSettingsXML", &CParameterMgr::importConfigurableDomainsWithSettingsFromXMLCommmandProcess, 1, "<file path>", "Import domains including settings from XML file" },
{ "exportSettings", &CParameterMgr::exportSettingsCommmandProcess, 1, "<file path>", "Export settings to binary file" },
- { "importSettings", &CParameterMgr::importSettingsCommmandProcess, 1, "<file path>", "Import settings from binary file" }
+ { "importSettings", &CParameterMgr::importSettingsCommmandProcess, 1, "<file path>", "Import settings from binary file" },
+ { "getDomainsXML", &CParameterMgr::getDomainsXMLCommmandProcess, 0 ,"", "Print domains including settings as XML" },
+ /// Structure Export
+ { "getSystemClassXML", &CParameterMgr::getSystemClassXMLCommmandProcess, 0 ,"", "Print parameter structure as XML" }
};
// Remote command parsers array Size
const uint32_t CParameterMgr::guiNbRemoteCommandParserItems = sizeof(gastRemoteCommandParserItems) / sizeof(gastRemoteCommandParserItems[0]);
@@ -510,43 +516,20 @@
// Get Schema file associated to root element
string strXmlSchemaFilePath = _strSchemaFolderLocation + "/" + pRootElement->getKind() + ".xsd";
- // Parse Structure XML file
- CXmlParser parser(strXmlFilePath, strXmlSchemaFilePath, pRootElement->getKind(), elementSerializingContext);
-
- if (!parser.open()) {
-
- return false;
- }
-
- // Check Root element name attribute (if any)
- string strRootElementName = parser.getRootElementAttributeString(strNameAttrituteName);
-
- if (!strRootElementName.empty() && strRootElementName != pRootElement->getName()) {
-
- elementSerializingContext.setError("Error: Wrong XML structure file " + strXmlFilePath);
- elementSerializingContext.appendLineToError(pRootElement->getKind() + " element " + pRootElement->getName() + " mismatches expected " + pRootElement->getKind() + " type " + pRootElement->getName());
-
- return false;
- }
+ CXmlFileDocSource fileDocSource(strXmlFilePath, strXmlSchemaFilePath, pRootElement->getKind(), pRootElement->getName(), strNameAttrituteName);
// Start clean
pRootElement->clean();
- // Parse
- if (!parser.parse(pRootElement)) {
+ CXmlMemoryDocSink memorySink(pRootElement);
- // Cleanup
+ if (!memorySink.process(fileDocSource, elementSerializingContext)) {
+ //Cleanup
pRootElement->clean();
return false;
}
- // Close parser
- if (!parser.close()) {
-
- return false;
- }
-
return true;
}
@@ -1274,6 +1257,32 @@
return importDomainsBinary(remoteCommand.getArgument(0), strResult) ? CCommandHandler::EDone : CCommandHandler::EFailed;
}
+/// GUI commands
+
+CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getDomainsXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+{
+ (void)remoteCommand;
+
+ if (!getDomainsXMLString(strResult, true)) {
+
+ return CCommandHandler::EFailed;
+ }
+ // Succeeded
+ return CCommandHandler::ESucceeded;
+}
+
+CParameterMgr::CCommandHandler::CommandStatus CParameterMgr::getSystemClassXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult)
+{
+ (void)remoteCommand;
+
+ if (!getSystemClassXMLString(strResult)) {
+
+ return CCommandHandler::EFailed;
+ }
+ // Succeeded
+ return CCommandHandler::ESucceeded;
+}
+
// User set/get parameters
bool CParameterMgr::accessValue(const string& strPath, string& strValue, bool bSet, string& strError)
{
@@ -1646,21 +1655,13 @@
// Output raw format
xmlDomainSerializingContext.setOutputRawFormat(_bOutputRawFormatIsHex);
- // Instantiate composer
- CXmlComposer xmlComposer(strFileName, strXmlSchemaFilePath, pConfigurableDomains->getKind(), xmlDomainSerializingContext);
+ // Use a doc source by loading data from instantiated Configurable Domains
+ CXmlMemoryDocSource memorySource(pConfigurableDomains, pConfigurableDomains->getKind(), strXmlSchemaFilePath, "parameter-framework", getVersion());
- // Open composer
- if (!xmlComposer.open()) {
+ // Use a doc sink to write the doc data in a file
+ CXmlFileDocSink fileSink(strFileName);
- return false;
- }
-
- // Compose
- xmlComposer.compose(pConfigurableDomains, "parameter-framework", getVersion());
-
- // Close composer
- if (!xmlComposer.close()) {
-
+ if (!fileSink.process(memorySource, xmlDomainSerializingContext)) {
return false;
}
@@ -1891,3 +1892,63 @@
{
return static_cast<const CConfigurableDomains*>(getChild(EConfigurableDomains));
}
+
+/// GUI commands functions
+
+bool CParameterMgr::getDomainsXMLString(string& strResult, bool bWithSettings)
+{
+
+ // Root element
+ const CConfigurableDomains* pConfigurableDomains = getConstConfigurableDomains();
+
+ // Get Schema file associated to root element
+ string strXmlSchemaFilePath = _strSchemaFolderLocation + "/" + pConfigurableDomains->getKind() + ".xsd";
+
+ string strError;
+
+ // Context
+ CXmlDomainSerializingContext xmlDomainSerializingContext(strError, bWithSettings);
+
+ // Value space
+ xmlDomainSerializingContext.setValueSpaceRaw(_bValueSpaceIsRaw);
+
+ // Output raw format
+ xmlDomainSerializingContext.setOutputRawFormat(_bOutputRawFormatIsHex);
+
+ // Use a doc source by loading data from instantiated Configurable Domains
+ CXmlMemoryDocSource memorySource(pConfigurableDomains, pConfigurableDomains->getKind(), strXmlSchemaFilePath, "parameter-framework", getVersion());
+
+ // Use a doc sink the write the doc data in a string
+ CXmlStringDocSink stringSink(strResult);
+
+ if (!stringSink.process(memorySource, xmlDomainSerializingContext)) {
+ strResult = strError;
+
+ return false;
+ }
+
+ return true;
+}
+
+bool CParameterMgr::getSystemClassXMLString(string& strResult)
+{
+ // Root element
+ const CSystemClass* pSystemClass = getSystemClass();
+
+ string strError;
+
+ CXmlSerializingContext xmlSerializingContext(strError);
+
+ // Use a doc source by loading data from instantiated Configurable Domains
+ CXmlMemoryDocSource memorySource(pSystemClass, pSystemClass->getKind());
+
+ // Use a doc sink that write the doc data in a string
+ CXmlStringDocSink stringSink(strResult);
+
+ if (!stringSink.process(memorySource, xmlSerializingContext)) {
+ strResult = strError;
+ return false;
+ }
+
+ return true;
+}
diff --git a/parameter/ParameterMgr.h b/parameter/ParameterMgr.h
index 59b4ab3..78db932 100644
--- a/parameter/ParameterMgr.h
+++ b/parameter/ParameterMgr.h
@@ -32,6 +32,8 @@
#include "Element.h"
#include <map>
#include <vector>
+#include "XmlDocSink.h"
+#include "XmlDocSource.h"
class CElementLibrarySet;
@@ -159,6 +161,10 @@
bool importDomainsBinary(const string& strFileName, string& strError);
bool exportDomainsBinary(const string& strFileName, string& strError);
+ // GUI command XML send
+ bool getDomainsXMLString(string& strResult, bool bWithSettings);
+ bool getSystemClassXMLString(string& strResult);
+
// Introspect
void logStructureContent(string& strContent) const;
@@ -242,6 +248,9 @@
CCommandHandler::CommandStatus importConfigurableDomainsWithSettingsFromXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
CCommandHandler::CommandStatus exportSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
CCommandHandler::CommandStatus importSettingsCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+ /// GUI commands
+ CCommandHandler::CommandStatus getSystemClassXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
+ CCommandHandler::CommandStatus getDomainsXMLCommmandProcess(const IRemoteCommand& remoteCommand, string& strResult);
// Max command usage length, use for formatting
void setMaxCommandUsageLength();
diff --git a/parameter/StringParameterType.cpp b/parameter/StringParameterType.cpp
index 12d3741..840528e 100644
--- a/parameter/StringParameterType.cpp
+++ b/parameter/StringParameterType.cpp
@@ -68,3 +68,12 @@
{
return _uiMaxLength;
}
+
+// From IXmlSource
+void CStringParameterType::toXml(CXmlElement &xmlElement, CXmlSerializingContext &serializingContext) const
+{
+ // MaxLength
+ xmlElement.setAttributeInteger("MaxLength", _uiMaxLength);
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/StringParameterType.h b/parameter/StringParameterType.h
index 55d96c9..8ad3d70 100644
--- a/parameter/StringParameterType.h
+++ b/parameter/StringParameterType.h
@@ -39,6 +39,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// Element properties
virtual void showProperties(string& strResult) const;
diff --git a/parameter/SystemClass.cpp b/parameter/SystemClass.cpp
index e108c05..8d6b334 100644
--- a/parameter/SystemClass.cpp
+++ b/parameter/SystemClass.cpp
@@ -237,3 +237,11 @@
return base::init(strError);
}
+// From IXmlSource
+void CSystemClass::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ // Set the name of system class
+ xmlElement.setNameAttribute(getName());
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/SystemClass.h b/parameter/SystemClass.h
index 9dbbf92..5cb86e4 100644
--- a/parameter/SystemClass.h
+++ b/parameter/SystemClass.h
@@ -45,6 +45,9 @@
virtual bool init(string& strError);
virtual string getKind() const;
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
private:
CSystemClass(const CSystemClass&);
CSystemClass& operator=(const CSystemClass&);
diff --git a/parameter/TypeElement.cpp b/parameter/TypeElement.cpp
index 4c32bc2..405dc7d 100644
--- a/parameter/TypeElement.cpp
+++ b/parameter/TypeElement.cpp
@@ -125,3 +125,14 @@
}
return _pMappingData;
}
+
+// From IXmlSource
+void CTypeElement::toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const
+{
+ if (!isScalar()) {
+
+ xmlElement.setAttributeInteger("ArrayLength", getArrayLength());
+ }
+
+ base::toXml(xmlElement, serializingContext);
+}
diff --git a/parameter/TypeElement.h b/parameter/TypeElement.h
index e8855c6..bf0b306 100644
--- a/parameter/TypeElement.h
+++ b/parameter/TypeElement.h
@@ -48,6 +48,9 @@
// From IXmlSink
virtual bool fromXml(const CXmlElement& xmlElement, CXmlSerializingContext& serializingContext);
+ // From IXmlSource
+ virtual void toXml(CXmlElement& xmlElement, CXmlSerializingContext& serializingContext) const;
+
// Scalar or Array?
bool isScalar() const;
diff --git a/parameter/XmlFileIncluderElement.cpp b/parameter/XmlFileIncluderElement.cpp
index 6e93721..89e5c14 100644
--- a/parameter/XmlFileIncluderElement.cpp
+++ b/parameter/XmlFileIncluderElement.cpp
@@ -23,7 +23,8 @@
* UPDATED: 2011-07-27
*/
#include "XmlFileIncluderElement.h"
-#include "XmlParser.h"
+#include "XmlFileDocSource.h"
+#include "XmlMemoryDocSink.h"
#include "XmlElementSerializingContext.h"
#include "ElementLibrary.h"
#include <assert.h>
@@ -52,17 +53,13 @@
// Instantiate parser
string strIncludedElementType = getIncludedElementType();
- CXmlParser parser(strPath, elementSerializingContext.getXmlSchemaPathFolder() + "/" + strIncludedElementType + ".xsd", strIncludedElementType, elementSerializingContext);
-
- if (!parser.open()) {
-
- return false;
- }
+ // Use a doc source that load data from a file
+ CXmlFileDocSource fileDocSource(strPath, elementSerializingContext.getXmlSchemaPathFolder() + "/" + strIncludedElementType + ".xsd", strIncludedElementType);
// Get top level element
CXmlElement childElement;
- parser.getRootElement(childElement);
+ fileDocSource.getRootElement(childElement);
// Create child element
CElement* pChild = elementSerializingContext.getElementLibrary()->createElement(childElement);
@@ -78,7 +75,10 @@
return false;
}
- if (!parser.parse(pChild)) {
+ // Use a doc sink that instantiate the structure from the doc source
+ CXmlMemoryDocSink memorySink(pChild);
+
+ if (!memorySink.process(fileDocSource, elementSerializingContext)) {
return false;
}