src/config-store/model/config-store.cc
changeset 6941 9d2c79c992d7
parent 4277 196e20a32b50
child 7168 7c724be8f9a6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/config-store/model/config-store.cc	Thu Mar 24 09:23:44 2011 -0700
@@ -0,0 +1,135 @@
+#include "config-store.h"
+#include "raw-text-config.h"
+#include "ns3/string.h"
+#include "ns3/log.h"
+#include "ns3/simulator.h"
+#include "ns3/enum.h"
+#include "ns3/attribute-list.h"
+#include "ns3/config-store-config.h"
+#ifdef HAVE_LIBXML2
+#include "xml-config.h"
+#endif
+
+#include <string>
+#include <fstream>
+#include <iostream>
+#include <unistd.h>
+#include <stdlib.h>
+
+
+NS_LOG_COMPONENT_DEFINE ("ConfigStore");
+
+namespace ns3 {
+
+
+NS_OBJECT_ENSURE_REGISTERED (ConfigStore);
+
+TypeId 
+ConfigStore::GetTypeId (void)
+{
+  static TypeId tid = TypeId ("ns3::ConfigStore")
+    .SetParent<ObjectBase> ()
+    .AddAttribute ("Mode", 
+		   "Configuration mode",
+		   EnumValue (ConfigStore::NONE),
+		   MakeEnumAccessor (&ConfigStore::SetMode),
+		   MakeEnumChecker (ConfigStore::NONE, "None",
+				    ConfigStore::LOAD, "Load",
+				    ConfigStore::SAVE, "Save"))
+    .AddAttribute ("Filename", 
+		   "The file where the configuration should be saved to or loaded from.",
+		   StringValue (""),
+		   MakeStringAccessor (&ConfigStore::SetFilename),
+		   MakeStringChecker ())
+    .AddAttribute ("FileFormat",
+		   "Type of file format",
+		   EnumValue (ConfigStore::RAW_TEXT),
+		   MakeEnumAccessor (&ConfigStore::SetFileFormat),
+		   MakeEnumChecker (ConfigStore::RAW_TEXT, "RawText",
+				    ConfigStore::XML, "Xml"))
+    ;
+  return tid;
+}
+TypeId 
+ConfigStore::GetInstanceTypeId (void) const
+{
+  return GetTypeId ();
+}
+
+
+ConfigStore::ConfigStore ()
+{
+  ObjectBase::ConstructSelf (AttributeList ());
+
+#ifdef HAVE_LIBXML2
+  if (m_fileFormat == ConfigStore::XML)
+    {
+      if (m_mode == ConfigStore::SAVE)
+	{
+	  m_file = new XmlConfigSave ();
+	}
+      else if (m_mode == ConfigStore::LOAD)
+	{
+	  m_file = new XmlConfigLoad ();
+	}
+      else 
+	{
+	  m_file = new NoneFileConfig ();
+	}
+    }
+  else 
+#endif /* HAVE_LIBXML2 */
+  if (m_fileFormat == ConfigStore::RAW_TEXT)
+    {
+      if (m_mode == ConfigStore::SAVE)
+	{
+	  m_file = new RawTextConfigSave ();
+	}
+      else if (m_mode == ConfigStore::LOAD)
+	{
+	  m_file = new RawTextConfigLoad ();
+	}
+      else
+	{
+	  m_file = new NoneFileConfig ();
+	}
+    }
+  m_file->SetFilename (m_filename);
+}
+
+ConfigStore::~ConfigStore ()
+{
+  delete m_file;
+  m_file = 0;
+}
+
+void 
+ConfigStore::SetMode (enum Mode mode)
+{
+  m_mode = mode;
+}
+void 
+ConfigStore::SetFileFormat (enum FileFormat format)
+{
+  m_fileFormat = format;
+}
+void 
+ConfigStore::SetFilename (std::string filename)
+{
+  m_filename = filename;
+}
+
+void 
+ConfigStore::ConfigureAttributes (void)
+{
+  m_file->Attributes ();
+}
+
+void 
+ConfigStore::ConfigureDefaults (void)
+{
+  m_file->Default ();
+  m_file->Global ();
+}
+
+} // namespace ns3