[gxml] API change on Serializable and Element
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] API change on Serializable and Element
- Date: Fri, 12 Feb 2016 04:02:38 +0000 (UTC)
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]