Revision: 7930
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7930&view=rev
Author:   asadat
Date:     2009-06-29 22:58:45 +0000 (Mon, 29 Jun 2009)

Log Message:
-----------
did some refactoring

Modified Paths:
--------------
    code/websim/CMakeLists.txt
    code/websim/src/req_sim.cc
    code/websim/src/websim.cc
    code/websim/src/websim.hh

Added Paths:
-----------
    code/websim/src/req_model.cc

Modified: code/websim/CMakeLists.txt
===================================================================
--- code/websim/CMakeLists.txt  2009-06-29 19:35:46 UTC (rev 7929)
+++ code/websim/CMakeLists.txt  2009-06-29 22:58:45 UTC (rev 7930)
@@ -57,7 +57,7 @@
 
 
 include_directories(src)
-add_library(websim SHARED src/websim.cc src/parser.cc src/confederate.cc 
src/puppet.cc src/req_sim.cc )
+add_library(websim SHARED src/websim.cc src/parser.cc src/confederate.cc 
src/puppet.cc src/req_sim.cc src/req_model.cc )
 add_library(websim-static STATIC src/websim.cc src/parser.cc 
src/confederate.cc src/puppet.cc src/req_sim.cc )
 # Set output name to be the same as shared lib (may not work on Windows)
 set_target_properties(websim-static PROPERTIES OUTPUT_NAME websim)

