4 * @author Tiina Kivilinna-Korhola
5 * @copyright (c) 2010 Speed Freak team
6 * license http://opensource.org/licenses/gpl-license.php GNU Public License
14 *@brief Constructor, connects object to GUI
15 *@param Pointer to carmainwindow, which is temporarily used during development
17 XmlWriter::XmlWriter()
26 XmlWriter::~XmlWriter()
32 *@brief Writes registration items into tags.
33 *@param netbuf a buffer where xmlstreamwriter writes to.
34 *@param usr for user name.
35 *@param psswd for password.
38 void XmlWriter::writeRegistering(QBuffer *netbuf, QString usr, QString psswd, QString email)
40 qDebug() << "_writeRegistering";
42 xmlwriter.setDevice(netbuf);
44 xmlwriter.writeStartDocument();
45 xmlwriter.writeStartElement("user");
47 xmlwriter.writeStartElement("login");
48 xmlwriter.writeCharacters(usr);
49 xmlwriter.writeEndElement();
51 xmlwriter.writeStartElement("password");
52 xmlwriter.writeCharacters(psswd);
53 xmlwriter.writeEndElement();
55 xmlwriter.writeStartElement("email");
56 xmlwriter.writeCharacters(email);
57 xmlwriter.writeEndElement();
59 xmlwriter.writeEndElement();
60 xmlwriter.writeEndDocument();
65 *@brief Writes Speed Freek results items as tags and contents into a buffer.
66 *@todo Consider looping when writing many values.
67 *@todo Replace test value to finally used variables.
69 void XmlWriter::writeResult(QBuffer *netbuf)
71 qDebug() << "_writeResult";
73 xmlwriter.setDevice(netbuf);
75 xmlwriter.writeStartDocument();
76 xmlwriter.writeStartElement("result");
79 xmlwriter.writeAttribute("value", QString::number(tmpvalue));
80 xmlwriter.writeEndElement();
81 xmlwriter.writeEndDocument();
86 *@brief Write track to server.
87 *@param Starting index of gps results table.
88 *@param Ending index of gps results table.
89 *@todo Connect to real values.
90 *@todo Decide suitable parameters.
92 void XmlWriter::writeGpsTrack(int startInd, int stopInd)
94 qDebug() << "_writeGpsTrack";
99 xmlwriter.writeStartElement("gpx");
100 xmlwriter.writeAttribute("someattribute", "abc");
101 xmlwriter.writeAttribute("otherattribute", "cde");
103 xmlwriter.writeStartElement("metadata");
104 xmlwriter.writeStartElement("link");
105 xmlwriter.writeAttribute("href", "http://api.speedfreak-app.com/api/track");
106 xmlwriter.writeCharacters("Speed Freak");
107 xmlwriter.writeEndElement();
108 xmlwriter.writeStartElement("time");
109 xmlwriter.writeCharacters(QDateTime::currentDateTime().toString());
110 xmlwriter.writeEndElement();
111 xmlwriter.writeEndElement(); //metadata
113 xmlwriter.writeStartElement("trk");
114 xmlwriter.writeStartElement("name");
115 xmlwriter.writeCharacters("Example Track");
116 xmlwriter.writeEndElement();
117 xmlwriter.writeStartElement("trkseg");
118 for(i = startInd; i < (stopInd - startInd); i++) {
119 xmlwriter.writeStartElement("trkpt");
120 xmlwriter.writeAttribute("lat", QString::number(trackTable[i].latitude));
121 xmlwriter.writeAttribute("lon", QString::number(trackTable[i].longitude));
122 xmlwriter.writeStartElement("ele");
123 xmlwriter.writeCharacters(QString::number(trackTable[i].altitude));
124 xmlwriter.writeEndElement();
125 xmlwriter.writeStartElement("time");
126 xmlwriter.writeCharacters(QString::number(trackTable[i].time));
127 xmlwriter.writeEndElement();
128 xmlwriter.writeStartElement("speed");
129 xmlwriter.writeCharacters(QString::number(trackTable[i].speed));
130 xmlwriter.writeEndElement();
131 xmlwriter.writeStartElement("track");
132 xmlwriter.writeCharacters(QString::number(trackTable[i].track));
133 xmlwriter.writeEndElement();
134 xmlwriter.writeEndElement(); //trkpt
136 xmlwriter.writeEndElement(); //trkseg
137 xmlwriter.writeEndElement(); //trk
138 xmlwriter.writeEndElement(); //gpx
143 *@brief Opens and closes a file, when xml information is written into a file,
144 *and passes file to writeXmlFile()
145 *@param usr for user name.
146 *@param psswd for password.
148 *@todo Replace hardcoced filename to finally GUI entry widget.
150 //void XmlWriter::writeXml(QString usr, QString psswd, QString email)
151 void XmlWriter::writeXml()
153 QString filename = "xmlcategoryfile.xml";
154 QFile file(filename);
155 if (!file.open(QFile::WriteOnly | QFile::Text)) {
156 qDebug() << "_xmlWrite fail";
161 //writeRegistering(&file, usr, psswd, email);
162 //writeResult(&file);
167 *@brief Writes general xml information.
168 *Calls other functions to insert login and result information.
169 *@param device: target of writing, here filename.
170 *@param usr for user name.
171 *@param psswd for password.
174 bool XmlWriter::writeXmlFile(QIODevice *device)
176 xmlwriter.setDevice(device);
177 xmlwriter.writeStartDocument();
180 writeGpsTrack(0, 16);
181 xmlwriter.writeEndDocument();
188 *@brief Writes Speed Freek results items as tags and contents to earlier defined target.
189 *@todo Consider looping when writing many values.
190 *@todo Replace testing values to finally used variabls.
192 void XmlWriter::writeItems()
194 xmlwriter.writeStartElement("result");
195 xmlwriter.writeAttribute("value", QString::number(14)); //tmp testing value
196 xmlwriter.writeAttribute("unit", "seconds");
197 xmlwriter.writeAttribute("date", QDateTime::currentDateTime().toString());
198 xmlwriter.writeEndElement();
203 *@brief A temp function during development, used to create a "serverfile".
205 void XmlWriter::serverWritesXml()
207 /* Server sends to client */
212 //Write top 10 Results
213 xmlwriter.writeStartElement("results");
214 xmlwriter.writeAttribute("category", "acceleration-0-40");
215 xmlwriter.writeAttribute("unit", "seconds");
216 xmlwriter.writeAttribute("description", "Acceleration from 0 to 100 km/h");
218 for (i = 0; i < n; i++) {
219 xmlwriter.writeStartElement("result");
220 xmlwriter.writeAttribute("position", QString::number(i));
221 xmlwriter.writeAttribute("user", "test123");
222 xmlwriter.writeAttribute("date", QDateTime::currentDateTime().toString());
223 xmlwriter.writeAttribute("value", QString::number(i+i+1));
224 xmlwriter.writeEndElement();
228 xmlwriter.writeStartElement("categories");
230 xmlwriter.writeStartElement("category");
231 xmlwriter.writeCharacters("acceleration-0-10");
232 xmlwriter.writeEndElement();
234 xmlwriter.writeStartElement("category");
235 xmlwriter.writeCharacters("acceleration-0-40");
236 xmlwriter.writeEndElement();
238 xmlwriter.writeStartElement("category");
239 xmlwriter.writeCharacters("acceleration-0-100");
240 xmlwriter.writeEndElement();
242 xmlwriter.writeEndElement();
247 *@brief A temp function during development, used to create data for drawing route and for server.
249 void XmlWriter::analyzeGpsData()
251 qDebug() << "_analyzeGpsData";
256 qDebug() << "sizeof(analyzeTable)" << sizeof(analyzeTable);
259 for(int i = 1; i < tableSize; i++)
261 //example of one feature whose consequent values are compared and saved if they differentiate too much
262 if(analyzeTable[i].speed < (analyzeTable[i-1].speed - 1) ||
263 analyzeTable[i].speed > (analyzeTable[i-1].speed + 1) )
265 trackTable[trackInd] = analyzeTable[i];
267 qDebug() << "trackTable[trackInd].speed" << trackTable[trackInd].speed;
272 void XmlWriter::initPointTable(gpsPoint *table, int count, double add1, int add2, int add3)
274 qDebug() << "_initPointTable";
279 table[0].latitude = 67.00;
280 table[0].longitude = 27.50;
281 table[0].altitude = 7.00;
285 for(j = 0; j < count; j++)
287 table[i].latitude = table[i-1].latitude + add1;
288 //table[i].longitude = table[i-1].longitude + add1;
289 table[i].altitude = table[i-1].altitude + add1;
290 table[i].speed = table[i-1].speed + add2;
291 table[i].track = table[i-1].track + 1;
292 table[i].time = table[i-1].time + add3;
295 for(j = 0; j < count; j++)
297 //table[i].latitude = table[i-1].latitude + add1;
298 table[i].longitude = table[i-1].longitude + add1;
299 table[i].altitude = table[i-1].altitude -add1;
300 table[i].speed = table[i-1].speed + add2;
301 table[i].track = table[i-1].track + 1;
302 table[i].time = table[i-1].time + add3;
305 for(j = 0; j < count; j++)
307 table[i].latitude = table[i-1].latitude - add1;
308 //table[i].longitude = table[i-1].longitude + add1;
309 table[i].altitude = table[i-1].altitude + add1;
310 table[i].speed = table[i-1].speed - add2;
311 table[i].track = table[i-1].track - 1;
312 table[i].time = table[i-1].time + add3;
315 for(j = 0; j < count; j++)
317 //table[i].latitude = table[i-1].latitude + add1;
318 table[i].longitude = table[i-1].longitude - add1;
319 table[i].altitude = table[i-1].altitude - add1;
320 table[i].speed = table[i-1].speed - add2;
321 table[i].track = table[i-1].track - 1;
322 table[i].time = table[i-1].time + add3;