logging changes
[scorecard] / src / xml-dom-parser.cpp
1 #include <QFile>
2 #include "xml-dom-parser.h"
3
4 ScoreXmlHandler::ScoreXmlHandler(QList<Score *> &list) : list(list)
5 {
6 }
7
8 int ScoreXmlHandler::parse(QString &fileName)
9 {
10   QFile file(fileName);
11
12   if (!file.open(QFile::ReadOnly)) {
13     qWarning() << "Unable to open :" << fileName;
14     return false;
15   }
16   else if (!doc.setContent(&file)) {
17     file.close();
18     qWarning() << "Unable set content :" << fileName;
19     return false;
20   } 
21   else {
22     file.close();
23     qDebug() << "File ready for XML : " << fileName;
24   }
25
26   root = doc.documentElement(); // this is for reading
27   
28   QDomElement scoreElement = root.firstChildElement("score");
29   while (!scoreElement.isNull()) {
30     Score *score = new Score(scoreElement);
31     QDomElement holeElement = scoreElement.firstChildElement("hole");
32
33     while (!holeElement.isNull()) {
34       Hole *hole = new Hole(holeElement);
35       score->addHole(hole);
36       holeElement = holeElement.nextSiblingElement("hole");
37     }
38     list << score;
39     scoreElement = scoreElement.nextSiblingElement("score");
40   }
41   return true;
42 }
43
44 int ScoreXmlHandler::save(QString &fileName)
45 {
46   QFile file(fileName);
47
48   root = doc.createElement("data");
49   doc.appendChild(root);
50
51   for (int i = 0; i < list.size(); i++) {
52     Score *score = list.at(i);
53     root.appendChild(score->toElement(doc));
54   }
55
56   if (!file.open(QFile::WriteOnly))
57     return false;
58
59   QTextStream ts(&file);
60   ts << doc.toString();
61   file.close();
62
63   return true;
64 }
65
66 // ==========================================================
67 // 
68 // ==========================================================
69
70 ClubXmlHandler::ClubXmlHandler(QList<Club *> &list) : list(list)
71 {
72 }
73
74 int ClubXmlHandler::parse(QString &fileName)
75 {
76   QFile file(fileName);
77
78   if (!file.open(QFile::ReadOnly)) {
79     qWarning() << "Unable to open :" << fileName;
80     return false;
81   }
82   else if (!doc.setContent(&file)) {
83     file.close();
84     qWarning() << "Unable set content :" << fileName;
85     return false;
86   } 
87   else {
88     file.close();
89     qDebug() << "File ready for XML :" << fileName;
90   }
91
92   root = doc.documentElement(); // this is for reading
93   
94   QDomElement clubElement = root.firstChildElement("club");
95   while (!clubElement.isNull()) {
96
97     Club *club = new Club(clubElement);
98
99     QDomElement courseElement = clubElement.firstChildElement("course");
100     while (!courseElement.isNull()) {
101
102       Course *course = new Course(courseElement);
103       club->addCourse(course);
104
105       QDomElement holeElement = courseElement.firstChildElement("hole");
106       while (!holeElement.isNull()) {
107         Hole *hole = new Hole(holeElement);
108         course->addHole(hole);
109
110         holeElement = holeElement.nextSiblingElement("hole");
111       }
112       courseElement = courseElement.nextSiblingElement("course");
113     }
114     list << club;
115     clubElement = clubElement.nextSiblingElement("club");
116   }
117   return true;
118 }
119
120 int ClubXmlHandler::save(QString &fileName)
121 {
122   QFile file(fileName);
123
124   root = doc.createElement("data");
125   doc.appendChild(root);
126
127   for (int i = 0; i < list.size(); i++) {
128     Club *club = list.at(i);
129     root.appendChild(club->toElement(doc));
130   }
131
132   if (!file.open(QFile::WriteOnly))
133     return false;
134
135   QTextStream ts(&file);
136   ts << doc.toString();
137   file.close();
138
139   return true;
140 }