StateInstanceFactory.cpp
Go to the documentation of this file.
1 /*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ArmarX::
17 * @author Christian Mandery (christian.mandery at kit dot edu)
18 * @date 2014
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22 
23 #include "StateInstanceFactory.h"
24 
25 #include "../../StatechartViewerPlugin/model/stateinstance/DynamicRemoteState.h"
26 #include "../../StatechartViewerPlugin/model/stateinstance/EndState.h"
27 #include "../../StatechartViewerPlugin/model/stateinstance/LocalState.h"
28 #include "../../StatechartViewerPlugin/model/stateinstance/RemoteState.h"
29 #include "XmlReader.h"
30 
31 
32 using namespace armarx::exceptions::local;
33 using namespace armarx::statechartio;
34 using namespace armarx::statechartmodel;
35 
36 // TODO: This function is copied from XmlReader. The code duplication will be resolved once we use the RapidXmlWrapper here.
37 QString
38 readAttribute(rapidxml::xml_node<>* node, const QString& attributeName, bool required = true)
39 {
40  rapidxml::xml_attribute<>* attribute = node->first_attribute(attributeName.toUtf8());
41 
42  if (!attribute)
43  {
44  if (required)
45  {
46  throw XmlReaderException("Attribute \"" + attributeName.toStdString() + "\" for \"" +
47  node->name() + "\" node not found!");
48  }
49  else
50  {
51  return "";
52  }
53  }
54 
55  return QString::fromUtf8(attribute->value());
56 }
57 
58 StateInstanceFactoryBase::SubClassRegistry
59  EndStateInstanceFactory::registry(EndStateInstanceFactory::getName(),
60  &EndStateInstanceFactory::createInstance);
61 StateInstanceFactoryBase::SubClassRegistry
62  LocalStateInstanceFactory::registry(LocalStateInstanceFactory::getName(),
63  &LocalStateInstanceFactory::createInstance);
64 StateInstanceFactoryBase::SubClassRegistry
65  RemoteStateInstanceFactory::registry(RemoteStateInstanceFactory::getName(),
66  &RemoteStateInstanceFactory::createInstance);
67 StateInstanceFactoryBase::SubClassRegistry
68  DynamicRemoteStateInstanceFactory::registry(DynamicRemoteStateInstanceFactory::getName(),
69  &DynamicRemoteStateInstanceFactory::createInstance);
70 
71 StateInstanceFactoryBase::StateInstanceFactoryBase(rapidxml::xml_node<>* xmlNode,
73  xmlNode(xmlNode), parentState(parentState)
74 {
75 }
76 
79  StateInstanceFactoryBase(xmlNode, parentState)
80 {
81 }
82 
85 {
86  QString instanceName = readAttribute(xmlNode, "name");
87  QString eventName = readAttribute(xmlNode, "event");
88 
89  EndStatePtr endStateInstance(new EndState(instanceName, eventName, parentState));
90  endStateInstance->setPosition(
91  QPointF(readAttribute(xmlNode, "left").toFloat(), readAttribute(xmlNode, "top").toFloat()));
92  endStateInstance->setBoundingBox(readAttribute(xmlNode, "boundingSquareSize").toFloat());
93 
94  return endStateInstance;
95 }
96 
99 {
100  StateInstanceFactoryBasePtr factoryPtr(
101  new EndStateInstanceFactory(xmlParentPair.first, xmlParentPair.second));
102  return factoryPtr;
103 }
104 
106  rapidxml::xml_node<>* xmlNode,
107  armarx::statechartmodel::StatePtr parentState) :
108  StateInstanceFactoryBase(xmlNode, parentState)
109 {
110 }
111 
114 {
115  QString uuid = readAttribute(xmlNode, "refuuid");
116  QString instanceName = readAttribute(xmlNode, "name");
117 
118  LocalStatePtr localStateInstance(new LocalState(uuid, instanceName, parentState));
119  localStateInstance->setPosition(
120  QPointF(readAttribute(xmlNode, "left").toFloat(), readAttribute(xmlNode, "top").toFloat()));
121  localStateInstance->setBoundingBox(readAttribute(xmlNode, "boundingSquareSize").toFloat());
122 
123  return localStateInstance;
124 }
125 
128 {
129  StateInstanceFactoryBasePtr factoryPtr(
130  new LocalStateInstanceFactory(xmlParentPair.first, xmlParentPair.second));
131  return factoryPtr;
132 }
133 
135  rapidxml::xml_node<>* xmlNode,
136  armarx::statechartmodel::StatePtr parentState) :
137  StateInstanceFactoryBase(xmlNode, parentState)
138 {
139 }
140 
143 {
144  QString uuid = readAttribute(xmlNode, "refuuid");
145  QString instanceName = readAttribute(xmlNode, "name");
146 
147  statechartmodel::RemoteStatePtr remoteStateInstance(
148  new statechartmodel::RemoteState(uuid, instanceName, parentState));
149  remoteStateInstance->proxyName = readAttribute(xmlNode, "proxyName");
150  remoteStateInstance->setPosition(
151  QPointF(readAttribute(xmlNode, "left").toFloat(), readAttribute(xmlNode, "top").toFloat()));
152  remoteStateInstance->setBoundingBox(readAttribute(xmlNode, "boundingSquareSize").toFloat());
153 
154  return remoteStateInstance;
155 }
156 
159 {
160  StateInstanceFactoryBasePtr factoryPtr(
161  new RemoteStateInstanceFactory(xmlParentPair.first, xmlParentPair.second));
162  return factoryPtr;
163 }
164 
166  rapidxml::xml_node<>* xmlNode,
167  armarx::statechartmodel::StatePtr parentState) :
168  StateInstanceFactoryBase(xmlNode, parentState)
169 {
170 }
171 
174 {
175  QString instanceName = readAttribute(xmlNode, "name");
176  QString uuid = readAttribute(xmlNode, "refuuid");
177  DynamicRemoteStatePtr dynamicRemoteStateInstance(
178  new statechartmodel::DynamicRemoteState(uuid, instanceName, parentState));
179  dynamicRemoteStateInstance->setPosition(
180  QPointF(readAttribute(xmlNode, "left").toFloat(), readAttribute(xmlNode, "top").toFloat()));
181  dynamicRemoteStateInstance->setBoundingBox(
182  readAttribute(xmlNode, "boundingSquareSize").toFloat());
183 
184  return dynamicRemoteStateInstance;
185 }
186 
189 {
190  StateInstanceFactoryBasePtr factoryPtr(
191  new DynamicRemoteStateInstanceFactory(xmlParentPair.first, xmlParentPair.second));
192  return factoryPtr;
193 }
armarx::exceptions::local::XmlReaderException
Definition: XmlReader.h:111
XmlReader.h
armarx::statechartio
Definition: StateInstanceFactory.h:30
armarx::statechartio::StateInstanceFactoryBase::xmlNode
rapidxml::xml_node * xmlNode
Definition: StateInstanceFactory.h:48
armarx::statechartmodel::RemoteState
Definition: RemoteState.h:28
armarx::statechartmodel::EndStatePtr
std::shared_ptr< EndState > EndStatePtr
Definition: EndState.h:45
armarx::statechartio::DynamicRemoteStateInstanceFactory::getStateInstance
armarx::statechartmodel::StateInstancePtr getStateInstance() override
Definition: StateInstanceFactory.cpp:173
armarx::toFloat
float toFloat(const std::string &input)
Converts a string to float and uses always dot as seperator.
Definition: StringHelpers.cpp:100
rapidxml::xml_node::first_attribute
xml_attribute< Ch > * first_attribute(const Ch *name=nullptr, std::size_t name_size=0, bool case_sensitive=true) const
Gets first attribute of node, optionally matching attribute name.
Definition: rapidxml.hpp:1224
armarx::statechartio::DynamicRemoteStateInstanceFactory::DynamicRemoteStateInstanceFactory
DynamicRemoteStateInstanceFactory(rapidxml::xml_node<> *xmlNode, armarx::statechartmodel::StatePtr parentState)
Definition: StateInstanceFactory.cpp:165
armarx::statechartmodel::StateInstancePtr
std::shared_ptr< StateInstance > StateInstancePtr
Definition: StateInstance.h:146
rapidxml::xml_attribute
Class representing attribute node of XML document.
Definition: rapidxml.hpp:142
armarx::statechartio::RemoteStateInstanceFactory::createInstance
static StateInstanceFactoryBasePtr createInstance(XmlParentPair)
Definition: StateInstanceFactory.cpp:158
IceInternal::Handle
Definition: forward_declarations.h:8
armarx::statechartio::EndStateInstanceFactory::createInstance
static StateInstanceFactoryBasePtr createInstance(XmlParentPair)
Definition: StateInstanceFactory.cpp:98
armarx::statechartio::LocalStateInstanceFactory::createInstance
static StateInstanceFactoryBasePtr createInstance(XmlParentPair)
Definition: StateInstanceFactory.cpp:127
armarx::statechartmodel::LocalStatePtr
std::shared_ptr< LocalState > LocalStatePtr
Definition: LocalState.h:47
armarx::statechartio::DynamicRemoteStateInstanceFactory::createInstance
static StateInstanceFactoryBasePtr createInstance(XmlParentPair)
Definition: StateInstanceFactory.cpp:188
armarx::exceptions::local
Definition: DynamicLibraryException.h:31
armarx::statechartmodel::DynamicRemoteState
Definition: DynamicRemoteState.h:29
armarx::statechartmodel
Definition: XmlWriter.h:36
readAttribute
QString readAttribute(rapidxml::xml_node<> *node, const QString &attributeName, bool required=true)
Definition: StateInstanceFactory.cpp:38
armarx::statechartio::LocalStateInstanceFactory::getStateInstance
armarx::statechartmodel::StateInstancePtr getStateInstance() override
Definition: StateInstanceFactory.cpp:113
armarx::statechartio::LocalStateInstanceFactory::LocalStateInstanceFactory
LocalStateInstanceFactory(rapidxml::xml_node<> *xmlNode, armarx::statechartmodel::StatePtr parentState)
Definition: StateInstanceFactory.cpp:105
StateInstanceFactory.h
armarx::statechartmodel::EndState
Definition: EndState.h:28
armarx::statechartio::RemoteStateInstanceFactory::getStateInstance
armarx::statechartmodel::StateInstancePtr getStateInstance() override
Definition: StateInstanceFactory.cpp:142
armarx::statechartio::StateInstanceFactoryBasePtr
std::shared_ptr< StateInstanceFactoryBase > StateInstanceFactoryBasePtr
Definition: StateInstanceFactory.h:52
rapidxml::xml_node
Class representing a node of XML document.
Definition: rapidxml.hpp:140
armarx::statechartmodel::StatePtr
std::shared_ptr< State > StatePtr
Definition: State.h:48
armarx::statechartio::StateInstanceFactoryBase
Definition: StateInstanceFactory.h:34
armarx::statechartio::EndStateInstanceFactory::getStateInstance
armarx::statechartmodel::StateInstancePtr getStateInstance() override
Definition: StateInstanceFactory.cpp:84
armarx::statechartmodel::LocalState
Definition: LocalState.h:31
armarx::statechartio::XmlParentPair
std::pair< rapidxml::xml_node<> *, armarx::statechartmodel::StatePtr > XmlParentPair
Definition: StateInstanceFactory.h:32
armarx::statechartmodel::RemoteStatePtr
std::shared_ptr< RemoteState > RemoteStatePtr
Definition: RemoteState.h:47
armarx::statechartio::StateInstanceFactoryBase::parentState
armarx::statechartmodel::StatePtr parentState
Definition: StateInstanceFactory.h:49
armarx::statechartio::RemoteStateInstanceFactory::RemoteStateInstanceFactory
RemoteStateInstanceFactory(rapidxml::xml_node<> *xmlNode, armarx::statechartmodel::StatePtr parentState)
Definition: StateInstanceFactory.cpp:134
armarx::statechartio::EndStateInstanceFactory::EndStateInstanceFactory
EndStateInstanceFactory(rapidxml::xml_node<> *xmlNode, armarx::statechartmodel::StatePtr parentState)
Definition: StateInstanceFactory.cpp:77