[gxml] SerializableObjectModel port to GXml.Element
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] SerializableObjectModel port to GXml.Element
- Date: Thu, 30 Apr 2015 22:13:15 +0000 (UTC)
commit 3e7cd143251c58de06bc1ad3528bf9b820958f76
Author: Daniel Espinosa <esodan gmail com>
Date: Thu Apr 30 16:42:23 2015 -0500
SerializableObjectModel port to GXml.Element
* Added GXml.Element.set_attr/get_attr()
* Removed GXml.Element.set_attribute by GXml.Element.set_attr()
* Reimplemented/API change on GXml.Node.copy()
* Considering to Delete SerializableJson/Serializable
gxml/Element.vala | 3 ++-
gxml/Node.vala | 19 +++++++++++++++++++
gxml/SerializableJson.vala | 5 +++--
gxml/SerializableObjectModel.vala | 22 ++++++++++------------
gxml/libxml-Attr.vala | 16 ----------------
gxml/libxml-Element.vala | 33 +++------------------------------
gxml/libxml-Node.vala | 11 +----------
7 files changed, 38 insertions(+), 71 deletions(-)
---
diff --git a/gxml/Element.vala b/gxml/Element.vala
index 197d6c3..af7b1b2 100644
--- a/gxml/Element.vala
+++ b/gxml/Element.vala
@@ -25,7 +25,8 @@ using Gee;
public interface GXml.Element : Object, GXml.Node
{
public abstract void normalize ();
- public abstract void set_attribute (string name, string value);
+ public abstract void set_attr (string name, string value);
+ public abstract GXml.Node get_attr (string name);
/**
* This should be just a different name for { link GXml.Node.name}.
*/
diff --git a/gxml/Node.vala b/gxml/Node.vala
index c4e4080..9abfac1 100644
--- a/gxml/Node.vala
+++ b/gxml/Node.vala
@@ -35,5 +35,24 @@ public interface GXml.Node : Object
public abstract bool set_namespace (string uri, string prefix);
public virtual string ns_prefix () { return namespaces.first ().prefix; }
public virtual string ns_urf () { return namespaces.first ().uri; }
+ public static bool copy (GXml.Document doc, GXml.Node node, GXml.Node source, bool deep)
+ {
+ if (node is GXml.Document) return false;
+ if (source is GXml.Element && node is GXml.Element) {
+ ((GXml.Element) node).content = ((GXml.Element) source).content;
+ foreach (GXml.Node p in source.attrs.values) {
+ ((GXml.Element) node).set_attr (p.name, p.value); // TODO: Namespace
+ }
+ if (!deep) return true;
+ foreach (Node c in node.childs) {
+ if (c is Element) {
+ var e = doc.create_element (c.name); // TODO: Namespace
+ node.childs.add (e);
+ copy (doc, e, c, deep);
+ }
+ }
+ }
+ return false;
+ }
}
diff --git a/gxml/SerializableJson.vala b/gxml/SerializableJson.vala
index f9ea4b0..40ebf80 100644
--- a/gxml/SerializableJson.vala
+++ b/gxml/SerializableJson.vala
@@ -200,8 +200,9 @@ public class GXml.SerializableJson : GLib.Object, GXml.Serializable
this.get_property_value (prop, ref val);
child_object = val.get_object ();
xDocument value_doc = Serialization.serialize_object (child_object);
- value_node = (xNode) doc.create_element ("fake");
- value_doc.document_element.copy (ref value_node, true);
+ value_node = (xNode) doc.create_element (doc.document_element.name);
+ // FIXME: This is not correct! May is time to remove Serialization and SerializableJson
+ GXml.Node.copy (value_doc, value_node, value_doc.document_element, true);
//value_node = doc.copy_node (value_doc.document_element);
prop_node.append_child (value_node);
return prop_node;
diff --git a/gxml/SerializableObjectModel.vala b/gxml/SerializableObjectModel.vala
index c10d480..22166ce 100644
--- a/gxml/SerializableObjectModel.vala
+++ b/gxml/SerializableObjectModel.vala
@@ -97,10 +97,10 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
requires (node_name () != null)
requires (node is xDocument || node is xElement)
{
- return default_serialize ((xNode)node);
+ return default_serialize (node);
}
- public GXml.xNode? default_serialize (GXml.xNode node) throws GLib.Error
+ public GXml.Node? default_serialize (GXml.Node node) throws GLib.Error
{
#if DEBUG
stdout.printf (@"$(get_type ().name ()): Serializing on node: $(node.node_name)\n");
@@ -110,26 +110,24 @@ public abstract class GXml.SerializableObjectModel : Object, Serializable
doc = (GXml.Document) node;
else
doc = node.document;
- var element = (xElement) doc.create_element (node_name ());
- node.append_child (element);
+ var element = (Element) doc.create_element (node_name ());
+ node.childs.add (element);
set_namespace (element);
foreach (ParamSpec spec in list_serializable_properties ()) {
serialize_property (element, spec);
}
if (get_enable_unknown_serializable_property ()) {
- foreach (xNode n in unknown_serializable_property.get_values ()) {
+ foreach (Node n in unknown_serializable_property.get_values ()) {
if (n is xElement) {
- var e = (xNode) doc.create_element (n.node_name);
- n.copy (ref e, true);
- element.append_child (e);
+ var e = doc.create_element (n.name);
+ GXml.Node.copy (node.document, e, n, true);
+ element.childs.add (e);
}
if (n is Attr) {
- element.set_attribute (n.node_name, n.node_value);
- var a = (xNode) element.get_attribute_node (n.node_name);
- n.copy (ref a);
+ element.set_attr (n.name, n.value); // TODO: Namespace
}
if (n is Text) {
- var tnode = doc.create_text (n.node_value);
+ var tnode = doc.create_text (n.value);
element.childs.add (tnode);
}
}
diff --git a/gxml/libxml-Attr.vala b/gxml/libxml-Attr.vala
index aba2db8..853ba26 100644
--- a/gxml/libxml-Attr.vala
+++ b/gxml/libxml-Attr.vala
@@ -232,22 +232,6 @@ namespace GXml {
/**
* { inheritDoc}
- *
- * For { link GXml.Attr} this method copy name and value.
- *
- * @param node could be owned by other { link GXml.xDocument}.
- *
- * @param deep paramenter have no effect.
- */
- public override bool copy (ref xNode node, bool deep = false)
- requires (node is Attr)
- {
- node.node_name = this.node_name;
- node.node_value = this.node_value;
- return true;
- }
- /**
- * { inheritDoc}
*/
public override string stringify (bool format = false, int level = 0) {
return "Attr(%s=\"%s\")".printf (this.name, this.value);
diff --git a/gxml/libxml-Element.vala b/gxml/libxml-Element.vala
index 2ca6a4c..bd64a4f 100644
--- a/gxml/libxml-Element.vala
+++ b/gxml/libxml-Element.vala
@@ -456,36 +456,6 @@ namespace GXml {
/**
* { inheritDoc}
- *
- * For { link GXml.xElement} this method copy attributes and child nodes
- * when @deep is set to true.
- *
- * @param node: could be owned by other { link GXml.xDocument}.
- * @param deep: copy child nodes if true.
- */
- public override bool copy (ref xNode node, bool deep = false)
- requires (node is xElement)
- {
- node.node_name = this.node_name;
- ((xElement) node).content = null;
- ((xElement) node).content = this.content;
- foreach (Attr attr in attributes.get_values ()) {
- ((xElement) node).set_attribute (attr.node_name, attr.node_value);
- }
- if (has_child_nodes () && deep) {
- foreach (xNode n in child_nodes) {
- if (n is xElement) {
- var element = (xNode) node.owner_document.create_element
(n.node_name);
- n.copy (ref element, true);
- node.append_child ( element);
- }
- }
- }
- return true;
- }
-
- /**
- * { inheritDoc}
*/
public override string stringify (bool format = false, int level = 0) {
/* TODO: may want to determine a way to only sync when
@@ -494,5 +464,8 @@ namespace GXml {
this.owner_document.dirty_elements.append (this);
return base.stringify (format, level);
}
+ // GXml.Element interface
+ public void set_attr (string name, string value) { set_attribute (name, value); }
+ public GXml.Node get_attr (string name) { return (GXml.Node) get_attribute_node (name); }
}
}
diff --git a/gxml/libxml-Node.vala b/gxml/libxml-Node.vala
index 7c6a79f..f816e1e 100644
--- a/gxml/libxml-Node.vala
+++ b/gxml/libxml-Node.vala
@@ -504,20 +504,11 @@ namespace GXml {
// GXml.Node interface implementations
public virtual Gee.List<GXml.Namespace> namespaces { get { return namespace_definitions; } }
public virtual Gee.BidirList<GXml.Node> childs { get { return (BidirList<GXml.Node>)
child_nodes; } }
- public virtual Gee.Map<string,GXml.Node> attrs { get { return (Map<string,GXml.Node>)
_attributes; } }
+ public virtual Gee.Map<string,GXml.Node> attrs { get { return (Map<string,GXml.Node>)
attributes; } }
public virtual string name { get { return node_name; } }
public virtual string @value { get { return node_value; } set { node_value = value; } }
public GXml.NodeType type_node { get { return node_type; } }
public virtual string to_string () { return stringify (); }
public GXml.Document document { get { return this.owner_document; } }
- /**
- * Creates a copy of node's definition to @node.
- *
- * @param node: a { link GXml.xNode} to copy values to.
- * @param deep: { link true} when you want to copy child nodes too.
- */
- public virtual bool copy (ref xNode node, bool deep = false) { // TODO: Change to GXml.Node
- return false;
- }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]