[gxml] API change on Serializable and Element



commit ae863e912c50bf4af7048b4e3dab8bf7e67c92d7
Author: Daniel Espinosa <esodan gmail com>
Date:   Thu Feb 11 22:00:26 2016 -0600

    API change on Serializable and Element
    
    * Serializable.serialized_xml_node_value now is owned
    * Added Element.remove_attr()
    * GXml.Node.get() now is virtual
    * Added unit tests

 gxml/Element.vala                   |    4 ++++
 gxml/GXmlElement.vala               |    6 ++++++
 gxml/Node.vala                      |    2 +-
 gxml/Serializable.vala              |    2 +-
 gxml/SerializableContainer.vala     |    5 ++++-
 gxml/SerializableGeeArrayList.vala  |    2 +-
 gxml/SerializableGeeDualKeyMap.vala |    2 +-
 gxml/SerializableGeeHashMap.vala    |    2 +-
 gxml/SerializableGeeTreeMap.vala    |    2 +-
 gxml/SerializableObjectModel.vala   |    2 +-
 gxml/TwElement.vala                 |    3 +++
 gxml/libxml-Element.vala            |    3 +++
 test/GElementTest.vala              |    2 ++
 test/TwElementTest.vala             |    3 +++
 14 files changed, 32 insertions(+), 8 deletions(-)
---
diff --git a/gxml/Element.vala b/gxml/Element.vala
index defabe4..3ddf41f 100644
--- a/gxml/Element.vala
+++ b/gxml/Element.vala
@@ -47,6 +47,10 @@ public interface GXml.Element : Object, GXml.Node
      */
     public abstract GXml.Node get_attr (string name);
     /**
+     * Search for a { link GXml.Attribute} with given name and removes it.
+     */
+    public abstract void remove_attr (string name);
+    /**
      * Set an { link GXml.Attribute} with a given name, value and namespace.
      */
     public abstract void set_ns_attr (Namespace ns, string name, string value);
diff --git a/gxml/GXmlElement.vala b/gxml/GXmlElement.vala
index dcb9dc6..b5baf5d 100644
--- a/gxml/GXmlElement.vala
+++ b/gxml/GXmlElement.vala
@@ -94,6 +94,12 @@ public class GXml.GElement : GXml.GNode, GXml.Element
       _node->set_content (value);
     }
   }
+  public void remove_attr (string name) {
+    if (_node == null) return;
+    var a = _node->has_prop (name);
+    if (a == null) return;
+    a->remove ();
+  }
   public string tag_name { owned get { return _node->name.dup (); } }
   public override string to_string () {
     var buf = new Xml.Buffer ();
diff --git a/gxml/Node.vala b/gxml/Node.vala
index fb95a49..f9eb2ee 100644
--- a/gxml/Node.vala
+++ b/gxml/Node.vala
@@ -69,7 +69,7 @@ public interface GXml.Node : Object
   /**
    * Get first child with given name, or null. 
    */
-  public new GXml.Node? get (string key) {
+  public new virtual GXml.Node? get (string key) {
     foreach (var child in children)
       if (child.name == key)
         return child;
diff --git a/gxml/Serializable.vala b/gxml/Serializable.vala
index fdb3048..3498bb7 100644
--- a/gxml/Serializable.vala
+++ b/gxml/Serializable.vala
@@ -98,7 +98,7 @@ namespace GXml {
      *
      * This property is ignored on serialisation.
      */
-    public abstract string?  serialized_xml_node_value { get; protected set; default = null; }
+    public abstract string?  serialized_xml_node_value { owned get; protected set; }
 
     /**
      * Used to set specific namespace for an { link GXml.Element}.
diff --git a/gxml/SerializableContainer.vala b/gxml/SerializableContainer.vala
index 01bc484..1191903 100644
--- a/gxml/SerializableContainer.vala
+++ b/gxml/SerializableContainer.vala
@@ -19,6 +19,9 @@
  * Authors:
  *      Daniel Espinosa <esodan gmail com>
  */
+
+using Gee;
+
 /**
  * Any { link GXml.Serializable} class having a collection managed list of
  * { link GXml.Node} must implement this abstract class.
@@ -40,7 +43,7 @@ public abstract class GXml.SerializableContainer : SerializableObjectModel
 /**
  * Serializable Framework. interface to be implemented by any collection of { link Serializable} objects.
  */
-public interface GXml.SerializableCollection : Object, Serializable
+public interface GXml.SerializableCollection : Object, Gee.Traversable<Serializable>, Serializable
 {
   public virtual bool is_collection () { return true; }
 }
diff --git a/gxml/SerializableGeeArrayList.vala b/gxml/SerializableGeeArrayList.vala
index e8816bb..f232343 100644
--- a/gxml/SerializableGeeArrayList.vala
+++ b/gxml/SerializableGeeArrayList.vala
@@ -49,7 +49,7 @@ public class GXml.SerializableArrayList<G> : Gee.ArrayList<G>, Serializable, Ser
   }
   protected ParamSpec[] properties { get; set; }
   public GLib.HashTable<string,GLib.ParamSpec> ignored_serializable_properties { get; protected set; }
-  public string? serialized_xml_node_value { get; protected set; default=null; }
+  public string? serialized_xml_node_value { owned get; protected set; default=null; }
   public virtual bool set_default_namespace (GXml.Node node) { return true; }
 
   public bool get_enable_unknown_serializable_property () { return false; }
diff --git a/gxml/SerializableGeeDualKeyMap.vala b/gxml/SerializableGeeDualKeyMap.vala
index b8b1fc2..c6232ac 100644
--- a/gxml/SerializableGeeDualKeyMap.vala
+++ b/gxml/SerializableGeeDualKeyMap.vala
@@ -131,7 +131,7 @@ public class GXml.SerializableDualKeyMap<P,S,V> : Object, Serializable, Serializ
   }
   protected ParamSpec[] properties { get; set; }
   public GLib.HashTable<string,GLib.ParamSpec> ignored_serializable_properties { get; protected set; }
-  public string? serialized_xml_node_value { get; protected set; default=null; }
+  public string? serialized_xml_node_value { owned get; protected set; default=null; }
   public virtual bool set_default_namespace (GXml.Node node) { return true; }
 
   public virtual bool get_enable_unknown_serializable_property () { return false; }
diff --git a/gxml/SerializableGeeHashMap.vala b/gxml/SerializableGeeHashMap.vala
index b5ec838..76837cc 100644
--- a/gxml/SerializableGeeHashMap.vala
+++ b/gxml/SerializableGeeHashMap.vala
@@ -47,7 +47,7 @@ public class GXml.SerializableHashMap<K,V> : Gee.HashMap<K,V>, Serializable, Ser
   }
   protected ParamSpec[] properties { get; set; }
   public GLib.HashTable<string,GLib.ParamSpec> ignored_serializable_properties { get; protected set; }
-  public string? serialized_xml_node_value { get; protected set; default=null; }
+  public string? serialized_xml_node_value { owned get; protected set; default=null; }
   public virtual bool set_default_namespace (GXml.Node node) { return true; }
 
   public virtual bool get_enable_unknown_serializable_property () { return false; }
diff --git a/gxml/SerializableGeeTreeMap.vala b/gxml/SerializableGeeTreeMap.vala
index a4f499d..81d550d 100644
--- a/gxml/SerializableGeeTreeMap.vala
+++ b/gxml/SerializableGeeTreeMap.vala
@@ -47,7 +47,7 @@ public class GXml.SerializableTreeMap<K,V> : Gee.TreeMap<K,V>, Serializable, Ser
   }
   protected ParamSpec[] properties { get; set; }
   public GLib.HashTable<string,GLib.ParamSpec> ignored_serializable_properties { get; protected set; }
