diff options
Diffstat (limited to 'src/uscxml/plugins')
26 files changed, 381 insertions, 78 deletions
diff --git a/src/uscxml/plugins/Factory.cpp b/src/uscxml/plugins/Factory.cpp index b609955..0b9104e 100644 --- a/src/uscxml/plugins/Factory.cpp +++ b/src/uscxml/plugins/Factory.cpp @@ -33,10 +33,21 @@ #include "uscxml/plugins/InvokerImpl.h" #include "uscxml/plugins/DataModelImpl.h" +#include <xercesc/dom/DOM.hpp> +#include <xercesc/util/PlatformUtils.hpp> +#include "uscxml/util/DOM.h" + +#include <iostream> // see http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system +/*** BEGIN PLUGINS ***/ + +#ifdef BUILD_AS_PLUGINS +# include "uscxml/plugins/Plugins.h" +#else + #ifdef WITH_IOPROC_SCXML # include "uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h" #endif @@ -45,10 +56,9 @@ # include "uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h" #endif +#include "uscxml/plugins/datamodel/null/NullDataModel.h" -#include "uscxml/plugins/datamodel/null/NULLDataModel.h" - -#ifdef WITH_DM_ECMA_V8 +#if defined WITH_DM_ECMA_V8 # include "uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h" #endif @@ -77,6 +87,9 @@ # include "uscxml/plugins/invoker/dirmon/DirMonInvoker.h" #endif +#endif +/*** END PLUGINS ***/ + namespace uscxml { @@ -98,8 +111,62 @@ std::string Factory::getDefaultPluginPath() { return _defaultPluginPath; } +Factory::~Factory() { +#ifdef BUILD_AS_PLUGINS + pluma.unloadAll(); +#endif +} + void Factory::registerPlugins() { + /*** PLUGINS ***/ +#ifdef BUILD_AS_PLUGINS + + if (_pluginPath.length() == 0) { + // try to read USCXML_PLUGIN_PATH environment variable + _pluginPath = (getenv("USCXML_PLUGIN_PATH") != NULL ? getenv("USCXML_PLUGIN_PATH") : ""); + } + if (_pluginPath.length() > 0) { + pluma.acceptProviderType<InvokerImplProvider>(); + pluma.acceptProviderType<IOProcessorImplProvider>(); + pluma.acceptProviderType<DataModelImplProvider>(); + pluma.acceptProviderType<ExecutableContentImplProvider>(); + pluma.loadFromFolder(_pluginPath, true); + + std::vector<InvokerImplProvider*> invokerProviders; + pluma.getProviders(invokerProviders); + for (auto provider : invokerProviders) { + InvokerImpl* invoker = provider->create(); + registerInvoker(invoker); + } + + std::vector<IOProcessorImplProvider*> ioProcessorProviders; + pluma.getProviders(ioProcessorProviders); + for (auto provider : ioProcessorProviders) { + IOProcessorImpl* ioProcessor = provider->create(); + registerIOProcessor(ioProcessor); + } + + std::vector<DataModelImplProvider*> dataModelProviders; + pluma.getProviders(dataModelProviders); + for (auto provider : dataModelProviders) { + DataModelImpl* dataModel = provider->create(); + registerDataModel(dataModel); + } + + std::vector<ExecutableContentImplProvider*> execContentProviders; + pluma.getProviders(execContentProviders); + for (auto provider : execContentProviders) { + ExecutableContentImpl* execContent = provider->create(); + registerExecutableContent(execContent); + } + + } else { + ERROR_EXECUTION_THROW("No path to plugins known, export USCXML_PLUGIN_PATH or pass path as parameter"); + } + +#else + #ifdef WITH_IOPROC_SCXML { SCXMLIOProcessor* ioProcessor = new SCXMLIOProcessor(); @@ -150,11 +217,10 @@ void Factory::registerPlugins() { #endif { - NULLDataModel* dataModel = new NULLDataModel(); + NullDataModel* dataModel = new NullDataModel(); registerDataModel(dataModel); } - #ifdef WITH_INV_SCXML { USCXMLInvoker* invoker = new USCXMLInvoker(); @@ -169,12 +235,9 @@ void Factory::registerPlugins() { } #endif -} - -Factory::~Factory() { -#ifdef BUILD_AS_PLUGINS - pluma.unloadAll(); #endif + /*** PLUGINS ***/ + } #define LIST_COMPONENTS(type, name) \ @@ -476,6 +539,13 @@ size_t DataModelImpl::replaceExpressions(std::string& content) { Factory* Factory::getInstance() { + // this needs to be here as some plugins use xercesc + try { + ::xercesc_3_1::XMLPlatformUtils::Initialize(); + } catch (const XERCESC_NS::XMLException& toCatch) { + ERROR_PLATFORM_THROW("Cannot initialize XercesC: " + X(toCatch.getMessage()).str()); + } + if (_instance == NULL) { _instance = new Factory(Factory::_defaultPluginPath); } @@ -530,6 +600,6 @@ void InvokerImpl::eventToSCXML(Event& event, } } -Factory* Factory::_instance = NULL; std::string Factory::_defaultPluginPath; +Factory* Factory::_instance = NULL; } diff --git a/src/uscxml/plugins/Factory.h b/src/uscxml/plugins/Factory.h index 48bfae8..0026df1 100644 --- a/src/uscxml/plugins/Factory.h +++ b/src/uscxml/plugins/Factory.h @@ -92,10 +92,10 @@ protected: Factory(const std::string&); ~Factory(); - Factory* _parentFactory; + Factory* _parentFactory = NULL; std::string _pluginPath; - static Factory* _instance; static std::string _defaultPluginPath; + static Factory* _instance; }; diff --git a/src/uscxml/plugins/Plugins.cpp b/src/uscxml/plugins/Plugins.cpp new file mode 100644 index 0000000..0c9a23c --- /dev/null +++ b/src/uscxml/plugins/Plugins.cpp @@ -0,0 +1,31 @@ +/** + * @file + * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de) + * @copyright Simplified BSD + * + * @cond + * This program is free software: you can redistribute it and/or modify + * it under the terms of the FreeBSD license as published by the FreeBSD + * project. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the FreeBSD license along with this + * program. If not, see <http://www.opensource.org/licenses/bsd-license>. + * @endcond + */ + +#include "Plugins.h" + +namespace uscxml { + +#ifdef BUILD_AS_PLUGINS +PLUMA_PROVIDER_SOURCE(DataModelImpl, 1, 1) +PLUMA_PROVIDER_SOURCE(IOProcessorImpl, 1, 1) +PLUMA_PROVIDER_SOURCE(InvokerImpl, 1, 1) +PLUMA_PROVIDER_SOURCE(ExecutableContentImpl, 1, 1) +#endif + +} diff --git a/src/uscxml/plugins/Plugins.h b/src/uscxml/plugins/Plugins.h new file mode 100644 index 0000000..eb1c9cb --- /dev/null +++ b/src/uscxml/plugins/Plugins.h @@ -0,0 +1,41 @@ +/** + * @file + * @author 2012-2013 Stefan Radomski (stefan.radomski@cs.tu-darmstadt.de) + * @copyright Simplified BSD + * + * @cond + * This program is free software: you can redistribute it and/or modify + * it under the terms of the FreeBSD license as published by the FreeBSD + * project. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * You should have received a copy of the FreeBSD license along with this + * program. If not, see <http://www.opensource.org/licenses/bsd-license>. + * @endcond + */ + +#ifndef PLUGINS_H_M6G1NF1E +#define PLUGINS_H_M6G1NF1E + +#include "uscxml/config.h" +#include <Pluma/Pluma.hpp> +#include "uscxml/plugins/DataModelImpl.h" +#include "uscxml/plugins/IOProcessorImpl.h" +#include "uscxml/plugins/InvokerImpl.h" +#include "uscxml/plugins/ExecutableContentImpl.h" + +namespace uscxml { + +#ifdef BUILD_AS_PLUGINS +PLUMA_PROVIDER_HEADER(IOProcessorImpl) +PLUMA_PROVIDER_HEADER(InvokerImpl) +PLUMA_PROVIDER_HEADER(ExecutableContentImpl) +PLUMA_PROVIDER_HEADER(DataModelImpl) +#endif + +} + +#endif /* end of include guard: PLUGINS_H_M6G1NF1E */ diff --git a/src/uscxml/plugins/datamodel/CMakeLists.txt b/src/uscxml/plugins/datamodel/CMakeLists.txt index a208856..24a1ea0 100644 --- a/src/uscxml/plugins/datamodel/CMakeLists.txt +++ b/src/uscxml/plugins/datamodel/CMakeLists.txt @@ -5,8 +5,19 @@ file(GLOB NULL_DATAMODEL null/*.cpp null/*.h ) -list (APPEND USCXML_FILES ${NULL_DATAMODEL}) - +if (BUILD_AS_PLUGINS) + source_group("Null" FILES ${NULL_DATAMODEL}) + add_library( + datamodel_null SHARED + ${NULL_DATAMODEL} + "../Plugins.cpp") + target_link_libraries(datamodel_null uscxml) + set_target_properties(datamodel_null PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_null PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_null PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") +else() + list (APPEND USCXML_FILES ${NULL_DATAMODEL}) +endif() if (JSC_FOUND) set(USCXML_DATAMODELS "ecmascript(JSC) ${USCXML_DATAMODELS}") @@ -17,8 +28,20 @@ if (JSC_FOUND) ecmascript/*.cpp ecmascript/*.h ) - list (APPEND USCXML_FILES ${JSC_DATAMODEL}) - list (APPEND USCXML_OPT_LIBS ${JSC_LIBRARY}) + if (BUILD_AS_PLUGINS) + source_group("JavaScriptCore" FILES ${JSC_DATAMODEL}) + add_library( + datamodel_jsc SHARED + ${JSC_DATAMODEL} + "../Plugins.cpp") + target_link_libraries(datamodel_jsc uscxml ${JSC_LIBRARY}) + set_target_properties(datamodel_jsc PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_jsc PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_jsc PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${JSC_DATAMODEL}) + list (APPEND USCXML_OPT_LIBS ${JSC_LIBRARY}) + endif() endif() @@ -31,8 +54,21 @@ if (V8_FOUND) ecmascript/*.cpp ecmascript/*.h ) - list (APPEND USCXML_FILES ${V8_DATAMODEL}) - list (APPEND USCXML_OPT_LIBS ${V8_LIBRARY}) + if (BUILD_AS_PLUGINS) + source_group("V8" FILES ${V8_DATAMODEL}) + + add_library( + datamodel_v8 SHARED + ${V8_DATAMODEL} + "../Plugins.cpp") + target_link_libraries(datamodel_v8 uscxml ${V8_LIBRARY}) + set_target_properties(datamodel_v8 PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_v8 PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_v8 PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${V8_DATAMODEL}) + list (APPEND USCXML_OPT_LIBS ${V8_LIBRARY}) + endif() endif() @@ -43,8 +79,20 @@ if (LUA51_FOUND AND WITH_DM_LUA) lua/*.cpp lua/*.h ) - list (APPEND USCXML_FILES ${LUA_DATAMODEL}) - list (APPEND USCXML_OPT_LIBS ${LUA_LIBRARY}) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${LUA_DATAMODEL}) + add_library(datamodel_lua SHARED ${LUA_DATAMODEL} "../Plugins.cpp") + target_link_libraries(datamodel_lua + uscxml + ${LUA_LIBRARIES} + ) + set_target_properties(datamodel_lua PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_lua PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_lua PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${LUA_DATAMODEL}) + list (APPEND USCXML_OPT_LIBS ${LUA_LIBRARY}) + endif() endif() if (WITH_DM_C89) @@ -55,7 +103,18 @@ if (WITH_DM_C89) c89/*.c c89/*.h ) - list (APPEND USCXML_FILES ${C89_DATAMODEL}) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${C89_DATAMODEL}) + add_library(datamodel_c89 SHARED ${C89_DATAMODEL} "../Plugins.cpp") + target_link_libraries(datamodel_c89 + uscxml + ) + set_target_properties(datamodel_c89 PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_c89 PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_c89 PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${C89_DATAMODEL}) + endif() endif() if (WITH_DM_PROMELA) @@ -66,7 +125,22 @@ if (WITH_DM_PROMELA) promela/*.c promela/*.h ) - list (APPEND USCXML_FILES ${PROMELA_DATAMODEL}) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${PROMELA_DATAMODEL}) + add_library(datamodel_promela SHARED ${PROMELA_DATAMODEL} "../Plugins.cpp") + target_link_libraries(datamodel_promela + uscxml + ) + # SET_SOURCE_FILES_PROPERTIES is directory scope + if (${CMAKE_CXX_COMPILER_ID} STREQUAL Clang) + SET_SOURCE_FILES_PROPERTIES(promela/parser/promela.lex.yy.cpp PROPERTIES COMPILE_FLAGS -Wno-deprecated-register ) + endif() + set_target_properties(datamodel_promela PROPERTIES FOLDER "Plugins//DataModel") + set_target_properties(datamodel_promela PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(datamodel_promela PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${PROMELA_DATAMODEL}) + endif() endif() if (NOT SWIG_FOUND) diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp index 5ce6128..66bf45a 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp +++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.cpp @@ -22,7 +22,6 @@ #include "uscxml/util/String.h" #include "JSCDataModel.h" -//#include "JSCSCXMLEvent.h" #include "uscxml/messages/Event.h" #include "uscxml/util/DOM.h" @@ -32,6 +31,10 @@ #include <string> #include <boost/algorithm/string.hpp> +#ifdef BUILD_AS_PLUGINS +#include <Pluma/Connector.hpp> +#endif + #define EVENT_STRING_OR_UNDEF(field, cond) \ JSStringRef field##Name = JSStringCreateWithUTF8CString( #field ); \ JSStringRef field##Val = JSStringCreateWithUTF8CString(event.field.c_str()); \ @@ -193,7 +196,7 @@ bool JSCNodeListHasPropertyCallback(JSContextRef ctx, JSObjectRef object, JSStri return false; } - int index = strTo<int>(propName); + size_t index = strTo<size_t>(propName); SwigPrivData* t = (SwigPrivData*) JSObjectGetPrivate(object); DOMNodeList* nodeList = (DOMNodeList*)t->swigCObject; @@ -216,7 +219,7 @@ JSValueRef JSCNodeListGetPropertyCallback(JSContextRef context, JSObjectRef obje return JSValueMakeUndefined(context); } - int index = strTo<int>(propName); + size_t index = strTo<size_t>(propName); SwigPrivData* t = (SwigPrivData*) JSObjectGetPrivate(object); DOMNodeList* nodeList = (DOMNodeList*)t->swigCObject; @@ -316,7 +319,7 @@ void JSCDataModel::setEvent(const Event& event) { case Event::INTERNAL: eventTypeVal = JSStringCreateWithUTF8CString("internal"); break; - case Event::PLATFORM: + default: eventTypeVal = JSStringCreateWithUTF8CString("platform"); break; } diff --git a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h index 3a53da2..cd992ea 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h +++ b/src/uscxml/plugins/datamodel/ecmascript/JavaScriptCore/JSCDataModel.h @@ -126,7 +126,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(JSCDataModel, DataModelImpl); +PLUMA_INHERIT_PROVIDER(JSCDataModel, DataModelImpl) #endif } diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp index 61eb815..84cfa81 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp +++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.cpp @@ -35,6 +35,10 @@ #include <boost/algorithm/string.hpp> +#ifdef BUILD_AS_PLUGINS +#include <Pluma/Connector.hpp> +#endif + using namespace XERCESC_NS; static v8::Local<v8::Value> XMLString2JS(const XMLCh* input) { @@ -56,6 +60,14 @@ static XMLCh* JS2XMLString(const v8::Local<v8::Value>& value) { namespace uscxml { +#ifdef BUILD_AS_PLUGINS +PLUMA_CONNECTOR +bool pluginConnect(pluma::Host& host) { + host.add( new V8DataModelProvider() ); + return true; +} +#endif + V8DataModel::V8DataModel() { // _contexts.push_back(v8::Context::New()); } diff --git a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h index a9dbca1..00a871b 100644 --- a/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h +++ b/src/uscxml/plugins/datamodel/ecmascript/v8/V8DataModel.h @@ -20,6 +20,7 @@ #ifndef V8DATAMODEL_H_KN8TWG0V #define V8DATAMODEL_H_KN8TWG0V +#include "uscxml/config.h" #include "uscxml/plugins/DataModelImpl.h" #include <list> diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp index fccc5f0..607f994 100644 --- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp +++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.cpp @@ -42,8 +42,20 @@ //#include "LuaDOM.cpp.inc" +#ifdef BUILD_AS_PLUGINS +#include <Pluma/Connector.hpp> +#endif + namespace uscxml { +#ifdef BUILD_AS_PLUGINS +PLUMA_CONNECTOR +bool pluginConnect(pluma::Host& host) { + host.add( new LuaDataModelProvider() ); + return true; +} +#endif + //static int luaInspect(lua_State * l) { // return 0; //} @@ -194,20 +206,23 @@ int LuaDataModel::luaInFunction(lua_State * l) { std::shared_ptr<DataModelImpl> LuaDataModel::create(DataModelCallbacks* callbacks) { std::shared_ptr<LuaDataModel> dm(new LuaDataModel()); + dm->_callbacks = callbacks; dm->_luaState = luaL_newstate(); luaL_openlibs(dm->_luaState); try { const luabridge::LuaRef& requireFunc = luabridge::getGlobal(dm->_luaState, "require"); - const luabridge::LuaRef& resultLxp = requireFunc("lxp"); - const luabridge::LuaRef& resultLxpLOM = requireFunc("lxp.lom"); - - // MSVC compiler bug with implicit cast operators, see comments in LuaRef class - if ((bool)resultLxp && (bool)resultLxpLOM) { - _luaHasXMLParser = true; - luabridge::setGlobal(dm->_luaState, resultLxp, "lxp"); - luabridge::setGlobal(dm->_luaState, resultLxpLOM, "lxp.lom"); + if (requireFunc.isFunction()) { + const luabridge::LuaRef& resultLxp = requireFunc("lxp"); + const luabridge::LuaRef& resultLxpLOM = requireFunc("lxp.lom"); + + // MSVC compiler bug with implicit cast operators, see comments in LuaRef class + if ((bool)resultLxp && (bool)resultLxpLOM) { + _luaHasXMLParser = true; + luabridge::setGlobal(dm->_luaState, resultLxp, "lxp"); + luabridge::setGlobal(dm->_luaState, resultLxpLOM, "lxp.lom"); + } } } catch (luabridge::LuaException e) { LOG(_callbacks->getLogger(), USCXML_INFO) << e.what(); diff --git a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h index 85d7b53..ad86872 100644 --- a/src/uscxml/plugins/datamodel/lua/LuaDataModel.h +++ b/src/uscxml/plugins/datamodel/lua/LuaDataModel.h @@ -20,6 +20,7 @@ #ifndef LUADATAMODEL_H_113E014C #define LUADATAMODEL_H_113E014C +#include "uscxml/config.h" #include "uscxml/plugins/DataModelImpl.h" #include <list> @@ -92,7 +93,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(LuaDataModel, DataModelImpl); +PLUMA_INHERIT_PROVIDER(LuaDataModel, DataModelImpl) #endif } diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp index 53c414f..efa77fa 100644 --- a/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp +++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.cpp @@ -20,7 +20,7 @@ #include <boost/algorithm/string.hpp> #include "uscxml/Common.h" -#include "NULLDataModel.h" +#include "NullDataModel.h" #include "uscxml/util/DOM.h" #ifdef BUILD_AS_PLUGINS @@ -32,24 +32,24 @@ namespace uscxml { #ifdef BUILD_AS_PLUGINS PLUMA_CONNECTOR bool pluginConnect(pluma::Host& host) { - host.add( new NULLDataModelProvider() ); + host.add( new NullDataModelProvider() ); return true; } #endif -NULLDataModel::NULLDataModel() { +NullDataModel::NullDataModel() { } -std::shared_ptr<DataModelImpl> NULLDataModel::create(DataModelCallbacks* callbacks) { - std::shared_ptr<NULLDataModel> dm(new NULLDataModel()); +std::shared_ptr<DataModelImpl> NullDataModel::create(DataModelCallbacks* callbacks) { + std::shared_ptr<NullDataModel> dm(new NullDataModel()); dm->_callbacks = callbacks; return dm; } -NULLDataModel::~NULLDataModel() { +NullDataModel::~NullDataModel() { } -Data NULLDataModel::getAsData(const std::string& content) { +Data NullDataModel::getAsData(const std::string& content) { Data data = Data::fromJSON(content); if (data.empty()) { data = Data(content, Data::VERBATIM); @@ -63,7 +63,7 @@ Data NULLDataModel::getAsData(const std::string& content) { * The predicate must return 'true' if and only if that state is in the current * state configuration. */ -bool NULLDataModel::evalAsBool(const XERCESC_NS::DOMElement* scriptNode, const std::string& expr) { +bool NullDataModel::evalAsBool(const XERCESC_NS::DOMElement* scriptNode, const std::string& expr) { std::string trimmedExpr = expr; boost::trim(trimmedExpr); if (!boost::istarts_with(trimmedExpr, "in")) @@ -105,4 +105,4 @@ bool NULLDataModel::evalAsBool(const XERCESC_NS::DOMElement* scriptNode, const s return true; } -}
\ No newline at end of file +} diff --git a/src/uscxml/plugins/datamodel/null/NULLDataModel.h b/src/uscxml/plugins/datamodel/null/NULLDataModel.h index fba8577..8c9f5b9 100644 --- a/src/uscxml/plugins/datamodel/null/NULLDataModel.h +++ b/src/uscxml/plugins/datamodel/null/NULLDataModel.h @@ -20,6 +20,7 @@ #ifndef NULLDATAMODEL_H_KN8TWG0V #define NULLDATAMODEL_H_KN8TWG0V +#include "uscxml/config.h" #include "uscxml/plugins/DataModelImpl.h" #include <list> @@ -38,10 +39,10 @@ namespace uscxml { * @ingroup datamodel * NULL data-model. */ -class NULLDataModel : public DataModelImpl { +class NullDataModel : public DataModelImpl { public: - NULLDataModel(); - virtual ~NULLDataModel(); + NullDataModel(); + virtual ~NullDataModel(); virtual std::shared_ptr<DataModelImpl> create(DataModelCallbacks* callbacks); virtual std::list<std::string> getNames() { @@ -104,7 +105,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(NULLDataModel, DataModelImpl); +PLUMA_INHERIT_PROVIDER(NullDataModel, DataModelImpl) #endif } diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp index 14d24c3..5adf337 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp +++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.cpp @@ -17,15 +17,13 @@ * @endcond */ -#include <boost/algorithm/string.hpp> - #include "uscxml/Common.h" -#include "uscxml/config.h" #include "uscxml/util/String.h" #include "PromelaDataModel.h" #include "uscxml/util/DOM.h" #include <cctype> +#include <boost/algorithm/string.hpp> #include "PromelaParser.h" #include "parser/promela.tab.hpp" @@ -337,7 +335,7 @@ void PromelaDataModel::setEvent(const Event& event) { int size = dataToInt(evaluateExpr(*opIterAsgn++)); variable.compound["size"] = Data(size); - for (size_t i = 0; i < size; i++) { + for (int i = 0; i < size; i++) { variable.compound["value"].array.push_back(Data(0, Data::INTERPRETED)); } diff --git a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h index 4a763ac..f19bd5d 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h +++ b/src/uscxml/plugins/datamodel/promela/PromelaDataModel.h @@ -20,6 +20,7 @@ #ifndef PROMELADATAMODEL_H_4VG0TDMU #define PROMELADATAMODEL_H_4VG0TDMU +#include "uscxml/config.h" #include "uscxml/plugins/DataModelImpl.h" #include <list> @@ -96,7 +97,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(PromelaDataModel, DataModelImpl); +PLUMA_INHERIT_PROVIDER(PromelaDataModel, DataModelImpl) #endif } diff --git a/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp b/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp index 57f694a..44f8bdd 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp +++ b/src/uscxml/plugins/datamodel/promela/PromelaParser.cpp @@ -43,7 +43,7 @@ void promela_error (void* yylloc_param, uscxml::PromelaParser* ctx, void* yyscan excEvent.data.compound["col"] = uscxml::Data(yylloc->first_column, uscxml::Data::VERBATIM); std::stringstream ssUnderline; - for (size_t i = 0; i < yylloc->first_column; i++) + for (int i = 0; i < yylloc->first_column; i++) ssUnderline << " "; ssUnderline << "^"; excEvent.data.compound["sourcemark"] = uscxml::Data(ssUnderline.str(), uscxml::Data::VERBATIM); @@ -196,7 +196,7 @@ void PromelaParserNode::push(PromelaParserNode* node) { operands.push_back(node); } -void PromelaParserNode::dump(int indent) { +void PromelaParserNode::dump(size_t indent) { std::string padding; for (size_t i = 0; i < indent; i++) { padding += " "; diff --git a/src/uscxml/plugins/datamodel/promela/PromelaParser.h b/src/uscxml/plugins/datamodel/promela/PromelaParser.h index 236233d..45ea341 100644 --- a/src/uscxml/plugins/datamodel/promela/PromelaParser.h +++ b/src/uscxml/plugins/datamodel/promela/PromelaParser.h @@ -48,7 +48,7 @@ public: void merge(PromelaParserNode* node); void push(PromelaParserNode* node); - void dump(int indent = 0); + void dump(size_t indent = 0); static std::string typeToDesc(int type); diff --git a/src/uscxml/plugins/invoker/CMakeLists.txt b/src/uscxml/plugins/invoker/CMakeLists.txt index 5500e3f..9f50684 100644 --- a/src/uscxml/plugins/invoker/CMakeLists.txt +++ b/src/uscxml/plugins/invoker/CMakeLists.txt @@ -6,7 +6,18 @@ if (WITH_INV_SCXML) file(GLOB_RECURSE USCXML_INVOKER scxml/*.cpp scxml/*.h) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${USCXML_INVOKER}) + add_library(invoker_uscxml SHARED ${USCXML_INVOKER} "../Plugins.cpp") + target_link_libraries(invoker_uscxml + uscxml + ) + set_target_properties(invoker_uscxml PROPERTIES FOLDER "Plugins//Invoker") + set_target_properties(invoker_uscxml PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(invoker_uscxml PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() list (APPEND USCXML_FILES ${USCXML_INVOKER}) + endif() endif() # Directoy Monitor @@ -17,7 +28,18 @@ if (WITH_INV_DIRMON) file(GLOB_RECURSE DIRMON_INVOKER dirmon/*.cpp dirmon/*.h) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${DIRMON_INVOKER}) + add_library(invoker_dirmon SHARED ${DIRMON_INVOKER} "../Plugins.cpp") + target_link_libraries(invoker_dirmon + uscxml + ) + set_target_properties(invoker_dirmon PROPERTIES FOLDER "Plugins//Invoker") + set_target_properties(invoker_dirmon PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(invoker_dirmon PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() list (APPEND USCXML_FILES ${DIRMON_INVOKER}) + endif() endif() set(USCXML_INCLUDE_DIRS ${USCXML_INCLUDE_DIRS} PARENT_SCOPE) diff --git a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp index be13bf4..e9cf702 100644 --- a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp +++ b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.cpp @@ -19,8 +19,6 @@ #include "DirMonInvoker.h" -#include "uscxml/config.h" - #ifdef BUILD_AS_PLUGINS #include <Pluma/Connector.hpp> #endif @@ -62,7 +60,7 @@ DirMonInvoker::~DirMonInvoker() { } if (_watcher) delete(_watcher); -}; +} std::shared_ptr<InvokerImpl> DirMonInvoker::create(InvokerCallbacks* callbacks) { std::shared_ptr<DirMonInvoker> invoker(new DirMonInvoker()); diff --git a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h index dffbe14..6d9911f 100644 --- a/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h +++ b/src/uscxml/plugins/invoker/dirmon/DirMonInvoker.h @@ -20,6 +20,7 @@ #ifndef DIRMONINVOKER_H_W09J90F0 #define DIRMONINVOKER_H_W09J90F0 +#include "uscxml/config.h" #include "uscxml/plugins/InvokerImpl.h" #include "uscxml/interpreter/Logging.h" @@ -139,7 +140,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(DirMonInvoker, InvokerImpl); +PLUMA_INHERIT_PROVIDER(DirMonInvoker, InvokerImpl) #endif } diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp index b035993..d3bc5bf 100644 --- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp +++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.cpp @@ -19,8 +19,6 @@ #include "USCXMLInvoker.h" -#include "uscxml/config.h" - #ifdef BUILD_AS_PLUGINS #include <Pluma/Connector.hpp> #endif @@ -52,7 +50,7 @@ USCXMLInvoker::USCXMLInvoker() { USCXMLInvoker::~USCXMLInvoker() { stop(); -}; +} void USCXMLInvoker::start() { _isStarted = true; @@ -184,7 +182,7 @@ void USCXMLInvoker::invoke(const std::string& source, const Event& invokeEvent) InterpreterImpl* invoked = _invokedInterpreter.getImpl().get(); ActionLanguage al = _callbacks->getActionLanguage(); - // create new instances + // create new instances al.execContent = al.execContent.getImpl()->create(invoked); al.delayQueue = al.delayQueue.getImplDelayed()->create(invoked); al.internalQueue = al.internalQueue.getImplBase()->create(); diff --git a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h index d37d2af..61931c6 100644 --- a/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h +++ b/src/uscxml/plugins/invoker/scxml/USCXMLInvoker.h @@ -20,6 +20,7 @@ #ifndef USCXMLINVOKER_H_OQFA21IO #define USCXMLINVOKER_H_OQFA21IO +#include "uscxml/config.h" #include "uscxml/interpreter/InterpreterImpl.h" #include "uscxml/interpreter/BasicEventQueue.h" @@ -88,7 +89,7 @@ protected: }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(USCXMLInvoker, InvokerImpl); +PLUMA_INHERIT_PROVIDER(USCXMLInvoker, InvokerImpl) #endif } diff --git a/src/uscxml/plugins/ioprocessor/CMakeLists.txt b/src/uscxml/plugins/ioprocessor/CMakeLists.txt index 3505920..fb4315b 100644 --- a/src/uscxml/plugins/ioprocessor/CMakeLists.txt +++ b/src/uscxml/plugins/ioprocessor/CMakeLists.txt @@ -7,7 +7,18 @@ if (WITH_IOPROC_SCXML) scxml/*.cpp scxml/*.h ) - list (APPEND USCXML_FILES ${SCXML_IOPROCESSOR}) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${SCXML_IOPROCESSOR}) + add_library(ioproc_scxml SHARED ${SCXML_IOPROCESSOR} "../Plugins.cpp") + target_link_libraries(ioproc_scxml + uscxml + ) + set_target_properties(ioproc_scxml PROPERTIES FOLDER "Plugins//IO Processors") + set_target_properties(ioproc_scxml PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(ioproc_scxml PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${SCXML_IOPROCESSOR}) + endif() endif() OPTION(WITH_IOPROC_BASICHTTP "Build the basichttp i/o processor" ON) @@ -17,8 +28,18 @@ if (WITH_IOPROC_BASICHTTP) basichttp/*.cpp basichttp/*.h ) - list (APPEND BASICHTTP_IOPROCESSOR "") - list (APPEND USCXML_FILES ${BASICHTTP_IOPROCESSOR}) + if (BUILD_AS_PLUGINS) + source_group("" FILES ${BASICHTTP_IOPROCESSOR}) + add_library(ioproc_basichttp SHARED ${BASICHTTP_IOPROCESSOR} "../Plugins.cpp") + target_link_libraries(ioproc_basichttp + uscxml + ) + set_target_properties(ioproc_basichttp PROPERTIES FOLDER "Plugins//IO Processors") + set_target_properties(ioproc_basichttp PROPERTIES COMPILE_FLAGS "-DPLUMA_EXPORTS") + set_target_properties(ioproc_basichttp PROPERTIES LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib/plugins") + else() + list (APPEND USCXML_FILES ${BASICHTTP_IOPROCESSOR}) + endif() endif() set(USCXML_INCLUDE_DIRS ${USCXML_INCLUDE_DIRS} PARENT_SCOPE) diff --git a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h index dec22fe..5ec66ec 100644 --- a/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h +++ b/src/uscxml/plugins/ioprocessor/basichttp/BasicHTTPIOProcessor.h @@ -20,6 +20,8 @@ #ifndef BASICHTTPIOPROCESSOR_H_2CUY93KU #define BASICHTTPIOPROCESSOR_H_2CUY93KU +#include "uscxml/config.h" + extern "C" { #include <event2/http.h> #include <event2/http_struct.h> @@ -93,11 +95,8 @@ protected: std::map<std::string, std::pair<URL, Event> > _sendRequests; }; -// do not implement pluma plugins if we build an inherited plugin -#ifdef ioprocessor_basichttp_EXPORTS -# ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(BasicHTTPIOProcessor, IOProcessorImpl); -# endif +#ifdef BUILD_AS_PLUGINS +PLUMA_INHERIT_PROVIDER(BasicHTTPIOProcessor, IOProcessorImpl) #endif } diff --git a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp index 5a82860..33a725e 100644 --- a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp +++ b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.cpp @@ -30,8 +30,20 @@ #include <arpa/inet.h> #endif +#ifdef BUILD_AS_PLUGINS +#include <Pluma/Connector.hpp> +#endif + namespace uscxml { +#ifdef BUILD_AS_PLUGINS +PLUMA_CONNECTOR +bool pluginConnect(pluma::Host& host) { + host.add( new SCXMLIOProcessorProvider() ); + return true; +} +#endif + // see http://www.w3.org/TR/scxml/#SCXMLEventProcessor SCXMLIOProcessor::SCXMLIOProcessor() { diff --git a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h index 6494873..328e18e 100644 --- a/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h +++ b/src/uscxml/plugins/ioprocessor/scxml/SCXMLIOProcessor.h @@ -20,8 +20,13 @@ #ifndef SCXMLIOProcessor_H_2CUY93KU #define SCXMLIOProcessor_H_2CUY93KU +#include "uscxml/config.h" #include "uscxml/plugins/IOProcessorImpl.h" +#ifdef BUILD_AS_PLUGINS +#include "uscxml/plugins/Plugins.h" +#endif + namespace uscxml { /** @@ -45,12 +50,10 @@ public: virtual bool isValidTarget(const std::string& target); Data getDataModelVariables(); -protected: - IOProcessorCallbacks* _callbacks; }; #ifdef BUILD_AS_PLUGINS -PLUMA_INHERIT_PROVIDER(SCXMLIOProcessor, IOProcessorImpl); +PLUMA_INHERIT_PROVIDER(SCXMLIOProcessor, IOProcessorImpl) #endif } |