Author: brett
Date: Tue Jul 19 02:30:03 2005
New Revision: 219633

URL: http://svn.apache.org/viewcvs?rev=219633&view=rev
Log:
PR: MNG-505
range and soft requirement intersections

Modified:
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
    
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
    
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java?rev=219633&r1=219632&r2=219633&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/Restriction.java
 Tue Jul 19 02:30:03 2005
@@ -60,4 +60,33 @@
     {
         return upperBoundInclusive;
     }
+
+    public boolean containsVersion( ArtifactVersion version )
+    {
+        if ( lowerBound != null )
+        {
+            int comparison = lowerBound.compareTo( version );
+            if ( comparison == 0 && !lowerBoundInclusive )
+            {
+                return false;
+            }
+            if ( comparison > 0 )
+            {
+                return false;
+            }
+        }
+        if ( upperBound != null )
+        {
+            int comparison = upperBound.compareTo( version );
+            if ( comparison == 0 && !upperBoundInclusive )
+            {
+                return false;
+            }
+            if ( comparison < 0 )
+            {
+                return false;
+            }
+        }
+        return true;
+    }
 }

Modified: 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java?rev=219633&r1=219632&r2=219633&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/VersionRange.java
 Tue Jul 19 02:30:03 2005
@@ -18,6 +18,7 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -178,14 +179,47 @@
     {
         ArtifactVersion version = max( recommendedVersion, 
restriction.getRecommendedVersion() );
 
-        // TODO
+        List r1 = this.restrictions;
+        List r2 = restriction.restrictions;
+        List restrictions = Collections.EMPTY_LIST;
+        if ( !r1.isEmpty() || !r2.isEmpty() )
+        {
+            // TODO: amalgamate
+            restrictions = new ArrayList( r1.size() + r2.size() );
+            restrictions.addAll( r1 );
+            restrictions.addAll( r2 );
+
+            boolean found = false;
+            for ( Iterator i = restrictions.iterator(); i.hasNext() && !found; 
)
+            {
+                Restriction r = (Restriction) i.next();
+
+                if ( r.containsVersion( version ) )
+                {
+                    found = true;
+                }
+            }
+
+            if ( !found )
+            {
+                version = null;
+            }
+        }
 
-        return new VersionRange( version, Collections.EMPTY_LIST );
+        return new VersionRange( version, restrictions );
     }
 
     private ArtifactVersion max( ArtifactVersion v1, ArtifactVersion v2 )
     {
-        if ( v1.compareTo( v2 ) > 0 )
+        if ( v1 == null )
+        {
+            return v2;
+        }
+        if ( v2 == null )
+        {
+            return v1;
+        }
+        else if ( v1.compareTo( v2 ) > 0 )
         {
             return v1;
         }

Modified: 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
URL: 
http://svn.apache.org/viewcvs/maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java?rev=219633&r1=219632&r2=219633&view=diff
==============================================================================
--- 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
 (original)
+++ 
maven/components/trunk/maven-artifact/src/test/java/org/apache/maven/artifact/versioning/VersionRangeTest.java
 Tue Jul 19 02:30:03 2005
@@ -135,14 +135,125 @@
     }
 
     public void testIntersections()
+        throws InvalidVersionSpecificationException
     {
-        VersionRange range1 = VersionRange.createFromVersion( "1.0" );
-        VersionRange range2 = VersionRange.createFromVersion( "1.1" );
+        VersionRange range1 = VersionRange.createFromVersionSpec( "1.0" );
+        VersionRange range2 = VersionRange.createFromVersionSpec( "1.1" );
         VersionRange mergedRange = range1.restrict( range2 );
         assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        assertEquals( CHECK_NUM_RESTRICTIONS, 0, 
mergedRange.getRestrictions().size() );
 
         mergedRange = range2.restrict( range1 );
         assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        assertEquals( CHECK_NUM_RESTRICTIONS, 0, 
mergedRange.getRestrictions().size() );
+
+        range1 = VersionRange.createFromVersionSpec( "[1.0,)" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        List restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        Restriction restriction = (Restriction) restrictions.get( 0 );
+        assertEquals( CHECK_LOWER_BOUND, "1.0", 
restriction.getLowerBound().toString() );
+        assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+        assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "[1.1,)" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertEquals( CHECK_LOWER_BOUND, "1.1", 
restriction.getLowerBound().toString() );
+        assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+        assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "[1.1]" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertEquals( CHECK_LOWER_BOUND, "1.1", 
restriction.getLowerBound().toString() );
+        assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertEquals( CHECK_UPPER_BOUND, "1.1", 
restriction.getLowerBound().toString() );
+        assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "(1.1,)" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertNull( CHECK_VERSION_RECOMMENDATION, 
mergedRange.getRecommendedVersion() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertEquals( CHECK_LOWER_BOUND, "1.1", 
restriction.getLowerBound().toString() );
+        assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+        assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "[1.2,)" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertNull( CHECK_VERSION_RECOMMENDATION, 
mergedRange.getRecommendedVersion() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertEquals( CHECK_LOWER_BOUND, "1.2", 
restriction.getLowerBound().toString() );
+        assertTrue( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertNull( CHECK_UPPER_BOUND, restriction.getUpperBound() );
+        assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "(,1.2]" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+        assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertEquals( CHECK_UPPER_BOUND, "1.2", 
restriction.getUpperBound().toString() );
+        assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "(,1.1]" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertEquals( CHECK_VERSION_RECOMMENDATION, "1.1", 
mergedRange.getRecommendedVersion().toString() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+        assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertEquals( CHECK_UPPER_BOUND, "1.1", 
restriction.getUpperBound().toString() );
+        assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "(,1.1)" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertNull( CHECK_VERSION_RECOMMENDATION, 
mergedRange.getRecommendedVersion() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+        assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertEquals( CHECK_UPPER_BOUND, "1.1", 
restriction.getUpperBound().toString() );
+        assertFalse( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
+
+        range1 = VersionRange.createFromVersionSpec( "(,1.0]" );
+        range2 = VersionRange.createFromVersionSpec( "1.1" );
+        mergedRange = range1.restrict( range2 );
+        assertNull( CHECK_VERSION_RECOMMENDATION, 
mergedRange.getRecommendedVersion() );
+        restrictions = mergedRange.getRestrictions();
+        assertEquals( CHECK_NUM_RESTRICTIONS, 1, restrictions.size() );
+        restriction = (Restriction) restrictions.get( 0 );
+        assertNull( CHECK_LOWER_BOUND, restriction.getLowerBound() );
+        assertFalse( CHECK_LOWER_BOUND_INCLUSIVE, 
restriction.isLowerBoundInclusive() );
+        assertEquals( CHECK_UPPER_BOUND, "1.0", 
restriction.getUpperBound().toString() );
+        assertTrue( CHECK_UPPER_BOUND_INCLUSIVE, 
restriction.isUpperBoundInclusive() );
     }
 
     private void checkInvalidRange( String version )



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to