PLCnext API Documentation  22.9.0.33
MultiXmlConfigDocument.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 #include "Arp/System/Commons/Xml/XmlConfigDocument.hpp"
9 #include "Arp/System/Commons/Diagnostics/Logging/Logger.hxx"
10 #include "Arp/System/Commons/Configuration/ConfigurationSettings.hpp"
11 #include <deque>
12 #include <list>
13 
14 namespace Arp { namespace System { namespace Commons { namespace Xml
15 {
16 
17 // TContent policy: implement IXmlSerializable and default contructable
26 {
27 public: // typedef/usings
28  using Base = XmlConfigDocument;
29  using Files = std::deque<String>;
30  using IncludedFiles = std::list<String>;
32 
33 public: // construction/destruction
37  MultiXmlConfigDocument(const String& documentXmlElementName, IXmlSerializable& content);
39  virtual ~MultiXmlConfigDocument(void) = default;
40 
41 public: // operations
42  void AddFile(const String& path); // TODO:SDK make this private
43 
45  void Load(const String& documentPath);
46 
48  void Load(const ConfigurationSettings& configSettings);
49 
52  bool TryLoad(const String& documentPath);
53 
56  bool TryLoad(const ConfigurationSettings& configSettings);
57 
58 protected: // overridden methods
59  void ReadDocument(XmlReader& reader)override;
60 
61  Files& GetFiles();
62  IncludedFiles& GetIncludedFiles();
63 
64 private: // static methods
65  static bool ContainsFile(const Files& files, const String& file);
66  static bool ContainsFile(const IncludedFiles& files, const String& file);
67 
68 private: // methods
69  bool TryLoad(const String& documentPath, String& errorMessage);
70  bool TryLoad(const ConfigurationSettings& configSettings, String& errorMessage);
71 
72 private: // deleted methods
76  MultiXmlConfigDocument& operator=(const MultiXmlConfigDocument& arg) = delete;
77 
78 private: // fields
79  Files files;
80  IncludedFiles includedFiles;
81 };
82 
84 // inline methods of class MultiXmlConfigDocument
85 inline MultiXmlConfigDocument::MultiXmlConfigDocument(const String& documentXmlNameArg, IXmlSerializable& contentArg)
86  : Base(documentXmlNameArg, contentArg)
87 {
88 }
89 
90 inline MultiXmlConfigDocument::Files& MultiXmlConfigDocument::GetFiles()
91 {
92  return this->files;
93 }
94 inline MultiXmlConfigDocument::IncludedFiles& MultiXmlConfigDocument::GetIncludedFiles()
95 {
96  return this->includedFiles;
97 }
98 
99 }}}} // end of namespace Arp::System::Commons::Xml
Definition: ConfigurationSettings.hpp:14
Interface for all classes which should be serializable for xml
Definition: IXmlSerializable.hpp:18
special version of XmlConfigDocument to include xml configuration data from other xml files inside a ...
Definition: MultiXmlConfigDocument.hpp:26
void Load(const ConfigurationSettings &configSettings)
MultiXmlConfigDocument(const String &documentXmlElementName, IXmlSerializable &content)
Constructs an MultiXmlConfigDocument instance.
Definition: MultiXmlConfigDocument.hpp:85
bool TryLoad(const String &documentPath)
void Load(const String &documentPath)
Loads the document from specified <paramref="documentPath"/>
virtual ~MultiXmlConfigDocument(void)=default
Destructs this instance and frees all resouces.
Class handle xml configuration documents
Definition: XmlConfigDocument.hpp:21
XmlConfigDocument(const String &documentXmlElementName, IXmlSerializable &content)
Constructs an XmlConfigDocument instance.
Class to read an XML File. Non buffered reader, can only read forward
Definition: XmlReader.hpp:25
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API