PluginDOTExporter.cpp
Go to the documentation of this file.
00001 /*********************************************************************
00002  * Software License Agreement (BSD License)
00003  *
00004  *  Copyright (c) 2013, Institute for Artificial Intelligence,
00005  *  Universität Bremen.
00006  *  All rights reserved.
00007  *
00008  *  Redistribution and use in source and binary forms, with or without
00009  *  modification, are permitted provided that the following conditions
00010  *  are met:
00011  *
00012  *   * Redistributions of source code must retain the above copyright
00013  *     notice, this list of conditions and the following disclaimer.
00014  *   * Redistributions in binary form must reproduce the above
00015  *     copyright notice, this list of conditions and the following
00016  *     disclaimer in the documentation and/or other materials provided
00017  *     with the distribution.
00018  *   * Neither the name of the Institute for Artificial Intelligence,
00019  *     Universität Bremen, nor the names of its contributors may be
00020  *     used to endorse or promote products derived from this software
00021  *     without specific prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00029  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00030  *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00031  *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00032  *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00033  *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE.
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 }


beliefstate
Author(s): Jan Winkler
autogenerated on Sun Oct 5 2014 22:30:15