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 <list>
21#include <map>
22#include <memory>
23#include <set>
24#include <string>
25
26#include <boost/date_time/posix_time/ptime.hpp>
27
28#include <unordered_map>
29#include <unordered_set>
30
31namespace boost {
32namespace interprocess {
33class file_lock;
34}
35}
36
37namespace dunedaq {
38namespace oks {
39
40class OksXmlOutputStream;
41class OksXmlInputStream;
42class OksKernel;
43class OksFile;
44
49
51{
52
53public:
59
60 FileLockError(const OksFile& file, bool lock_action, const std::string& reason) noexcept
61 : exception(fill(file, lock_action, reason), 0)
62 {
63 }
64
65 virtual ~FileLockError() noexcept {}
66
67private:
68 static std::string fill(const OksFile& file, bool lock_action, const std::string& reason) noexcept;
69};
70
74
76{
77
78public:
80 FileChangeError(const OksFile& file, const std::string& action, const exception& reason) noexcept
81 : exception(fill(file, action, reason.what()), reason.level() + 1)
82 {
83 }
84
86 FileChangeError(const OksFile& file, const std::string& action, const std::string& reason) noexcept
87 : exception(fill(file, action, reason), 0)
88 {
89 }
90
91 virtual ~FileChangeError() noexcept {}
92
93private:
94 static std::string fill(const OksFile& file, const std::string& action, const std::string& reason) noexcept;
95};
96
100
102{
103
104public:
106 FileCompareError(const std::string& src, const std::string& dest, const std::string& reason) noexcept
107 : exception(fill(src, dest, reason), 0)
108 {
109 }
110
111 virtual ~FileCompareError() noexcept {}
112
113private:
114 static std::string fill(const std::string& src, const std::string& dest, const std::string& reason) noexcept;
115};
116
121
123{
124
125public:
127 FailedAddInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept
128 : exception(fill(file, include_name, reason.what()), reason.level() + 1)
129 {
130 }
131
133 FailedAddInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept
134 : exception(fill(file, include_name, reason), 0)
135 {
136 }
137
138 virtual ~FailedAddInclude() noexcept {}
139
140private:
141 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
142};
143
148
150{
151
152public:
154 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const exception& reason) noexcept
155 : exception(fill(file, include_name, reason.what()), reason.level() + 1)
156 {
157 }
158
160 FailedRemoveInclude(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept
161 : exception(fill(file, include_name, reason), 0)
162 {
163 }
164
165 virtual ~FailedRemoveInclude() noexcept {}
166
167private:
168 static std::string fill(const OksFile& file, const std::string& include_name, const std::string& reason) noexcept;
169};
170
175
177{
178
179public:
182 const std::string& from,
183 const std::string& to,
184 const exception& reason) noexcept
185 : exception(fill(file, from, to, reason.what()), reason.level() + 1)
186 {
187 }
188
191 const std::string& from,
192 const std::string& to,
193 const std::string& reason) noexcept
194 : exception(fill(file, from, to, reason), 0)
195 {
196 }
197
198 virtual ~FailedRenameInclude() noexcept {}
199
200private:
201 static std::string fill(const OksFile& file,
202 const std::string& from,
203 const std::string& to,
204 const std::string& reason) noexcept;
205};
206
211
213{
214
215public:
217 FailedAddComment(const OksFile& file, const exception& reason) noexcept
218 : exception(fill(file, reason.what()), reason.level() + 1)
219 {
220 }
221
223 FailedAddComment(const OksFile& file, const std::string& reason) noexcept
224 : exception(fill(file, reason), 0)
225 {
226 }
227
228 virtual ~FailedAddComment() noexcept {}
229
230private:
231 static std::string fill(const OksFile& file, const std::string& reason) noexcept;
232};
233
238
240{
241
242public:
244 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept
245 : exception(fill(file, creation_time, reason.what()), reason.level() + 1)
246 {
247 }
248
250 FailedRemoveComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept
251 : exception(fill(file, creation_time, reason), 0)
252 {
253 }
254
255 virtual ~FailedRemoveComment() noexcept {}
256
257private:
258 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
259};
260
265
267{
268
269public:
271 FailedChangeComment(const OksFile& file, const std::string& creation_time, const exception& reason) noexcept
272 : exception(fill(file, creation_time, reason.what()), reason.level() + 1)
273 {
274 }
275
277 FailedChangeComment(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept
278 : exception(fill(file, creation_time, reason), 0)
279 {
280 }
281
282 virtual ~FailedChangeComment() noexcept {}
283
284private:
285 static std::string fill(const OksFile& file, const std::string& creation_time, const std::string& reason) noexcept;
286};
287
292
294{
295
296 friend class OksFile;
297
298private:
300 Comment() noexcept { ; }
301
304 Comment(const std::string& text, const std::string& author);
305
307 Comment(const oks::Comment& src) noexcept;
308
309public:
311 const std::string& get_created_by() const { return p_created_by; }
312
314 const std::string& get_author() const { return p_author; }
315
317 const std::string& get_created_on() const { return p_created_on; }
318
320 const std::string& get_text() const { return p_text; }
321
323 void validate(const std::string& creation_time);
324
326 void validate();
327
328private:
329 std::string p_created_by;
330 std::string p_author;
331 std::string p_created_on;
332 std::string p_text;
333};
334
336{
337 inline size_t operator()(const OksFile* x) const { return reinterpret_cast<size_t>(x); }
338};
339
341{
342 inline bool operator()(const OksFile* __x, const OksFile* __y) const { return (__x == __y); }
343};
344
353
355{
356
357 friend class OksKernel;
358 friend class OksClass;
359 friend class OksObject;
360 friend struct OksLoadObjectsJob;
361
362public:
363 enum Mode
364 {
367 };
368
376
378 {
379 bool operator()(const std::string* s1, const std::string* s2) const { return *s1 < *s2; }
380 };
381
382 typedef std::map<const std::string*, OksFile*, SortByName> Map;
383
384 typedef std::unordered_set<OksFile*, oks::hash_file_ptr, oks::equal_file_ptr> Set;
385 typedef std::unordered_map<OksFile*, Set, oks::hash_file_ptr, oks::equal_file_ptr> IMap;
386
396
397 void lock();
398
399 // Nasty hack to allow code generation on the fly without locking
400 // file. Off by default
401 static void set_nolock_mode(bool nl) { p_nolock_mode = nl; }
402
410
411 void unlock();
412
423
424 void add_include_file(const std::string& name);
425
438
439 void remove_include_file(const std::string& name);
440
452
453 void rename_include_file(const std::string& from, const std::string& to);
454
465
466 void add_comment(const std::string& text, const std::string& author);
467
480
481 void modify_comment(const std::string& creation_time, const std::string& text, const std::string& author);
482
493
494 void remove_comment(const std::string& creation_time);
495
497
498 const std::map<std::string, oks::Comment*>& get_comments() const { return p_comments; }
499
509
510 void set_logical_name(const std::string& name);
511
521
522 void set_type(const std::string& type);
523
524 const std::string& get_short_file_name() const { return p_short_name; }
525
527
528 const std::string& get_full_file_name() const { return p_full_name; }
529
543
544 bool is_repository_file() const;
545
552
553 const std::string& get_repository_name() const { return p_repository_name; }
554
560
561 const std::string& get_well_formed_name() const
562 {
563 return (!p_repository_name.empty() ? p_repository_name : p_full_name);
564 }
565
566 const std::string& get_lock_file() const
567 {
569 return p_lock_file_name;
570 }
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
576
577 long get_number_of_items() const { return p_number_of_items; }
578
580
581 long get_size() const { return p_size; }
582
584
585 const std::string& get_created_by() const { return p_created_by; }
586
588
589 const boost::posix_time::ptime get_creation_time() const { return p_creation_time; }
590
592
593 const std::string& get_created_on() const { return p_created_on; }
594
596
597 const std::string& get_last_modified_by() const { return p_last_modified_by; }
598
600
601 const boost::posix_time::ptime get_last_modification_time() const { return p_last_modification_time; }
602
604
605 const std::string& get_last_modified_on() const { return p_last_modified_on; }
606
611
612 bool is_locked() const { return (p_lock != nullptr); }
613
618
619 bool is_updated() const { return p_is_updated; }
620
625
626 bool is_read_only() const { return p_is_read_only; }
627
632
633 const std::list<std::string>& get_include_files() const { return p_list_of_include_files; }
634
640
641 void get_all_include_files(const OksKernel* kernel, std::set<OksFile*>& out);
642
654
656
663
664 void update_status_of_file(bool update_local = true, bool update_repository = true);
665
675
676 bool get_lock_string(std::string& info) const;
677
686
687 static bool compare(const char* file1_name, const char* file2_name);
688
696
697 bool compare(const char* name) const { return compare(p_full_name.c_str(), name); }
698
704
705 const OksFile* get_parent() const { return p_included_by; }
706
713
714 OksFile* check_parent(const OksFile* parent_h);
715
716public:
717 ~OksFile() noexcept;
718
719private:
720 static bool p_nolock_mode; // Nasty hack mode
721
722 std::string p_short_name; // short path to file
723 std::string p_full_name; // path which is used to open file
724 std::string p_repository_name; // the name of file inside repository
725 std::string p_logical_name; // name of file, e.g. "Control Workstations"
726 std::string p_type; // type of file, e.g. "DCS"
727 std::string p_oks_format; // format of file: "data" or "schema"
728 long p_number_of_items; // number of objects or classes
729 long p_size; // size of file in bytes
731 boost::posix_time::ptime p_creation_time;
734 boost::posix_time::ptime p_last_modification_time;
737 std::shared_ptr<boost::interprocess::file_lock> p_lock;
738 std::string p_lock_file_name; // lock file
744 std::map<std::string, oks::Comment*> p_comments;
748
749 static const char xml_file_header[];
750 static const char xml_schema_file_dtd[];
751 static const char xml_data_file_dtd[];
752 static const char xml_info_tag[];
753 static const char xml_include_tag[];
754 static const char xml_file_tag[];
755 static const char xml_comments_tag[];
756 static const char xml_comment_tag[];
757
758 // only to be used by the friends
759
760 OksFile(const std::string&, // file full path
761 const std::string&, // file logical name
762 const std::string&, // file type
763 const std::string&, // file oks-format
764 OksKernel*);
765
766 OksFile& operator=(const OksFile&);
767
768 OksFile(const OksFile& f) { *this = f; }
769
770 OksFile(std::shared_ptr<OksXmlInputStream>, const std::string&, const std::string&, OksKernel*);
772
773 void set_updated() { p_is_updated = true; } // in-memory
774
775 void rename(const std::string& short_name, const std::string& full_name);
776 void rename(const std::string& full_name); // repository rename
777 void create_lock_name();
778 void init_lock_name() const
779 {
780 if (p_lock_file_name.empty())
781 const_cast<OksFile*>(this)->create_lock_name();
782 }
783 void check_repository();
784
785 std::string make_repository_name() const;
786
787 oks::Comment* get_comment(const std::string& creation_time) noexcept;
788
789 void clear_comments() noexcept;
790
791 std::list<std::string>::iterator find_include_file(const std::string&);
792};
793
794std::ostream&
795operator<<(std::ostream&, const OksFile&);
796std::ostream&
797operator<<(std::ostream&, const oks::Comment&);
798
799} // namespace oks
800} // namespace dunedaq
801#endif
The comment about file modification. A comment can be added when user saves file using OKS tools.
Definition file.hpp:294
std::string p_created_by
Definition file.hpp:329
Comment() noexcept
Definition file.hpp:300
std::string p_created_on
Definition file.hpp:331
std::string p_text
Definition file.hpp:332
std::string p_author
Definition file.hpp:330
const std::string & get_created_on() const
Definition file.hpp:317
const std::string & get_created_by() const
Definition file.hpp:311
friend class OksFile
Definition file.hpp:296
const std::string & get_text() const
Definition file.hpp:320
const std::string & get_author() const
Definition file.hpp:314
FailedAddComment(const OksFile &file, const exception &reason) noexcept
Definition file.hpp:217
static std::string fill(const OksFile &file, const std::string &reason) noexcept
Definition file.cpp:226
FailedAddComment(const OksFile &file, const std::string &reason) noexcept
Definition file.hpp:223
virtual ~FailedAddComment() noexcept
Definition file.hpp:228
FailedAddInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:127
FailedAddInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:133
virtual ~FailedAddInclude() noexcept
Definition file.hpp:138
static std::string fill(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.cpp:202
FailedChangeComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:271
FailedChangeComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:277
virtual ~FailedChangeComment() noexcept
Definition file.hpp:282
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:239
static std::string fill(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.cpp:232
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const exception &reason) noexcept
Definition file.hpp:244
FailedRemoveComment(const OksFile &file, const std::string &creation_time, const std::string &reason) noexcept
Definition file.hpp:250
virtual ~FailedRemoveComment() noexcept
Definition file.hpp:255
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const exception &reason) noexcept
Definition file.hpp:154
FailedRemoveInclude(const OksFile &file, const std::string &include_name, const std::string &reason) noexcept
Definition file.hpp:160
virtual ~FailedRemoveInclude() noexcept
Definition file.hpp:165
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:190
static std::string fill(const OksFile &file, const std::string &from, const std::string &to, const std::string &reason) noexcept
Definition file.cpp:216
virtual ~FailedRenameInclude() noexcept
Definition file.hpp:198
FailedRenameInclude(const OksFile &file, const std::string &from, const std::string &to, const exception &reason) noexcept
Definition file.hpp:181
FileChangeError(const OksFile &file, const std::string &action, const exception &reason) noexcept
Definition file.hpp:80
virtual ~FileChangeError() noexcept
Definition file.hpp:91
FileChangeError(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.hpp:86
static std::string fill(const OksFile &file, const std::string &action, const std::string &reason) noexcept
Definition file.cpp:253
FileCompareError(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.hpp:106
virtual ~FileCompareError() noexcept
Definition file.hpp:111
static std::string fill(const std::string &src, const std::string &dest, const std::string &reason) noexcept
Definition file.cpp:259
virtual ~FileLockError() noexcept
Definition file.hpp:65
FileLockError(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.hpp:60
static std::string fill(const OksFile &file, bool lock_action, const std::string &reason) noexcept
Definition file.cpp:246
Provides interface to the OKS XML schema and data files.
Definition file.hpp:355
static bool compare(const char *file1_name, const char *file2_name)
Compare two files.
Definition file.cpp:1494
friend class OksClass
Definition file.hpp:358
static const char xml_schema_file_dtd[]
Definition file.hpp:750
bool compare(const char *name) const
Compare with another file.
Definition file.hpp:697
std::shared_ptr< boost::interprocess::file_lock > p_lock
Definition file.hpp:737
const std::string & get_created_by() const
Definition file.hpp:585
std::string p_lock_file_name
Definition file.hpp:738
std::list< std::string >::iterator find_include_file(const std::string &)
Definition file.cpp:1134
std::string p_oks_format
Definition file.hpp:727
static const char xml_comments_tag[]
Definition file.hpp:755
const std::string & get_logical_name() const
Definition file.hpp:571
std::map< std::string, oks::Comment * > p_comments
Definition file.hpp:744
void unlock()
Unlock OKS file.
Definition file.cpp:1110
void add_include_file(const std::string &name)
Add include file.
Definition file.cpp:1157
time_t p_repository_last_modified
Definition file.hpp:743
OksFile(const std::string &, const std::string &, const std::string &, const std::string &, OksKernel *)
Definition file.cpp:264
oks::Comment * get_comment(const std::string &creation_time) noexcept
Definition file.cpp:718
long get_number_of_items() const
Definition file.hpp:577
void get_all_include_files(const OksKernel *kernel, std::set< OksFile * > &out)
Get all include files.
Definition file.cpp:1445
void lock()
Lock OKS file.
Definition file.cpp:1004
friend struct OksLoadObjectsJob
Definition file.hpp:360
void write(OksXmlOutputStream &)
Definition file.cpp:773
std::string p_created_by
Definition file.hpp:730
void set_type(const std::string &type)
Set file type.
Definition file.cpp:1254
static void set_nolock_mode(bool nl)
Definition file.hpp:401
void init_lock_name() const
Definition file.hpp:778
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:977
static const char xml_data_file_dtd[]
Definition file.hpp:751
std::string make_repository_name() const
Definition file.cpp:1361
const std::string & get_created_on() const
Definition file.hpp:593
bool is_locked() const
Return lock status of OKS file.
Definition file.hpp:612
std::string p_short_name
Definition file.hpp:722
static bool p_nolock_mode
Definition file.hpp:720
const std::string & get_type() const
Definition file.hpp:572
const std::string & get_short_file_name() const
Definition file.hpp:524
boost::posix_time::ptime p_last_modification_time
Definition file.hpp:734
const std::list< std::string > & get_include_files() const
Get directly include files.
Definition file.hpp:633
std::list< std::string > p_list_of_include_files
Definition file.hpp:741
boost::posix_time::ptime p_creation_time
Definition file.hpp:731
std::string p_logical_name
Definition file.hpp:725
const std::string & get_repository_name() const
Get name of file inside repository.
Definition file.hpp:553
void remove_comment(const std::string &creation_time)
Modify existing comment.
Definition file.cpp:755
void set_logical_name(const std::string &name)
Set logical name of file.
Definition file.cpp:1238
std::string p_repository_name
Definition file.hpp:724
std::string p_last_modified_by
Definition file.hpp:733
friend class OksKernel
Definition file.hpp:357
OksKernel * p_kernel
Definition file.hpp:747
void add_comment(const std::string &text, const std::string &author)
Add new comment to file.
Definition file.cpp:687
std::map< const std::string *, OksFile *, SortByName > Map
Definition file.hpp:382
void update_status_of_file(bool update_local=true, bool update_repository=true)
Update status of file.
Definition file.cpp:1373
const std::string & get_last_modified_by() const
Definition file.hpp:597
bool is_updated() const
Return update status of OKS file.
Definition file.hpp:619
std::string p_full_name
Definition file.hpp:723
const OksFile * get_parent() const
Return parent including given file.
Definition file.hpp:705
bool is_read_only() const
Return read-only status of OKS file.
Definition file.hpp:626
const boost::posix_time::ptime get_last_modification_time() const
Definition file.hpp:601
std::string p_type
Definition file.hpp:726
bool is_repository_file() const
Get information about repository, the file belongs to.
Definition file.cpp:901
void create_lock_name()
Definition file.cpp:947
void check_repository()
Definition file.cpp:907
const std::string & get_oks_format() const
Definition file.hpp:573
void clear_comments() noexcept
Definition file.cpp:296
static const char xml_file_tag[]
Definition file.hpp:754
OksFile * check_parent(const OksFile *parent_h)
Set given parent, if this file is not yet included.
Definition file.cpp:1147
const OksFile * p_included_by
Definition file.hpp:746
static const char xml_comment_tag[]
Definition file.hpp:756
std::string p_last_modified_on
Definition file.hpp:735
const std::string & get_lock_file() const
Definition file.hpp:566
std::unordered_map< OksFile *, Set, oks::hash_file_ptr, oks::equal_file_ptr > IMap
Definition file.hpp:385
friend class OksObject
Definition file.hpp:359
std::unordered_set< OksFile *, oks::hash_file_ptr, oks::equal_file_ptr > Set
Definition file.hpp:384
void modify_comment(const std::string &creation_time, const std::string &text, const std::string &author)
Definition file.cpp:725
const std::string & get_full_file_name() const
Definition file.hpp:528
const std::string & get_last_modified_on() const
Definition file.hpp:605
void rename_include_file(const std::string &from, const std::string &to)
Rename include file.
Definition file.cpp:1211
static const char xml_file_header[]
Definition file.hpp:749
std::string p_created_on
Definition file.hpp:732
FileStatus get_status_of_file() const
Return update status of file.
Definition file.cpp:1394
static const char xml_include_tag[]
Definition file.hpp:753
void rename(const std::string &short_name, const std::string &full_name)
Definition file.cpp:1428
long get_size() const
Definition file.hpp:581
const std::map< std::string, oks::Comment * > & get_comments() const
Definition file.hpp:498
const std::string & get_well_formed_name() const
Get well-formed file name.
Definition file.hpp:561
void remove_include_file(const std::string &name)
Remove include file.
Definition file.cpp:1185
const boost::posix_time::ptime get_creation_time() const
Definition file.hpp:589
static const char xml_info_tag[]
Definition file.hpp:752
Provides interface to the OKS kernel.
Definition kernel.hpp:615
exception(const std::string &what_arg, int level_arg) noexcept
Definition xml.cpp:41
The DUNE-DAQ namespace.
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:59
bool operator()(const std::string *s1, const std::string *s2) const
Definition file.hpp:379
bool operator()(const OksFile *__x, const OksFile *__y) const
Definition file.hpp:342
size_t operator()(const OksFile *x) const
Definition file.hpp:337