Added: code/websim/src/req_model.cc
===================================================================
--- code/websim/src/req_model.cc                                (rev 0)
+++ code/websim/src/req_model.cc        2009-06-29 22:58:45 UTC (rev 7930)
@@ -0,0 +1,757 @@
+#include "websim.hh"
+#include <boost/lexical_cast.hpp>
+
+//#include <assert.h>
+//#include <stdlib.h>
+//#include <string.h>
+#include <libxml/encoding.h>
+using namespace websim;
+
+#define MY_ENCODING "ISO-8859-1"
+
+xmlChar *
+ConvertInput(const char *in, const char *encoding);
+
+bool
+WebSim::HandleModelRequest(const std::string& model,
+                          const std::string& prop,
+                          const std::string& action,
+                          Format format,
+                          struct evkeyvalq* kv,
+                          std::string& response)
+{
+  if(prop == "pva")
+    return HandleModelPVARequest(model, action, format, kv, response );
+  
+  if(prop == "data")
+    return HandleModelDataRequest( model, action, format, kv, response );
+  
+  if(prop == "geometry")
+    return HandleModelGeometryRequest( model, action, format, kv, response );
+  
+  if(prop == "tree")
+    return HandleModelTreeRequest( model, action, format, kv, response );
+
+  response = "ERROR: Unknown property " + prop + " for model. Candidates are: 
pva data geometry tree.";
+  return false;
+}
+
+
+
+bool 
+WebSim::HandleModelDataRequest( std::string model,
+                               std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response)
+{
+   if(action == "get"){
+               
+       if(!GetModelData(model, response, format, NULL)){
+               response = "ERROR: failed to get the Data of model " + model;
+               return false;
+       }
+   }
+
+   return true;
+
+}
+
+bool 
+WebSim::HandleModelTreeRequest( std::string model,
+                               std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response)
+{
+
+   if(action == "get"){
+       if(!GetModelTree(model, format, response, false)){
+               response = "ERROR: failed to get the tree of model " + model;
+               return false;
+       }
+   }
+
+   return true;
+}
+
+bool 
+WebSim::HandleModelGeometryRequest( std::string model,
+                               std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response)
+{
+
+       double x,y,z;
+       Pose center;
+       if(GetModelGeometry(model, x, y, z, center, response))  
+         {
+               
+           GetGeometryData(model, x, y, z, center, format, response, NULL);
+           return true;
+               
+         }else{
+       
+         response = "ERROR: failed to get the Geometry of model " + model;
+         return false;
+       
+       }
+
+       return true;
+}
+
+bool 
+WebSim::HandleModelPVARequest( std::string model,
+                               std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response)
+{
+   if(action == "get"){
+
+         Pose p;
+         Velocity v;
+         Acceleration a;
+         Time t;
+         if(GetModelPVA(model, t, p, v, a, response)){
+               
+               GetPVA(model, t, p, v, a, format, response, NULL);
+               return true;
+
+         }else{
+       
+               response = "ERROR: failed to get the PVA of model "+model;
+               return false;   
+         }
+
+
+   }else if(action == "set"){
+
+         std::string sx, sy, sz, sroll, spitch, syaw;
+
+         // Get pose first, fill in what the caller provided
+         Pose p;
+         Velocity v;
+         Acceleration a;
+         Time t;
+         if(!GetModelPVA(model, t, p, v, a, response))
+           {
+             response = "Failed to get pose before setting it";
+             return false;
+           }
+         try
+           {
+             if(GetValue(sx, kv, "px"))
+               p.x = boost::lexical_cast<float>(sx);
+             if(GetValue(sy, kv, "py"))
+               p.y = boost::lexical_cast<float>(sy);
+             if(GetValue(sz, kv, "pz"))
+               p.z = boost::lexical_cast<float>(sz);
+             if(GetValue(sroll, kv, "pr"))
+               p.r = boost::lexical_cast<float>(sroll);
+             if(GetValue(spitch, kv, "pp"))
+               p.p = boost::lexical_cast<float>(spitch);
+             if(GetValue(syaw, kv, "pa"))
+               p.a = boost::lexical_cast<float>(syaw);
+
+             if(GetValue(sx, kv, "vx"))
+               v.x = boost::lexical_cast<float>(sx);
+             if(GetValue(sy, kv, "vy"))
+               v.y = boost::lexical_cast<float>(sy);
+             if(GetValue(sz, kv, "vz"))
+               v.z = boost::lexical_cast<float>(sz);
+             if(GetValue(sroll, kv, "vr"))
+               v.r = boost::lexical_cast<float>(sroll);
+             if(GetValue(spitch, kv, "vp"))
+               v.p = boost::lexical_cast<float>(spitch);
+             if(GetValue(syaw, kv, "va"))
+               v.a = boost::lexical_cast<float>(syaw);
+
+             if(GetValue(sx, kv, "ax"))
+               a.x = boost::lexical_cast<float>(sx);
+             if(GetValue(sy, kv, "ay"))
+               a.y = boost::lexical_cast<float>(sy);
+             if(GetValue(sz, kv, "az"))
+               a.z = boost::lexical_cast<float>(sz);
+             if(GetValue(sroll, kv, "ar"))
+               a.r = boost::lexical_cast<float>(sroll);
+             if(GetValue(spitch, kv, "ap"))
+               a.p = boost::lexical_cast<float>(spitch);
+             if(GetValue(syaw, kv, "aa"))
+               a.a = boost::lexical_cast<float>(syaw);
+           }
+         catch(boost::bad_lexical_cast e)
+           {
+             response = std::string("Failed to parse input value(s): ") + 
+                e.what();
+             return false;
+           }
+
+         return(SetModelPVA(model, p, v, a, response));
+   }
+
+   return false;
+}
+
+void 
+WebSim::GetPVA(const std::string& name, 
+              Time& t,
+              const Pose& p,
+              const Velocity& v,
+              const Acceleration& a,
+              Format format,
+              std::string& response,
+              void* xmlnode)
+{
+  if(format == TEXT){
+    char buf[1024];
+    snprintf(buf, sizeof(buf), 
+            "%s's state @%s: \n  pose: (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n"
+            "  vel : (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n"
+            "  acc : (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n",
+            name.c_str(),
+            t.String().c_str(),
+            p.x, p.y, p.z, p.r, p.p, p.a,
+            v.x, v.y, v.z, v.r, v.p, v.a,
+            a.x, a.y, a.z, a.r, a.p, a.a);
+    response = buf;
+
+  }else if (format == XML){
+
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;
+    xmlNodePtr node;       
+    xmlChar *tmp;    
+    char str[128];
+
+    if(xmlnode == NULL){
+
+      doc = xmlNewDoc(BAD_CAST "1.0");
+      root_node = xmlNewNode(NULL, BAD_CAST "root");
+      xmlDocSetRootElement(doc, root_node);
+      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
+    }else{
+      node = (xmlNodePtr) xmlnode;
+      xmlNodeSetName(node, xmlCharStrdup("Model"));
+      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "PVA", NULL);
+      //root_node = (xmlNodePtr)parent;
+    }
+
+
+           
+               
+    sprintf(str,"%s",t.String().c_str());
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
+    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "pva");    
+    
+    tmp = ConvertInput(name.c_str(),MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);        
+               
+    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",p.x, p.y, p.z, p.r, p.p, p.a);
+    tmp = ConvertInput(str, MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Pose", BAD_CAST tmp);    
+    
+    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",v.x, v.y, v.z, v.r, v.p, v.a);
+    tmp = ConvertInput(str, MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Velocity", BAD_CAST tmp);    
+    
+    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",a.x, a.y, a.z, a.r, a.p, a.a);
+    tmp = ConvertInput(str, MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Acceleration", BAD_CAST tmp);    
+               
+    if(xmlnode == NULL){
+      xmlBufferPtr buf = xmlBufferCreate();
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc,node, 0, 1);
+      response = (const char*) buf->content;
+      puts(response.c_str());
+      xmlBufferFree(buf);
+      xmlFreeDoc(doc);
+    }
+  }
+
+}
+
+
+void
+WebSim::GetLaserData(const std::string& name,
+                    Time& t,
+                    uint32_t& resolution,
+                    double& fov,
+                    Pose& p,
+                    std::vector<double>& ranges,
+                    Format format,
+                    std::string& response,
+                    void* xmlnode)
+{
+  if(format == TEXT){
+
+    std::string res;
+    char temp[128];
+    for(unsigned int i=0;i<ranges.size();i++){
+      sprintf(temp,"%.3f",ranges.at(i));
+      res.append(temp);
+      if(i+1 != ranges.size())
+       res.append(",");
+    }
+
+               
+    char buf[4096];
+    snprintf(buf, sizeof(buf), 
+            "%s's state @%s: \n  laser: (%s)\n  resolution: (%d)\n  
fov(%.2f)\n"
+            "  pose (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n",
+            name.c_str(),
+            t.String().c_str(),
+            res.c_str(),
+            resolution,
+            fov,
+            p.x,p.y,p.z,p.r,p.p,p.a);
+    response = buf;
+
+  }else if(format == XML){
+               
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;       
+    xmlNodePtr node;
+    xmlChar *tmp;    
+    char str[128];
+
+    if(xmlnode == NULL){
+      puts("no parent\n");
+      doc = xmlNewDoc(BAD_CAST "1.0");
+      root_node = xmlNewNode(NULL, BAD_CAST "root");
+      xmlDocSetRootElement(doc, root_node);
+      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
+    }else{
+      node = (xmlNodePtr) xmlnode;
+      xmlNodeSetName(node, xmlCharStrdup("Model"));
+      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Laser", NULL);
+      //root_node = (xmlNodePtr)parent;
+    }
+
+    std::string res;
+    char temp[128];
+    for(unsigned int i=0;i<ranges.size();i++){
+      sprintf(temp,"%.3f",ranges.at(i));
+      res.append(temp);
+      if(i+1 != ranges.size())
+       res.append(",");
+    }
+
+
+               
+    xmlNewProp(node, BAD_CAST "Time", BAD_CAST t.String().c_str());    
+    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "laser");    
+    
+    tmp = ConvertInput(name.c_str(),MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
+           
+    sprintf(str,"%d",resolution);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Resolution", BAD_CAST tmp);    
+    
+    sprintf(str,"%.3f",fov);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "FOV", BAD_CAST tmp);    
+       
+    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",p.x, p.y, p.z, p.r, p.p, p.a);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Pose", BAD_CAST tmp);    
+   
+    tmp = ConvertInput(res.c_str(), MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Samples", BAD_CAST tmp);    
+    
+
+    if(xmlnode == NULL){
+      xmlBufferPtr buf = xmlBufferCreate();
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc,node, 0, 1);
+
+      response = (const char*) buf->content;
+      puts(response.c_str());
+      xmlBufferFree(buf);
+      xmlFreeDoc(doc);
+    }
+
+               
+    
+
+  }            
+}
+
+void
+WebSim::GetRangerData(const std::string& name,
+                     Time& t,
+                     std::vector<Pose>& p,
+                     std::vector<double>& ranges,
+                     Format format,                                            
                        
+                     std::string& response,
+                     void* xmlnode)
+{
+  if(format == TEXT){
+
+    std::string res;
+    char temp[128];
+    for(unsigned int i=0;i<ranges.size();i++){
+      sprintf(temp,"%.3f",ranges.at(i));
+      res.append(temp);
+      if(i+1 != ranges.size())
+       res.append(",");
+    }
+
+    std::string pstr; 
+    char ptmp[256];
+    for(unsigned int i=0;i<p.size();i++){
+      Pose pos = p.at(i);
+      sprintf(ptmp," (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)",
+             pos.x,pos.y,pos.x,pos.r,pos.p,pos.a);
+      pstr.append(ptmp);
+                  
+    }
+               
+    char buf[2048];
+    snprintf(buf, sizeof(buf), 
+            "%s's state @%s: \n  ranger\n  ranges: (%s)\n  pose:  %s",
+            name.c_str(),
+            t.String().c_str(),
+            res.c_str(),
+            pstr.c_str());
+    response = buf;
+       
+  }else if(format == XML){
+               
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;       
+    xmlNodePtr node;
+    xmlChar *tmp;    
+    char str[128];
+
+    if(xmlnode == NULL){
+      puts("no parent\n");
+      doc = xmlNewDoc(BAD_CAST "1.0");
+      root_node = xmlNewNode(NULL, BAD_CAST "root");
+      xmlDocSetRootElement(doc, root_node);
+      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
+    }else{
+      node = (xmlNodePtr)xmlnode;
+      xmlNodeSetName(node, xmlCharStrdup("Model"));
+      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Ranger", NULL);
+      //root_node = (xmlNodePtr)parent;
+    }
+
+
+    std::string res;
+    char temp[1024];
+    for(unsigned int i=0;i<ranges.size();i++){
+      sprintf(temp,"%.3f",ranges.at(i));
+      res.append(temp);
+      if(i+1 != ranges.size())
+       res.append(",");
+    }
+
+    std::string pstr; 
+    char ptmp[2048];
+    for(unsigned int i=0;i<p.size();i++){
+      Pose pos = p.at(i);
+      sprintf(ptmp," (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)",
+             pos.x,pos.y,pos.x,pos.r,pos.p,pos.a);
+      pstr.append(ptmp);
+    }
+               
+    //xmlNodePtr node = xmlNewChild(root_node, NULL, BAD_CAST "Ranger", NULL);
+                   
+               
+    sprintf(str,"%s",t.String().c_str());
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
+    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "ranger");    
+    
+    tmp = ConvertInput(name.c_str(),MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
+    
+    tmp = ConvertInput(res.c_str(), MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Samples", BAD_CAST tmp);    
+    
+    tmp = ConvertInput(pstr.c_str(), MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Positions", BAD_CAST tmp);    
+
+
+    if(xmlnode == NULL){
+      xmlBufferPtr buf = xmlBufferCreate();
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc,node, 0, 1);
+
+      response = (const char*) buf->content;
+      puts(response.c_str());
+      xmlBufferFree(buf);
+      xmlFreeDoc(doc);
+    }
+               
+
+  }
+
+}
+
+void 
+WebSim::GetFiducialData(const std::string& name,
+                       Time& t,
+                       std::vector<Fiducial>& f,
+                       Format format,
+                       std::string& response,
+                       void* xmlnode )
+{
+
+
+  if(format == TEXT){
+
+    std::string res;
+    char temp[512];
+    for(unsigned int i=0;i<f.size();i++){
+      sprintf(temp,"((%.3f,%.3f,%.3f),(%.3f,%.3f,%.3f),%d)\n", f.at(i).pos.x, 
f.at(i).pos.y, f.at(i).pos.z,
+                               f.at(i).pos.r, f.at(i).pos.p, f.at(i).pos.a, 
f.at(i).id);
+      res.append(temp);
+                  
+    }
+
+                       
+    char buf[2048];
+    snprintf(buf, sizeof(buf), 
+            "%s's state @%s: \n  Fiducial:\n",
+            name.c_str(),
+            t.String().c_str());
+
+    response = buf;
+    response.append(res);                      
+       
+  }else if(format == XML){
+               
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;       
+    xmlNodePtr node;
+    xmlChar *tmp;    
+    char str[128];
+
+    if(xmlnode == NULL){
+      doc = xmlNewDoc(BAD_CAST "1.0");
+      root_node = xmlNewNode(NULL, BAD_CAST "root");
+      xmlDocSetRootElement(doc, root_node);
+      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
+    }else{
+      node = (xmlNodePtr)xmlnode;
+      xmlNodeSetName(node, xmlCharStrdup("Model"));
+      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Ranger", NULL);
+      //root_node = (xmlNodePtr)parent;
+    }
+
+
+    std::string res;
+    char temp[512];
+    for(unsigned int i=0;i<f.size();i++){
+      sprintf(temp,"((%.3f,%.3f,%.3f),(%.3f,%.3f,%.3f),%d)", f.at(i).pos.x, 
f.at(i).pos.y, f.at(i).pos.z,
+                               f.at(i).pos.r, f.at(i).pos.p, f.at(i).pos.a, 
f.at(i).id);
+      res.append(temp);
+                  
+    }
+                   
+               
+    sprintf(str,"%s",t.String().c_str());
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
+    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "fiducial");    
+    
+    tmp = ConvertInput(name.c_str(),MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
+    
+    tmp = ConvertInput(res.c_str(), MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Targets", BAD_CAST tmp);    
+    
+    if(xmlnode == NULL){
+      xmlBufferPtr buf = xmlBufferCreate();
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc,node, 0, 1);
+
+      response = (const char*) buf->content;
+      puts(response.c_str());
+      xmlBufferFree(buf);
+      xmlFreeDoc(doc);
+    }
+       
+
+  }
+
+}
+
+void 
+WebSim::GetGeometryData(const std::string& name,
+                      double& x,
+                      double& y,
+                      double& z,
+                      Pose& center,
+                      Format format,
+                      std::string& response,
+                      void* xmlnode)
+{
+  if(format == TEXT){
+    char buf[1024];
+    if(name == "sim")
+      snprintf(buf, sizeof(buf),"World Size: (%.3f,%.3f,%.3f)\n        Origin 
(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)",
+              x, y, z, center.x, center.y, center.z, center.r, center.p, 
center.a);
+    else
+      snprintf(buf, sizeof(buf),"%s's Size: (%.3f,%.3f,%.3f)\n        Origin 
(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)",
+              name.c_str(), x, y, z, center.x, center.y, center.z, center.r, 
center.p, center.a);
+
+    response = buf;
+  }else if(format == XML){
+
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;   
+    xmlNodePtr node;    
+    xmlChar *tmp;    
+    char str[128];
+
+    if(xmlnode == NULL){
+      doc = xmlNewDoc(BAD_CAST "1.0");
+      root_node = xmlNewNode(NULL, BAD_CAST "root");
+      xmlDocSetRootElement(doc, root_node);
+      node = xmlNewChild(root_node, NULL, BAD_CAST "ModelGeometry", NULL);
+    }else{
+      node = (xmlNodePtr)xmlnode;
+      xmlNodeSetName(node, xmlCharStrdup("ModelGeometry"));
+    }
+               
+
+    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "geometry");    
+    
+    tmp = ConvertInput(name.c_str(),MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
+    
+    sprintf(str,"%.3f",x);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "X", BAD_CAST tmp);    
+    
+    sprintf(str,"%.3f",y);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Y", BAD_CAST tmp);    
+
+    sprintf(str,"%.3f",z);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Z", BAD_CAST tmp);    
+   
+    
sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",center.x,center.y,center.z,center.r,center.p,center.a);
+    tmp = ConvertInput(str,MY_ENCODING);
+    xmlNewProp(node, BAD_CAST "Origin", BAD_CAST tmp);    
+
+
+    if(xmlnode == NULL){
+      xmlBufferPtr buf = xmlBufferCreate();
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc,node, 0, 1);
+
+      response = (const char*) buf->content;
+      puts(response.c_str());
+      xmlBufferFree(buf);
+      xmlFreeDoc(doc);
+    }
+  }
+       
+}
+
+bool 
+WebSim::GetModelTree(const std::string& model,Format format, std::string& 
response, bool everything){
+       
+  if(format == XML){
+    xmlNodePtr root_node = NULL;
+    xmlDocPtr doc = NULL;       
+    xmlBufferPtr buf;
+
+    doc = xmlNewDoc(BAD_CAST "1.0");
+    buf = xmlBufferCreate();
+    root_node = xmlNewNode(NULL, BAD_CAST "ModelTree");
+    xmlDocSetRootElement(doc, root_node);
+
+    if(GetModelTreeXML(model, root_node, everything)){ 
+                
+      xmlKeepBlanksDefault(0);
+      xmlNodeDump(buf, doc, root_node, 0, 1);
+      response = (const char*) buf->content;
+    }else{
+      response = "Error in generating model tree.\n";
+                       
+    }  
+
+    xmlBufferFree(buf);
+    xmlFreeDoc(doc);
+               
+    std::string out = "Model Tree:\n " + response + "\n";
+    puts(out.c_str());
+
+    return true;
+
+  }else if(format == TEXT){
+       
+    std::string str,type;
+    GetModelType(model, type);
+    str+= model + "("+type+")"+ "\n";
+    std::vector<std::string> children;
+    GetModelChildren(model, children);
+    for(unsigned int i=0; i<children.size(); i++){
+
+      std::string sub;
+      GetModelTree(children[i], TEXT, sub, false);
+      str += sub + "\n";
+    }
+               
+    response = str;
+    return false;
+  }
+       
+  return false;
+}
+
+bool 
+WebSim::GetModelTreeXML(const std::string& model, void*  xmlparent, bool 
everything){
+
+  std::string res;
+  xmlNodePtr node;
+
+  if(!xmlparent){
+    printf("Invalid xmlNode pointer. \n");
+    return false;
+  }
+               
+  if(model != ""){
+                       
+    node = xmlNewChild((xmlNodePtr)xmlparent, NULL, BAD_CAST "Model", NULL);   
+                       
+    bool flag = false;
+    std::string type;
+
+    if(everything){
+      std::string error;
+      flag = !GetModelData(model, error, XML, node);
+                                                               
+    }
+
+    if(!everything || flag){
+
+      GetModelType(model, type);
+      xmlNodeSetName(node, xmlCharStrdup("Model"));
+      xmlNewProp(node, BAD_CAST "Name", BAD_CAST model.c_str());    
+      xmlNewProp(node, BAD_CAST "Type", BAD_CAST type.c_str());
+    }
+                       
+  }else
+    node = (xmlNodePtr) xmlparent;
+
+  std::vector<std::string> children;
+  GetModelChildren(model, children);
+  for(unsigned int i=0;i<children.size();i++)
+    GetModelTreeXML(children[i], node, everything);
+                       
+               
+               
+  return true;
+               
+}

