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