Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00040 #include <plugins/dotexporter/PluginDOTExporter.h>
00041
00042
00043 namespace beliefstate {
00044 namespace plugins {
00045 PLUGIN_CLASS::PLUGIN_CLASS() {
00046 this->setPluginVersion("0.2");
00047 }
00048
00049 PLUGIN_CLASS::~PLUGIN_CLASS() {
00050 }
00051
00052 Result PLUGIN_CLASS::init(int argc, char** argv) {
00053 Result resInit = defaultResult();
00054
00055 this->setSubscribedToEvent("export-planlog", true);
00056
00057 return resInit;
00058 }
00059
00060 Result PLUGIN_CLASS::deinit() {
00061 return defaultResult();
00062 }
00063
00064 Result PLUGIN_CLASS::cycle() {
00065 Result resCycle = defaultResult();
00066 this->deployCycleData(resCycle);
00067
00068 return resCycle;
00069 }
00070
00071 void PLUGIN_CLASS::consumeEvent(Event evEvent) {
00072 if(evEvent.cdDesignator) {
00073 std::string strFormat = evEvent.cdDesignator->stringValue("format");
00074 transform(strFormat.begin(), strFormat.end(), strFormat.begin(), ::tolower);
00075
00076 if(strFormat == "dot") {
00077 ServiceEvent seGetPlanTree = defaultServiceEvent("symbolic-plan-tree");
00078 seGetPlanTree.cdDesignator = new CDesignator(evEvent.cdDesignator);
00079 this->deployServiceEvent(seGetPlanTree);
00080 }
00081 }
00082 }
00083
00084 Event PLUGIN_CLASS::consumeServiceEvent(ServiceEvent seServiceEvent) {
00085 Event evResult = defaultEvent();
00086
00087 if(seServiceEvent.siServiceIdentifier == SI_RESPONSE) {
00088 if(seServiceEvent.strServiceName == "symbolic-plan-tree") {
00089 if(seServiceEvent.cdDesignator) {
00090 if(seServiceEvent.lstResultEvents.size() > 0) {
00091 Event evCar = seServiceEvent.lstResultEvents.front();
00092
00093 std::string strFormat = seServiceEvent.cdDesignator->stringValue("format");
00094 transform(strFormat.begin(), strFormat.end(), strFormat.begin(), ::tolower);
00095
00096 if(strFormat == "dot") {
00097 this->info("DOTExporter Plugin received plan log data. Exporting symbolic log.");
00098
00099 CExporterDot* expDot = new CExporterDot();
00100 expDot->configuration()->setValue(string("display-successes"), (int)seServiceEvent.cdDesignator->floatValue("show-successes"));
00101 expDot->configuration()->setValue(string("display-failures"), (int)seServiceEvent.cdDesignator->floatValue("show-fails"));
00102 expDot->configuration()->setValue(string("max-detail-level"), (int)seServiceEvent.cdDesignator->floatValue("max-detail-level"));
00103
00104 this->info("Using max detail level of " + this->str((int)expDot->configuration()->floatValue("max-detail-level")) + ".");
00105
00106 for(Node* ndNode : evCar.lstNodes) {
00107 expDot->addNode(ndNode);
00108 }
00109
00110 expDot->setDesignatorIDs(evCar.lstDesignatorIDs);
00111 expDot->setDesignatorEquations(evCar.lstEquations);
00112 expDot->setDesignatorEquationTimes(evCar.lstEquationTimes);
00113
00114 ConfigSettings cfgsetCurrent = configSettings();
00115 expDot->setOutputFilename(cfgsetCurrent.strExperimentDirectory + seServiceEvent.cdDesignator->stringValue("filename"));
00116
00117 if(expDot->runExporter(NULL)) {
00118 this->info("Successfully exported DOT file '" + expDot->outputFilename() + "'", true);
00119 } else {
00120 this->warn("Failed to export to DOT file '" + expDot->outputFilename() + "'", true);
00121 }
00122
00123 delete expDot;
00124 }
00125 }
00126 }
00127 }
00128 }
00129
00130 return evResult;
00131 }
00132 }
00133
00134 extern "C" plugins::PLUGIN_CLASS* createInstance() {
00135 return new plugins::PLUGIN_CLASS();
00136 }
00137
00138 extern "C" void destroyInstance(plugins::PLUGIN_CLASS* icDestroy) {
00139 delete icDestroy;
00140 }
00141 }