PLCnext API Documentation 25.0.2.69
MultiXmlConfigDocument.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Commons/Xml/XmlConfigDocument.hpp"
9#include "Arp/System/Commons/Xml/DocumentTraits.hpp"
10#include "Arp/System/Commons/Diagnostics/Logging/Logger.hxx"
11#include "Arp/System/Commons/Configuration/ConfigurationSettings.hpp"
12#include <deque>
13#include <list>
14
15namespace Arp { namespace System { namespace Commons { namespace Xml
16{
17
18// TContent policy: implement IXmlSerializable and default contructable
27{
28private:
29 struct FileItem
30 {
31 explicit FileItem(const String& path, const DocumentTraits& traits = DocumentTraits()) : Path(path), Traits(traits)
32 {
33 }
34
36 DocumentTraits Traits;
37 };
38
39public: // typedef/usings
40 using Base = XmlConfigDocument;
41 using Files = std::deque<FileItem>;
42 using IncludedFiles = std::list<String>;
44
45public: // construction/destruction
46 MultiXmlConfigDocument(const String& documentXmlElementName, IXmlSerializable& content);
48 virtual ~MultiXmlConfigDocument(void) = default;
49
50public: // operations
51 void AddFile(const String& filePath, const DocumentTraits& fileTraits);
52 void Load(const String& documentPath);
53 void Load(const String& documentPath, const DocumentTraits& documentTraits);
54 void Load(const ConfigurationSettings& configSettings);
55 bool TryLoad(const String& documentPath);
56 bool TryLoad(const String& documentPath, const DocumentTraits& documentTraits);
57
58 bool TryLoad(const ConfigurationSettings& configSettings);
59
60protected: // overridden methods
61 void ReadDocument(XmlReader& reader)override;
62
63 Files& GetFiles();
64 IncludedFiles& GetIncludedFiles();
65
66private: // static methods
67 static bool ContainsFile(const Files& files, const String& file);
68 static bool ContainsFile(const IncludedFiles& files, const String& file);
69
70private: // methods
71 bool TryLoad(const String& documentPath, const DocumentTraits& documentTraits, String& errorMessage);
72 bool TryLoad(const ConfigurationSettings& configSettings, String& errorMessage);
73
74private: // deleted methods
78 MultiXmlConfigDocument& operator=(const MultiXmlConfigDocument& arg) = delete;
79
80private: // fields
81 Files files;
82 IncludedFiles includedFiles;
83};
84
85}}}} // end of namespace Arp::System::Commons::Xml
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
Definition: ConfigurationSettings.hpp:15
This class might be used for logging while the typename of the T determines the logger name.
Definition: Logger.hxx:16
Definition: Path.hpp:13
This class collects several document traits.
Definition: DocumentTraits.hpp:20
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:27
void ReadDocument(XmlReader &reader) override
summary>Loads the document from specified <paramref="documentPath"/>
Definition: MultiXmlConfigDocument.cpp:70
MultiXmlConfigDocument(const String &documentXmlElementName, IXmlSerializable &content)
Constructs an MultiXmlConfigDocument instance.
Definition: MultiXmlConfigDocument.cpp:24
bool TryLoad(const String &documentPath)
Definition: MultiXmlConfigDocument.cpp:119
void Load(const String &documentPath)
summary>Loads the document from specified <paramref="documentPath"/>and with given <paramref="documen...
Definition: MultiXmlConfigDocument.cpp:106
virtual ~MultiXmlConfigDocument(void)=default
Destructs this instance and frees all resouces.
Class handle xml configuration documents
Definition: XmlConfigDocument.hpp:22
XmlConfigDocument(const String &documentXmlElementName, IXmlSerializable &content)
Constructs an XmlConfigDocument instance.
Definition: XmlConfigDocument.cpp:22
Class to read an XML File. Non buffered reader, can only read forward
Definition: XmlReader.hpp:25
Root namespace for the PLCnext API