Bug 2170 - AnimationInterface outputs improperly formed XML
authormiilic
Thu, 27 Aug 2015 18:08:12 -0700
changeset 11618 1de158f7e17a
parent 11617 ef902d405430
child 11619 0b8c6e883208
Bug 2170 - AnimationInterface outputs improperly formed XML
src/netanim/model/animation-interface.cc
src/netanim/model/animation-interface.h
--- a/src/netanim/model/animation-interface.cc	Wed Aug 26 22:05:34 2015 +0200
+++ b/src/netanim/model/animation-interface.cc	Thu Aug 27 18:08:12 2015 -0700
@@ -1988,8 +1988,9 @@
 
 // XML 
 
-AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName):
-                                m_tagName (tagName)
+AnimationInterface::AnimXmlElement::AnimXmlElement (std::string tagName, bool emptyElement):
+                                m_tagName (tagName),
+                                m_emptyElement (emptyElement)
 {
   m_elementString = "<" + tagName + " ";
 }
@@ -2012,6 +2013,19 @@
 }
 
 void
+AnimationInterface::AnimXmlElement::CloseElement ()
+{
+  if (m_emptyElement)
+    {
+      m_elementString += "/>\n";
+    }
+  else
+   {
+     m_elementString += "</" + m_tagName + ">\n";
+   }
+}
+
+void
 AnimationInterface::AnimXmlElement::CloseTag ()
 {
   m_elementString += ">";
@@ -2077,7 +2091,7 @@
   element.AddAttribute ("sysId", sysId);
   element.AddAttribute ("locX", locX);
   element.AddAttribute ("locY", locY);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2089,7 +2103,7 @@
   element.AddAttribute ("fromId", fromId);
   element.AddAttribute ("toId", toId);
   element.AddAttribute ("ld", linkDescription);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2119,7 +2133,7 @@
   element.AddAttribute ("fd", lprop.fromNodeDescription); 
   element.AddAttribute ("td", lprop.toNodeDescription); 
   element.AddAttribute ("ld", lprop.linkDescription); 
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2130,14 +2144,15 @@
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("info", routingInfo.c_str ());
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_routingF);
 }
 
 void 
 AnimationInterface::WriteXmlRp (uint32_t nodeId, std::string destination, Ipv4RoutePathElements rpElements)
 {
-  AnimXmlElement element ("rp");
+  std::string tagName = "rp";
+  AnimXmlElement element (tagName, false);
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("d", destination.c_str ());
@@ -2152,9 +2167,10 @@
       AnimXmlElement rpeElement ("rpe");
       rpeElement.AddAttribute ("n", rpElement.nodeId);
       rpeElement.AddAttribute ("nH", rpElement.nextHop.c_str ());
-      rpeElement.Close ();
+      rpeElement.CloseElement ();
       element.Add (rpeElement);
     }
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_routingF);
 }
 
@@ -2170,7 +2186,7 @@
     {
       element.AddAttribute ("meta-info", metaInfo.c_str ());
     }
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2182,7 +2198,7 @@
   element.AddAttribute ("tId", tId);
   element.AddAttribute ("fbRx", fbRx);
   element.AddAttribute ("lbRx", lbRx);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2201,7 +2217,7 @@
   element.AddAttribute ("tId", tId);
   element.AddAttribute ("fbRx", fbRx);
   element.AddAttribute ("lbRx", lbRx);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2212,7 +2228,7 @@
   element.AddAttribute ("ncId", nodeCounterId);
   element.AddAttribute ("n", counterName);
   element.AddAttribute ("t", CounterTypeToString (counterType));
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2222,7 +2238,7 @@
   AnimXmlElement element ("res");
   element.AddAttribute ("rid", resourceId);
   element.AddAttribute ("p", resourcePath);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2234,7 +2250,7 @@
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("rid", resourceId);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2247,7 +2263,7 @@
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("w", width);
   element.AddAttribute ("h", height);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (),  m_f);
 }
 
@@ -2260,7 +2276,7 @@
   element.AddAttribute ("id", nodeId);
   element.AddAttribute ("x", x);
   element.AddAttribute ("y", y);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2274,7 +2290,7 @@
   element.AddAttribute ("r", (uint32_t) r);
   element.AddAttribute ("g", (uint32_t) g);
   element.AddAttribute ("b", (uint32_t) b);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2289,7 +2305,7 @@
     {
       element.AddAttribute ("descr", m_nodeDescriptions[nodeId]); 
     }
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2302,7 +2318,7 @@
   element.AddAttribute ("i", nodeId);
   element.AddAttribute ("t", Simulator::Now ().GetSeconds ());
   element.AddAttribute ("v", counterValue);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2316,7 +2332,7 @@
   element.AddAttribute ("sx", scaleX);
   element.AddAttribute ("sy", scaleY);
   element.AddAttribute ("o", opacity);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
@@ -2327,7 +2343,7 @@
   element.AddAttribute ("id", id);
   element.AddAttribute ("ipv4Address", ipv4Address);
   element.AddAttribute ("channelType", channelType);
-  element.Close ();
+  element.CloseElement ();
   WriteN (element.GetElementString (), m_f);
 }
 
--- a/src/netanim/model/animation-interface.h	Wed Aug 26 22:05:34 2015 +0200
+++ b/src/netanim/model/animation-interface.h	Thu Aug 27 18:08:12 2015 -0700
@@ -518,10 +518,11 @@
   class AnimXmlElement
   {
     public:
-    AnimXmlElement (std::string tagName);
+    AnimXmlElement (std::string tagName, bool emptyElement=true);
     template <typename T>
     void AddAttribute (std::string attribute, T value);
     void Close ();
+    void CloseElement ();
     void CloseTag ();
     void AddLineBreak ();
     void Add (AnimXmlElement e);
@@ -529,6 +530,7 @@
   private:
     std::string m_tagName;
     std::string m_elementString;
+    bool m_emptyElement;
 
   };