Modified: code/websim/src/req_sim.cc
===================================================================
--- code/websim/src/req_sim.cc  2009-06-29 19:35:46 UTC (rev 7929)
+++ code/websim/src/req_sim.cc  2009-06-29 22:58:45 UTC (rev 7930)
@@ -36,7 +36,7 @@
   if(prop == "viz")
     return HandleSimVisualizationRequest( action, format, kv, response );
 
-  response = "ERROR: Unknown property " + prop + " for sim. Candidates are: 
children clock factory greet tree.";
+  response = "ERROR: Unknown property " + prop + " for sim. Candidates are: 
clock factory greet tree.";
   return false;
 }
 

Modified: code/websim/src/websim.cc
===================================================================
--- code/websim/src/websim.cc   2009-06-29 19:35:46 UTC (rev 7929)
+++ code/websim/src/websim.cc   2009-06-29 22:58:45 UTC (rev 7930)
@@ -33,11 +33,10 @@
 #include <stdlib.h>
 #include <string.h>
 #include <libxml/encoding.h>
-//#include <libxml/xmlwriter.h>
-//#include <libxml/tree.h>
 
-#define MY_ENCODING "ISO-8859-1"
 
+
+
 using namespace websim;
 
 const std::string WebSim::package = "WebSim";
@@ -60,8 +59,6 @@
  "src=\"http://192.168.1.210/viz.html\";></iframe></BODY></HTML>";
 
 
