1/* This file is part of the KDE project
2 Copyright (C) 2006 - 2007 Dag Andersen <danders@get2net.dk>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation;
7 version 2 of the License.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 Boston, MA 02110-1301, USA.
18*/
19
20#ifndef XMLLOADEROBJECT_H
21#define XMLLOADEROBJECT_H
22
23#include "kplatokernel_export.h"
24
25#include "kptproject.h"
26#include "kptdatetime.h"
27
28#include "KoUpdater.h"
29
30#include <QDateTime>
31#include <QString>
32#include <QStringList>
33#include <QPointer>
34
35namespace KPlato
36{
37
38class KPLATOKERNEL_EXPORT XMLLoaderObject {
39public:
40 enum Severity { None=0, Errors=1, Warnings=2, Diagnostics=3, Debug=4 };
41 XMLLoaderObject()
42 : m_project(0),
43 m_errors(0),
44 m_warnings(0),
45 m_logLevel(Diagnostics),
46 m_log(),
47 m_baseCalendar( 0 )
48 {}
49 ~XMLLoaderObject() {}
50
51 void setProject(Project *proj) { m_project = proj; }
52 Project &project() const { return *m_project; }
53
54 QString version() const { return m_version; }
55 void setVersion( const QString &ver ) { m_version = ver; }
56
57 QString workVersion() const { return m_workversion; }
58 void setWorkVersion( const QString &ver ) { m_workversion = ver; }
59
60 QString mimetype() const { return m_mimetype; }
61 void setMimetype( const QString &mime ) { m_mimetype = mime; }
62
63 const KDateTime::Spec &projectSpec() const { return m_projectSpec; }
64 void setProjectSpec( const KDateTime::Spec &spec ) { m_projectSpec = spec; }
65
66 void startLoad() {
67 m_timer.start();
68 m_starttime = QDateTime::currentDateTime();
69 m_errors = m_warnings = 0;
70 m_log.clear();
71 addMsg(QString("Loading started at %1").arg(m_starttime.toString()));
72 }
73 void stopLoad() {
74 m_elapsed = m_timer.elapsed();
75 addMsg(QString("Loading finished at %1, took %2").arg(QDateTime::currentDateTime().toString()).arg(formatElapsed()));
76 }
77 QDateTime lastLoaded() const { return m_starttime; }
78 int elapsed() const { return m_elapsed; }
79 QString formatElapsed() { return QString("%1 seconds").arg((double)m_elapsed/1000); }
80
81 void setLogLevel(Severity sev) { m_logLevel = sev; }
82 const QStringList &log() const { return m_log; }
83 void error( QString msg ) { addMsg( Errors, msg ); }
84 void warning( QString msg ) { addMsg( Errors, msg ); }
85 void diagnostic( QString msg ) { addMsg( Diagnostics, msg ); }
86 void debug( QString msg ) { addMsg( Debug, msg ); }
87 void message( QString msg ) { addMsg( None, msg ); }
88 void addMsg(int sev, QString msg) {
89 increment(sev);
90 if (m_logLevel < sev) return;
91 QString s;
92 if (sev == Errors) s = "ERROR";
93 else if (sev == Warnings) s = "WARNING";
94 else if (sev == Diagnostics) s = "Diagnostic";
95 else if (sev == Debug) s = "Debug";
96 else s = "Message";
97 m_log<<QString("%1: %2").arg(s, 13).arg(msg);
98 }
99 void addMsg(QString msg) { m_log<<msg; }
100 void increment(int sev) {
101 if (sev == Errors) { incErrors(); return; }
102 if (sev == Warnings) { incWarnings(); return; }
103 }
104 void incErrors() { ++m_errors; }
105 int errors() const { return m_errors; }
106 bool error() const { return m_errors > 0; }
107 void incWarnings() { ++m_warnings; }
108 int warnings() const { return m_warnings; }
109 bool warning() const { return m_warnings > 0; }
110
111 // help to handle version < 0.6
112 void setBaseCalendar( Calendar *cal ) { m_baseCalendar = cal; }
113 Calendar *baseCalendar() const { return m_baseCalendar; }
114
115 void setUpdater( KoUpdater *updater ) { m_updater = updater; }
116 void setProgress( int value ) { if ( m_updater ) m_updater->setProgress( value ); }
117
118protected:
119 Project *m_project;
120 int m_errors;
121 int m_warnings;
122 int m_logLevel;
123 QStringList m_log;
124 QDateTime m_starttime;
125 QTime m_timer;
126 int m_elapsed;
127 QString m_version;
128 QString m_workversion;
129 QString m_mimetype;
130 KDateTime::Spec m_projectSpec;
131
132 Calendar *m_baseCalendar; // help to handle version < 0.6
133
134 QPointer<KoUpdater> m_updater;
135};
136
137} //namespace KPlato
138
139#endif
140