summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/mmi-browser.cpp15
-rw-r--r--src/uscxml/Factory.cpp59
-rw-r--r--src/uscxml/Factory.h4
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;