[gxml/serialization] Serializable API change for serializable_node_name
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml/serialization] Serializable API change for serializable_node_name
- Date: Fri, 8 Nov 2013 00:04:03 +0000 (UTC)
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]