PFW: Add setDomainsXML command to import domains from string

BZ: 55694

Unable possibility to import the configurable domains from a string

Create one command that can be called through the command
line of the parameter-framework. The command setDomainXML
allows to import configurable domains with settings from
a string provided as first argument containing the xml description.

Change-Id: I6db7ccb8ba61b5e4c8ba81579a68f40e887d1534
Signed-off-by: Georges-Henri Baron <georges-henrix.baron@intel.com>
Reviewed-on: http://android.intel.com:8080/65408
Reviewed-by: cactus <cactus@intel.com>
Reviewed-by: Dixon, CharlesX <charlesx.dixon@intel.com>
Reviewed-by: Rocard, KevinX <kevinx.rocard@intel.com>
Tested-by: Dixon, CharlesX <charlesx.dixon@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/xmlserializer/XmlDocSource.h b/xmlserializer/XmlDocSource.h
index a59919e..1953425 100644
--- a/xmlserializer/XmlDocSource.h
+++ b/xmlserializer/XmlDocSource.h
@@ -1,6 +1,6 @@
 /*
  * INTEL CONFIDENTIAL
- * Copyright © 2011 Intel
+ * Copyright © 2013 Intel
  * Corporation All Rights Reserved.
  *
  * The source code contained or described herein and all documents related to
@@ -18,44 +18,175 @@
  * 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.
- *
- * CREATED: 2012-08-10
  */
 
 #pragma once
-
 #include "XmlElement.h"
 #include "XmlSerializingContext.h"
+#include <string>
 
 struct _xmlDoc;
 struct _xmlNode;
+struct _xmlError;
 
+/**
+  * The CXmlDocSource is used by CXmlDocSink.
+  * The interaction between the xml source and xml sink is defined
+  * in the process method of CXmlDocSink. One can subclass CXmlDocSource
+  * for different purposes by implementing the populate method and then
+  * use it with any existing implementation of CXmlDocSink.
+  */
 class CXmlDocSource
 {
 public:
+    /**
+      * Constructor
+      *
+      * @param[out] pDoc a pointer to the xml document that will be filled by the class
+      * @param[in] pRootNode a pointer to the root element of the document.
+      */
     CXmlDocSource(_xmlDoc* pDoc, _xmlNode* pRootNode = NULL);
+
+    /**
+      * Constructor
+      *
+      * @param[out] pDoc a pointer to the xml document that will be filled by the class
+      * @param[in] strXmlSchemaFile a string containing the path to the schema file
+      * @param[in] strRootElementType a string containing the root element type
+      * @param[in] strRootElementName a string containing the root element name
+      * @param[in] strNameAttributeName a string containing the name of the root name attribute
+      */
+    CXmlDocSource(_xmlDoc* pDoc,
+                           const string& strXmlSchemaFile,
+                           const string& strRootElementType,
+                           const string& strRootElementName,
+                           const string& strNameAttrituteName);
+
+    /**
+      * Constructor
+      *
+      * @param[out] pDoc a pointer to the xml document that will be filled by the class
+      * @param[in] strXmlSchemaFile a string containing the path to the schema file
+      * @param[in] strRootElementType a string containing the root element type
+      */
+    CXmlDocSource(_xmlDoc* pDoc, const string& strXmlSchemaFile, const string& strRootElementType);
+
+    /**
+      * Destructor
+      */
     virtual ~CXmlDocSource();
 
-    // Method Called by the CXmlDocSink::process method
+    /**
+      * Method called by the CXmlDocSink::process method.
+      *
+      * @param[out] serializingContext is used as error output
+      *
+      * @return false if there are any error
+      */
     virtual bool populate(CXmlSerializingContext& serializingContext) = 0;
 
-    // Root element
+    /**
+      * Method that returns the root element of the Xml tree.
+      *
+      * @param[out] xmlRootElement a reference to the CXmleElement destination
+      */
     void getRootElement(CXmlElement& xmlRootElement) const;
+
+    /**
+      * Getter method.
+      *
+      * @return the root element's name
+      */
     string getRootElementName() const;
+
+    /**
+      * Getter method.
+      * Method that returns the root element's attribute with name matching strAttributeName.
+      *
+      * @param[in] strAttributeName is a string used to find the corresponding attribute
+      *
+      * @return the value of the root's attribute named as strAttributeName
+      */
     string getRootElementAttributeString(const string& strAttributeName) const;
 
-    // Method that returns the xmlDoc contained in the Source. (Can be used in a Doc Sink)
+    /**
+      * Getter method.
+      * Method that returns the xmlDoc contained in the Source.
+      * (Can be used in a Doc Sink)
+      *
+      * @return the document _pDoc
+      */
     _xmlDoc* getDoc() const;
 
+    /**
+      * Method that validates the Xml doc contained in pDoc
+      *
+      * @param[out] serializingContext is used as error output
+      *
+      * @return false if any error occurs
+      */
+    virtual bool validate(CXmlSerializingContext& serializingContext);
+
 
 protected:
 
-    // Doc
+    /**
+      * Doc
+      */
     _xmlDoc* _pDoc;
 
-    // Root node
+    /**
+      * Root node
+      */
     _xmlNode* _pRootNode;
 
-    // libxml2 library cleanup
+    /**
+      * libxml2 library cleanup
+      */
     static bool _bLibXml2CleanupScheduled;
+
+private:
+
+    /**
+      * Method that initializes class internal attributes in constructor
+      */
+    void init();
+
+    /** Method that check the validity of the document with the xsd file.
+      *
+      * @return true if document is valid, false if any error occures
+      */
+    bool isInstanceDocumentValid();
+
+    /** Validity error display method
+      *
+      * @param[in] pUserData pointer to the data to validate
+      * @param[out] pError is the xml error output
+      */
+    static void schemaValidityStructuredErrorFunc(void* pUserData, _xmlError* pError);
+
+    /**
+      * Schema file
+      */
+    string _strXmlSchemaFile;
+
+    /**
+      * Element type info
+      */
+    string _strRootElementType;
+
+    /**
+      * Element name info
+      */
+    string _strRootElementName;
+
+    /**
+      * Element name attribute info
+      */
+    string _strNameAttrituteName;
+
+    /**
+      * Boolean that enables the root element name attribute check
+      */
+    bool _bNameCheck;
 };