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/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 }