source: pacpusframework/trunk/src/PacpusLib/XmlComponentConfig.cpp@ 218

Last change on this file since 218 was 176, checked in by Marek Kurdej, 11 years ago

Added: addParameters() method in ComponentBase using Boost.Program_Options.
Each component can declare its parameters and they will be read automatically before configureComponent() method.
See example ProducerConsumerExample constructors.

  • Property svn:executable set to *
File size: 5.1 KB
RevLine 
[89]1// %pacpus:license{
2// This file is part of the PACPUS framework distributed under the
3// CECILL-C License, Version 1.0.
4// %pacpus:license}
5/// @version $Id: XmlComponentConfig.cpp 79 2013-01-14 08:52:06Z kurdejma $
6
7#include <Pacpus/kernel/XmlComponentConfig.h>
8#include <Pacpus/kernel/Log.h>
9#include <Pacpus/kernel/XmlConfigFile.h>
[176]10#include <QDomNamedNodeMap>
[89]11
12using namespace pacpus;
13using namespace std;
14
15DECLARE_STATIC_LOGGER("pacpus.core.XmlComponentConfig");
16
[165]17static const char* kPropertyComponentName = "name";
18static const char* kPropertyComponentType = "type";
19static const char* kPropertyConnectionType = "type";
20static const char* kPropertyConnectionInput = "input";
21static const char* kPropertyConnectionOutput = "output";
22static const char* kPropertyConnectionPriority = "priority";
[89]23
24XmlComponentConfig::XmlComponentConfig(const QString& name)
25{
26 LOG_TRACE("XmlComponentConfig(QString)");
27
28 // Get the pointer to the document and create the component.
29 parentDocument_ = XmlConfigFile::create();
30 if (name != QString::null)
31 component_ = parentDocument_->createComponent(name);
32}
33
34/// Destructor.
35XmlComponentConfig::~XmlComponentConfig()
36{
37 LOG_TRACE("~XmlComponentConfig()");
38}
39
[176]40QDomNamedNodeMap XmlComponentConfig::getProperties() const
41{
42 return component_.attributes();
43}
44
[89]45void XmlComponentConfig::addProperty(const QString& name)
46{
[176]47 if (hasProperty(name)) {
[89]48 LOG_ERROR("cannot add component property:"
[165]49 << " component '" << component_.attribute(kPropertyComponentName) << "'"
[89]50 << " already contains property '" << name << "'"
51 << " and its value is '" << component_.attribute(name) << "'"
52 );
53 return;
54 }
55
56 // The property does not exist, it can be added.
57 component_.setAttribute(name, 0);
58 LOG_INFO("property '" << name << "'"
[165]59 << " was added to the component " << component_.attribute(kPropertyComponentName) << "'"
[89]60 << " and set to '" << component_.attribute(name) << "'"
61 );
62}
63
64int XmlComponentConfig::delProperty(const QString& name)
65{
[162]66 if (!hasProperty(name)) {
[89]67 LOG_WARN("cannot delete compoenent property '" << name << "'"
[165]68 << " of component '" << component_.attribute(kPropertyComponentName) << "'"
[89]69 << ". Component does not contain this property."
70 );
71 return false;
72 }
73
74 // The property exists, it can be removed.
75 component_.removeAttribute(name);
76 LOG_INFO("property '" << name << "' "
[165]77 << " of component '" << component_.attribute(kPropertyComponentName) << "'"
[89]78 << " was deleted"
79 );
80
81 return true;
82}
83
84QString XmlComponentConfig::getProperty(const QString& name, const QString& defaultValue) const
85{
86 if (!hasProperty(name))
87 {
88 LOG_WARN("cannot retrieve component property '" << name << "'"
[165]89 << " of component '" << component_.attribute(kPropertyComponentName) << "'"
[89]90 << ". Component does not contain this property."
91 );
92 return defaultValue;
93 }
94
95 // The property exists, the value can be retrieved.
96 return component_.attribute(name);
97}
98
99bool XmlComponentConfig::getBoolProperty(const QString& name, bool defaultValue) const
100{
101 return hasProperty(name) ? getProperty(name) == "true" : defaultValue;
102}
103
104int XmlComponentConfig::getIntProperty(const QString& name, int defaultValue) const
105{
106 return hasProperty(name) ? getProperty(name).toInt() : defaultValue;
107}
108
109double XmlComponentConfig::getDoubleProperty(const QString& name, double defaultValue) const
110{
111 return hasProperty(name) ? getProperty(name).toDouble() : defaultValue;
112}
113
114void XmlComponentConfig::setProperty(const QString& name, const QString& value)
115{
116 component_.setAttribute(name, value);
117 LOG_INFO("property " << name
[165]118 << " of the component " << component_.attribute(kPropertyComponentName)
[89]119 << " was set to : " << value
120 );
121}
122
123bool XmlComponentConfig::hasProperty(const QString& name) const
124{
125 return component_.hasAttribute(name);
126}
127
128QDomElement XmlComponentConfig::qDomElement() const
129{
130 return component_;
131}
132
133void XmlComponentConfig::localCopy(const QDomElement& elementToCopy)
134{
135 component_ = elementToCopy;
136}
137
138QString const XmlComponentConfig::getComponentName() const
139{
[165]140 return getProperty(kPropertyComponentName);
[89]141}
142
143QString const XmlComponentConfig::getComponentType() const
144{
[165]145 return getProperty(kPropertyComponentType);
[89]146}
147
148QString const XmlComponentConfig::getConnectionType() const
149{
[165]150 return getProperty(kPropertyConnectionType);
[89]151}
152
153QString const XmlComponentConfig::getConnectionInput() const
154{
[165]155 return getProperty(kPropertyConnectionInput);
[89]156}
157
158QString const XmlComponentConfig::getConnectionOutput() const
159{
[165]160 return getProperty(kPropertyConnectionOutput);
[89]161}
162
163int const XmlComponentConfig::getConnectionPriority() const
164{
[165]165 return getIntProperty(kPropertyConnectionPriority, /*defaultValue=*/0);
[89]166}
Note: See TracBrowser for help on using the repository browser.