diff options
author | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-10 22:42:42 (GMT) |
---|---|---|
committer | Stefan Radomski <radomski@tk.informatik.tu-darmstadt.de> | 2013-01-10 22:42:42 (GMT) |
commit | 7aa7095d17a180d663cd9647c31d99d97c1dca4f (patch) | |
tree | 460bc3a67f0adc3199bec9f22ee15a102263eb4c /src/uscxml/Factory.cpp | |
parent | da1032ffbff229ce2ca9a83d47522ff45c90ba23 (diff) | |
download | uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.zip uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.tar.gz uscxml-7aa7095d17a180d663cd9647c31d99d97c1dca4f.tar.bz2 |
Major changes - see details
- Dynamic SceneGraph ML
- V8 DOM for ecmascript datamodel
- New heartbeat invoker
- Fixed various bugs
Diffstat (limited to 'src/uscxml/Factory.cpp')
-rw-r--r-- | src/uscxml/Factory.cpp | 83 |
1 files changed, 57 insertions, 26 deletions
diff --git a/src/uscxml/Factory.cpp b/src/uscxml/Factory.cpp index 3f94901..3cac6b1 100644 --- a/src/uscxml/Factory.cpp +++ b/src/uscxml/Factory.cpp @@ -10,6 +10,7 @@ # include "uscxml/plugins/ioprocessor/basichttp/libevent/EventIOProcessor.h" # include "uscxml/plugins/invoker/scxml/USCXMLInvoker.h" +# include "uscxml/plugins/invoker/heartbeat/HeartbeatInvoker.h" # ifdef UMUNDO_FOUND # include "uscxml/plugins/invoker/umundo/UmundoInvoker.h" @@ -110,6 +111,10 @@ Factory::Factory() { registerInvoker(invoker); } { + HeartbeatInvoker* invoker = new HeartbeatInvoker(); + registerInvoker(invoker); + } + { EventIOProcessor* ioProcessor = new EventIOProcessor(); registerIOProcessor(ioProcessor); } @@ -125,28 +130,40 @@ Factory::~Factory() { void Factory::registerIOProcessor(IOProcessor* ioProcessor) { std::set<std::string> names = ioProcessor->getNames(); std::set<std::string>::iterator nameIter = names.begin(); - while(nameIter != names.end()) { - _ioProcessors[*nameIter] = ioProcessor; - nameIter++; - } + if (nameIter != names.end()) { + std::string canonicalName = *nameIter; + _ioProcessors[canonicalName] = ioProcessor; + while(nameIter != names.end()) { + _ioProcessorAliases[*nameIter] = canonicalName; + nameIter++; + } + } } void Factory::registerDataModel(DataModel* dataModel) { std::set<std::string> names = dataModel->getNames(); std::set<std::string>::iterator nameIter = names.begin(); - while(nameIter != names.end()) { - _dataModels[*nameIter] = dataModel; - nameIter++; - } + if (nameIter != names.end()) { + std::string canonicalName = *nameIter; + _dataModels[canonicalName] = dataModel; + while(nameIter != names.end()) { + _dataModelAliases[*nameIter] = canonicalName; + nameIter++; + } + } } - + void Factory::registerInvoker(Invoker* invoker) { std::set<std::string> names = invoker->getNames(); std::set<std::string>::iterator nameIter = names.begin(); - while(nameIter != names.end()) { - _invokers[*nameIter] = invoker; - nameIter++; - } + if (nameIter != names.end()) { + std::string canonicalName = *nameIter; + _invokers[canonicalName] = invoker; + while(nameIter != names.end()) { + _invokerAliases[*nameIter] = canonicalName; + nameIter++; + } + } } void Factory::registerExecutableContent(const std::string tag, ExecutableContent* executableContent) { @@ -155,28 +172,41 @@ void Factory::registerExecutableContent(const std::string tag, ExecutableContent Invoker* Factory::getInvoker(const std::string type, Interpreter* interpreter) { Factory* factory = getInstance(); - if (factory->_invokers.find(type) != factory->_invokers.end()) { - return (Invoker*)factory->_invokers[type]->create(interpreter); - } - return NULL; + if (factory->_invokerAliases.find(type) == factory->_invokerAliases.end()) + return NULL; + + std::string canonicalName = factory->_invokerAliases[type]; + if (factory->_invokers.find(canonicalName) == factory->_invokers.end()) + return NULL; + + return factory->_invokers[canonicalName]->create(interpreter); } DataModel* Factory::getDataModel(const std::string type, Interpreter* interpreter) { Factory* factory = getInstance(); - if (factory->_dataModels.find(type) != factory->_dataModels.end()) { - return factory->_dataModels[type]->create(interpreter); - } - return NULL; + if (factory->_dataModelAliases.find(type) == factory->_dataModelAliases.end()) + return NULL; + + std::string canonicalName = factory->_dataModelAliases[type]; + if (factory->_dataModels.find(canonicalName) == factory->_dataModels.end()) + return NULL; + + return factory->_dataModels[canonicalName]->create(interpreter); } IOProcessor* Factory::getIOProcessor(const std::string type, Interpreter* interpreter) { Factory* factory = getInstance(); - if (factory->_ioProcessors.find(type) != factory->_ioProcessors.end()) { - return factory->_ioProcessors[type]->create(interpreter); - } - return NULL; + if (factory->_ioProcessorAliases.find(type) == factory->_ioProcessorAliases.end()) + return NULL; + + std::string canonicalName = factory->_ioProcessorAliases[type]; + if (factory->_ioProcessors.find(canonicalName) == factory->_ioProcessors.end()) + return NULL; + + return factory->_ioProcessors[canonicalName]->create(interpreter); } +#if 0 ExecutableContent* Factory::getExecutableContent(const std::string tag, Interpreter* interpreter) { Factory* factory = getInstance(); if (factory->_executableContent.find(tag) != factory->_executableContent.end()) { @@ -184,7 +214,8 @@ ExecutableContent* Factory::getExecutableContent(const std::string tag, Interpre } return NULL; } - +#endif + Factory* Factory::getInstance() { if (_instance == NULL) { _instance = new Factory(); |