[doc_tool] Moved executing of external programms from Model to FSHelper
[hsd_doku_tool.git] / src / Model.h
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: Model.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 25.03.2018
5 // Description: Diese Klasse stellt die Daten und Programmlogik dieses
6 //              Programmes dar.
7 // Remarks:
8 ///////////////////////////////////////////////////////////////////////////
9 #ifndef MODEL_H
10 #define MODEL_H
11
12 #include "ModelIF.h"
13 #include "tinyxml2.h"
14 #include "Chapter.h"
15 #include "Author.h"
16 #include "FSHelper.h"
17 #include <vector>
18 #include <list>
19
20 /////////////////////////////////////////////////
21 /// \brief Implementierung des Model
22 ///        Interfaces. Implementiert alle
23 ///        im Interface definierten funktionen.
24 ///        Diese Klasse stellt die Daten und Programmlogik dieses
25 ///        Programmes dar und stellt neben den Interface Funktionen
26 ///        auch Funktionen zum erhalt von Daten und Befehlen von
27 ///        einem Controller zur verfügung.
28 /////////////////////////////////////////////////
29 class Model : public ModelIF
30 {
31 public:
32
33
34     /////////////////////////////////////////////////
35     /// \brief Konstruktor für ein Model Objekt
36     /// \param confDir Ordner der die Konfigurationen beinhlatet.
37     /// \param help ein configuriertes FSHelper Objekt
38     /// \param log Name der logging Datei (Ohne Pfad!)
39     ///        Wird im Ausgabeordner gespeichert.
40     ///        (siehe getOutPath)
41     /////////////////////////////////////////////////
42     Model(std::string confDir, FSHelper help, std::string log);
43
44     // Destruktor
45     virtual ~Model() = default;
46
47     /////////////////////////////////////////////////
48     /// \brief Öffne template Datei und Lade die einstellungen
49     ///        in die Internen Strukturen.
50     /// \param templFile gewähltes Template Datei.
51     /////////////////////////////////////////////////
52     void setTemplFile(std::string templFile);
53
54     /////////////////////////////////////////////////
55     /// \brief Wähle Ausgabeordner.
56     /// \param outPath Ausgabeordner
57     /////////////////////////////////////////////////
58     void setOutPath(std::string outPath);
59
60     /////////////////////////////////////////////////
61     /// \brief Erzeuge Latex Dateien und .pdf im
62     ///        Ausgabeordner.
63     /////////////////////////////////////////////////
64     void generateDocument();
65
66     /////////////////////////////////////////////////
67     /// \brief Lade Kapitel aus interner Struktur.
68     /// \param chapterNum Kapitelnummer.
69     /////////////////////////////////////////////////
70     void loadChapter(int num);
71
72     /////////////////////////////////////////////////
73     /// \brief Lade Author aus interner Struktur.
74     /// \param chapterNum Kapitelnummer.
75     /////////////////////////////////////////////////
76     void loadAuthor(int num);
77
78     /////////////////////////////////////////////////
79     /// \brief Konfiguriere den Namen der Dokumentgruppe
80     /// \param name Dokumentgruppenname
81     /////////////////////////////////////////////////
82     void setSubjectName(std::string name);
83
84     /////////////////////////////////////////////////
85     /// \brief Sortiere ausgewähltes Kapitel eine
86     ///        Stelle nach oben.
87     /////////////////////////////////////////////////
88     void chapterUp();
89
90     /////////////////////////////////////////////////
91     /// \brief Sortiere ausgewähltes Kapitel eine
92     ///        Stelle nach unten.
93     /////////////////////////////////////////////////
94     void chapterDown();
95
96     /////////////////////////////////////////////////
97     /// \brief Füge ein neues Kapitel am Ende der
98     ///        Kapitelliste hinzu.
99     /// \param chaptName Name des Kapitels
100     /// \param outFileName name der Ausgabedatei.
101     /////////////////////////////////////////////////
102     void chapterInsertBack(std::string chaptName, std::string outFileName);
103
104     /////////////////////////////////////////////////
105     /// \brief Lösche intern ausgewähltes Kapitel.
106     /////////////////////////////////////////////////
107     void chapterRemove();
108
109     /////////////////////////////////////////////////
110     /// \brief Lösche intern ausgewählten Authoren.
111     /////////////////////////////////////////////////
112     void authorRemove();
113
114     /////////////////////////////////////////////////
115     /// \brief Füge einen Authoren am Ende der
116     ///        internen Liste hinzu.
117     /////////////////////////////////////////////////
118     void authorInsertBack();
119
120     /////////////////////////////////////////////////
121     /// \brief Speichere einstellungen, Kapitel und
122     ///        Authoren als .xml template in den
123     ///        Ausgabeordner.
124     /////////////////////////////////////////////////
125     void saveTemplFile();
126
127     /////////////////////////////////////////////////
128     /// \brief Konfiguriere ob Dokument ein Angabeblatt
129     ///        besitzt.
130     /// \param bool true -> ja, false -> nein
131     /////////////////////////////////////////////////
132     void setAddCoverSheet(bool val);
133
134     /////////////////////////////////////////////////
135     /// \brief Konfiguriere ob Dokument ein Quellcode
136     ///        Kapitel besitzt.
137     /// \param bool true -> ja, false -> nein
138     /////////////////////////////////////////////////
139     void setAddSource(bool val);
140
141     /////////////////////////////////////////////////
142     /// \brief Konfiguriere ob Dokument ein Doxygen
143     ///        Kapitel besitzt.
144     /// \param bool true -> ja, false -> nein
145     /////////////////////////////////////////////////
146     void setGenDoxygen(bool val);
147
148     /////////////////////////////////////////////////
149     /// \brief Konfiguriere Kapitelnamen des Quellcode
150     ///        Kapitels.
151     /// \param name Kapitelname
152     /////////////////////////////////////////////////
153     void setSourceChapterName(std::string name);
154
155     /////////////////////////////////////////////////
156     /// \brief Konfiguriere Kapitelnamen des Doxygen
157     ///        Kapitels.
158     /// \param name Kapitelname
159     /////////////////////////////////////////////////
160     void setDoxygenName(std::string name);
161
162     /////////////////////////////////////////////////
163     /// \brief Setzte die X Deckblattkoordinaten für
164     ///        die Arbeitsgruppe
165     /// \param x X Koordinate
166     /////////////////////////////////////////////////
167     void setDepartmentX(unsigned int x);
168
169     /////////////////////////////////////////////////
170     /// \brief Setzte die Y Deckblattkoordinaten für
171     ///        die Arbeitsgruppe
172     /// \param y Y Koordinate
173     /////////////////////////////////////////////////
174     void setDepartmentY(unsigned int y);
175
176     /////////////////////////////////////////////////
177     /// \brief Wähle Quellcode Ordner.
178     /// \param path Quellcode Ordner.
179     /////////////////////////////////////////////////
180     void setSourceDir(std::string path);
181
182     /////////////////////////////////////////////////
183     /// \brief Wähle Angabeblatt.
184     /// \param file Angabeblatt
185     /////////////////////////////////////////////////
186     void setCovSheet(std::string file);
187
188     /////////////////////////////////////////////////
189     /// \brief Konfiguriere dan Namen des Verfassungsortes.
190     /// \param location name Ortsname
191     /////////////////////////////////////////////////
192     void setLocation(std::string location);
193
194     /////////////////////////////////////////////////
195     /// \brief Konfiguriere dan Namen der Arbeitsgruppe.
196     /// \param department name Arbeitsgruppenname
197     /////////////////////////////////////////////////
198     void setDepartment(std::string department);
199
200     /////////////////////////////////////////////////
201     /// \brief Speichere Alle Kapiteltexte in die
202     ///        Jeweiligen Dateien.
203     /////////////////////////////////////////////////
204     void saveChaptersToFiles();
205
206     void newTemplate(std::string name);
207
208     /////////////////////////////////////////////////
209     /// \brief Konfiguriere den Namen des Dokuments
210     /// \param name Dokumentname
211     /////////////////////////////////////////////////
212     void setDocName(std::string name);
213
214     /////////////////////////////////////////////////
215     /// \brief Wähle Dateiendungen der Header Quellcode Dateien
216     /// \param fileExt Dateiendung für Header Dateien (z.B. .h)
217     /////////////////////////////////////////////////
218     void setHeaderFileExtension(std::string fileExt);
219
220     /////////////////////////////////////////////////
221     /// \brief Wähle Dateiendungen der Source Quellcode Dateien
222     /// \param fileExt Dateiendung für Source Dateien (z.B. .cpp)
223     /////////////////////////////////////////////////
224     void setSourceFileExtension(std::string fileExt);
225
226     /////////////////////////////////////////////////
227     /// \brief Setzt dateinamen (Ohne Pfad!) für loggng Datei.
228     /// \param log Dateiname der Logging Datei.
229     /////////////////////////////////////////////////
230     void setLogFile(std::string log);
231     // ---------- Implementierung Interface ---------------
232     std::list<std::string> getChapterNames() override;
233     std::list<std::string> getAuthorNames() override;
234     std::string getLocation() override;
235     std::string getDepartment() override;
236     std::string getConfDir() override;
237     bool getGenerateEnable() override;
238     std::string getDocName() override;
239     std::string getHeaderFileExtension() override;
240     std::string getSourceFileExtension() override;
241     int getDepartmentX() override;
242     int getDepartmentY() override;
243     std::string getOutPath() override;
244     int getChapterNum() override;
245     int getAuthorNum() override;
246     int getNumChapters() override;
247     int getNumFinishedChapters() override;
248     std::string getSubjectName() override;
249     bool shouldAddCoverSheet() override;
250     bool shouldAddSource() override;
251     bool shouldGenDoxygen() override;
252     std::string getSourceChapterName() override;
253     std::string getDoxygenName() override;
254     std::string getSourceDir() override;
255     std::string getCovSheet() override;
256     Author::SPtr getSelAuthor() override;
257     Chapter::SPtr getSelChapter() override;
258     std::string getLogFile() override;
259
260 private:
261     std::string mTemplFileString;
262     std::string mOutPath;
263     std::string mLogFile;
264     std::string mSourcePath;
265     std::string mCoverSheet;
266     std::string mConfDir;
267     std::string mDocName;
268     std::string mSubject;
269     std::string mLocation;
270
271
272     std::string mDepartment;
273     unsigned int mDepartmentX;
274     unsigned int mDepartmentY;
275
276     std::string mHeaderExtension;
277     std::string mSourceExtension;
278
279     bool mDoxygen;
280     std::string mDoxygenName;
281     bool mSourceChapter;
282     std::string mSourceChapterName;
283     bool mHasCoverSheet;
284
285     // Geladenes Kapitel
286     int mChapterNum;
287
288     // Geladener Author
289     int mAuthorNum;
290
291     std::vector<Author::SPtr> mAuthors;
292     std::vector<Chapter::SPtr> mChapters;
293
294     tinyxml2::XMLDocument mTemplFile;
295
296     /////////////////////////////////////////////////
297     /// \brief Diese funktion überprüft den Rückgabewert
298     ///        Wert des XML parsers und wirft bei
299     ///        einem erkannten Fehler einen passenden
300     ///        exception string.
301     /// \param error Rückgabewert des XML Parsers.
302     /////////////////////////////////////////////////
303     void throwXmlError(tinyxml2::XMLError err);
304
305     void clearMembers();
306
307     FSHelper mFSHelp;
308
309 };
310
311 #endif // MODEL_H