Author: orudyy
Date: Tue Jan 21 10:08:35 2014
New Revision: 1559960

URL: http://svn.apache.org/r1559960
Log:
QPID-5413: Fix UpdatableStore row update logic to compare correctly fields of 
type 'array' and 'object'

Modified:
    
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
    
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js

Modified: 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js?rev=1559960&r1=1559959&r2=1559960&view=diff
==============================================================================
--- 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
 (original)
+++ 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/UpdatableStore.js
 Tue Jan 21 10:08:35 2014
@@ -18,10 +18,11 @@
  * under the License.
  *
  */
-define(["dojo/store/Memory",
-                               "dojox/grid/DataGrid",
-                               "dojo/data/ObjectStore",
-                               "dojo/store/Observable"], function (Memory, 
DataGrid, ObjectStore, Observable) {
+define(["qpid/common/util",
+        "dojo/store/Memory",
+        "dojox/grid/DataGrid",
+        "dojo/data/ObjectStore",
+        "dojo/store/Observable"], function (util, Memory, DataGrid, 
ObjectStore, Observable) {
 
     function UpdatableStore( data, divName, structure, func, props, Grid, 
notObservable ) {
 
@@ -86,16 +87,7 @@ define(["dojo/store/Memory",
         if(data) {
             for(var i=0; i < data.length; i++) {
                 if(theItem = store.get(data[i].id)) {
-                    var modified;
-                    for(var propName in data[i]) {
-                        if(data[i].hasOwnProperty(propName)) {
-                            if(theItem[ propName ] != data[i][ propName ]) {
-                                theItem[ propName ] = data[i][ propName ];
-                                modified = true;
-                                changed = true;
-                            }
-                        }
-                    }
+                    var modified = !util.equals(theItem, data[i]);
                     if(modified) {
                         // ... check attributes for updates
                         store.notify(theItem, data[i].id);

Modified: 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: 
http://svn.apache.org/viewvc/qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1559960&r1=1559959&r2=1559960&view=diff
==============================================================================
--- 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
 (original)
+++ 
qpid/branches/java-broker-bdb-ha/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
 Tue Jan 21 10:08:35 2014
@@ -369,6 +369,94 @@ define(["dojo/_base/xhr",
                {
                    alert(error);
                }
+           };
+
+           util.equals = function(object1, object2)
+           {
+             if (object1 && object2)
+             {
+               if (typeof object1 != typeof object2)
+               {
+                 return false;
+               }
+               else
+               {
+                 if (object1 instanceof Array || typeof object1 == "array")
+                 {
+                   if (object1.length != object2.length)
+                   {
+                     return false;
+                   }
+
+                   for (var i = 0, l=object1.length; i < l; i++)
+                   {
+                     var item = object1[i];
+                     if (item && (item instanceof Array  || typeof item == 
"array" || item instanceof Object))
+                     {
+                       if (!this.equals(item, object2[i]))
+                       {
+                         return false;
+                       }
+                     }
+                     else if (item != object2[i])
+                     {
+                         return false;
+                     }
+                   }
+
+                   return true;
+                 }
+                 else if (object1 instanceof Object)
+                 {
+                   for (propName in object1)
+                   {
+                       if (object1.hasOwnProperty(propName) != 
object2.hasOwnProperty(propName))
+                       {
+                           return false;
+                       }
+                       else if (typeof object1[propName] != typeof 
object2[propName])
+                       {
+                           return false;
+                       }
+                   }
+
+                   for(propName in object2)
+                   {
+                       var object1Prop = object1[propName];
+                       var object2Prop = object2[propName];
+
+                       if (object2.hasOwnProperty(propName) != 
object1.hasOwnProperty(propName))
+                       {
+                           return false;
+                       }
+                       else if (typeof object1Prop != typeof object2Prop)
+                       {
+                           return false;
+                       }
+
+                       if(!object2.hasOwnProperty(propName))
+                       {
+                         // skip functions
+                         continue;
+                       }
+
+                       if (object1Prop && (object1Prop instanceof Array || 
typeof object1Prop == "array" || object1Prop instanceof Object))
+                       {
+                         if (!this.equals(object1Prop, object2Prop))
+                         {
+                           return false;
+                         }
+                       }
+                       else if(object1Prop != object2Prop)
+                       {
+                          return false;
+                       }
+                   }
+                   return true;
+                 }
+               }
+             }
+             return object1 === object2;
            }
 
            return util;



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to