lmi-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lmi-commits] [4987] Refactor, deriving configurable_settings from xml_s


From: Greg Chicares
Subject: [lmi-commits] [4987] Refactor, deriving configurable_settings from xml_serializable
Date: Sat, 12 Jun 2010 01:39:19 +0000

Revision: 4987
          http://svn.sv.gnu.org/viewvc/?view=rev&root=lmi&revision=4987
Author:   chicares
Date:     2010-06-12 01:39:19 +0000 (Sat, 12 Jun 2010)
Log Message:
-----------
Refactor, deriving configurable_settings from xml_serializable

Modified Paths:
--------------
    lmi/trunk/ChangeLog
    lmi/trunk/configurable_settings.cpp
    lmi/trunk/configurable_settings.hpp

Modified: lmi/trunk/ChangeLog
===================================================================
--- lmi/trunk/ChangeLog 2010-06-12 01:17:30 UTC (rev 4986)
+++ lmi/trunk/ChangeLog 2010-06-12 01:39:19 UTC (rev 4987)
@@ -26031,3 +26031,22 @@
   configurable_settings.cpp
 Remove a defect marker for an issue resolved 20100514T2140Z.
 
+20100611T2356Z <address@hidden> [702]
+
+  Makefile.am
+  configurable_settings.cpp
+  configurable_settings_test.cpp [new file]
+  objects.make
+Add an inchoate unit test.
+
+20100612T0117Z <address@hidden> [702]
+
+  configurable_settings.cpp
+Rearrange to make an imminent refactoring clearer.
+
+20100612T0139Z <address@hidden> [702]
+
+  configurable_settings.cpp
+  configurable_settings.hpp
+Refactor, deriving configurable_settings from xml_serializable.
+

Modified: lmi/trunk/configurable_settings.cpp
===================================================================
--- lmi/trunk/configurable_settings.cpp 2010-06-12 01:17:30 UTC (rev 4986)
+++ lmi/trunk/configurable_settings.cpp 2010-06-12 01:39:19 UTC (rev 4987)
@@ -27,6 +27,7 @@
 #endif // __BORLANDC__
 
 #include "configurable_settings.hpp"
+#include "xml_serializable.tpp"
 
 #include "alert.hpp"
 #include "contains.hpp"
@@ -47,12 +48,10 @@
 #include <iterator>
 #include <sstream>
 
+template class xml_serializable<configurable_settings>;
+
 namespace
 {
-// Forward declarations that will soon become unnecessary.
-std::string const& xml_root_name();
-bool is_detritus(std::string const&);
-
 std::string const& configuration_filename()
 {
     static std::string s("configurable_settings.xml");
@@ -183,69 +182,25 @@
 
 void configurable_settings::load()
 {
-    std::ostringstream oss;
-    xml_lmi::dom_parser parser(configuration_filepath().string());
-    xml::element const& root = parser.root_node(xml_root_name());
-    xml::const_nodes_view const elements(root.elements());
-    typedef xml::const_nodes_view::const_iterator cnvi;
-    for(cnvi i = elements.begin(); i != elements.end(); ++i)
-        {
-        std::string name = i->get_name();
-        if(contains(member_names(), name))
-            {
-            operator[](i->get_name()) = xml_lmi::get_content(*i);
-            }
-        else if(is_detritus(name))
-            {
-            // Hold certain obsolete entities that must be translated.
-            // For now, there are none.
-            }
-        else
-            {
-            oss << "  '" << name << "'\n";
-            }
-        }
-    if(!oss.str().empty())
-        {
-        warning()
-            << "Configurable-settings file '"
-            << configuration_filepath()
-            << "':\n"
-            << oss.str()
-            << "not recognized."
-            << LMI_FLUSH
-            ;
-        }
+    xml_serializable<configurable_settings>::load(configuration_filepath());
 }
 
 void configurable_settings::save() const
 {
-    xml_lmi::xml_document document(xml_root_name());
-    xml::element& root = document.root_node();
+    xml_serializable<configurable_settings>::save(configuration_filepath());
+}
 
-    std::vector<std::string>::const_iterator i;
-    for(i = member_names().begin(); i != member_names().end(); ++i)
-        {
-        xml_lmi::add_node(root, *i, operator[](*i).str());
-        }
+/// Backward-compatibility serial number of this class's xml version.
+///
+/// version 0: 20100612T0139Z
 
-    fs::ofstream ofs(configuration_filepath(), ios_out_trunc_binary());
-    ofs << document;
-    if(!ofs)
-        {
-        fatal_error()
-            << "Configurable-settings file '"
-            << configuration_filepath()
-            << "' is not writeable."
-            << LMI_FLUSH
-            ;
-        }
+int configurable_settings::class_version() const
+{
+    return 0;
 }
 
-namespace
+std::string const& configurable_settings::xml_root_name() const
 {
-std::string const& xml_root_name()
-{
     static std::string const s("configurable_settings");
     return s;
 }
@@ -254,7 +209,7 @@
 /// are recognized and ignored. If they're resurrected in a later
 /// version, then they aren't ignored.
 
-bool is_detritus(std::string const& s)
+bool configurable_settings::is_detritus(std::string const& s) const
 {
     static std::string const a[] =
         {"xml_schema_filename"               // Withdrawn.
@@ -267,7 +222,6 @@
     static std::vector<std::string> const v(a, a + lmi_array_size(a));
     return contains(v, s);
 }
-} // Unnamed namespace.
 
 // TODO ?? CALCULATION_SUMMARY Address the validation issue:
 

Modified: lmi/trunk/configurable_settings.hpp
===================================================================
--- lmi/trunk/configurable_settings.hpp 2010-06-12 01:17:30 UTC (rev 4986)
+++ lmi/trunk/configurable_settings.hpp 2010-06-12 01:39:19 UTC (rev 4987)
@@ -29,6 +29,7 @@
 #include "any_member.hpp"
 #include "obstruct_slicing.hpp"
 #include "so_attributes.hpp"
+#include "xml_serializable.hpp"
 
 #include <boost/utility.hpp>
 
@@ -46,9 +47,10 @@
 /// Data members are documented in their accessors' implementations.
 
 class LMI_SO configurable_settings
-    :public MemberSymbolTable<configurable_settings>
-    ,private boost::noncopyable
-    ,virtual private obstruct_slicing<configurable_settings>
+    :        private boost::noncopyable
+    ,virtual private obstruct_slicing  <configurable_settings>
+    ,        public  xml_serializable  <configurable_settings>
+    ,        public  MemberSymbolTable <configurable_settings>
 {
   public:
     static configurable_settings& instance();
@@ -77,6 +79,13 @@
     void ascribe_members();
     void load();
 
+    // xml_serializable required implementation.
+    virtual int                class_version() const;
+    virtual std::string const& xml_root_name() const;
+
+    // xml_serializable overrides.
+    virtual bool is_detritus(std::string const&) const;
+
     std::string calculation_summary_columns_;
     std::string cgi_bin_log_filename_;
     std::string custom_input_filename_;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]