File: CReasonerEvaluationAnalyserChecker.cpp

package info (click to toggle)
konclude 0.7.0%2B1137~dfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 48,824 kB
  • sloc: cpp: 378,238; xml: 116,067; makefile: 38; sh: 8; ansic: 3
file content (135 lines) | stat: -rw-r--r-- 5,436 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/*
 *		Copyright (C) 2013-2015, 2019 by the Konclude Developer Team.
 *
 *		This file is part of the reasoning system Konclude.
 *		For details and support, see <http://konclude.com/>.
 *
 *		Konclude is free software: you can redistribute it and/or modify
 *		it under the terms of version 3 of the GNU Lesser General Public
 *		License (LGPLv3) as published by the Free Software Foundation.
 *
 *		Konclude is distributed in the hope that it will be useful,
 *		but WITHOUT ANY WARRANTY; without even the implied warranty of
 *		MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *		GNU (Lesser) General Public License for more details.
 *
 *		You should have received a copy of the GNU (Lesser) General Public
 *		License along with Konclude. If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include "CReasonerEvaluationAnalyserChecker.h"


namespace Konclude {

	namespace Test {

		namespace Evaluation {



			CReasonerEvaluationAnalyserChecker::CReasonerEvaluationAnalyserChecker() : CLogIdentifier("::Konclude::Test::Evaluation::AnalyserUpdateChecker",this) {
			}


			CReasonerEvaluationAnalyserChecker::~CReasonerEvaluationAnalyserChecker() {
			}


			bool CReasonerEvaluationAnalyserChecker::loadAnalysingUpdateCheckFile(const QString& analyserCheckFileString) {
				mAnalysedResponseCountHash.clear();
				QFile analyserCheckFile(analyserCheckFileString);
				if (analyserCheckFile.open(QIODevice::ReadOnly)) {
					LOG(INFO,getLogDomain(),logTr("Loading alraedy analysed data from file '%1'.").arg(analyserCheckFileString),this);
					while (!analyserCheckFile.atEnd()) {
						QString analysedCheckLine(analyserCheckFile.readLine());
						QStringList analysedParsedList = analysedCheckLine.trimmed().split(" ");
						if (analysedParsedList.count() == 2) {
							cint64 analysdCount = analysedParsedList.first().toInt();
							QString analysedFileString = analysedParsedList.last();
							if (analysdCount > 0 && !analysedFileString.isEmpty()) {
								mAnalysedResponseCountHash.insert(analysedFileString,analysdCount);
							}
						}
					}
					analyserCheckFile.close();
					return true;
				} else {
					LOG(ERROR,getLogDomain(),logTr("Could not load alraedy analysed data from file '%1'.").arg(analyserCheckFileString),this);
				}
				return false;
			}


			bool CReasonerEvaluationAnalyserChecker::saveAnalysingUpdateCheckFile(const QString& analyserCheckFileString) {
				QFile analyserCheckFile(analyserCheckFileString);
				if (analyserCheckFile.open(QIODevice::WriteOnly)) {
					LOG(INFO,getLogDomain(),logTr("Save updated analysed data to file '%1'.").arg(analyserCheckFileString),this);
					for (QHash<QString,cint64>::const_iterator it = mAnalysedResponseCountHash.constBegin(), itEnd = mAnalysedResponseCountHash.constEnd(); it != itEnd; ++it) {
						QString writeLine = QString("%1 %2\n").arg(it.value()).arg(it.key());
						analyserCheckFile.write(writeLine.toLocal8Bit());
					}
					analyserCheckFile.close();
					return true;
				} else {
					LOG(ERROR,getLogDomain(),logTr("Could not save updated analysed data to file '%1'.").arg(analyserCheckFileString),this);
				}
				return false;
			}


			bool CReasonerEvaluationAnalyserChecker::checkAnalysingUpdateNecessary(const QStringList& reasonerPathList, const QString& analyserCheckFileString, cint64 maxAnalyseCount) {
				mMaxAnalyseCount = maxAnalyseCount;
				bool updateNecessary = false;
				loadAnalysingUpdateCheckFile(analyserCheckFileString);
				foreach (const QString& reasonerPath, reasonerPathList) {
					updateNecessary |= checkAnalysingUpdateNecessary(reasonerPath);
				}
				return updateNecessary;
			}

			bool CReasonerEvaluationAnalyserChecker::checkAnalysingUpdateNecessary(const QString& baseDirectory) {
				return checkDirsAnalysingUpdateNecessary(baseDirectory,baseDirectory);
			}

			bool CReasonerEvaluationAnalyserChecker::checkDirsAnalysingUpdateNecessary(const QString& directory, const QString& baseDirectory) {
				bool updateNecessary = false;
				QDir dir(directory);
				QStringList dirList = dir.entryList(QDir::Dirs,QDir::Name|QDir::IgnoreCase);
				foreach (QString dirString, dirList) {
					if (dirString != "." && dirString != "..") {
						LOG(INFO,getLogDomain(),logTr("Checking analysing update necessary for data from '%1'.").arg(dirString),this);
						updateNecessary |= checkFilesAnalysingUpdateNecessary(directory+dirString+"/",dirString);
					}
				}
				foreach (QString dirString, dirList) {
					if (dirString != "." && dirString != "..") {
						updateNecessary |= checkDirsAnalysingUpdateNecessary(directory+dirString+"/",baseDirectory);
					}
				}
				return updateNecessary;
			}


			bool CReasonerEvaluationAnalyserChecker::checkFilesAnalysingUpdateNecessary(const QString& directory, const QString& requestFileString) {
				bool updateNecessary = false;
				QDir dir(directory);
				QStringList fileList = dir.entryList(QDir::Files,QDir::Name|QDir::IgnoreCase);
				cint64 fileCount = fileList.count();
				cint64 analysedCount = mAnalysedResponseCountHash.value(directory,0);
				if (analysedCount < mMaxAnalyseCount) {
					if (fileCount > analysedCount) {
						analysedCount = qMin(mMaxAnalyseCount,fileCount);
						updateNecessary = true;
						mAnalysedResponseCountHash.insert(directory,analysedCount);
					}
				}
				return updateNecessary;
			}

		}; // end namespace Evaluation

	}; // end namespace Test

}; // end namespace Konclude