PluginExperimentContext.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/experiment-context/PluginExperimentContext.h>
00041 
00042 
00043 namespace beliefstate {
00044   namespace plugins {
00045     PLUGIN_CLASS::PLUGIN_CLASS() {
00046       m_expFileExporter = new CExporterFileoutput();
00047       
00048       this->setPluginVersion("0.3");
00049       this->addDependency("ros");
00050     }
00051     
00052     PLUGIN_CLASS::~PLUGIN_CLASS() {
00053       if(m_expFileExporter) {
00054         delete m_expFileExporter;
00055       }
00056     }
00057     
00058     Result PLUGIN_CLASS::init(int argc, char** argv) {
00059       this->setSubscribedToEvent("set-experiment-meta-data", true);
00060       this->setSubscribedToEvent("export-planlog", true);
00061       this->setSubscribedToEvent("experiment-start", true);
00062       this->setSubscribedToEvent("experiment-shutdown", true);
00063       
00064       ros::NodeHandle nh;
00065       m_pubMetadata = nh.advertise<designator_integration_msgs::Designator>("/logged_metadata", 1);
00066       
00067       return defaultResult();
00068     }
00069     
00070     Result PLUGIN_CLASS::deinit() {
00071       return defaultResult();
00072     }
00073     
00074     Result PLUGIN_CLASS::cycle() {
00075       Result resCycle = defaultResult();
00076       this->deployCycleData(resCycle);
00077       
00078       return resCycle;
00079     }
00080     
00081     void PLUGIN_CLASS::consumeEvent(Event evEvent) {
00082       if(evEvent.strEventName == "set-experiment-meta-data") {
00083         if(evEvent.cdDesignator) {
00084           std::string strField = evEvent.cdDesignator->stringValue("field");
00085           std::string strValue = evEvent.cdDesignator->stringValue("value");
00086           
00087           if(strField != "") {
00088             this->info("Set '" + strField + "' to '" + strValue + "'");
00089             m_mapValues[strField] = strValue;
00090           }
00091         }
00092       } else if(evEvent.strEventName == "export-planlog") {
00093         std::string strFormat = evEvent.cdDesignator->stringValue("format");
00094         transform(strFormat.begin(), strFormat.end(), strFormat.begin(), ::tolower);
00095         
00096         if(strFormat == "meta") {
00097           CDesignator* cdMeta = new CDesignator();
00098           cdMeta->setType(ACTION);
00099           
00100           this->info("Experiment Context Plugin exporting meta-data");
00101           
00102           if(m_mapValues.find("time-end") == m_mapValues.end()) {
00103             m_mapValues["time-end"] = this->getTimeStampStr();
00104           }
00105           
00106           ConfigSettings cfgsetCurrent = configSettings();
00107           string strMetaFile = cfgsetCurrent.strExperimentDirectory + "metadata.xml";
00108           
00109           string strMetaXML = "";
00110           strMetaXML += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n";
00111           strMetaXML += "<meta-data>\n";
00112           for(std::pair<std::string, std::string> prEntry : m_mapValues) {
00113             strMetaXML += "  <" + prEntry.first + ">" + prEntry.second + "</" + prEntry.first + ">\n";
00114             cdMeta->setValue(prEntry.first, prEntry.second);
00115           }
00116           strMetaXML += "</meta-data>\n";
00117           
00118           this->info("Published metadata");
00119           m_pubMetadata.publish(cdMeta->serializeToMessage());
00120           delete cdMeta;
00121           
00122           m_expFileExporter->writeToFile(strMetaXML, strMetaFile);
00123           
00124           this->info("Successfully exported meta-data to '" + strMetaFile + "'");
00125         }
00126       } else if(evEvent.strEventName == "experiment-start") {
00127         m_mapValues["time-start"] = this->getTimeStampStr();
00128       } else if(evEvent.strEventName == "experiment-shutdown") {
00129         m_mapValues["time-end"] = this->getTimeStampStr();
00130       }
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