Initial Commit. The packaging still does not work properly.
[confmgr] / xmlutil.cpp
diff --git a/xmlutil.cpp b/xmlutil.cpp
new file mode 100644 (file)
index 0000000..e090c66
--- /dev/null
@@ -0,0 +1,136 @@
+#include "xmlutil.h"\r
+#include <QDebug>\r
+\r
+Xmlutil::Xmlutil(QObject *parent) :\r
+    QObject(parent)\r
+{\r
+}\r
+\r
+QDomElement Xmlutil::addElement(QDomDocument &doc, QDomNode &node,\r
+                       const QString &tag, const QString &value)\r
+{\r
+    QDomElement element = doc.createElement(tag);\r
+    node.appendChild(element);\r
+    if(!value.isNull())\r
+    {\r
+        QDomText text = doc.createTextNode(value);\r
+        element.appendChild(text);\r
+    }\r
+    return element;\r
+}\r
+\r
+/*\r
+// Unit test from main\r
+\r
+    Steps step("+4670", 1);\r
+    int error = 0;\r
+\r
+    Profile p;\r
+    p.mName = "Diva";\r
+    p.mNoOfSteps = 2;\r
+    p.mSteps.append(step);\r
+    step.setDelay(2);\r
+    step.setValue("+4788");\r
+    p.mSteps.append(step);\r
+\r
+    qDebug() << p.generateProfileXML(p, error);\r
+\r
+*/\r
+QString Xmlutil::generateProfileXML(const Profile &profile, int *error,\r
+                                    QDomDocument *doc, QDomElement *elem)\r
+{\r
+    QDomDocument *pDoc = NULL;\r
+    if(0 == doc)\r
+        pDoc = new QDomDocument;\r
+    else\r
+        pDoc = doc;\r
+\r
+    QDomElement domElement;\r
+\r
+    if(0 == elem)\r
+        domElement = Xmlutil::addElement(*pDoc, *pDoc, PROFILE_ELEM_TAG);\r
+    else\r
+        domElement = Xmlutil::addElement(*pDoc, *elem, PROFILE_ELEM_TAG);\r
+\r
+    domElement.setAttribute(NAME_ATTR, profile.mName);\r
+    domElement.setAttribute(NO_OF_STEPS_ATTR, profile.mNoOfSteps);\r
+\r
+    if(profile.mNoOfSteps > 0)\r
+    {\r
+        for(unsigned int i = 0; i < profile.mNoOfSteps; i++)\r
+        {\r
+            QDomElement stepEl = Xmlutil::addElement(*pDoc, domElement, STEP_TAG);\r
+            Steps step = profile.mSteps.at(i);\r
+            stepEl.setAttribute(VALUE_ATTR, step.value());\r
+            stepEl.setAttribute(DELAY_ATTR, step.delay());\r
+        }\r
+    }\r
+\r
+    QString xmlString = pDoc->toString();\r
+\r
+    if(0 == doc)\r
+        delete pDoc;\r
+\r
+    return xmlString;\r
+}\r
+\r
+/*\r
+QString generateXML()\r
+{\r
+    Steps step("+4670", 1);\r
+    Profile p;\r
+    p.mName = "Diva";\r
+    p.mNoOfSteps = 2;\r
+    p.mSteps.append(step);\r
+    step.setDelay(2);\r
+    step.setValue("+4788");\r
+    p.mSteps.append(step);\r
+\r
+    return xmlutil::generateProfileXML(p);\r
+}\r
+\r
+// Unit test from main...\r
+\r
+    QString xmlString = generateXML();\r
+    Profile p;\r
+\r
+    int e = xmlutil::degenerateProfileXML(xmlString, p);\r
+*/\r
+\r
+int Xmlutil::degenerateProfileXML(const QString xmlString, Profile &profile,\r
+                                  QDomElement *pElem)\r
+{\r
+    QDomDocument doc;\r
+    Steps step;\r
+    QDomElement *elem = NULL;\r
+    if(0 == pElem && !xmlString.isNull())\r
+    {\r
+        doc.setContent(xmlString);\r
+        *elem = doc.namedItem(PROFILE_ELEM_TAG).toElement();\r
+    }\r
+    else\r
+    {\r
+        elem = pElem;\r
+    }\r
+\r
+    if(elem->isNull())\r
+        return -1;\r
+\r
+    profile.mName = elem->attribute(NAME_ATTR);\r
+    profile.mNoOfSteps = elem->attribute(NO_OF_STEPS_ATTR).toInt();\r
+\r
+    qDebug() << profile.mName << ":" << profile.mNoOfSteps;\r
+    QDomElement child = elem->firstChild().toElement();\r
+\r
+    profile.mSteps.clear();\r
+\r
+    for(unsigned int i = 0; i < profile.mNoOfSteps ; i++)\r
+    {\r
+        step.setDelay(child.attribute(DELAY_ATTR).toInt());\r
+        step.setValue(child.attribute(VALUE_ATTR));\r
+        profile.mSteps.append(step);\r
+        qDebug() << step.value() << ":" << step.delay();\r
+        child = child.nextSiblingElement();\r
+    }\r
+    return 0;\r
+}\r