/[kvoss_old]/kvsvv/trunk/src/xmlFileConvert.cpp
ViewVC logotype

Contents of /kvsvv/trunk/src/xmlFileConvert.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3719 - (show annotations) (download)
Mon Jul 23 10:26:26 2012 UTC (7 years, 3 months ago) by glennb
File size: 13538 byte(s)
QSettings
1 /* Glenn Blandehoel sist oppdatert 28/6 -2011*/
2 #include <QtGui>
3 #include "xmlFileConvert.h"
4
5 /*klassen har objektvariable opdataPath,convertPath og xmlLogFile. Xmlfilene parses, konverteres til kvalobs og gamle kvalobsfiler slettes ved at timer i constructor kaller xmlToKvalobs med et tidsintervall gitt i millisekunder spesifisert som argument til QTimer::start(int) t*/
6
7 Fileconvert::Fileconvert(QWidget *parent)
8 //: QDialog(parent)
9 : QEventLoop(parent)
10 {
11
12 // qDebug() <<"QDir::currentPath" <<QDir::currentPath();
13 //filehandling = new Filehandling(convertPath,opdataPath,station); kommentert ut 4/4-2011
14
15 //Filehandling *filehandling = new Filehandling(convertPath,opdataPath,"");
16 QSettings settings("svvxml2kvalobssvv");
17 qDebug() << "opdataPath Settings:" << settings.value("opdataPath").toString();
18 qDebug() << "kvalobsfilePath Settings:" << settings.value("kvalobsfilePath").toString();
19 qDebug() << "kvalobsfilePath Settings:" << settings.value("databaseName").toString();
20 qDebug() << "kvalobsfilePath Settings:" << settings.value("databaseIp").toString();
21 qDebug() << "kvalobsfilePath Settings:" << settings.value("port").toString();
22 opdataPath = settings.value("opdataPath").toString();
23 convertPath = settings.value("kvalobsfilePath").toString();
24 databaseName = settings.value("databaseName").toString();
25 databaseIp = settings.value("databaseIp").toString();
26 port = settings.value("port").toString();
27 /*Filehandling filehandling(convertPath,opdataPath,"");
28 opdataPath = filehandling.findStringInFile("/etc/svvxml2kvalobssvv/svvxml2kvalobssvv.conf","opdataPath");
29 convertPath = filehandling.findStringInFile("/etc/svvxml2kvalobssvv/svvxml2kvalobssvv.conf","kvalobsfilePath");
30 databaseName =filehandling.findStringInFile("/etc/svvxml2kvalobssvv/svvxml2kvalobssvv.conf","databaseName");
31 databaseIp=filehandling.findStringInFile("/etc/svvxml2kvalobssvv/svvxml2kvalobssvv.conf","databaseIp"); */ // komentert ut
32
33 qDebug() <<"convertPath :" <<convertPath;
34 qDebug() <<"opdataPath :" <<opdataPath;
35 qDebug() <<" databaseName :" << databaseName;
36 qDebug() <<" databaseIp :" << databaseIp;
37 qDebug() <<" port :" << port;
38 xmlLogFile = "xmlLog.txt";
39 xmlLogFile.prepend(convertPath);
40
41
42 timer = new QTimer(this);
43
44
45
46 connect(timer, SIGNAL(timeout()),this,SLOT(xmlToKvalobs()));
47 timer->start(10000);
48
49
50
51
52 }
53
54 void Fileconvert::xmlToKvalobs()
55 {
56 /* Funksjon som kalles hver gang timeren fyrer
57 F��rst kalles collectAndConvertFiles for �� parse eventuelle nye xmlfiler og hvis fil(ene) har lovlig struktur
58 generere kvalobsfiler. Eventuelle nye kvalobsfiler sendes til kvalobs via javascript ved runScript. removeOldFiles
59 sletter kvalobsfiler (som er sendt til kvalobs) eldre enn en hvis dato. Oppf��ring i logfilene; kvalobslog.txt log.txt og xmlLog.txt
60 slettes ogs��.*/
61
62 Filehandling filehandling(convertPath,opdataPath,"");
63 collectAndConvertFiles(filehandling);
64 runScript(filehandling);
65
66 moveFilestosubdir(filehandling);
67 removeOldFiles(filehandling);
68 }
69
70 QStringList Fileconvert::findFilesToSend(Filehandling &filehandling)
71 {
72 /*sammenligner log.txt og kvalobslog.txt og returnerer liste med filnavn som finnes i log.txt men ikke i kvalobslog.txt */
73 QString file1="log.txt";
74 QString file2="kvalobslog.txt";
75 file1.prepend(convertPath);
76 file2.prepend(convertPath);
77 //qDebug() <<" file1" <<file1;
78 //qDebug() <<"\n" <<"file2" <<file2;
79 return filehandling.compareFiles(file1,file2);
80
81 }
82
83
84
85
86 void Fileconvert::runScript(Filehandling &filehandling)
87 {
88 /*Funksjonen sender kvalobsfiler til kvalobs. Lista med filer sorteres slik at de eldste filene sendes f��rst.
89 For hver fil i lista kalles et linuxscript med filnavnet som argument. Scriptet kj��rer igjen et javascript som tar seg av
90 selve overf��ringen til kvalobs. Hvis skriptkj��ring returnerer en hvis tekststreng og ingen "error" har kvalobs mottatt observasjonene p��
91 riktig format og kvalobslog.txt oppdateres med navnet p�� den overf��rte fila. Tilbakemelding fra overf��ring blir lagret i filer med filnavn
92 out.txt<dato og klokkeslett>. Filene lagres under progPath-katalogen*/
93
94 bool okKvalobs = true;
95 QProcess process1;
96 QString progString ="/svvxml2kvalobssvv.sh";
97 // progString.prepend(QDir::currentPath());
98 progString.prepend("/usr/local/bin");
99 QStringList liste = findFilesToSend(filehandling);
100
101 liste.sort(); //sortert med eldste filer f��rst
102
103
104 QString logFile = "kvalobslog.txt";
105 logFile.prepend(convertPath);
106
107 for(int i = 0; i < liste.size(); i++ && okKvalobs){
108 //QString filNavn="testkvalobs.txt";
109
110 QString filNavn = liste[i];
111 filNavn.prepend(convertPath);
112 QStringList arguments;
113 arguments << filNavn;
114 int tall = 1;
115 tall = process1.execute(progString,arguments);
116 //qDebug() <<" tall : " << tall;
117 if(tall == 0){ //javascriptet som overf��rer filer til kvalobs returnerer 0 hvis overf��ring g��r bra
118 filNavn.remove(convertPath);
119 filehandling.updateLogFile(filNavn,logFile);
120 qDebug() <<" fil :" <<filNavn <<" sendt til kvalobs";
121
122 }
123 else{
124 okKvalobs = false;
125 }
126 }
127
128 }
129
130
131 QStringList Fileconvert::filesToSearchFor()
132 {
133 //Returnerer liste med datoer (med *foran og etter) * i tidsrommet mellom n og m dager tilbake i tid
134 QStringList list;
135 QString fileNames[80];
136 DateTime dateT;
137 QDate datetoDay = dateT.getCurrentDate();
138
139 for (int i = 0; i < 80; i++) {
140 fileNames[i].append("*");
141 fileNames[i].append(dateT.getDayDate(datetoDay, - i -80));
142 fileNames[i].append("*");
143 list.append(fileNames[i]);
144 }
145
146 return list;
147 }
148
149 /*QStringList Fileconvert::filesToSearchFor()
150 {
151 //Returnerer liste med datoer (med *foran og etter) * i tidsrommet mellom n og m dager tilbake i tid
152 QStringList list;
153 QString fileNames[90]; // endret til 30 fra 10 8/9 -2011
154 DateTime dateT;
155 QDate datetoDay = dateT.getCurrentDate();
156
157 for (int i = 0; i < 90; i++) { // endret til 90 fra 10 8/9 -2011
158 fileNames[i].append("*");
159 fileNames[i].append(dateT.getDayDate(datetoDay, - i -92)); //endret til 92 15/9-2011
160 fileNames[i].append("*");
161 list.append(fileNames[i]);
162 }
163 return list;
164 }*/
165
166
167
168 QStringList Fileconvert::updateRemoveFileList(QStringList liste,QString fileName,Filehandling &filehandling)
169 {
170 /*Sjekker om deler av filnavnene i QStringList liste finnes i fil med navn fileName og sletter
171 linjene der filnavn(ene) er oppf��rt*/
172 //qDebug() <<" liste.size i updateRemove..." <<liste;
173 int i = 0;
174 int maxLines = liste.size();
175 while (i < maxLines)
176 {
177 QString streng = liste[0];
178 if(!filehandling.isStringInFile(streng,fileName)){
179 liste.removeAll(streng);
180 }
181 i++;
182 }
183 //qDebug() <<" liste.size() : " << liste.size();
184 return liste;
185
186
187 }
188
189
190 void Fileconvert::moveFilestosubdir(Filehandling &filehandling)
191 {
192 //QStringList files = filesToSearchFor();
193 //qDebug() <<" files: " <<files <<"\n";
194 //Lager liste over filer i kvalobslog.txt. Disse er sendt til kvalobs og skal flyttes til riktig m��nedskatalog
195 QStringList list;
196 list.clear();
197 QString fileName = "kvalobslog.txt";
198 fileName.prepend(convertPath);
199 list = filehandling.fileToList(fileName,list);
200
201
202 qDebug() << list;
203 qDebug() << list.size();
204 //QStringList subDir;
205 //subDir.clear();
206 QString subDir = "";
207 fileName = "";
208 QString stringElement = "";
209 //for(int i = 0; i < list.size(); i++){
210 int i = 0;
211 while(list.size() > 0){
212 stringElement = "";
213 stringElement = list[i];
214 stringElement.remove("station.");
215 stringElement.remove(".txt");
216 QStringList elementList;
217 elementList.clear();
218 elementList = stringElement.split(".");
219
220 elementList[1].remove(6,elementList[1].size());
221 qDebug() <<" elementList[1]: " << elementList[1];
222 subDir = "";
223 subDir = elementList[1];
224 /*if(subDir.isEmpty()){
225 subDir << elementList[1];
226 }*/
227
228 /*else{
229 for(int j = 0; j < subDir.size(); j++){
230 if(!elementList[1].startsWith(subDir[j])){
231 subDir.append(elementList[1]);
232 }
233 }
234
235 }*/
236 fileName = "";
237 fileName = list[i];
238 moveFiles2(subDir,fileName,filehandling);
239 list.removeAt(i);
240
241 }
242
243 }
244
245
246
247
248
249 void Fileconvert::removeOldFiles(Filehandling &filehandling)
250 {
251 DateTime dateT;
252 QDate datetoDay = dateT.getCurrentDate();
253 /* Sletter oppf��ring av xmlFiler i xmllog.txt som er mer enn en hvis antall dager gamle*/
254 QString oneMonthBack = dateT.getMonthDate(datetoDay,-3);
255 oneMonthBack.remove(oneMonthBack.size()-2,oneMonthBack.size());
256 qDebug() << "oneMonthBack: " << oneMonthBack;
257 QStringList yearMonth;
258 yearMonth.clear();
259 yearMonth << oneMonthBack;
260 //qDebug() <<" files: " <<files <<"\n";
261 QString fileName="xmlLog.txt";
262 fileName.prepend(convertPath);
263 filehandling.remove_line(fileName,yearMonth);
264 }
265
266 void Fileconvert::deleteOld(QStringList files,Filehandling &filehandling)
267 {
268
269 for(int i=0 ; i <files.size() ; i++){
270
271 files[i].prepend(convertPath);
272 QString file1 = files[i];
273 //qDebug() <<"file1 : " <<file1 <<"\n";
274 filehandling.remove_file(file1);
275
276 }
277 }
278
279 QString Fileconvert::collectAndConvertFiles(Filehandling &filehandling)
280 {
281 /*leter etter alle xml filer i opdatakatalogen derfor "*.xml" */
282 QString fileName = "*.xml";
283 QStringList files;
284 FileList fileList;
285 files = fileList.findFiles(opdataPath,fileName);
286 qSort(files.begin(),files.end()); // sorterer filnavn p�� dato og klokkeslett slik at de eldste filene kommer f��rst
287
288 convertFiles(files,filehandling);
289 return fileName;
290 }
291
292 QString Fileconvert::convertFiles(QStringList files, Filehandling &filehandling)
293 {
294 /*Kj��rer convertSvvXml med filnavn i QstringList files */
295
296 for(int i=0 ; i <files.size() ; i++)
297 {
298 //qDebug() <<" i l��kke?: ";
299 QString file1 = files[i];
300 if(!filehandling.isStringInFile(file1,xmlLogFile)){
301 /*if(file1.startsWith("20120112")){
302 qDebug() << file1 << " er ikke i : " << xmlLogFile;
303 }*/
304 file1.prepend(opdataPath);
305 convertSvvXml(file1);
306 }
307 }
308
309 //QString fileName=files[files.size() -1]; //kommentert ut 4/11-2011
310 QString fileName = "";
311 return fileName;
312
313
314 }
315
316
317
318
319 void Fileconvert::convertSvvXml(QString fileName)
320 {
321 /*readFile kalles for �� verifisere at Xml-fila er fullstendig det vil si like mange start og endtager.
322 Deretter kj��res XQueries*/
323 //qDebug() <<" i convertSvvXml :" << fileName <<"\n";
324 //qDebug() <<" convertPath : " <<convertPath;
325 XmlStreamReader reader(convertPath,xmlLogFile,databaseName,databaseIp,port);
326 reader.readFile(fileName);
327 reader.XQueries(fileName);
328 }
329
330
331 void Fileconvert::moveFiles2(QString &subDir,QString &fileNameToMove,Filehandling &filehandling)
332 {
333 QProcess process1;
334
335 QStringList removeList;
336 QString dirString = "dirScript.sh";
337 dirString.prepend("/usr/local/bin/");
338 dirString.append(" ");
339 QString arg = convertPath;
340 arg.append(subDir);
341 dirString.append(arg);
342 QFileInfo fileInfo(arg);
343 if((!fileInfo.isDir())){
344 qDebug() <<" oppretter subdir";
345 process1.execute(dirString);
346 }
347
348 //for(int j = 0; j < list.size(); j++){
349 //subDir.prepend(".");
350 //if(fileNameToMove.contains(subDir)){
351 //subDir.remove(".");
352 QString fileName = convertPath;
353 fileName.append(fileNameToMove);
354 qDebug() <<" fileName: " << fileName;
355 QString fileName2 = convertPath;
356 fileName2.append(subDir);
357 fileName2.append("/");
358 fileName2.append(fileNameToMove);
359 qDebug() <<" fileName2: " << fileName2;
360 QFile file(fileName);
361 file.copy(fileName2);
362 file.remove(fileName);
363 // fjerner oppf��ring av filnavn i log.txt og i kvalobslog.txt
364 removeList.clear();
365 removeList << fileNameToMove;
366 fileName="log.txt";
367 fileName.prepend(convertPath);
368 filehandling.remove_line(fileName,removeList);
369 fileName="kvalobslog.txt";
370 fileName.prepend(convertPath);
371 filehandling.remove_line(fileName,removeList);
372 }
373
374
375
376
377
378
379
380 void Fileconvert::moveFiles(QStringList subDir,QStringList list,Filehandling &filehandling)
381 {
382 //qDebug() <<" moveFiles: " << subDir;
383 //qDebug() <<" moveFiles: " << list;
384
385
386 QString dirString ="";
387 QProcess process1;
388 qDebug() <<" dirString :" << dirString;
389 for(int i = 0; i < subDir.size(); i++){
390 QString dirString = "dirScript.sh";
391 dirString.prepend("/usr/local/bin/");
392 dirString.append(" ");
393 QString arg = convertPath;
394 arg.append(subDir[i]);
395 dirString.append(arg);
396 QFileInfo fileInfo(arg);
397 if((!fileInfo.isDir())){
398 qDebug() <<" oppretter subdir";
399 process1.execute(dirString);
400 }
401
402 for(int j = 0; j < list.size(); j++){
403 subDir[i].prepend(".");
404 if(list[j].contains(subDir[i])){
405 subDir[i].remove(".");
406 QString fileName = convertPath;
407 fileName.append(list[j]);
408 qDebug() <<" fileName: " << fileName;
409 QString fileName2 = convertPath;
410 fileName2.append(subDir[i]);
411 fileName2.append("/");
412 fileName2.append(list[j]);
413 qDebug() <<" fileName2: " << fileName2;
414 QFile file(fileName);
415 file.copy(fileName2);
416 file.remove(fileName);
417 list.removeAt(j);
418 j --;
419 // fjerner oppf��ring av filnavn i log.txt og i kvalobslog.txt
420 QStringList removeList;
421 removeList.clear();
422 removeList << list[j];
423 fileName="log.txt";
424 fileName.prepend(convertPath);
425 filehandling.remove_line(fileName,removeList);
426 fileName="kvalobslog.txt";
427 fileName.prepend(convertPath);
428 filehandling.remove_line(fileName,removeList);
429 }
430 }
431
432 }
433
434
435 }
436
437
438

svn@met.no
ViewVC Help
Powered by ViewVC 1.1.5