diff options
-rw-r--r-- | apps/mmi-browser.cpp | 15 | ||||
-rw-r--r-- | src/uscxml/Factory.cpp | 59 | ||||
-rw-r--r-- | src/uscxml/Factory.h | 4 |
3 files changed, 42 insertions, 36 deletions
diff --git a/apps/mmi-browser.cpp b/apps/mmi-browser.cpp index 52b376d..e651448 100644 --- a/apps/mmi-browser.cpp +++ b/apps/mmi-browser.cpp @@ -9,7 +9,7 @@ void printUsageAndExit() { printf("mmi-browser version " USCXML_VERSION " (" CMAKE_BUILD_TYPE " build - " CMAKE_COMPILER_STRING ")\n"); printf("Usage\n"); - printf("\tmmi-browser URL\n"); + printf("\tmmi-browser [-p pluginPath] URL\n"); printf("\n"); // printf("Options\n"); // printf("\t-l loglevel : loglevel to use\n"); @@ -17,28 +17,31 @@ void printUsageAndExit() { } int main(int argc, char** argv) { - uscxml::Factory::getInstance(); + using namespace uscxml; + if (argc < 2) { printUsageAndExit(); } - char* loglevel; + char* loglevel = NULL; int option; - while ((option = getopt(argc, argv, "l:")) != -1) { + while ((option = getopt(argc, argv, "l:p:")) != -1) { switch(option) { case 'l': loglevel = optarg; break; + case 'p': + uscxml::Factory::pluginPath = optarg; + break; default: printUsageAndExit(); break; } } + Factory::getInstance(); google::InitGoogleLogging(argv[0]); - using namespace uscxml; - Interpreter* interpreter = Interpreter::fromURI(argv[1]); interpreter->interpret(); diff --git a/src/uscxml/Factory.cpp b/src/uscxml/Factory.cpp index fdbbbc3..9f16503 100644 --- a/src/uscxml/Factory.cpp +++ b/src/uscxml/Factory.cpp @@ -18,37 +18,38 @@ #endif namespace uscxml { - + Factory::Factory() { #ifdef BUILD_AS_PLUGINS - pluma.acceptProviderType<InvokerProvider>(); - pluma.acceptProviderType<IOProcessorProvider>(); - pluma.acceptProviderType<DataModelProvider>(); - pluma.loadFromFolder("/Users/sradomski/Documents/TK/Code/uscxml/build/xcode/lib"); - - 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); + 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); + } + + pluma.unloadAll(); } - - 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); - } - - pluma.unloadAll(); - #else #ifdef UMUNDO_FOUND { @@ -150,5 +151,5 @@ namespace uscxml { } Factory* Factory::_instance = NULL; - + std::string Factory::pluginPath; }
\ No newline at end of file diff --git a/src/uscxml/Factory.h b/src/uscxml/Factory.h index 24d74e3..fcd907e 100644 --- a/src/uscxml/Factory.h +++ b/src/uscxml/Factory.h @@ -11,7 +11,7 @@ #include <set> namespace uscxml { - + // see http://stackoverflow.com/questions/228005/alternative-to-itoa-for-converting-integer-to-string-c template <typename T> std::string toStr(T tmp) { std::ostringstream out; @@ -95,6 +95,8 @@ namespace uscxml { std::map<std::string, Invoker*> _invokers; std::map<std::string, ExecutableContent*> _executableContent; + static std::string pluginPath; + protected: #ifdef BUILD_AS_PLUGINS pluma::Pluma pluma; |