PLCnext API Documentation 25.0.2.69
XmlSerializationContext.hpp
1
2//
3// Copyright Phoenix Contact GmbH & Co. KG
4//
6#pragma once
8#include "Arp/System/Commons/Logging.h"
9#include "Arp/System/Commons/Diagnostics/Logging/Loggable.hxx"
10#include "Arp/System/Commons/Exceptions/KeyNotFoundException.hpp"
11#include "Arp/System/Commons/Configuration/PlaceholderExpression.hpp"
12
13namespace Arp { namespace System { namespace Commons { namespace Xml
14{
15
17
18// forwards
19class XmlReader;
20class XmlWriter;
23class DocumentTraits;
24
26class XmlSerializationContext : private Loggable<XmlSerializationContext>
27{
28 friend class MultiXmlConfigDocument;
29
30private: // typedefs
31 typedef std::map<String, String> Attributes;
32
33public: // construction/destruction
34 XmlSerializationContext(XmlConfigDocument& document, Version docSchemaVersion = Version(1, 0));
40 ~XmlSerializationContext(void) = default;
41
42public: // operators
43 String& operator[](const String& attributeName);
44 const String& operator[](const String& attributeName)const;
45
46public: // static properties
47 static const char* IncludeXmlName;
48 static const char* IncludesXmlName;
49
50public: // setter/getter operations
53
54public: // operations
55 void ReadDocumentContext(XmlReader& reader);
56 void WriteDocumentContext(XmlWriter& writer)const;
57 void InvalidXmlElementOccurs(XmlReader& reader, const char* xmlElementName);
58 void MissingXmlElementOccurs(XmlReader& reader, const char* xmlElementName);
59 void ReadIncludesElement(XmlReader& reader);
60 String ResolvePath(const char* documentPath);
62 String ResolvePlaceholder(const char* input);
64 void AddIncludeFile(const String& pathArg, const DocumentTraits& traits);
65 void AddAttribute(const String& attributeName, const String& value);
66 bool HasAttribute(const String& attributeName);
67 bool HasAttributeValue(const String& attributeName, const String& expectedValue);
68 String GetAttributeValue(const String& attributeName);
69 const DocumentTraits& GetDocumentTraits(void)const;
70
71private: // static methods
72 static void ResolveWildcards(const String& path, const DocumentTraits& traits, MultiXmlConfigDocument& doc);
73
74private: // methods
75 void ResolveWildcards(const String& path, const DocumentTraits& traits);
76
77private: // fields
78 XmlConfigDocument& document;
79 Version documentSchemaVersion;
80 Attributes additionalAttributes;
81 PlaceholderExpression placeholderExpression;
82
83private: // static fields
84 static const char* traitsXmlName;
85};
86
87}}}} // end of namespace Arp::System::Commons::Xml
This class represents the Arp String. The implementation is based on std::string.
Definition: String.hpp:39
This class provides versioning.
Definition: Version.hpp:19
Definition: PlaceholderExpression.hpp:17
Derive from this class to inherit logging functionality.
Definition: Loggable.hxx:28
This class collects several document traits.
Definition: DocumentTraits.hpp:20
special version of XmlConfigDocument to include xml configuration data from other xml files inside a ...
Definition: MultiXmlConfigDocument.hpp:27
Class handle xml configuration documents
Definition: XmlConfigDocument.hpp:22
Class to read an XML File. Non buffered reader, can only read forward
Definition: XmlReader.hpp:25
XML context used during XML reading and writing to hold the context information
Definition: XmlSerializationContext.hpp:27
String & operator[](const String &attributeName)
operator [] to get and set attributes referenced by attributeName
Definition: XmlSerializationContext.cpp:258
XmlSerializationContext(XmlConfigDocument &document, Version docSchemaVersion=Version(1, 0))
Constructs an XmlContext instance.
Definition: XmlSerializationContext.cpp:27
void MissingXmlElementOccurs(XmlReader &reader, const char *xmlElementName)
this operation should be called while xml serialisation when ever an xml element is missing
Definition: XmlSerializationContext.cpp:69
String GetAttributeValue(const String &attributeName)
Returns an attribute value
Definition: XmlSerializationContext.cpp:227
XmlSerializationContext & operator=(XmlSerializationContext &arg)=default
Assignment operator.
String ResolveRelativePath(const String &path)
resolves a relative path into an absolute relative to the document path
Definition: XmlSerializationContext.cpp:151
~XmlSerializationContext(void)=default
Destructs this instance and frees all resouces.
const DocumentTraits & GetDocumentTraits(void) const
Returns the traits of the current document
Definition: XmlSerializationContext.cpp:238
XmlConfigDocument & GetDocument(void)
return the XmlConfigDocument this context was created for
Definition: XmlSerializationContext.cpp:252
void AddAttribute(const String &attributeName, const String &value)
Adds an attribute to the context
Definition: XmlSerializationContext.cpp:208
void WriteDocumentContext(XmlWriter &writer) const
writes the document context i.e. schema version with the XMlWriter
Definition: XmlSerializationContext.cpp:44
String ResolvePlaceholder(const char *input)
resolves a string with a placeholder (Enviroment variables)
Definition: XmlSerializationContext.cpp:276
XmlSerializationContext(XmlSerializationContext &arg)=default
Copy contructor.
String ResolvePath(const char *documentPath)
resolves a relative path into an absolute relative to the document path and replaces all placeholders
Definition: XmlSerializationContext.cpp:140
void ReadDocumentContext(XmlReader &reader)
reads the document context i.e. schema version from the XMlReader
Definition: XmlSerializationContext.cpp:35
bool HasAttribute(const String &attributeName)
Checks if an attribute exists
Definition: XmlSerializationContext.cpp:214
void InvalidXmlElementOccurs(XmlReader &reader, const char *xmlElementName)
this operation should be called while xml serialisation when an unknown xml element is recognized
Definition: XmlSerializationContext.cpp:56
bool HasAttributeValue(const String &attributeName, const String &expectedValue)
Compares an attribute value
Definition: XmlSerializationContext.cpp:221
Version GetDocumentSchemaVersion(void) const
returns the document schema version stored in this context
Definition: XmlSerializationContext.cpp:246
void ReadIncludesElement(XmlReader &reader)
Reads the include xml tags inside a configuration file to include further xml files
Definition: XmlSerializationContext.cpp:75
DocumentTraits DetermineDocumentTraits(XmlReader &reader) const
Determine document traits by checking if traits are already set.
Definition: XmlSerializationContext.cpp:97
void AddIncludeFile(const String &pathArg, const DocumentTraits &traits)
Adds a xml file to the list of included files
Definition: XmlSerializationContext.cpp:118
Class to write an XML File
Definition: XmlWriter.hpp:19
Namespace for configuration related classes
Root namespace for the PLCnext API