-xmlChar *
-ConvertInput(const char *in, const char *encoding);
   
 std::string Time::String()
 { 
@@ -246,724 +243,6 @@
 
 
 
-  
-
-bool
-WebSim::HandleModelRequest(const std::string& model,
-                          const std::string& prop,
-                          const std::string& action,
-                          Format format,
-                          struct evkeyvalq* kv,
-                          std::string& response)
-{
-  if(action == "get")
-    {
-      if(prop == "data" || prop == ""){
-               
-       return(GetModelData(model, response, format, NULL));
-       
-      }else if(prop == "pva"){
-       Pose p;
-       Velocity v;
-       Acceleration a;
-       Time t;
-       if(GetModelPVA(model, t, p, v, a, response)){
-               
-         GetPVA(model, t, p, v, a, format, response, NULL);
-         return true;
-       }
-       else
-         return false;
-
-      }else if(prop == "children"){
-       std::vector<std::string> children;
-       GetModelChildren(model,children);
-       
-       for(unsigned int i=0;i<children.size();i++)
-         response += children[i] + "\n";
-
-       return true;
-
-      }else if(prop == "tree"){
-       
-       
-       return(GetModelTree(model, format, response, false));
-       
-               
-      }else if(prop == "geometry"){
-       double x,y,z;
-       Pose center;
-       if(GetModelGeometry(model, x, y, z, center, response))  
-         {
-               
-           GetGeometryData(model, x, y, z, center, format, response, NULL);
-           return true;
-               
-         }else{
-       
-         response = "ERROR: failed to get the extent of model " + model;
-         return false;
-       
-       }
-      }else{
-       response = "ERROR: Unknown property " + prop + " for model " + model;
-       return false;
-      }        
-    
-
-    }else if(action == "set")
-    {
-      if(prop == "pva")
-       {       
-         std::string sx, sy, sz, sroll, spitch, syaw;
-
-         // Get pose first, fill in what the caller provided
-         Pose p;
-         Velocity v;
-         Acceleration a;
-         Time t;
-         if(!GetModelPVA(model, t, p, v, a, response))
-           {
-             response = "Failed to get pose before setting it";
-             return false;
-           }
-         try
-           {
-             if(GetValue(sx, kv, "px"))
-               p.x = boost::lexical_cast<float>(sx);
-             if(GetValue(sy, kv, "py"))
-               p.y = boost::lexical_cast<float>(sy);
-             if(GetValue(sz, kv, "pz"))
-               p.z = boost::lexical_cast<float>(sz);
-             if(GetValue(sroll, kv, "pr"))
-               p.r = boost::lexical_cast<float>(sroll);
-             if(GetValue(spitch, kv, "pp"))
-               p.p = boost::lexical_cast<float>(spitch);
-             if(GetValue(syaw, kv, "pa"))
-               p.a = boost::lexical_cast<float>(syaw);
-
-             if(GetValue(sx, kv, "vx"))
-               v.x = boost::lexical_cast<float>(sx);
-             if(GetValue(sy, kv, "vy"))
-               v.y = boost::lexical_cast<float>(sy);
-             if(GetValue(sz, kv, "vz"))
-               v.z = boost::lexical_cast<float>(sz);
-             if(GetValue(sroll, kv, "vr"))
-               v.r = boost::lexical_cast<float>(sroll);
-             if(GetValue(spitch, kv, "vp"))
-               v.p = boost::lexical_cast<float>(spitch);
-             if(GetValue(syaw, kv, "va"))
-               v.a = boost::lexical_cast<float>(syaw);
-
-             if(GetValue(sx, kv, "ax"))
-               a.x = boost::lexical_cast<float>(sx);
-             if(GetValue(sy, kv, "ay"))
-               a.y = boost::lexical_cast<float>(sy);
-             if(GetValue(sz, kv, "az"))
-               a.z = boost::lexical_cast<float>(sz);
-             if(GetValue(sroll, kv, "ar"))
-               a.r = boost::lexical_cast<float>(sroll);
-             if(GetValue(spitch, kv, "ap"))
-               a.p = boost::lexical_cast<float>(spitch);
-             if(GetValue(syaw, kv, "aa"))
-               a.a = boost::lexical_cast<float>(syaw);
-           }
-         catch(boost::bad_lexical_cast e)
-           {
-             response = std::string("Failed to parse input value(s): ") + 
-                e.what();
-             return false;
-           }
-
-         return(SetModelPVA(model, p, v, a, response));
-       }
-      else
-       {
-         response = "ERROR: Unknown property " + prop + " for model " + model;
-         return false;
-       }
-    }
-  else
-    {
-      response = "ERROR: Unknown action " + action;
-      return false;
-    }
-
-  return false;
-}
-
-
-
-
-void 
-WebSim::GetPVA(const std::string& name, 
-              Time& t,
-              const Pose& p,
-              const Velocity& v,
-              const Acceleration& a,
-              Format format,
-              std::string& response,
-              void* xmlnode)
-{
-  if(format == TEXT){
-    char buf[1024];
-    snprintf(buf, sizeof(buf), 
-            "%s's state @%s: \n  pose: (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n"
-            "  vel : (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n"
-            "  acc : (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n",
-            name.c_str(),
-            t.String().c_str(),
-            p.x, p.y, p.z, p.r, p.p, p.a,
-            v.x, v.y, v.z, v.r, v.p, v.a,
-            a.x, a.y, a.z, a.r, a.p, a.a);
-    response = buf;
-
-  }else if (format == XML){
-
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;
-    xmlNodePtr node;       
-    xmlChar *tmp;    
-    char str[128];
-
-    if(xmlnode == NULL){
-
-      doc = xmlNewDoc(BAD_CAST "1.0");
-      root_node = xmlNewNode(NULL, BAD_CAST "root");
-      xmlDocSetRootElement(doc, root_node);
-      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
-    }else{
-      node = (xmlNodePtr) xmlnode;
-      xmlNodeSetName(node, xmlCharStrdup("Model"));
-      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "PVA", NULL);
-      //root_node = (xmlNodePtr)parent;
-    }
-
-
-           
-               
-    sprintf(str,"%s",t.String().c_str());
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
-    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "pva");    
-    
-    tmp = ConvertInput(name.c_str(),MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);        
-               
-    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",p.x, p.y, p.z, p.r, p.p, p.a);
-    tmp = ConvertInput(str, MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Pose", BAD_CAST tmp);    
-    
-    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",v.x, v.y, v.z, v.r, v.p, v.a);
-    tmp = ConvertInput(str, MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Velocity", BAD_CAST tmp);    
-    
-    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",a.x, a.y, a.z, a.r, a.p, a.a);
-    tmp = ConvertInput(str, MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Acceleration", BAD_CAST tmp);    
-               
-    if(xmlnode == NULL){
-      xmlBufferPtr buf = xmlBufferCreate();
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc,node, 0, 1);
-      response = (const char*) buf->content;
-      puts(response.c_str());
-      xmlBufferFree(buf);
-      xmlFreeDoc(doc);
-    }
-  }
-
-}
-
-
-void
-WebSim::GetLaserData(const std::string& name,
-                    Time& t,
-                    uint32_t& resolution,
-                    double& fov,
-                    Pose& p,
-                    std::vector<double>& ranges,
-                    Format format,
-                    std::string& response,
-                    void* xmlnode)
-{
-  if(format == TEXT){
-
-    std::string res;
-    char temp[128];
-    for(unsigned int i=0;i<ranges.size();i++){
-      sprintf(temp,"%.3f",ranges.at(i));
-      res.append(temp);
-      if(i+1 != ranges.size())
-       res.append(",");
-    }
-
-               
-    char buf[4096];
-    snprintf(buf, sizeof(buf), 
-            "%s's state @%s: \n  laser: (%s)\n  resolution: (%d)\n  
fov(%.2f)\n"
-            "  pose (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)\n",
-            name.c_str(),
-            t.String().c_str(),
-            res.c_str(),
-            resolution,
-            fov,
-            p.x,p.y,p.z,p.r,p.p,p.a);
-    response = buf;
-
-  }else if(format == XML){
-               
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;       
-    xmlNodePtr node;
-    xmlChar *tmp;    
-    char str[128];
-
-    if(xmlnode == NULL){
-      puts("no parent\n");
-      doc = xmlNewDoc(BAD_CAST "1.0");
-      root_node = xmlNewNode(NULL, BAD_CAST "root");
-      xmlDocSetRootElement(doc, root_node);
-      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
-    }else{
-      node = (xmlNodePtr) xmlnode;
-      xmlNodeSetName(node, xmlCharStrdup("Model"));
-      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Laser", NULL);
-      //root_node = (xmlNodePtr)parent;
-    }
-
-    std::string res;
-    char temp[128];
-    for(unsigned int i=0;i<ranges.size();i++){
-      sprintf(temp,"%.3f",ranges.at(i));
-      res.append(temp);
-      if(i+1 != ranges.size())
-       res.append(",");
-    }
-
-
-               
-    xmlNewProp(node, BAD_CAST "Time", BAD_CAST t.String().c_str());    
-    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "laser");    
-    
-    tmp = ConvertInput(name.c_str(),MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
-           
-    sprintf(str,"%d",resolution);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Resolution", BAD_CAST tmp);    
-    
-    sprintf(str,"%.3f",fov);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "FOV", BAD_CAST tmp);    
-       
-    sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",p.x, p.y, p.z, p.r, p.p, p.a);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Pose", BAD_CAST tmp);    
-   
-    tmp = ConvertInput(res.c_str(), MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Samples", BAD_CAST tmp);    
-    
-
-    if(xmlnode == NULL){
-      xmlBufferPtr buf = xmlBufferCreate();
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc,node, 0, 1);
-
-      response = (const char*) buf->content;
-      puts(response.c_str());
-      xmlBufferFree(buf);
-      xmlFreeDoc(doc);
-    }
-
-               
-    
-
-  }            
-}
-
-void
-WebSim::GetRangerData(const std::string& name,
-                     Time& t,
-                     std::vector<Pose>& p,
-                     std::vector<double>& ranges,
-                     Format format,                                            
                        
-                     std::string& response,
-                     void* xmlnode)
-{
-  if(format == TEXT){
-
-    std::string res;
-    char temp[128];
-    for(unsigned int i=0;i<ranges.size();i++){
-      sprintf(temp,"%.3f",ranges.at(i));
-      res.append(temp);
-      if(i+1 != ranges.size())
-       res.append(",");
-    }
-
-    std::string pstr; 
-    char ptmp[256];
-    for(unsigned int i=0;i<p.size();i++){
-      Pose pos = p.at(i);
-      sprintf(ptmp," (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)",
-             pos.x,pos.y,pos.x,pos.r,pos.p,pos.a);
-      pstr.append(ptmp);
-                  
-    }
-               
-    char buf[2048];
-    snprintf(buf, sizeof(buf), 
-            "%s's state @%s: \n  ranger\n  ranges: (%s)\n  pose:  %s",
-            name.c_str(),
-            t.String().c_str(),
-            res.c_str(),
-            pstr.c_str());
-    response = buf;
-       
-  }else if(format == XML){
-               
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;       
-    xmlNodePtr node;
-    xmlChar *tmp;    
-    char str[128];
-
-    if(xmlnode == NULL){
-      puts("no parent\n");
-      doc = xmlNewDoc(BAD_CAST "1.0");
-      root_node = xmlNewNode(NULL, BAD_CAST "root");
-      xmlDocSetRootElement(doc, root_node);
-      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
-    }else{
-      node = (xmlNodePtr)xmlnode;
-      xmlNodeSetName(node, xmlCharStrdup("Model"));
-      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Ranger", NULL);
-      //root_node = (xmlNodePtr)parent;
-    }
-
-
-    std::string res;
-    char temp[1024];
-    for(unsigned int i=0;i<ranges.size();i++){
-      sprintf(temp,"%.3f",ranges.at(i));
-      res.append(temp);
-      if(i+1 != ranges.size())
-       res.append(",");
-    }
-
-    std::string pstr; 
-    char ptmp[2048];
-    for(unsigned int i=0;i<p.size();i++){
-      Pose pos = p.at(i);
-      sprintf(ptmp," (%.3f,%.3f,%.3f) (%.3f,%.3f,%.3f)",
-             pos.x,pos.y,pos.x,pos.r,pos.p,pos.a);
-      pstr.append(ptmp);
-    }
-               
-    //xmlNodePtr node = xmlNewChild(root_node, NULL, BAD_CAST "Ranger", NULL);
-                   
-               
-    sprintf(str,"%s",t.String().c_str());
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
-    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "ranger");    
-    
-    tmp = ConvertInput(name.c_str(),MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
-    
-    tmp = ConvertInput(res.c_str(), MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Samples", BAD_CAST tmp);    
-    
-    tmp = ConvertInput(pstr.c_str(), MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Positions", BAD_CAST tmp);    
-
-
-    if(xmlnode == NULL){
-      xmlBufferPtr buf = xmlBufferCreate();
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc,node, 0, 1);
-
-      response = (const char*) buf->content;
-      puts(response.c_str());
-      xmlBufferFree(buf);
-      xmlFreeDoc(doc);
-    }
-               
-
-  }
-
-}
-
-void 
-WebSim::GetFiducialData(const std::string& name,
-                       Time& t,
-                       std::vector<Fiducial>& f,
-                       Format format,
-                       std::string& response,
-                       void* xmlnode )
-{
-
-
-  if(format == TEXT){
-
-    std::string res;
-    char temp[512];
-    puts("here1\n");
-    for(unsigned int i=0;i<f.size();i++){
-      sprintf(temp,"((%.3f,%.3f,%.3f),(%.3f,%.3f,%.3f),%d)\n", f.at(i).pos.x, 
f.at(i).pos.y, f.at(i).pos.z,
-                               f.at(i).pos.r, f.at(i).pos.p, f.at(i).pos.a, 
f.at(i).id);
-      puts("here2\n");
-      res.append(temp);
-                  
-    }
-
-    puts("here3\n");
-                       
-    char buf[2048];
-    snprintf(buf, sizeof(buf), 
-            "%s's state @%s: \n  Fiducial:\n",
-            name.c_str(),
-            t.String().c_str());
-
-    response = buf;
-    response.append(res);                      
-       
-  }else if(format == XML){
-               
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;       
-    xmlNodePtr node;
-    xmlChar *tmp;    
-    char str[128];
-
-    if(xmlnode == NULL){
-      puts("no parent\n");
-      doc = xmlNewDoc(BAD_CAST "1.0");
-      root_node = xmlNewNode(NULL, BAD_CAST "root");
-      xmlDocSetRootElement(doc, root_node);
-      node = xmlNewChild(root_node, NULL, BAD_CAST "Model", NULL);
-    }else{
-      node = (xmlNodePtr)xmlnode;
-      xmlNodeSetName(node, xmlCharStrdup("Model"));
-      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "Ranger", NULL);
-      //root_node = (xmlNodePtr)parent;
-    }
-
-
-    std::string res;
-    char temp[512];
-    for(unsigned int i=0;i<f.size();i++){
-      sprintf(temp,"((%.3f,%.3f,%.3f),(%.3f,%.3f,%.3f),%d)", f.at(i).pos.x, 
f.at(i).pos.y, f.at(i).pos.z,
-                               f.at(i).pos.r, f.at(i).pos.p, f.at(i).pos.a, 
f.at(i).id);
-      res.append(temp);
-                  
-    }
-                   
-               
-    sprintf(str,"%s",t.String().c_str());
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Time", BAD_CAST tmp);    
-    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "fiducial");    
-    
-    tmp = ConvertInput(name.c_str(),MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
-    
-    tmp = ConvertInput(res.c_str(), MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Targets", BAD_CAST tmp);    
-    
-    if(xmlnode == NULL){
-      xmlBufferPtr buf = xmlBufferCreate();
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc,node, 0, 1);
-
-      response = (const char*) buf->content;
-      puts(response.c_str());
-      xmlBufferFree(buf);
-      xmlFreeDoc(doc);
-    }
-       
-
-  }
-
-}
-
-void 
-WebSim::GetGeometryData(const std::string& name,
-                      double& x,
-                      double& y,
-                      double& z,
-                      Pose& center,
-                      Format format,
-                      std::string& response,
-                      void* xmlnode)
-{
-  if(format == TEXT){
-    char buf[1024];
-    if(name == "sim")
-      snprintf(buf, sizeof(buf),"World Size: (%.3f,%.3f,%.3f)\n        Origin 
(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)",
-              x, y, z, center.x, center.y, center.z, center.r, center.p, 
center.a);
-    else
-      snprintf(buf, sizeof(buf),"%s's Size: (%.3f,%.3f,%.3f)\n        Origin 
(%.3f,%.3f,%.3f,%.3f,%.3f,%.3f)",
-              name.c_str(), x, y, z, center.x, center.y, center.z, center.r, 
center.p, center.a);
-
-    response = buf;
-  }else if(format == XML){
-
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;   
-    xmlNodePtr node;    
-    xmlChar *tmp;    
-    char str[128];
-
-    if(xmlnode == NULL){
-      puts("no parent\n");
-      doc = xmlNewDoc(BAD_CAST "1.0");
-      root_node = xmlNewNode(NULL, BAD_CAST "root");
-      xmlDocSetRootElement(doc, root_node);
-      node = xmlNewChild(root_node, NULL, BAD_CAST "ModelGeometry", NULL);
-    }else{
-      node = (xmlNodePtr)xmlnode;
-      xmlNodeSetName(node, xmlCharStrdup("ModelGeometry"));
-      //node = xmlNewChild((xmlNodePtr)parent, NULL, BAD_CAST "ModelExtent", 
NULL);
-      //root_node = (xmlNodePtr)parent;
-    }
-               
-
-    xmlNewProp(node, BAD_CAST "Type", BAD_CAST "geometry");    
-    
-    tmp = ConvertInput(name.c_str(),MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Name", BAD_CAST tmp);    
-    
-    sprintf(str,"%.3f",x);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "X", BAD_CAST tmp);    
-    
-    sprintf(str,"%.3f",y);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Y", BAD_CAST tmp);    
-
-    sprintf(str,"%.3f",z);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Z", BAD_CAST tmp);    
-   
-    
sprintf(str,"%.3f,%.3f,%.3f,%.3f,%.3f,%.3f",center.x,center.y,center.z,center.r,center.p,center.a);
-    tmp = ConvertInput(str,MY_ENCODING);
-    xmlNewProp(node, BAD_CAST "Origin", BAD_CAST tmp);    
-
-
-    if(xmlnode == NULL){
-      xmlBufferPtr buf = xmlBufferCreate();
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc,node, 0, 1);
-
-      response = (const char*) buf->content;
-      puts(response.c_str());
-      xmlBufferFree(buf);
-      xmlFreeDoc(doc);
-    }
-  }
-       
-}
-
-bool 
-WebSim::GetModelTree(const std::string& model,Format format, std::string& 
response, bool everything){
-       
-  if(format == XML){
-    xmlNodePtr root_node = NULL;
-    xmlDocPtr doc = NULL;       
-    xmlBufferPtr buf;
-
-    doc = xmlNewDoc(BAD_CAST "1.0");
-    buf = xmlBufferCreate();
-    root_node = xmlNewNode(NULL, BAD_CAST "ModelTree");
-    xmlDocSetRootElement(doc, root_node);
-
-    if(GetModelTreeXML(model, root_node, everything)){ 
-                
-      xmlKeepBlanksDefault(0);
-      xmlNodeDump(buf, doc, root_node, 0, 1);
-      response = (const char*) buf->content;
-    }else{
-      response = "Error in generating model tree.\n";
-                       
-    }  
-
-    xmlBufferFree(buf);
-    xmlFreeDoc(doc);
-               
-    std::string out = "Model Tree:\n " + response + "\n";
-    puts(out.c_str());
-
-    return true;
-
-  }else if(format == TEXT){
-       
-    std::string str,type;
-    GetModelType(model, type);
-    str+= model + "("+type+")"+ "\n";
-    std::vector<std::string> children;
-    GetModelChildren(model, children);
-    for(unsigned int i=0; i<children.size(); i++){
-
-      std::string sub;
-      GetModelTree(children[i], TEXT, sub, false);
-      str += sub + "\n";
-    }
-               
-    response = str;
-    return false;
-  }
-       
-  return false;
-}
-
-bool 
-WebSim::GetModelTreeXML(const std::string& model, void*  xmlparent, bool 
everything){
-
-  std::string res;
-  xmlNodePtr node;
-
-  if(!xmlparent){
-    printf("Invalid xmlNode pointer. \n");
-    return false;
-  }
-               
-  if(model != ""){
-                       
-    node = xmlNewChild((xmlNodePtr)xmlparent, NULL, BAD_CAST "Model", NULL);   
-                       
-    bool flag = false;
-    std::string type;
-
-    if(everything){
-      std::string error;
-      flag = !GetModelData(model, error, XML, node);
-                                                               
-    }
-
-    if(!everything || flag){
-
-      GetModelType(model, type);
-      xmlNodeSetName(node, xmlCharStrdup("Model"));
-      xmlNewProp(node, BAD_CAST "Name", BAD_CAST model.c_str());    
-      xmlNewProp(node, BAD_CAST "Type", BAD_CAST type.c_str());
-    }
-                       
-  }else
-    node = (xmlNodePtr) xmlparent;
-
-  std::vector<std::string> children;
-  GetModelChildren(model, children);
-  for(unsigned int i=0;i<children.size();i++)
-    GetModelTreeXML(children[i], node, everything);
-                       
-               
-               
-  return true;
-               
-}
-
 xmlChar *
 ConvertInput(const char *in, const char *encoding)
 {
@@ -1097,74 +376,7 @@
   return true;
 }
 
