void Factory::registerPlugins() { { InterpreterHTTPServlet* ioProcessor = new InterpreterHTTPServlet(); registerIOProcessor(ioProcessor); } { InterpreterWebSocketServlet* ioProcessor = new InterpreterWebSocketServlet(); registerIOProcessor(ioProcessor); } { NULLDataModel* dataModel = new NULLDataModel(); registerDataModel(dataModel); } #ifdef BUILD_AS_PLUGINS // these are part of core 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); std::vector<InvokerImplProvider*> invokerProviders; pluma.getProviders(invokerProviders); for (std::vector<InvokerImplProvider*>::iterator it = invokerProviders.begin() ; it != invokerProviders.end() ; ++it) { InvokerImpl* invoker = (*it)->create(); registerInvoker(invoker); } std::vector<IOProcessorImplProvider*> ioProcessorProviders; pluma.getProviders(ioProcessorProviders); for (std::vector<IOProcessorImplProvider*>::iterator it = ioProcessorProviders.begin() ; it != ioProcessorProviders.end() ; ++it) { IOProcessorImpl* ioProcessor = (*it)->create(); registerIOProcessor(ioProcessor); } std::vector<DataModelImplProvider*> dataModelProviders; pluma.getProviders(dataModelProviders); for (std::vector<DataModelImplProvider*>::iterator it = dataModelProviders.begin() ; it != dataModelProviders.end() ; ++it) { DataModelImpl* dataModel = (*it)->create(); registerDataModel(dataModel); } std::vector<ExecutableContentImplProvider*> execContentProviders; pluma.getProviders(execContentProviders); for (std::vector<ExecutableContentImplProvider*>::iterator it = execContentProviders.begin() ; it != execContentProviders.end() ; ++it) { ExecutableContentImpl* execContent = (*it)->create(); registerExecutableContent(execContent); } } else { LOG(WARNING) << "No path to plugins known, export USCXML_PLUGIN_PATH or pass path as parameter"; } #else if (_pluginPath.length() > 0) LOG(WARNING) << "Plugin path is given, but uscxml is compiled without support"; #ifndef BUILD_MINIMAL # if (defined UMUNDO_FOUND && defined PROTOBUF_FOUND) { UmundoInvoker* invoker = new UmundoInvoker(); registerInvoker(invoker); } #if 0 { VoiceXMLInvoker* invoker = new VoiceXMLInvoker(); registerInvoker(invoker); } #endif #endif #ifdef MILES_FOUND { MilesSessionInvoker* invoker = new MilesSessionInvoker(); registerInvoker(invoker); } // { // SpatialAudio* invoker = new SpatialAudio(); // registerInvoker(invoker); // } #endif #ifdef FFMPEG_FOUND { FFMPEGInvoker* invoker = new FFMPEGInvoker(); registerInvoker(invoker); } #endif #ifdef LIBICAL_FOUND { CalendarInvoker* invoker = new CalendarInvoker(); registerInvoker(invoker); } #endif #ifdef LIBPURPLE_FOUND { IMInvoker* invoker = new IMInvoker(); registerInvoker(invoker); } #endif #if (defined EXPECT_FOUND && defined TCL_FOUND) { ExpectInvoker* invoker = new ExpectInvoker(); registerInvoker(invoker); } #endif #if (defined OPENAL_FOUND && (defined LIBSNDFILE_FOUND || defined AUDIOTOOLBOX_FOUND)) { OpenALInvoker* invoker = new OpenALInvoker(); registerInvoker(invoker); } #endif #ifdef OPENSCENEGRAPH_FOUND { OSGInvoker* invoker = new OSGInvoker(); registerInvoker(invoker); } { OSGConverter* invoker = new OSGConverter(); registerInvoker(invoker); } #endif #if (defined V8_FOUND && defined BUILD_DM_ECMA) { V8DataModel* dataModel = new V8DataModel(); registerDataModel(dataModel); } #endif #if (defined JSC_FOUND && defined BUILD_DM_ECMA) { JSCDataModel* dataModel = new JSCDataModel(); registerDataModel(dataModel); } #endif #if (defined SWI_FOUND && defined BUILD_DM_PROLOG) { SWIDataModel* dataModel = new SWIDataModel(); registerDataModel(dataModel); } #endif #if (defined LUA_FOUND && defined BUILD_DM_LUA) { LuaDataModel* dataModel = new LuaDataModel(); registerDataModel(dataModel); } #endif #if (defined BUILD_DM_PROMELA) { PromelaDataModel* dataModel = new PromelaDataModel(); registerDataModel(dataModel); } #endif #ifdef BUILD_DM_XPATH { XPathDataModel* dataModel = new XPathDataModel(); registerDataModel(dataModel); } #endif #ifdef PROTOBUF_FOUND { // MMIHTTPIOProcessor* ioProcessor = new MMIHTTPIOProcessor(); // registerIOProcessor(ioProcessor); } #endif #ifdef CURL_HAS_SMTP { SMTPInvoker* invoker = new SMTPInvoker(); registerInvoker(invoker); } #endif // these are always available when not building minimal { XHTMLInvoker* invoker = new XHTMLInvoker(); registerInvoker(invoker); } { IMAPInvoker* invoker = new IMAPInvoker(); registerInvoker(invoker); } { HTTPServletInvoker* invoker = new HTTPServletInvoker(); registerInvoker(invoker); } { HeartbeatInvoker* invoker = new HeartbeatInvoker(); registerInvoker(invoker); } { DirMonInvoker* invoker = new DirMonInvoker(); registerInvoker(invoker); } { SystemInvoker* invoker = new SystemInvoker(); registerInvoker(invoker); } { VoiceXMLInvoker* invoker = new VoiceXMLInvoker(); registerInvoker(invoker); } { FetchElement* element = new FetchElement(); registerExecutableContent(element); } { RespondElement* element = new RespondElement(); registerExecutableContent(element); } { PostponeElement* element = new PostponeElement(); registerExecutableContent(element); } { FileElement* element = new FileElement(); registerExecutableContent(element); } #endif { USCXMLInvoker* invoker = new USCXMLInvoker(); registerInvoker(invoker); } { BasicHTTPIOProcessor* ioProcessor = new BasicHTTPIOProcessor(); registerIOProcessor(ioProcessor); } { SCXMLIOProcessor* ioProcessor = new SCXMLIOProcessor(); registerIOProcessor(ioProcessor); } #endif }
Factory::Factory() { #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<InvokerProvider>(); pluma.acceptProviderType<IOProcessorProvider>(); pluma.acceptProviderType<DataModelProvider>(); pluma.loadFromFolder(pluginPath); std::vector<InvokerProvider*> invokerProviders; pluma.getProviders(invokerProviders); for (std::vector<InvokerProvider*>::iterator it = invokerProviders.begin() ; it != invokerProviders.end() ; ++it) { Invoker* invoker = (*it)->create(); registerInvoker(invoker); } std::vector<IOProcessorProvider*> ioProcessorProviders; pluma.getProviders(ioProcessorProviders); for (std::vector<IOProcessorProvider*>::iterator it = ioProcessorProviders.begin() ; it != ioProcessorProviders.end() ; ++it) { IOProcessor* ioProcessor = (*it)->create(); registerIOProcessor(ioProcessor); } std::vector<DataModelProvider*> dataModelProviders; pluma.getProviders(dataModelProviders); for (std::vector<DataModelProvider*>::iterator it = dataModelProviders.begin() ; it != dataModelProviders.end() ; ++it) { DataModel* dataModel = (*it)->create(); registerDataModel(dataModel); } } #else #ifdef UMUNDO_FOUND { UmundoInvoker* invoker = new UmundoInvoker(); registerInvoker(invoker); } #endif #ifdef MILES_FOUND { SpatialAudio* invoker = new SpatialAudio(); registerInvoker(invoker); } #endif #ifdef OPENSCENEGRAPH_FOUND { OSGInvoker* invoker = new OSGInvoker(); registerInvoker(invoker); } { OSGConverter* invoker = new OSGConverter(); registerInvoker(invoker); } #endif #ifdef V8_FOUND { V8DataModel* dataModel = new V8DataModel(); registerDataModel(dataModel); } #endif #ifdef JSC_FOUND { JSCDataModel* dataModel = new JSCDataModel(); registerDataModel(dataModel); } #endif #ifdef SWI_FOUND { SWIDataModel* dataModel = new SWIDataModel(); registerDataModel(dataModel); } #endif // these are always available { USCXMLInvoker* invoker = new USCXMLInvoker(); registerInvoker(invoker); } { HeartbeatInvoker* invoker = new HeartbeatInvoker(); registerInvoker(invoker); } { DirMonInvoker* invoker = new DirMonInvoker(); registerInvoker(invoker); } { EventIOProcessor* ioProcessor = new EventIOProcessor(); registerIOProcessor(ioProcessor); } #endif }