DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
file.hpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS oks source for the DUNE DAQ project.
3// Fork baseline commit: oks-08-03-04 (2022-04-14).
4// Renamed since fork: yes (from oks/file.h to include/oks/file.hpp).
5
14
15#ifndef OKS_FILE_H
16#define OKS_FILE_H
17
18#include "oks/exceptions.hpp"
19
20#include <string>
21#include <list>
22#include <set>
23#include <map>
24#include <memory>
25
26#include <boost/date_time/posix_time/ptime.hpp>
27
28#include <unordered_set>
29#include <unordered_map>
30
31
32namespace boost
33{
34 namespace interprocess
35 {
36 class file_lock;
37 }
38}
39
40namespace dunedaq {
41namespace oks {
42
43class OksXmlOutputStream;
44class OksXmlInputStream;
45class OksKernel;
46class OksFile;
47
52
53 class FileLockError : public exception {
54
55 public:
56
62
63 FileLockError(const OksFile& file, bool lock_action, const std::string& reason) noexcept : exception (fill(file, lock_action, reason), 0) { }
64
65 virtual ~FileLockError() noexcept { }
66
67
68 private:
69
70 static std::string fill(const OksFile& file, bool lock_action, const std::string& reason) noexcept;
71
72 };
73
74
78
79 class FileChangeError : public exception {
80
81 public:
82
84 FileChangeError(const OksFile& file, const std::string& action, const exception& reason) noexcept : exception (fill(file, action, reason.what()), reason.level() + 1) { }
85
87 FileChangeError(const OksFile& file, const std::string& action, const std::string& reason) noexcept : exception (fill(file, action, reason), 0) { }
88
89 virtual ~FileChangeError() noexcept { }
90
91
92 private:
93
94 static std::string fill(const OksFile& file, const std::string& action, const std::string& reason) noexcept;
95
96 };
97
98
102
104
105 public:
106
108 FileCompareError(const std::string& src, const std::string& dest, const std::string& reason) noexcept : exception (fill(src, dest, reason), 0) { }
109
110 virtual ~FileCompareError() noexcept { }
111
112
113 private:
114
115 static std::string fill(const std::string& src, const std::string& dest, const std::string& reason) noexcept;
116
117 };
118
119
124
126
127 public:
128
130 FailedAddInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept : exception (fill(file, include_name, reason.what()), reason.level() + 1) { }
131
133 FailedAddInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept : exception (fill(file, include_name, reason), 0) { }
134
135 virtual ~FailedAddInclude() noexcept { }
136
137
138 private:
139
140 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
141
142 };
143
144
149
151
152 public:
153
155 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept : exception (fill(file, include_name, reason.what()), reason.level() + 1) { }
156
158 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept : exception (fill(file, include_name, reason), 0) { }
159
160 virtual ~FailedRemoveInclude() noexcept { }
161
162
163 private:
164
165 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
166
167 };
168
169
174
176
177 public:
178
180 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) { }
181
183 FailedRenameInclude(const OksFile& file, const std::string& from, const std::string& to, const std::string& reason) noexcept : exception (fill(file, from, to, reason), 0) { }
184
185 virtual ~FailedRenameInclude() noexcept { }
186
187
188 private:
189
190 static std::string fill(const OksFile& file, const std::string& from, const std::string& to, const std::string& reason) noexcept;
191
192 };
193
194
199
201
202 public:
203
205 FailedAddComment(const OksFile& file, const exception& reason) noexcept : exception (fill(file, reason.what()), reason.level() + 1) { }
206
208 FailedAddComment(const OksFile& file, const std::string& reason) noexcept : exception (fill(file, reason), 0) { }
209
210 virtual ~FailedAddComment() noexcept { }
211
212
213 private:
214
215 static std::string fill(const OksFile& file, const std::string& reason) noexcept;
216
217 };
218
219
224
226
227 public:
228
230 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept : exception (fill(file, creation_time, reason.what()), reason.level() + 1) { }
231
233 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept : exception (fill(file, creation_time, reason), 0) { }
234
235 virtual ~FailedRemoveComment() noexcept { }
236
237
238 private:
239
240 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
241
242 };
243
244
249
251
252 public:
253
255 FailedChangeComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept : exception (fill(file, creation_time, reason.what()), reason.level() + 1) { }
256
258 FailedChangeComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept : exception (fill(file, creation_time, reason), 0) { }
259
260 virtual ~FailedChangeComment() noexcept { }
261
262
263 private:
264
265 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
266
267 };
268
269
274
275 class Comment {
276
277 friend class OksFile;
278
279 private:
280
282 Comment() noexcept { ; }
283
285 Comment(const std::string& text, const std::string& author);
286
288 Comment(const oks::Comment& src) noexcept;
289
290
291 public:
292
294 const std::string& get_created_by() const { return p_created_by; }
295
297 const std::string& get_author() const { return p_author; }
298
300 const std::string& get_created_on() const { return p_created_on; }
301
303 const std::string& get_text() const { return p_text; }
304
306 void validate(const std::string& creation_time);
307
309 void validate();
310
311
312 private:
313
314 std::string p_created_by;
315 std::string p_author;
316 std::string p_created_on;
317 std::string p_text;
318
319 };
320
322 {
323 inline size_t operator() ( const OksFile * x ) const {
324 return reinterpret_cast<size_t>(x);
325 }
326 };
327
329 {
330 inline bool operator()(const OksFile * __x, const OksFile * __y) const {
331 return (__x == __y);
332 }
333 };
334
335
344
345class OksFile {
346
347 friend class OksKernel;
348 friend class OksClass;
349 friend class OksObject;
350 friend struct OksLoadObjectsJob;
351
352 public:
353
358
365
366 struct SortByName {
367 bool operator() (const std::string * s1, const std::string * s2) const {
368 return *s1 < *s2;
369 }
370 };
371
372 typedef std::map<const std::string *, OksFile *, SortByName> Map;
373
374 typedef std::unordered_set<OksFile *, oks::hash_file_ptr, oks::equal_file_ptr> Set;
375 typedef std::unordered_map<OksFile *, Set, oks::hash_file_ptr, oks::equal_file_ptr> IMap;
376
385
386 void lock();
387
388 // Nasty hack to allow code generation on the fly without locking
389 // file. Off by default
390 static void set_nolock_mode(bool nl) {p_nolock_mode = nl;}
391
392
393
401
402 void unlock();
403
404
415
416 void add_include_file(const std::string& name);
417
418
431
432 void remove_include_file(const std::string& name);
433
434
446
447 void rename_include_file(const std::string& from, const std::string& to);
448
449
460
461 void add_comment(const std::string& text, const std::string& author);
462
463
475
476 void modify_comment(const std::string& creation_time, const std::string& text, const std::string& author);
477
478
488
489 void remove_comment(const std::string& creation_time);
490
491
493
494 const std::map<std::string, oks::Comment *>& get_comments() const {return p_comments;}
495
496
506
507 void set_logical_name(const std::string& name);
508
509
519
520 void set_type(const std::string& type);
521
522
523 const std::string& get_short_file_name() const {return p_short_name;}
524
525
527
528 const std::string& get_full_file_name() const {return p_full_name;}
529
530
544
545 bool is_repository_file() const;
546
547
554
555 const std::string& get_repository_name() const {return p_repository_name;}
556
557
563
564 const std::string&
566 {
567 return (!p_repository_name.empty() ? p_repository_name : p_full_name);
568 }
569
570 const std::string& get_lock_file() const { init_lock_name(); return p_lock_file_name; }
571 const std::string& get_logical_name() const {return p_logical_name;}
572 const std::string& get_type() const {return p_type;}
573 const std::string& get_oks_format() const {return p_oks_format;}
574
575
577
579
580
582
583 long get_size() const {return p_size;}
584
585
587
588 const std::string& get_created_by() const {return p_created_by;}
589
590
592
593 const boost::posix_time::ptime get_creation_time() const {return p_creation_time;}
594
595
597
598 const std::string& get_created_on() const {return p_created_on;}
599
600
602
603 const std::string& get_last_modified_by() const {return p_last_modified_by;}
604
605
607
608 const boost::posix_time::ptime get_last_modification_time() const {return p_last_modification_time;}
609
610
612
613 const std::string& get_last_modified_on() const {return p_last_modified_on;}
614
615
620
621 bool is_locked() const {return (p_lock != nullptr);}
622
623
628
629 bool is_updated() const {return p_is_updated;}
630
631
636
637 bool is_read_only() const {return p_is_read_only;}
638
639
644
645 const std::list<std::string>& get_include_files() const {return p_list_of_include_files;}
646
647
653
654 void get_all_include_files(const OksKernel * kernel, std::set<OksFile *>& out);
655
667
669
670
677
678 void update_status_of_file(bool update_local = true, bool update_repository = true);
679
680
689
690 bool get_lock_string(std::string& info) const;
691
692
701
702 static bool compare(const char * file1_name, const char * file2_name);
703
704
712
713 bool compare(const char * name) const { return compare(p_full_name.c_str(), name); }
714
715
721
722 const OksFile * get_parent() const { return p_included_by; }
723
724
731
732 OksFile * check_parent(const OksFile * parent_h);
733
734
735
736 public:
737
738 ~OksFile() noexcept;
739
740
741 private:
742 static bool p_nolock_mode; // Nasty hack mode
743
744 std::string p_short_name; // short path to file
745 std::string p_full_name; // path which is used to open file
746 std::string p_repository_name; // the name of file inside repository
747 std::string p_logical_name;// name of file, e.g. "Control Workstations"
748 std::string p_type; // type of file, e.g. "DCS"
749 std::string p_oks_format; // format of file: "data" or "schema"
750 long p_number_of_items; // number of objects or classes
751 long p_size; // size of file in bytes
753 boost::posix_time::ptime p_creation_time;
756 boost::posix_time::ptime p_last_modification_time;
759 std::shared_ptr<boost::interprocess::file_lock> p_lock;
760 std::string p_lock_file_name; // lock file
766 std::map<std::string, oks::Comment *> p_comments;
770
771 static const char xml_file_header[];
772 static const char xml_schema_file_dtd[];
773 static const char xml_data_file_dtd[];
774 static const char xml_info_tag[];
775 static const char xml_include_tag[];
776 static const char xml_file_tag[];
777 static const char xml_comments_tag[];
778 static const char xml_comment_tag[];
779
780
781 // only to be used by the friends
782
783 OksFile(
784 const std::string&, // file full path
785 const std::string&, // file logical name
786 const std::string&, // file type
787 const std::string&, // file oks-format
788 OksKernel *
789 );
790
791 OksFile& operator=(const OksFile &);
792
793 OksFile(const OksFile &f) { *this = f; }
794
795 OksFile(std::shared_ptr<OksXmlInputStream>, const std::string&, const std::string&, OksKernel *);
797
798 void set_updated() {p_is_updated = true;} // in-memory
799
800 void rename(const std::string& short_name, const std::string& full_name);
801 void rename(const std::string& full_name); // repository rename
802 void create_lock_name();
803 void init_lock_name() const { if(p_lock_file_name.empty()) const_cast<OksFile*>(this)->create_lock_name(); }
804 void check_repository();
805
806 std::string make_repository_name() const;
807
808 oks::Comment * get_comment(const std::string& creation_time) noexcept;
809
810 void clear_comments() noexcept;
811
812 std::list<std::string>::iterator find_include_file(const std::string&);
813
814};
815
816std::ostream& operator<<(std::ostream&, const OksFile&);
817std::ostream& operator<<(std::ostream&, const oks::Comment&);
818
819} // namespace oks
820} // namespace dunedaq
821#endif
The comment about file modification. A comment can be added when user saves file using OKS tools.
Definition file.hpp:275
std::string p_created_by
Definition file.hpp:314
Comment() noexcept
Definition file.hpp:282
std::string p_created_on
Definition file.hpp:316
std::string p_text
Definition file.hpp:317
std::string p_author
Definition file.hpp:315
const std::string & get_created_on() const
Definition file.hpp:300
const std::string & get_created_by() const
Definition file.hpp:294
friend class OksFile
Definition file.hpp:277
const std::string & get_text() const
Definition file.hpp:303
const std::string & get_author() const
Definition file.hpp:297
FailedAddComment(const OksFile &file, const exception &reason) noexcept
Definition file.hpp:205
static std::string fill(const OksFile &file, const std::string &reason) noexcept
Definition file.cpp:221
FailedAddComment(const OksFile &file, const std::string &reason) noexcept
Definition file.hpp:208
virtual ~FailedAddComment() noexcept
Definition file.hpp:210
FailedAddInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:130
FailedAddInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:133
virtual ~FailedAddInclude() noexcept
Definition file.hpp:135
static std::string fill(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.cpp:203
FailedChangeComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:255
FailedChangeComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:258
virtual ~FailedChangeComment() noexcept
Definition file.hpp:260
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:233
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:227
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:230
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:233
virtual ~FailedRemoveComment() noexcept
Definition file.hpp:235
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:155
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:158
virtual ~FailedRemoveInclude() noexcept
Definition file.hpp:160
static std::string fill(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.cpp:209
FailedRenameInclude(const OksFile &file, const std::string &from, const std::string &to, const std::string &reason) noexcept
Definition file.hpp:183
static std::string fill(const OksFile &file, const std::string &from, const std::string &to, const std::string &reason) noexcept
Definition file.cpp:215
virtual ~FailedRenameInclude() noexcept
Definition file.hpp:185
FailedRenameInclude(const OksFile &file, const std::string &from, const std::string &to, const exception &reason) noexcept
Definition file.hpp:180
FileChangeError(const OksFile &file, const std::string &action, const exception &reason) noexcept
Definition file.hpp:84
virtual ~FileChangeError() noexcept
Definition file.hpp:89
FileChangeError(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.hpp:87
static std::string fill(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.cpp:245
FileCompareError(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.hpp:108
virtual ~FileCompareError() noexcept
Definition file.hpp:110
static std::string fill(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.cpp:251
virtual ~FileLockError() noexcept
Definition file.hpp:65
FileLockError(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.hpp:63
static std::string fill(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.cpp:239
Provides interface to the OKS XML schema and data files.
Definition file.hpp:345
static bool compare(const char *file1_name, const char *file2_name)
Compare two files.
Definition file.cpp:1519
friend class OksClass
Definition file.hpp:348
static const char xml_schema_file_dtd[]
Definition file.hpp:772
bool compare(const char *name) const
Compare with another file.
Definition file.hpp:713
std::shared_ptr< boost::interprocess::file_lock > p_lock
Definition file.hpp:759
const std::string & get_created_by() const
Definition file.hpp:588
std::string p_lock_file_name
Definition file.hpp:760
std::list< std::string >::iterator find_include_file(const std::string &)
Definition file.cpp:1177
std::string p_oks_format
Definition file.hpp:749
static const char xml_comments_tag[]
Definition file.hpp:777
const std::string & get_logical_name() const
Definition file.hpp:571
void unlock()
Unlock OKS file.
Definition file.cpp:1148
void add_include_file(const std::string &name)
Add include file.
Definition file.cpp:1199
time_t p_repository_last_modified
Definition file.hpp:765
OksFile(const std::string &, const std::string &, const std::string &, const std::string &, OksKernel *)
Definition file.cpp:257
oks::Comment * get_comment(const std::string &creation_time) noexcept
Definition file.cpp:710
long get_number_of_items() const
Definition file.hpp:578
void get_all_include_files(const OksKernel *kernel, std::set< OksFile * > &out)
Get all include files.
Definition file.cpp:1471
void lock()
Lock OKS file.
Definition file.cpp:1017
friend struct OksLoadObjectsJob
Definition file.hpp:350
void write(OksXmlOutputStream &)
Definition file.cpp:772
std::string p_created_by
Definition file.hpp:752
void set_type(const std::string &type)
Set file type.
Definition file.cpp:1301
static void set_nolock_mode(bool nl)
Definition file.hpp:390
std::unordered_map< OksFile *, Set, oks::hash_file_ptr, oks::equal_file_ptr > IMap
Definition file.hpp:375
void init_lock_name() const
Definition file.hpp:803
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:989
static const char xml_data_file_dtd[]
Definition file.hpp:773
std::string make_repository_name() const
Definition file.cpp:1383
const std::string & get_created_on() const
Definition file.hpp:598
bool is_locked() const
Return lock status of OKS file.
Definition file.hpp:621
std::string p_short_name
Definition file.hpp:744
static bool p_nolock_mode
Definition file.hpp:742
const std::string & get_type() const
Definition file.hpp:572
std::map< std::string, oks::Comment * > p_comments
Definition file.hpp:766
const std::string & get_short_file_name() const
Definition file.hpp:523
boost::posix_time::ptime p_last_modification_time
Definition file.hpp:756
const std::list< std::string > & get_include_files() const
Get directly include files.
Definition file.hpp:645
std::list< std::string > p_list_of_include_files
Definition file.hpp:763
boost::posix_time::ptime p_creation_time
Definition file.hpp:753
std::string p_logical_name
Definition file.hpp:747
const std::string & get_repository_name() const
Get name of file inside repository.
Definition file.hpp:555
void remove_comment(const std::string &creation_time)
Modify existing comment.
Definition file.cpp:751
void set_logical_name(const std::string &name)
Set logical name of file.
Definition file.cpp:1284
std::string p_repository_name
Definition file.hpp:746
std::string p_last_modified_by
Definition file.hpp:755
friend class OksKernel
Definition file.hpp:347
OksKernel * p_kernel
Definition file.hpp:769
void add_comment(const std::string &text, const std::string &author)
Add new comment to file.
Definition file.cpp:674
void update_status_of_file(bool update_local=true, bool update_repository=true)
Update status of file.
Definition file.cpp:1396
const std::string & get_last_modified_by() const
Definition file.hpp:603
bool is_updated() const
Return update status of OKS file.
Definition file.hpp:629
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:372
std::string p_full_name
Definition file.hpp:745
const OksFile * get_parent() const
Return parent including given file.
Definition file.hpp:722
bool is_read_only() const
Return read-only status of OKS file.
Definition file.hpp:637
const boost::posix_time::ptime get_last_modification_time() const
Definition file.hpp:608
std::string p_type
Definition file.hpp:748
bool is_repository_file() const
Get information about repository, the file belongs to.
Definition file.cpp:914
~OksFile() noexcept
Definition file.cpp:295
void create_lock_name()
Definition file.cpp:959
void check_repository()
Definition file.cpp:920
const std::string & get_oks_format() const
Definition file.hpp:573
void clear_comments() noexcept
Definition file.cpp:285
static const char xml_file_tag[]
Definition file.hpp:776
OksFile * check_parent(const OksFile *parent_h)
Set given parent, if this file is not yet included.
Definition file.cpp:1188
const OksFile * p_included_by
Definition file.hpp:768
static const char xml_comment_tag[]
Definition file.hpp:778
std::string p_last_modified_on
Definition file.hpp:757
const std::string & get_lock_file() const
Definition file.hpp:570
friend class OksObject
Definition file.hpp:349
void modify_comment(const std::string &creation_time, const std::string &text, const std::string &author)
Definition file.cpp:717
const std::string & get_full_file_name() const
Definition file.hpp:528
std::unordered_set< OksFile *, oks::hash_file_ptr, oks::equal_file_ptr > Set
Definition file.hpp:374
const std::string & get_last_modified_on() const
Definition file.hpp:613
void rename_include_file(const std::string &from, const std::string &to)
Rename include file.
Definition file.cpp:1256
static const char xml_file_header[]
Definition file.hpp:771
std::string p_created_on
Definition file.hpp:754
FileStatus get_status_of_file() const
Return update status of file.
Definition file.cpp:1418
static const char xml_include_tag[]
Definition file.hpp:775
void rename(const std::string &short_name, const std::string &full_name)
Definition file.cpp:1454
long get_size() const
Definition file.hpp:583
const std::map< std::string, oks::Comment * > & get_comments() const
Definition file.hpp:494
const std::string & get_well_formed_name() const
Get well-formed file name.
Definition file.hpp:565
void remove_include_file(const std::string &name)
Remove include file.
Definition file.cpp:1228
const boost::posix_time::ptime get_creation_time() const
Definition file.hpp:593
static const char xml_info_tag[]
Definition file.hpp:774
Provides interface to the OKS kernel.
Definition kernel.hpp:582
exception(const std::string &what_arg, int level_arg) noexcept
Definition xml.cpp:42
caught dunedaq::conffwk::Exception exception
Including Qt Headers.
Definition module.cpp:16
FELIX Initialization std::string initerror FELIX queue timed out
Both frame_count_limit and tp_count_limit were set to(disabled) in the TPCRawDataProcessor config. TPs will not send."
Definition ral.hpp:35
bool operator()(const std::string *s1, const std::string *s2) const
Definition file.hpp:367
bool operator()(const OksFile *__x, const OksFile *__y) const
Definition file.hpp:330
size_t operator()(const OksFile *x) const
Definition file.hpp:323