[gxml/serialization] Serializable API change for serializable_node_name



commit ef2ada631ea576e67ee157f1878d15684091c916
Author: Daniel Espinosa <esodan gmail com>
Date:   Wed Nov 6 22:59:19 2013 -0600

    Serializable API change for serializable_node_name
    
    * Now serializable_node_name is a method to be overrided
    * SerializableObjectModel declares it as virtual to allow
      overrides in derived classes
    * SerializableObjectModel print message for problems with
      serializable_node_name value
    * Updated tests cases

 gxml/Serializable.vala                |    2 +-
 gxml/SerializableJson.vala            |    2 +-
 gxml/SerializableObjectModel.vala     |   29 +++++++++++++++++++++++------
 test/SerializableObjectModelTest.vala |   11 +++++++----
 4 files changed, 32 insertions(+), 12 deletions(-)
---
diff --git a/gxml/Serializable.vala b/gxml/Serializable.vala
index 4f5d43a..98497d5 100644
--- a/gxml/Serializable.vala
+++ b/gxml/Serializable.vala
@@ -79,7 +79,7 @@ namespace GXml {
                 *
                 * This property is ignored on serialisation.
                 */
-               public abstract string serializable_node_name { get; protected set; }
+               public abstract string serializable_node_name ();
 
                public abstract bool serializable_property_use_nick { get; set; }
                /**
diff --git a/gxml/SerializableJson.vala b/gxml/SerializableJson.vala
index 914ac48..13d36ad 100644
--- a/gxml/SerializableJson.vala
+++ b/gxml/SerializableJson.vala
@@ -36,11 +36,11 @@ public class GXml.SerializableJson : GLib.Object, Serializable
 {
        /* Serializable Interface properties */
        protected ParamSpec[] properties { get; set; }
-       public string serializable_node_name { get; protected set; }
        public bool serializable_property_use_nick { get; set; }
        public HashTable<string,GLib.ParamSpec>  ignored_serializable_properties { get; protected set; }
        public HashTable<string,GXml.Node>    unknown_serializable_property { get; protected set; }
 
+       public string serializable_node_name () { return ""; }
        public string?  serialized_xml_node_value { get; protected set; default = null; }
 
        public virtual GLib.ParamSpec? find_property_spec (string property_name)
diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index c312cf3..afe34fe 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -28,13 +28,21 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
        public bool serializable_property_use_nick { get; set; }
        public string? serialized_xml_node_value { get; protected set; default=null; }
        public GLib.HashTable<string,GXml.Node> unknown_serializable_property { get; protected set; }
-       public string serializable_node_name { get; protected set; }
+
+
+       public virtual string serializable_node_name ()
+       {
+               return default_serializable_node_name ();
+       }
+       public string default_serializable_node_name ()
+       {
+               return get_type().name().down();
+       }
 
        public SerializableObjectModel ()
        {
                serializable_property_use_nick = false;
                serialized_xml_node_value = null;
-               serializable_node_name = get_type().name().down();
        }
 
        public virtual GLib.ParamSpec? find_property_spec (string property_name)
@@ -72,7 +80,10 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
                return false;
        }
 
-       public virtual Node? serialize (Node node) throws GLib.Error
+       public virtual Node? serialize (Node node)
+                            throws GLib.Error
+                            requires (serializable_node_name () != null)
+                            requires (node is Document || node is Element)
        {
                return default_serialize (node);
        }
@@ -84,7 +95,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
                        doc = (Document) node;
                else
                        doc = node.owner_document;
-               var element = doc.create_element (serializable_node_name);
+               var element = doc.create_element (serializable_node_name ());
                foreach (ParamSpec spec in list_serializable_properties ()) {
                        serialize_property (element, spec);
                }
@@ -163,6 +174,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
 
        public virtual Node? deserialize (Node node)
                                          throws GLib.Error
+                                         requires (serializable_node_name () != null)
        {
                return default_deserialize (node);
        }
@@ -182,8 +194,13 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
                else
                        element = (Element) doc.document_element;
                return_val_if_fail (element != null, null);
-               return_val_if_fail (serializable_node_name != null, null);
-               return_val_if_fail (element.node_name.down () == serializable_node_name.down (), null);
+               if (serializable_node_name () == null) {
+                       message (@"WARNING: Object type '$(get_type ().name ())' have no Node Name defined");
+                       assert_not_reached ();
+               }
+               if (element.node_name.down () != serializable_node_name ().down ()) {
+                       message (@"WARNING: wrong node name is '$(element.node_name.down ())' is different to 
'$(serializable_node_name ().down ())'");
+               }
                foreach (Attr attr in element.attributes.get_values ())
                {
                        deserialize_property (attr);
diff --git a/test/SerializableObjectModelTest.vala b/test/SerializableObjectModelTest.vala
index a8604f3..215f912 100644
--- a/test/SerializableObjectModelTest.vala
+++ b/test/SerializableObjectModelTest.vala
@@ -202,9 +202,9 @@ public class Cpu : ObjectModel
 class NodeName : ObjectModel
 {
        public bool invalid { get; set; default = true; }
-       public NodeName ()
+       public override string serializable_node_name ()
        {
-               serializable_node_name = "NodeName";
+               return "NodeName";
        }
 }
 
@@ -212,11 +212,14 @@ class Configuration : ObjectModel
 {
        public bool invalid { get; set; default = true; }
        public string device { get; set; }
-
+       public override string serializable_node_name ()
+       {
+               return "Configuration";
+       }
+       
        public Configuration ()
        {
                serializable_property_use_nick = true;
-               serializable_node_name = "Configuration";
                init_properties (); // initializing properties to be ignored by default
                ignored_serializable_properties.set ("invalid",
                                                                 get_class ().find_property("invalid"));


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