PLCnext API Documentation 23.6.0.37
MultiXmlConfigDocument.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
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
14namespace Arp { namespace System { namespace Commons { namespace Xml
15{
16
17// TContent policy: implement IXmlSerializable and default contructable
26{
27public: // typedef/usings
28 using Base = XmlConfigDocument;
29 using Files = std::deque<String>;
30 using IncludedFiles = std::list<String>;
32
33public: // construction/destruction
37 MultiXmlConfigDocument(const String& documentXmlElementName, IXmlSerializable& content);
39 virtual ~MultiXmlConfigDocument(void) = default;
40
41public: // 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
58protected: // overridden methods
59 void ReadDocument(XmlReader& reader)override;
60
61 Files& GetFiles();
62 IncludedFiles& GetIncludedFiles();
63
64private: // static methods
65 static bool ContainsFile(const Files& files, const String& file);
66 static bool ContainsFile(const IncludedFiles& files, const String& file);
67
68private: // methods
69 bool TryLoad(const String& documentPath, String& errorMessage);
70 bool TryLoad(const ConfigurationSettings& configSettings, String& errorMessage);
71
72private: // deleted methods
76 MultiXmlConfigDocument& operator=(const MultiXmlConfigDocument& arg) = delete;
77
78private: // fields
79 Files files;
80 IncludedFiles includedFiles;
81};
82
84// inline methods of class MultiXmlConfigDocument
85inline MultiXmlConfigDocument::MultiXmlConfigDocument(const String& documentXmlNameArg, IXmlSerializable& contentArg)
86 : Base(documentXmlNameArg, contentArg)
87{
88}
89
90inline MultiXmlConfigDocument::Files& MultiXmlConfigDocument::GetFiles()
91{
92 return this->files;
93}
94inline 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