copy(), equals() and some fixes

Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/a2d921d0
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/a2d921d0
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/a2d921d0

Branch: refs/heads/develop
Commit: a2d921d019e164efb6607949defdb1bcc2536784
Parents: 988296e
Author: Harbs <[email protected]>
Authored: Sun Feb 7 00:02:13 2016 +0200
Committer: Harbs <[email protected]>
Committed: Sun Feb 7 00:02:13 2016 +0200

----------------------------------------------------------------------
 frameworks/projects/XML/as/src/QName.as |  3 +-
 frameworks/projects/XML/as/src/XML.as   | 98 ++++++++++++++++++++++++++--
 2 files changed, 96 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a2d921d0/frameworks/projects/XML/as/src/QName.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/QName.as 
b/frameworks/projects/XML/as/src/QName.as
index d24b7a7..2ceb487 100644
--- a/frameworks/projects/XML/as/src/QName.as
+++ b/frameworks/projects/XML/as/src/QName.as
@@ -49,6 +49,7 @@ package
                        {
                                _uri = qNameOrUri.uri;
                                _localName = qNameOrUri.localName;
+                               _prefix = qNameOrUri.prefix;
                        }
                        else if(qNameOrUri is Namespace)
                        {
@@ -102,7 +103,7 @@ package
 
                public function equals(name:QName):Boolean
                {
-                       return this.uri == name.uri && this.prefix == 
name.prefix && this.localName == name.localName;
+                       return this.uri == name.uri && this.localName == 
name.localName; // this.prefix == name.prefix &&
                }
                public function matches(name:QName):Boolean
                {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/a2d921d0/frameworks/projects/XML/as/src/XML.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/XML/as/src/XML.as 
b/frameworks/projects/XML/as/src/XML.as
index 8be71e2..d077ae8 100644
--- a/frameworks/projects/XML/as/src/XML.as
+++ b/frameworks/projects/XML/as/src/XML.as
@@ -150,7 +150,7 @@ package
                        xml.setNodeKind("attribute");
                        xml.setName(att.name);
                        xml.setValue(att.value);
-                       parent.
+                       parent.addChild(xml);
                        return xml;
                }
                static private function 
iterateElement(node:Element,xml:XML):void
@@ -283,7 +283,7 @@ package
 
                public function XML(xml:String = null)
                {
-                       if(xml != "")
+                       if(xml)
                        {
                                var parser:DOMParser = new DOMParser();
                                // get error namespace. It's different in 
different browsers.
@@ -627,7 +627,23 @@ package
                                  c. Let c.[[Parent]] = y
                                6. Return y
                        */
-                       return null;
+                       var i:int;
+                       var xml:XML = new XML();
+                       xml.setNodeKind(_nodeKind);
+                       xml.setName(name());
+                       xml.setValue(_value);
+                       for(i-0;i<_namespaces.length;i++)
+                       {
+                               xml.addNamespace(new Namespace(_namespaces[i]));
+                       }
+                       //parent should be null by default
+                       for(i=0;i<_attributes.length;i++)
+                               xml.addChild(_attributes[i].copy());
+
+                       for(i=0;i<_children.length;i++)
+                               xml.addChild(_children[i].copy());
+                       
+                       return xml;
                }
                
                /**
@@ -702,7 +718,7 @@ package
                        return null;
                }
 
-               public function equals(xml:XML):Boolean
+               public function equals(xml:*):Boolean
                {
                        /*
                                When the [[Equals]] method of an XML object x 
is called with value V, the following steps are taken:
@@ -723,6 +739,66 @@ package
                                  b. If r == false, return false
                                10. Return true
                        */
+                       var i:int;
+                       if(!(xml is XML))
+                               return false;
+
+                       if(xml.nodeKind() != _nodeKind)
+                               return false;
+
+                       if(!name().equals(xml.name()))
+                               return false;
+                       var selfAttrs:Array = getAttributeArray();
+                       var xmlAttrs:Array = xml.getAttributeArray();
+                       if(selfAttrs.length != xmlAttrs.length)
+                               return false;
+                       //length comparison should not be necessary because xml 
always has a length of 1
+                       if(getValue() != xml.getValue())
+                               return false;
+
+                       for(i=0;i<selfAttrs.length;i++)
+                       {
+                               if(!xml.hasAttribute(selfAttrs[i]))
+                                       return false;
+                       }
+                       var selfChldrn:Array = getChildrenArray();
+                       var xmlChildren:Array = xml.getChildrenArray();
+                       if(selfChldrn.length != xmlChildren.length)
+                               return false;
+                       
+                       for(i=0;i<selfChldrn.length;i++)
+                       {
+                               if(!selfChldrn[i].equals(xmlChildren[i]))
+                                       return false;
+                       }
+                       return true;
+               }
+
+               public function 
hasAttribute(nameOrXML:*,value:String=null):Boolean
+               {
+                       if(!_attributes)
+                               return false;
+                       var name:QName;
+                       if(nameOrXML is XML)
+                       {
+                               name = nameOrXML.name();
+                               value = nameOrXML.getValue();
+                       }
+                       else
+                       {
+                               name = new QName(nameOrXML);
+                       }
+                       var i:int;
+                       for(i=0;i<_attributes.length;i++)
+                       {
+                               if(name.matches(_attributes[i].name()))
+                               {
+                                       if(!value)
+                                               return true;
+                                       return value == 
_attributes[i].getValue();
+                               }
+                       }
+                       return false;
                }
 
                private function getAncestorNamespaces(namespaces:Array):Array
@@ -756,6 +832,15 @@ package
                        return namespaces;
                }
 
+               public function getAttributeArray():Array
+               {
+                       return _attributes ? _attributes.slice() : [];
+               }
+               public function getChildrenArray():Array
+               {
+                       return _children ? _children.slice() : [];
+               }
+
                public function getIndexOf(elem:XML):int
                {
                        return _children.indexOf(elem);
@@ -772,6 +857,11 @@ package
                        }
                        return "";
                }
+
+               public function getValue():String
+               {
+                       return _value;
+               }
                /**
                 * Checks to see whether the XML object contains complex 
content.
                 * 

Reply via email to