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 #include <robot/ToolDescription>
00026
00027 #include <base/Externalizer>
00028 #include <base/externalization_error>
00029 #include <base/Application>
00030 #include <base/VFile>
00031
00032 using robot::ToolDescription;
00033
00034 using base::Externalizer;
00035 using base::externalization_error;
00036 using base::Application;
00037 using base::VFile;
00038 using base::PathName;
00039 using base::dom::DOMNode;
00040 using base::dom::DOMElement;
00041
00042
00043 void ToolDescription::externalize(base::Externalizer& e, String format, Real version)
00044 {
00045 if (format == "") format = "xml";
00046
00047 if (!formatSupported(format,version,e.ioType()))
00048 throw std::invalid_argument(Exception(String("format ")+format+" v"+base::realToString(version)+" unsupported"));
00049
00050 if (e.isOutput()) {
00051
00052 DOMElement* toolElem = e.createElement("tool");
00053 e.setElementAttribute(toolElem,"name", getName());
00054
00055 e.pushContext(toolElem);
00056 kinematicChain.externalize(e, format, version);
00057 e.popContext();
00058
00059 e.appendElement(toolElem);
00060
00061 } else {
00062
00063 DOMNode* context = e.context();
00064
00065 DOMElement* toolElem = e.getFirstElement(context, "tool");
00066
00067
00068 String link = e.getElementAttribute(toolElem,"link",false);
00069 if (link != "") {
00070
00071 ref<VFile> linkFile = Application::getInstance()->universe()->cache()->findFile(link,e.getArchivePath());
00072 load(linkFile,format,version);
00073 }
00074 else {
00075 setName( e.getDefaultedElementAttribute(toolElem, "name", "tool") );
00076
00077 e.pushContext(toolElem);
00078 kinematicChain.externalize(e, format, version);
00079 e.popContext();
00080
00081
00082
00083 kinematicChain.activateLink(0,false);
00084 }
00085
00086 e.removeElement(toolElem);
00087
00088 }
00089 }