Go to the documentation of this file.00001 #include "robot_instance/RegisterWizardFactory.h"
00002
00003 using namespace std;
00004 using namespace log4cpp;
00005
00006 RegisterWizardMap::value_type RegisterWizardFactory::fromXml(const std::string& xml, const std::string& namePrefix)
00007 {
00008 TiXmlDocument file;
00009 file.Parse(xml.c_str());
00010 TiXmlHandle doc(&file);
00011 TiXmlHandle elementHandle(doc.FirstChild("Register"));
00012
00013 RegisterWizardPtr registerWizard;
00014 RegisterPropertiesFactory registerPropertiesFactory;
00015
00016 if (elementHandle.ToElement())
00017 {
00018 string name = "";
00019 string id = "";
00020
00021 if (elementHandle.ToElement()->Attribute("id"))
00022 {
00023 id = elementHandle.ToElement()->Attribute("id");
00024
00025 if (id.length() == 0)
00026 {
00027 NasaCommonLogging::Logger::log("gov.nasa.robonet.RegisterWizardFactory", Priority::ERROR, "The attribute [id] is malformed.");
00028 MissingXMLElementException missingXMLElementException;
00029 throw missingXMLElementException;
00030 }
00031
00032 if (namePrefix.length() > 0)
00033 {
00034 name = namePrefix + StringUtilities::TOKEN_DELIMITER + id;
00035 }
00036 else
00037 {
00038 name = id;
00039 }
00040 }
00041 else
00042 {
00043 stringstream err;
00044 err << "The attribute [id] was not found for element [" << elementHandle.ToElement()->ValueStr() << "]";
00045 NasaCommonLogging::Logger::log("gov.nasa.robonet.RegisterWizardFactory", Priority::ERROR, err.str());
00046 MissingXMLElementException missingXMLElementException;
00047 throw missingXMLElementException;
00048 }
00049
00050 NasaCommonLogging::Logger::log("gov.nasa.robonet.RegisterWizardFactory", Priority::INFO, "Register [" + name + "] being parsed.");
00051
00052 RegisterPropertiesPtr registerProperties = registerPropertiesFactory.fromXml(xml);
00053 registerWizard = boost::make_shared<RegisterWizard>(registerProperties);
00054
00055 NasaCommonLogging::Logger::log("gov.nasa.robonet.RegisterWizardFactory", Priority::INFO, "Register [" + name + "] parsed.");
00056
00057 return RegisterWizardMap::value_type(name, registerWizard);
00058 }
00059 else
00060 {
00061 stringstream err;
00062 err << "The element [Register] was not found.";
00063 NasaCommonLogging::Logger::log("gov.nasa.robonet.RegisterWizardFactory", Priority::ERROR, err.str());
00064 MissingXMLElementException missingXMLElementException;
00065 throw missingXMLElementException;
00066 }
00067 }
00068