From d779abe6ff76a78f92d229fcf1f006f5cf1f9295 Mon Sep 17 00:00:00 2001 From: Stefan Radomski Date: Sun, 16 Dec 2012 01:12:53 +0100 Subject: Take pluginpath as argument --- apps/mmi-browser.cpp | 15 ++++++++----- src/uscxml/Factory.cpp | 59 +++++++++++++++++++++++++------------------------- 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(); - pluma.acceptProviderType(); - pluma.acceptProviderType(); - pluma.loadFromFolder("/Users/sradomski/Documents/TK/Code/uscxml/build/xcode/lib"); - - std::vector invokerProviders; - pluma.getProviders(invokerProviders); - for (std::vector::iterator it = invokerProviders.begin() ; it != invokerProviders.end() ; ++it) { - Invoker* invoker = (*it)->create(); - registerInvoker(invoker); - } - - std::vector ioProcessorProviders; - pluma.getProviders(ioProcessorProviders); - for (std::vector::iterator it = ioProcessorProviders.begin() ; it != ioProcessorProviders.end() ; ++it) { - IOProcessor* ioProcessor = (*it)->create(); - registerIOProcessor(ioProcessor); + if (pluginPath.length() > 0) { + pluma.acceptProviderType(); + pluma.acceptProviderType(); + pluma.acceptProviderType(); + pluma.loadFromFolder(pluginPath); + + std::vector invokerProviders; + pluma.getProviders(invokerProviders); + for (std::vector::iterator it = invokerProviders.begin() ; it != invokerProviders.end() ; ++it) { + Invoker* invoker = (*it)->create(); + registerInvoker(invoker); + } + + std::vector ioProcessorProviders; + pluma.getProviders(ioProcessorProviders); + for (std::vector::iterator it = ioProcessorProviders.begin() ; it != ioProcessorProviders.end() ; ++it) { + IOProcessor* ioProcessor = (*it)->create(); + registerIOProcessor(ioProcessor); + } + + std::vector dataModelProviders; + pluma.getProviders(dataModelProviders); + for (std::vector::iterator it = dataModelProviders.begin() ; it != dataModelProviders.end() ; ++it) { + DataModel* dataModel = (*it)->create(); + registerDataModel(dataModel); + } + + pluma.unloadAll(); } - - std::vector dataModelProviders; - pluma.getProviders(dataModelProviders); - for (std::vector::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 namespace uscxml { - + // see http://stackoverflow.com/questions/228005/alternative-to-itoa-for-converting-integer-to-string-c template std::string toStr(T tmp) { std::ostringstream out; @@ -95,6 +95,8 @@ namespace uscxml { std::map _invokers; std::map _executableContent; + static std::string pluginPath; + protected: #ifdef BUILD_AS_PLUGINS pluma::Pluma pluma; -- cgit v0.12