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 )