DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
file.hpp
Go to the documentation of this file.
1
10#ifndef OKS_FILE_H
11#define OKS_FILE_H
12
13#include "oks/exceptions.hpp"
14
15#include <string>
16#include <list>
17#include <set>
18#include <map>
19#include <memory>
20
21#include <boost/date_time/posix_time/ptime.hpp>
22
23#include <unordered_set>
24#include <unordered_map>
25
26
27namespace boost
28{
29 namespace interprocess
30 {
31 class file_lock;
32 }
33}
34
35namespace dunedaq {
36namespace oks {
37
38class OksXmlOutputStream;
39class OksXmlInputStream;
40class OksKernel;
41class OksFile;
42
48 class FileLockError : public exception {
49
50 public:
51
58 FileLockError(const OksFile& file, bool lock_action, const std::string& reason) noexcept : exception (fill(file, lock_action, reason), 0) { }
59
60 virtual ~FileLockError() noexcept { }
61
62
63 private:
64
65 static std::string fill(const OksFile& file, bool lock_action, const std::string& reason) noexcept;
66
67 };
68
69
74 class FileChangeError : public exception {
75
76 public:
77
79 FileChangeError(const OksFile& file, const std::string& action, const exception& reason) noexcept : exception (fill(file, action, reason.what()), reason.level() + 1) { }
80
82 FileChangeError(const OksFile& file, const std::string& action, const std::string& reason) noexcept : exception (fill(file, action, reason), 0) { }
83
84 virtual ~FileChangeError() noexcept { }
85
86
87 private:
88
89 static std::string fill(const OksFile& file, const std::string& action, const std::string& reason) noexcept;
90
91 };
92
93
98 class FileCompareError : public exception {
99
100 public:
101
103 FileCompareError(const std::string& src, const std::string& dest, const std::string& reason) noexcept : exception (fill(src, dest, reason), 0) { }
104
105 virtual ~FileCompareError() noexcept { }
106
107
108 private:
109
110 static std::string fill(const std::string& src, const std::string& dest, const std::string& reason) noexcept;
111
112 };
113
114
121
122 public:
123
125 FailedAddInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept : exception (fill(file, include_name, reason.what()), reason.level() + 1) { }
126
128 FailedAddInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept : exception (fill(file, include_name, reason), 0) { }
129
130 virtual ~FailedAddInclude() noexcept { }
131
132
133 private:
134
135 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
136
137 };
138
139
146
147 public:
148
150 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept : exception (fill(file, include_name, reason.what()), reason.level() + 1) { }
151
153 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept : exception (fill(file, include_name, reason), 0) { }
154
155 virtual ~FailedRemoveInclude() noexcept { }
156
157
158 private:
159
160 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
161
162 };
163
164
171
172 public:
173
175 FailedRenameInclude(const OksFile& file, const std::string& from, const std::string& to, const exception& reason) noexcept : exception (fill(file, from, to, reason.what()), reason.level() + 1) { }
176
178 FailedRenameInclude(const OksFile& file, const std::string& from, const std::string& to, const std::string& reason) noexcept : exception (fill(file, from, to, reason), 0) { }
179
180 virtual ~FailedRenameInclude() noexcept { }
181
182
183 private:
184
185 static std::string fill(const OksFile& file, const std::string& from, const std::string& to, const std::string& reason) noexcept;
186
187 };
188
189
196
197 public:
198
200 FailedAddComment(const OksFile& file, const exception& reason) noexcept : exception (fill(file, reason.what()), reason.level() + 1) { }
201
203 FailedAddComment(const OksFile& file, const std::string& reason) noexcept : exception (fill(file, reason), 0) { }
204
205 virtual ~FailedAddComment() noexcept { }
206
207
208 private:
209
210 static std::string fill(const OksFile& file, const std::string& reason) noexcept;
211
212 };
213
214
221
222 public:
223
225 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept : exception (fill(file, creation_time, reason.what()), reason.level() + 1) { }
226
228 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept : exception (fill(file, creation_time, reason), 0) { }
229
230 virtual ~FailedRemoveComment() noexcept { }
231
232
233 private:
234
235 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
236
237 };
238
239
246
247 public:
248
250 FailedChangeComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept : exception (fill(file, creation_time, reason.what()), reason.level() + 1) { }
251
253 FailedChangeComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept : exception (fill(file, creation_time, reason), 0) { }
254
255 virtual ~FailedChangeComment() noexcept { }
256
257
258 private:
259
260 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
261
262 };
263
264
270 class Comment {
271
272 friend class OksFile;
273
274 private:
275
277 Comment() noexcept { ; }
278
280 Comment(const std::string& text, const std::string& author);
281
283 Comment(const oks::Comment& src) noexcept;
284
285
286 public:
287
289 const std::string& get_created_by() const { return p_created_by; }
290
292 const std::string& get_author() const { return p_author; }
293
295 const std::string& get_created_on() const { return p_created_on; }
296
298 const std::string& get_text() const { return p_text; }
299
301 void validate(const std::string& creation_time);
302
304 void validate();
305
306
307 private:
308
309 std::string p_created_by;
310 std::string p_author;
311 std::string p_created_on;
312 std::string p_text;
313
314 };
315
317 {
318 inline size_t operator() ( const OksFile * x ) const {
319 return reinterpret_cast<size_t>(x);
320 }
321 };
322
324 {
325 inline bool operator()(const OksFile * __x, const OksFile * __y) const {
326 return (__x == __y);
327 }
328 };
329
330
340class OksFile {
341
342 friend class OksKernel;
343 friend class OksClass;
344 friend class OksObject;
345 friend struct OksLoadObjectsJob;
346
347 public:
348
353
360
361 struct SortByName {
362 bool operator() (const std::string * s1, const std::string * s2) const {
363 return *s1 < *s2;
364 }
365 };
366
367 typedef std::map<const std::string *, OksFile *, SortByName> Map;
368
369 typedef std::unordered_set<OksFile *, oks::hash_file_ptr, oks::equal_file_ptr> Set;
370 typedef std::unordered_map<OksFile *, Set, oks::hash_file_ptr, oks::equal_file_ptr> IMap;
371
381 void lock();
382
383 // Nasty hack to allow code generation on the fly without locking
384 // file. Off by default
385 static void set_nolock_mode(bool nl) {p_nolock_mode = nl;}
386
387
388
397 void unlock();
398
399
411 void add_include_file(const std::string& name);
412
413
427 void remove_include_file(const std::string& name);
428
429
442 void rename_include_file(const std::string& from, const std::string& to);
443
444
456 void add_comment(const std::string& text, const std::string& author);
457
458
471 void modify_comment(const std::string& creation_time, const std::string& text, const std::string& author);
472
473
484 void remove_comment(const std::string& creation_time);
485
486
489 const std::map<std::string, oks::Comment *>& get_comments() const {return p_comments;}
490
491
502 void set_logical_name(const std::string& name);
503
504
515 void set_type(const std::string& type);
516
517
518 const std::string& get_short_file_name() const {return p_short_name;}
519
520
523 const std::string& get_full_file_name() const {return p_full_name;}
524
525
540 bool is_repository_file() const;
541
542
550 const std::string& get_repository_name() const {return p_repository_name;}
551
552
559 const std::string&
561 {
562 return (!p_repository_name.empty() ? p_repository_name : p_full_name);
563 }
564
565 const std::string& get_lock_file() const { init_lock_name(); return p_lock_file_name; }
566 const std::string& get_logical_name() const {return p_logical_name;}
567 const std::string& get_type() const {return p_type;}
568 const std::string& get_oks_format() const {return p_oks_format;}
569
570
574
575
578 long get_size() const {return p_size;}
579
580
583 const std::string& get_created_by() const {return p_created_by;}
584
585
588 const boost::posix_time::ptime get_creation_time() const {return p_creation_time;}
589
590
593 const std::string& get_created_on() const {return p_created_on;}
594
595
598 const std::string& get_last_modified_by() const {return p_last_modified_by;}
599
600
603 const boost::posix_time::ptime get_last_modification_time() const {return p_last_modification_time;}
604
605
608 const std::string& get_last_modified_on() const {return p_last_modified_on;}
609
610
616 bool is_locked() const {return (p_lock != nullptr);}
617
618
624 bool is_updated() const {return p_is_updated;}
625
626
632 bool is_read_only() const {return p_is_read_only;}
633
634
640 const std::list<std::string>& get_include_files() const {return p_list_of_include_files;}
641
642
649 void get_all_include_files(const OksKernel * kernel, std::set<OksFile *>& out);
650
664
665
673 void update_status_of_file(bool update_local = true, bool update_repository = true);
674
675
685 bool get_lock_string(std::string& info) const;
686
687
697 static bool compare(const char * file1_name, const char * file2_name);
698
699
708 bool compare(const char * name) const { return compare(p_full_name.c_str(), name); }
709
710
717 const OksFile * get_parent() const { return p_included_by; }
718
719
727 OksFile * check_parent(const OksFile * parent_h);
728
729
730
731 public:
732
733 ~OksFile() noexcept;
734
735
736 private:
737 static bool p_nolock_mode; // Nasty hack mode
738
739 std::string p_short_name; // short path to file
740 std::string p_full_name; // path which is used to open file
741 std::string p_repository_name; // the name of file inside repository
742 std::string p_logical_name;// name of file, e.g. "Control Workstations"
743 std::string p_type; // type of file, e.g. "DCS"
744 std::string p_oks_format; // format of file: "data" or "schema"
745 long p_number_of_items; // number of objects or classes
746 long p_size; // size of file in bytes
748 boost::posix_time::ptime p_creation_time;
751 boost::posix_time::ptime p_last_modification_time;
754 std::shared_ptr<boost::interprocess::file_lock> p_lock;
755 std::string p_lock_file_name; // lock file
761 std::map<std::string, oks::Comment *> p_comments;
765
766 static const char xml_file_header[];
767 static const char xml_schema_file_dtd[];
768 static const char xml_data_file_dtd[];
769 static const char xml_info_tag[];
770 static const char xml_include_tag[];
771 static const char xml_file_tag[];
772 static const char xml_comments_tag[];
773 static const char xml_comment_tag[];
774
775
776 // only to be used by the friends
777
778 OksFile(
779 const std::string&, // file full path
780 const std::string&, // file logical name
781 const std::string&, // file type
782 const std::string&, // file oks-format
783 OksKernel *
784 );
785
786 OksFile& operator=(const OksFile &);
787
788 OksFile(const OksFile &f) { *this = f; }
789
790 OksFile(std::shared_ptr<OksXmlInputStream>, const std::string&, const std::string&, OksKernel *);
792
793 void set_updated() {p_is_updated = true;} // in-memory
794
795 void rename(const std::string& short_name, const std::string& full_name);
796 void rename(const std::string& full_name); // repository rename
797 void create_lock_name();
798 void init_lock_name() const { if(p_lock_file_name.empty()) const_cast<OksFile*>(this)->create_lock_name(); }
799 void check_repository();
800
801 std::string make_repository_name() const;
802
803 oks::Comment * get_comment(const std::string& creation_time) noexcept;
804
805 void clear_comments() noexcept;
806
807 std::list<std::string>::iterator find_include_file(const std::string&);
808
809};
810
811std::ostream& operator<<(std::ostream&, const OksFile&);
812std::ostream& operator<<(std::ostream&, const oks::Comment&);
813
814} // namespace oks
815} // namespace dunedaq
816#endif
The comment about file modification. A comment can be added when user saves file using OKS tools.
Definition file.hpp:270
std::string p_created_by
Definition file.hpp:309
Comment() noexcept
Definition file.hpp:277
std::string p_created_on
Definition file.hpp:311
std::string p_text
Definition file.hpp:312
std::string p_author
Definition file.hpp:310
const std::string & get_created_on() const
Definition file.hpp:295
const std::string & get_created_by() const
Definition file.hpp:289
const std::string & get_text() const
Definition file.hpp:298
const std::string & get_author() const
Definition file.hpp:292
Cannot add comment. Such exception is thrown when OKS cannot add new comment.
Definition file.hpp:195
FailedAddComment(const OksFile &file, const exception &reason) noexcept
Definition file.hpp:200
static std::string fill(const OksFile &file, const std::string &reason) noexcept
Definition file.cpp:216
FailedAddComment(const OksFile &file, const std::string &reason) noexcept
Definition file.hpp:203
virtual ~FailedAddComment() noexcept
Definition file.hpp:205
Cannot add include file. Such exception is thrown when OKS cannot add include file.
Definition file.hpp:120
FailedAddInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:125
FailedAddInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:128
virtual ~FailedAddInclude() noexcept
Definition file.hpp:130
static std::string fill(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.cpp:198
Cannot change comment. Such exception is thrown when OKS cannot change comment.
Definition file.hpp:245
FailedChangeComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:250
FailedChangeComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:253
virtual ~FailedChangeComment() noexcept
Definition file.hpp:255
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:228
Cannot remove comment. Such exception is thrown when OKS cannot remove comment.
Definition file.hpp:220
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:222
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:225
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:228
virtual ~FailedRemoveComment() noexcept
Definition file.hpp:230
Cannot remove include file. Such exception is thrown when OKS cannot remove include file.
Definition file.hpp:145
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:150
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:153
virtual ~FailedRemoveInclude() noexcept
Definition file.hpp:155
static std::string fill(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.cpp:204
Cannot rename include file. Such exception is thrown when OKS cannot rename include file.
Definition file.hpp:170
FailedRenameInclude(const OksFile &file, const std::string &from, const std::string &to, const std::string &reason) noexcept
Definition file.hpp:178
static std::string fill(const OksFile &file, const std::string &from, const std::string &to, const std::string &reason) noexcept
Definition file.cpp:210
virtual ~FailedRenameInclude() noexcept
Definition file.hpp:180
FailedRenameInclude(const OksFile &file, const std::string &from, const std::string &to, const exception &reason) noexcept
Definition file.hpp:175
FileChangeError(const OksFile &file, const std::string &action, const exception &reason) noexcept
Definition file.hpp:79
virtual ~FileChangeError() noexcept
Definition file.hpp:84
FileChangeError(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.hpp:82
static std::string fill(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.cpp:240
FileCompareError(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.hpp:103
virtual ~FileCompareError() noexcept
Definition file.hpp:105
static std::string fill(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.cpp:246
Cannot add include file. Such exception is thrown when OKS cannot add include file.
Definition file.hpp:48
virtual ~FileLockError() noexcept
Definition file.hpp:60
FileLockError(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.hpp:58
static std::string fill(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.cpp:234
The OKS class.
Definition class.hpp:200
Provides interface to the OKS XML schema and data files.
Definition file.hpp:340
std::unordered_map< OksFile *, Set, oks::hash_file_ptr, oks::equal_file_ptr > IMap
Definition file.hpp:370
static bool compare(const char *file1_name, const char *file2_name)
Compare two files.
Definition file.cpp:1514
static const char xml_schema_file_dtd[]
Definition file.hpp:767
bool compare(const char *name) const
Compare with another file.
Definition file.hpp:708
std::shared_ptr< boost::interprocess::file_lock > p_lock
Definition file.hpp:754
const std::string & get_created_by() const
Definition file.hpp:583
std::string p_lock_file_name
Definition file.hpp:755
std::list< std::string >::iterator find_include_file(const std::string &)
Definition file.cpp:1172
std::string p_oks_format
Definition file.hpp:744
static const char xml_comments_tag[]
Definition file.hpp:772
const std::string & get_logical_name() const
Definition file.hpp:566
void unlock()
Unlock OKS file.
Definition file.cpp:1143
void add_include_file(const std::string &name)
Add include file.
Definition file.cpp:1194
time_t p_repository_last_modified
Definition file.hpp:760
OksFile(const std::string &, const std::string &, const std::string &, const std::string &, OksKernel *)
Definition file.cpp:252
oks::Comment * get_comment(const std::string &creation_time) noexcept
Definition file.cpp:705
long get_number_of_items() const
Definition file.hpp:573
void get_all_include_files(const OksKernel *kernel, std::set< OksFile * > &out)
Get all include files.
Definition file.cpp:1466
void lock()
Lock OKS file.
Definition file.cpp:1012
void write(OksXmlOutputStream &)
Definition file.cpp:767
std::string p_created_by
Definition file.hpp:747
void set_type(const std::string &type)
Set file type.
Definition file.cpp:1296
static void set_nolock_mode(bool nl)
Definition file.hpp:385
void init_lock_name() const
Definition file.hpp:798
bool get_lock_string(std::string &info) const
Return lock status of OKS file and if the file is locked, get information string about process which ...
Definition file.cpp:984
static const char xml_data_file_dtd[]
Definition file.hpp:768
std::unordered_set< OksFile *, oks::hash_file_ptr, oks::equal_file_ptr > Set
Definition file.hpp:369
std::string make_repository_name() const
Definition file.cpp:1378
const std::string & get_created_on() const
Definition file.hpp:593
bool is_locked() const
Return lock status of OKS file.
Definition file.hpp:616
std::string p_short_name
Definition file.hpp:739
static bool p_nolock_mode
Definition file.hpp:737
const std::string & get_type() const
Definition file.hpp:567
std::map< std::string, oks::Comment * > p_comments
Definition file.hpp:761
const std::string & get_short_file_name() const
Definition file.hpp:518
boost::posix_time::ptime p_last_modification_time
Definition file.hpp:751
const std::list< std::string > & get_include_files() const
Get directly include files.
Definition file.hpp:640
std::list< std::string > p_list_of_include_files
Definition file.hpp:758
boost::posix_time::ptime p_creation_time
Definition file.hpp:748
std::string p_logical_name
Definition file.hpp:742
const std::string & get_repository_name() const
Get name of file inside repository.
Definition file.hpp:550
void remove_comment(const std::string &creation_time)
Modify existing comment.
Definition file.cpp:746
void set_logical_name(const std::string &name)
Set logical name of file.
Definition file.cpp:1279
std::string p_repository_name
Definition file.hpp:741
std::string p_last_modified_by
Definition file.hpp:750
OksKernel * p_kernel
Definition file.hpp:764
void add_comment(const std::string &text, const std::string &author)
Add new comment to file.
Definition file.cpp:669
void update_status_of_file(bool update_local=true, bool update_repository=true)
Update status of file.
Definition file.cpp:1391
const std::string & get_last_modified_by() const
Definition file.hpp:598
bool is_updated() const
Return update status of OKS file.
Definition file.hpp:624
std::string p_full_name
Definition file.hpp:740
const OksFile * get_parent() const
Return parent including given file.
Definition file.hpp:717
bool is_read_only() const
Return read-only status of OKS file.
Definition file.hpp:632
const boost::posix_time::ptime get_last_modification_time() const
Definition file.hpp:603
std::string p_type
Definition file.hpp:743
bool is_repository_file() const
Get information about repository, the file belongs to.
Definition file.cpp:909
~OksFile() noexcept
Definition file.cpp:290
void create_lock_name()
Definition file.cpp:954
void check_repository()
Definition file.cpp:915
const std::string & get_oks_format() const
Definition file.hpp:568
void clear_comments() noexcept
Definition file.cpp:280
static const char xml_file_tag[]
Definition file.hpp:771
OksFile * check_parent(const OksFile *parent_h)
Set given parent, if this file is not yet included.
Definition file.cpp:1183
const OksFile * p_included_by
Definition file.hpp:763
static const char xml_comment_tag[]
Definition file.hpp:773
std::string p_last_modified_on
Definition file.hpp:752
const std::string & get_lock_file() const
Definition file.hpp:565
void modify_comment(const std::string &creation_time, const std::string &text, const std::string &author)
Definition file.cpp:712
const std::string & get_full_file_name() const
Definition file.hpp:523
const std::string & get_last_modified_on() const
Definition file.hpp:608
void rename_include_file(const std::string &from, const std::string &to)
Rename include file.
Definition file.cpp:1251
static const char xml_file_header[]
Definition file.hpp:766
std::string p_created_on
Definition file.hpp:749
FileStatus get_status_of_file() const
Return update status of file.
Definition file.cpp:1413
static const char xml_include_tag[]
Definition file.hpp:770
void rename(const std::string &short_name, const std::string &full_name)
Definition file.cpp:1449
long get_size() const
Definition file.hpp:578
const std::map< std::string, oks::Comment * > & get_comments() const
Definition file.hpp:489
const std::string & get_well_formed_name() const
Get well-formed file name.
Definition file.hpp:560
void remove_include_file(const std::string &name)
Remove include file.
Definition file.cpp:1223
const boost::posix_time::ptime get_creation_time() const
Definition file.hpp:588
static const char xml_info_tag[]
Definition file.hpp:769
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:367
Provides interface to the OKS kernel.
Definition kernel.hpp:577
OksObject describes instance of OksClass.
Definition object.hpp:836
caught dunedaq::conffwk::Exception exception
Definition file.hpp:28
Including Qt Headers.
FELIX Initialization std::string initerror FELIX queue timed out
Definition __init__.py:1
bool operator()(const std::string *s1, const std::string *s2) const
Definition file.hpp:362
bool operator()(const OksFile *__x, const OksFile *__y) const
Definition file.hpp:325
size_t operator()(const OksFile *x) const
Definition file.hpp:318