-//  //puts(uri.c_str());
-//   // Remove the query args
-//   std::vector<std::string> uri_parts;
-//   StringSplit(uri, uri_parts, "?");
-//   assert(uri_parts.size() > 0);
-//   std::string bare_uri = uri_parts[0];
 
-  
-//   StringSplit(bare_uri, uri_parts, "/");
-  
-//   //puts("parts:");
-//   /*for(int j=0;j<uri_parts.size();j++)
-//     puts(uri_parts[j].c_str());
-
-//     puts("Here I am!");*/
-//   if(uri_parts.size() < 2)
-//     {
-//       // return true, then generate the welcome html  
-//       return false;
-//     }
-  
-//   // example: http://localhost:8000/viz
-//   if(uri_parts.size() ==2){
-       
-//     //puts("1 Here I am!");
-//     model = uri_parts[1];
-//     prop = "";
-//     action = "";
-//     //puts("1.1 Here I am!");
-//     return true;    
-//   }
-
-
-//   // example: http://localhost:8000/viz/applet.class
-//   if(uri_parts.size() ==3){
-  
-//     //puts("2 Here I am!");
-
-//     model = uri_parts[1];
-//     prop = uri_parts[2];
-//     action = "";
-//     return true;    
-//   }
-
-//   //puts("3 here I am");
-//   unsigned int size = uri_parts.size();
-//   unsigned int modelendindex = 0;
-
-//   if(uri_parts[size-1] == "get" || uri_parts[size-1]== "set"){
-//     action = uri_parts[size-1];
-//     modelendindex = size-3;
-//   }
-//   else{
-//     action = "get";
-//     modelendindex = size-2;
-//   }
-
-//   prop = uri_parts[modelendindex+1];
-  
-//   for(unsigned int i=1;i <= modelendindex;i++){
-//     model += uri_parts[i];
-//     if(i!=modelendindex)
-//       model += ".";
-//   }
-
-//   return true;
-
-
 bool
 WebSim::SetPuppetPVA( const std::string& name, 
                      Pose& p,

Modified: code/websim/src/websim.hh
===================================================================
--- code/websim/src/websim.hh   2009-06-29 19:35:46 UTC (rev 7929)
+++ code/websim/src/websim.hh   2009-06-29 22:58:45 UTC (rev 7930)
@@ -312,6 +312,30 @@
                          struct evkeyvalq* kv, 
                          std::string& response);
   
+  bool HandleModelDataRequest( std::string model,
+                             std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response);  
+
+  bool HandleModelTreeRequest( std::string model,
+                             std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response);  
+
+  bool HandleModelGeometryRequest( std::string model,
+                             std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response);  
+
+  bool HandleModelPVARequest( std::string model,
+                             std::string action,
+                             Format format,
+                             struct evkeyvalq* kv,
+                             std::string& response);  
+
   bool ParseURI(std::string& model,
                std::string& prop,
                std::string& action,


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to