Author: hboutemy
Date: Mon May  5 13:27:07 2008
New Revision: 653584

URL: http://svn.apache.org/viewvc?rev=653584&view=rev
Log:
wrote equals() and hashCode()

Modified:
    
maven/artifact/branches/MNG-3010/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
    
maven/artifact/branches/MNG-3010/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java

Modified: 
maven/artifact/branches/MNG-3010/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
URL: 
http://svn.apache.org/viewvc/maven/artifact/branches/MNG-3010/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java?rev=653584&r1=653583&r2=653584&view=diff
==============================================================================
--- 
maven/artifact/branches/MNG-3010/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
 (original)
+++ 
maven/artifact/branches/MNG-3010/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java
 Mon May  5 13:27:07 2008
@@ -26,6 +26,7 @@
 import java.util.ListIterator;
 import java.util.Properties;
 import java.util.Locale;
+import java.util.Stack;
 
 /**
  * Generic implementation of version comparison.
@@ -37,11 +38,10 @@
 public class ComparableVersion
     implements Comparable
 {
-
-    // FIXME: Implement equals() and hashCode()
-
     private String value;
 
+    private String canonical = "";
+
     private ListItem items = new ListItem();
 
     private interface Item
@@ -135,7 +135,7 @@
 
         public StringItem( String value )
         {
-            this.value = value;
+            this.value = ALIASES.getProperty( value , value );
         }
 
         public int getType()
@@ -163,8 +163,6 @@
          */
         public static Comparable comparableQualifier( String qualifier )
         {
-            qualifier = ALIASES.getProperty( qualifier, qualifier );
-
             int i = _QUALIFIERS.indexOf( qualifier );
 
             return i == -1 ? _QUALIFIERS.size() + "-" + qualifier : 
String.valueOf( i );
@@ -306,6 +304,9 @@
 
         ListItem list = items;
 
+        Stack stack = new Stack();
+        stack.push( list );
+
         boolean isDigit = false;
 
         int startIndex = 0;
@@ -347,6 +348,8 @@
                         // new ListItem only if previous were digits and new 
char is a digit,
                         // ie need to differentiate only 1.1 from 1-1
                         list.add( list = new ListItem() );
+
+                        stack.push( list );
                     }
                 }
             }
@@ -377,7 +380,13 @@
             list.add( parseItem( isDigit, version.substring( startIndex ) ) );
         }
 
-        list.normalize();
+        while ( !stack.isEmpty() )
+        {
+            list = (ListItem) stack.pop();
+            list.normalize();
+        }
+
+        canonical = items.toString();
     }
 
     private static Item parseItem( boolean isDigit, String buf )
@@ -394,4 +403,14 @@
     {
         return value;
     }
+
+    public boolean equals( Object o )
+    {
+        return ( o instanceof ComparableVersion ) && canonical.equals( ( ( 
ComparableVersion )o ).canonical );
+    }
+
+    public int hashCode()
+    {
+        return canonical.hashCode();
+    }
 }

Modified: 
maven/artifact/branches/MNG-3010/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
URL: 
http://svn.apache.org/viewvc/maven/artifact/branches/MNG-3010/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java?rev=653584&r1=653583&r2=653584&view=diff
==============================================================================
--- 
maven/artifact/branches/MNG-3010/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
 (original)
+++ 
maven/artifact/branches/MNG-3010/src/test/java/org/apache/maven/artifact/versioning/ComparableVersionTest.java
 Mon May  5 13:27:07 2008
@@ -73,6 +73,9 @@
         Comparable c2 = newComparable( v2 );
         assertTrue( "expected " + v1 + " == " + v2, c1.compareTo( c2 ) == 0 );
         assertTrue( "expected " + v2 + " == " + v1, c2.compareTo( c1 ) == 0 );
+        assertTrue( "expected same hashcode for " + v1 + " and " + v2, 
c1.hashCode() == c2.hashCode() );
+        assertTrue( "expected " + v1 + ".equals( " + v2 + " )", c1.equals( c2 
) );
+        assertTrue( "expected " + v2 + ".equals( " + v1 + " )", c2.equals( c1 
) );
     }
 
     private void checkVersionsOrder( String v1, String v2 )


Reply via email to