Initial Commit. The packaging still does not work properly.
[confmgr] / src / xmlutil.cpp
1 #include "xmlutil.h"\r
2 #include <QDebug>\r
3 \r
4 Xmlutil::Xmlutil(QObject *parent) :\r
5     QObject(parent)\r
6 {\r
7 }\r
8 \r
9 QDomElement Xmlutil::addElement(QDomDocument &doc, QDomNode &node,\r
10                        const QString &tag, const QString &value)\r
11 {\r
12     QDomElement element = doc.createElement(tag);\r
13     node.appendChild(element);\r
14     if(!value.isNull())\r
15     {\r
16         QDomText text = doc.createTextNode(value);\r
17         element.appendChild(text);\r
18     }\r
19     return element;\r
20 }\r
21 \r
22 /*\r
23 // Unit test from main\r
24 \r
25     Steps step("+4670", 1);\r
26     int error = 0;\r
27 \r
28     Profile p;\r
29     p.mName = "Diva";\r
30     p.mNoOfSteps = 2;\r
31     p.mSteps.append(step);\r
32     step.setDelay(2);\r
33     step.setValue("+4788");\r
34     p.mSteps.append(step);\r
35 \r
36     qDebug() << p.generateProfileXML(p, error);\r
37 \r
38 */\r
39 QString Xmlutil::generateProfileXML(const Profile &profile, int *error,\r
40                                     QDomDocument *doc, QDomElement *elem)\r
41 {\r
42     QDomDocument *pDoc = NULL;\r
43     if(0 == doc)\r
44         pDoc = new QDomDocument;\r
45     else\r
46         pDoc = doc;\r
47 \r
48     QDomElement domElement;\r
49 \r
50     if(0 == elem)\r
51         domElement = Xmlutil::addElement(*pDoc, *pDoc, PROFILE_ELEM_TAG);\r
52     else\r
53         domElement = Xmlutil::addElement(*pDoc, *elem, PROFILE_ELEM_TAG);\r
54 \r
55     domElement.setAttribute(NAME_ATTR, profile.mName);\r
56     domElement.setAttribute(NO_OF_STEPS_ATTR, profile.mNoOfSteps);\r
57 \r
58     if(profile.mNoOfSteps > 0)\r
59     {\r
60         for(unsigned int i = 0; i < profile.mNoOfSteps; i++)\r
61         {\r
62             QDomElement stepEl = Xmlutil::addElement(*pDoc, domElement, STEP_TAG);\r
63             Steps step = profile.mSteps.at(i);\r
64             stepEl.setAttribute(VALUE_ATTR, step.value());\r
65             stepEl.setAttribute(DELAY_ATTR, step.delay());\r
66         }\r
67     }\r
68 \r
69     QString xmlString = pDoc->toString();\r
70 \r
71     if(0 == doc)\r
72         delete pDoc;\r
73 \r
74     return xmlString;\r
75 }\r
76 \r
77 /*\r
78 QString generateXML()\r
79 {\r
80     Steps step("+4670", 1);\r
81     Profile p;\r
82     p.mName = "Diva";\r
83     p.mNoOfSteps = 2;\r
84     p.mSteps.append(step);\r
85     step.setDelay(2);\r
86     step.setValue("+4788");\r
87     p.mSteps.append(step);\r
88 \r
89     return xmlutil::generateProfileXML(p);\r
90 }\r
91 \r
92 // Unit test from main...\r
93 \r
94     QString xmlString = generateXML();\r
95     Profile p;\r
96 \r
97     int e = xmlutil::degenerateProfileXML(xmlString, p);\r
98 */\r
99 \r
100 int Xmlutil::degenerateProfileXML(const QString xmlString, Profile &profile,\r
101                                   QDomElement *pElem)\r
102 {\r
103     QDomDocument doc;\r
104     Steps step;\r
105     QDomElement *elem = NULL;\r
106     if(0 == pElem && !xmlString.isNull())\r
107     {\r
108         doc.setContent(xmlString);\r
109         *elem = doc.namedItem(PROFILE_ELEM_TAG).toElement();\r
110     }\r
111     else\r
112     {\r
113         elem = pElem;\r
114     }\r
115 \r
116     if(elem->isNull())\r
117         return -1;\r
118 \r
119     profile.mName = elem->attribute(NAME_ATTR);\r
120     profile.mNoOfSteps = elem->attribute(NO_OF_STEPS_ATTR).toInt();\r
121 \r
122     qDebug() << profile.mName << ":" << profile.mNoOfSteps;\r
123     QDomElement child = elem->firstChild().toElement();\r
124 \r
125     profile.mSteps.clear();\r
126 \r
127     for(unsigned int i = 0; i < profile.mNoOfSteps ; i++)\r
128     {\r
129         step.setDelay(child.attribute(DELAY_ATTR).toInt());\r
130         step.setValue(child.attribute(VALUE_ATTR));\r
131         profile.mSteps.append(step);\r
132         qDebug() << step.value() << ":" << step.delay();\r
133         child = child.nextSiblingElement();\r
134     }\r
135     return 0;\r
136 }\r