[doc_tool] Moved executing of external programms from Model to FSHelper
[hsd_doku_tool.git] / src / FSHelper.h
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: FSHelper.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 26.04.2018
5 // Description: Diese Klasse stellt plattformunabhängige funktionen auf das
6 //              Dateisystem zur verfügung. Bei fehler werden exeptions
7 //              des Typs std::string geworfen.
8 // Remarks: -
9 ///////////////////////////////////////////////////////////////////////////
10 #ifndef FSHELPER_H_INCLUDED
11 #define FSHELPER_H_INCLUDED
12
13 #include <iostream>
14 #include <vector>
15 #include "Object.h"
16
17
18 /////////////////////////////////////////////////
19 /// \brief Diese Klasse beinhaltet Dateisystemfunktionen
20 ///        Basierend auf C++11 und POSIX-1 standart und funktinieren
21 ///        somit auf Windows und Linux.
22 /////////////////////////////////////////////////
23 class FSHelper : public Object
24 {
25 public:
26 /////////////////////////////////////////////////
27 /// \brief Typedef für eine Datei. String Paar
28 ///        für Ordner und Dateiname.
29 /////////////////////////////////////////////////
30     using File = std::pair<std::string, std::string>;
31
32 /////////////////////////////////////////////////
33 /// \brief Diese funktion gibt alle Deteien eines
34 ///        Ordners zurück.
35 /// \param src Ordner dessen Dateien zurückgegeben
36 ///        werden sollen.
37 /// \return Vector mit string Paaren der Dateien im
38 ///         gegebenen Verzeichnis beinhaltet.
39 /////////////////////////////////////////////////
40     std::vector<File> listFiles(std::string const &src);
41
42 /////////////////////////////////////////////////
43 /// \brief Überprüft ob Ordner existiert
44 /// \param dir Ordner
45 /// \return bool true wenn Ordner existiert,
46 ///         ansonsten false.
47 /////////////////////////////////////////////////
48     bool dirExists(std::string const &dir);
49
50 /////////////////////////////////////////////////
51 /// \brief Überprüft ob Datei existiert
52 /// \param file Datei
53 /// \return bool true wenn Datei existiert,
54 ///         ansonsten false.
55 /////////////////////////////////////////////////
56     bool fileExists(std::string const &file);
57
58 /////////////////////////////////////////////////
59 /// \brief Diese funktion kopiert eine Datei.
60 /// \param src Quelldatei
61 /// \param dest Zieldatei
62 /////////////////////////////////////////////////
63     void copyFile(std::string const &src, std::string const &dest);
64
65 /////////////////////////////////////////////////
66 /// \brief Diese funktion kopiert einen Ordner.
67 /// \param src Quellordner
68 /// \param dest Zielordner
69 /////////////////////////////////////////////////
70     void copyDir(std::string const &src, std::string const &dest);
71
72 /////////////////////////////////////////////////
73 /// \brief Gibt aktuelles Arbeitsverzeichnis zurück.
74 /// \return aktuelles Arbeitsverzeichnis.
75 /////////////////////////////////////////////////
76     std::string getCurrentWorkingDir();
77
78 /////////////////////////////////////////////////
79 /// \brief Strenge Dateinamenüberprüfung. Überprüft
80 ///        Dateinamen auf untypische zeichen.
81 /// \param src Dateiname
82 /// \return bool true wenn Dateiname kein untypisches
83 ///         Zeichen beinhaltet, ansonsten false.
84 /////////////////////////////////////////////////
85     bool validFileName(std::string const &fName);
86
87 /////////////////////////////////////////////////
88 /// \brief Ersetzt alle / mit \\
89 /// \param dir Zu verarbeitender pfad
90 /// \return pfad mit ersetzten Zeichen
91 /////////////////////////////////////////////////
92     std::string convertPathToWindows(std::string dir);
93
94 /////////////////////////////////////////////////
95 /// \brief Ersetzt alle \\ mit /
96 /// \param dir Zu verarbeitender pfad
97 /// \return pfad mit ersetzten Zeichen
98 /////////////////////////////////////////////////
99     std::string convertPathToUnix(std::string dir);
100
101 /////////////////////////////////////////////////
102 /// \brief Fügt, falls fehlend, einen Slash an
103 ///        das ende eines Pfades.
104 /// \param dir pfad
105 /// \return pfad garantiert mit slash am ende
106 /////////////////////////////////////////////////
107     std::string addDirLastSlash(std::string const& dir);
108
109 /////////////////////////////////////////////////
110 /// \brief Entfernt, falls existent, einen Slash
111 ///        am ende eines Pfades.
112 /// \param dir pfad
113 /// \return pfad garantiert ohne slash am ende
114 /////////////////////////////////////////////////
115     std::string rmDirLastSlash(std::string const& dir);
116
117 /////////////////////////////////////////////////
118 /// \brief Erstellt einen Ordner.
119 /// \param dir pfad des zu erstellenden Ordners.
120 /////////////////////////////////////////////////
121     void makeDir(std::string const& dir);
122
123 /////////////////////////////////////////////////
124 /// \brief Erstellt eine Datei.
125 /// \param dir pfad der zu erstellenden Datei.
126 /////////////////////////////////////////////////
127     void createFile(std::string const& path);
128
129 /////////////////////////////////////////////////
130 /// \brief Diese funktion gibt alle Deteien eines
131 ///        Ordners und dessen Unterordner zurück.
132 /// \param [IN] src Ordner dessen Dateien zurückgegeben
133 ///        werden sollen.
134 /// \param [OUT] files Vektor mit String Paaren aller gefundenen Dateien
135 ///              und deren Pfad.
136 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
137 ///        durchsucht werden sollen. (true ja,
138 ///        false nein)
139 /// \return true bei erfolg, false bei fehler
140 /////////////////////////////////////////////////
141     bool listFilesRecursive(const std::string& path, std::vector<FSHelper::File>& files,const bool showHiddenDirs);
142
143 /////////////////////////////////////////////////
144 /// \brief Diese funktion gibt rekursiv alle Unterordner eines
145 ///        Ordners zurück.
146 /// \param [IN] src Ordner dessen Dateien zurückgegeben
147 ///        werden sollen.
148 /// \param [OUT] string Vektor mit allen gefundenen Ordnern
149 /// \param [IN] Optional, Gibt an ob auch versteckte Unterordner
150 ///        durchsucht werden sollen. (true ja,
151 ///        false nein)
152 /// \return true bei erfolg, false bei fehler
153 /////////////////////////////////////////////////
154     bool listDirsRecursive(const std::string& path, std::vector<std::string>& dirs,const bool showHiddenDirs);
155
156 /////////////////////////////////////////////////
157 /// \brief Diese funktion führt einen Befehl/ein Programm
158 ///        aus.
159 /// \param path Pfad in dem der Befehl ausgeführt werden soll
160 /// \param command Auszuführender Befehl
161 /// \param params Bafehlsparameter
162 /// \param log optional, Pfad zu einer datei, in der die Konsolenausgabe
163 ///        des Befehls geschrieben werden soll.
164 /////////////////////////////////////////////////
165     void executeCommand(const std::string& path, const std::string& command, std::vector<std::string> params, std::string log = "");
166
167 /////////////////////////////////////////////////
168 /// \brief Diese funktion setzt einen Dynamischen
169 ///        Loader, der für das ausführen von Programmen
170 ///        mit executeCommand auf Linux Systemen
171 ///        verwendet werden soll.
172 /// \param Loader Pfad zum Loader
173 /////////////////////////////////////////////////
174     void setLinuxDynLoader(std::string Loader);
175
176 /////////////////////////////////////////////////
177 /// \brief Diese funktion gibt den gesetzten Loader
178 ///        retour.
179 /// \return gesetzter Loader
180 /////////////////////////////////////////////////
181     std::string getLinuxDynLoader();
182
183 /////////////////////////////////////////////////
184 /// \brief Diese funktion entfernt einen gesetzten Loader.
185 ///        Programme die mit executeCommand ausgeführt
186 ///        werden, verwenden dann den standard Loader
187 ///        des Systems.
188 /////////////////////////////////////////////////
189     void removeLinuxDynLoader();
190
191 /////////////////////////////////////////////////
192 /// \brief Durchsucht PATH nach übergebenem Kommando.
193 ///        Gibt vollständigen Pfad zur Datei des Kommandos
194 ///        retour.
195 /// \param executable Kommando dessen executable gesucht werden soll
196 /// \return vollständiger Pfad zur executable.
197 /////////////////////////////////////////////////
198     std::string findExecutableInPath(std::string executable);
199
200 private:
201     std::string mLinuxDynLoader;
202
203 };
204
205 #endif // FSHELPER_H_INCLUDED