Author: jdonnerstag
Date: Sat Jan 30 12:45:32 2010
New Revision: 904771

URL: http://svn.apache.org/viewvc?rev=904771&view=rev
Log:
fixed: Page Parameters needs to implement equals
Issue: WICKET-2698

Modified:
    
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/PageParameters.java

Modified: 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/PageParameters.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/PageParameters.java?rev=904771&r1=904770&r2=904771&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/PageParameters.java
 (original)
+++ 
wicket/branches/wicket-1.4.x/wicket/src/main/java/org/apache/wicket/PageParameters.java
 Sat Jan 30 12:45:32 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.wicket;
 
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -200,4 +201,73 @@
                }
                return params;
        }
+
+       /**
+        * 
+        * @see java.util.AbstractMap#equals(java.lang.Object)
+        */
+       @Override
+       public boolean equals(Object o)
+       {
+               if (o == null)
+               {
+                       return false;
+               }
+
+               if (o.getClass() != this.getClass())
+               {
+                       return false;
+               }
+
+               PageParameters other = (PageParameters)o;
+               if (size() != other.size())
+               {
+                       return false;
+               }
+
+               for (String key : keySet())
+               {
+                       Object first = get(key);
+                       Object second = other.get(key);
+
+                       if (first != second)
+                       {
+                               if (first != null && second != null)
+                               {
+                                       Class<?> firstClazz = first.getClass();
+                                       Class<?> secondClazz = 
second.getClass();
+                                       Object[] firstArray;
+                                       Object[] secondArray;
+
+                                       // If both of the objects are arrays or 
atleast one of the them is an array, we
+                                       // can use the Arrays.equals method
+                                       if ((firstClazz.isArray() && 
secondClazz.isArray()) ||
+                                               (firstClazz.isArray() || 
secondClazz.isArray()))
+                                       {
+                                               firstArray = 
!first.getClass().isArray() ? new Object[] { first }
+                                                       : (Object[])first;
+                                               secondArray = 
!second.getClass().isArray() ? new Object[] { second }
+                                                       : (Object[])second;
+                                               if (!Arrays.equals(firstArray, 
secondArray))
+                                               {
+                                                       return false;
+                                               }
+                                       }
+                                       else
+                                       {
+                                               if (!first.equals(second))
+                                               {
+                                                       return false;
+                                               }
+                                       }
+                               }
+                               else
+                               // one of first or second is null
+                               {
+                                       return false;
+                               }
+                       }
+               }
+               return true;
+       }
 }


Reply via email to