-  public string? serialized_xml_node_value { get; protected set; default=null; }
+  public string? serialized_xml_node_value { owned get; protected set; default=null; }
   public virtual bool set_default_namespace (GXml.Node node) { return true; }
 
   public bool get_enable_unknown_serializable_property () { return false; }
diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index 63d478a..18e0e3b 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -43,7 +43,7 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
   /* Serializable interface properties */
   protected ParamSpec[] properties { get; set; }
   public GLib.HashTable<string,GLib.ParamSpec> ignored_serializable_properties { get; protected set; }
-  public string? serialized_xml_node_value { get; protected set; default=null; }
+  public string? serialized_xml_node_value { owned get; protected set; default=null; }
   public virtual bool get_enable_unknown_serializable_property () { return false; }
   /**
    * All unknown nodes, will be stored in a per-object { link GXml.Document}
diff --git a/gxml/TwElement.vala b/gxml/TwElement.vala
index e391140..de1ab5d 100644
--- a/gxml/TwElement.vala
+++ b/gxml/TwElement.vala
@@ -63,6 +63,9 @@ public class GXml.TwElement : GXml.TwNode, GXml.Element
     att.set_namespace (ns.uri, ns.prefix);
     attrs.set (name, att);
   }
+  public void remove_attr (string name) {
+    if (attrs.has_key (name)) attrs.unset (name);
+  }
   public void normalize () {}
   public string content {
     owned get {
diff --git a/gxml/libxml-Element.vala b/gxml/libxml-Element.vala
index 8664e56..48fb1b7 100644
--- a/gxml/libxml-Element.vala
+++ b/gxml/libxml-Element.vala
@@ -491,5 +491,8 @@ namespace GXml {
                        this.set_attribute_node (attr);
                        attr.set_namespace (ns.uri, ns.prefix);
     }
+       public void remove_attr (string name) {
+                 remove_attribute (name);
+               }
        }
 }
diff --git a/test/GElementTest.vala b/test/GElementTest.vala
index 713b752..e7f5720 100644
--- a/test/GElementTest.vala
+++ b/test/GElementTest.vala
@@ -70,6 +70,8 @@ class GElementTest : GXmlTest  {
                                elem.attrs.unset ("alley");
                                assert (elem.attrs.get ("alley") == null);
                                assert (elem.attrs.size == 2);
+                               elem.remove_attr ("owl");
+                               assert (elem.attrs.size == 1);
                        } catch (GLib.Error e) {
                                Test.message (e.message);
                                assert_not_reached ();
diff --git a/test/TwElementTest.vala b/test/TwElementTest.vala
index 31b85ee..0a5f69c 100644
--- a/test/TwElementTest.vala
+++ b/test/TwElementTest.vala
@@ -48,6 +48,9 @@ class TwElementTest : GXmlTest {
                        assert (c.name == "child");
                        assert (c.attrs.get ("cattr1") != null);
                        assert (c.attrs.get ("cattr1").value == "cval1");
+                       e.remove_attr ("cattr1");
+                       assert (e.attrs.size == 1);
+                       assert (e.attrs.get ("cattr1") == null);
                        assert (c.content == "");
                        c.content = "";
                        assert (c.content == "");


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