[gxml] SerializableObjectModel port to GXml.Element



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]