You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2008/08/16 04:48:51 UTC

svn commit: r686439 - in /maven/sandbox/trunk/mercury: mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/ mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ mercury-artifact/src/test/java/org/apache/maven/mercury/a...

Author: ogusakov
Date: Fri Aug 15 19:48:50 2008
New Revision: 686439

URL: http://svn.apache.org/viewvc?rev=686439&view=rev
Log:
added flexible upper boundary to version ranges

Added:
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Quality.java
Modified:
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/QualityEnum.java
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ArtifactVersion.java
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ComparableVersion.java
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java
    maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java
    maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/version/VersionRangeTest.java
    maven/sandbox/trunk/mercury/mercury-pom/pom.xml
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java
    maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java

Added: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Messages.properties?rev=686439&view=auto
==============================================================================
    (empty)

Added: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Quality.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Quality.java?rev=686439&view=auto
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Quality.java (added)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/Quality.java Fri Aug 15 19:48:50 2008
@@ -0,0 +1,140 @@
+package org.apache.maven.mercury.artifact;
+
+import org.codehaus.plexus.i18n.DefaultLanguage;
+import org.codehaus.plexus.i18n.Language;
+
+/**
+ *
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class Quality
+implements Comparable<Quality>
+{
+  public static final int DEFAULT_QUANTITY = 0;
+  public static final int SNAPSHOT_TS_QUANTITY = 1;
+
+  public static final Quality UNKNOWN_QUALITY = new Quality( QualityEnum.unknown, -1 );
+  public static final Quality SNAPSHOT_QUALITY = new Quality( QualityEnum.snapshot, DEFAULT_QUANTITY );
+  public static final Quality SNAPSHOT_TS_QUALITY = new Quality( QualityEnum.snapshot, SNAPSHOT_TS_QUANTITY );
+  public static final Quality ALPHA_QUALITY = new Quality( QualityEnum.alpha, DEFAULT_QUANTITY );
+  public static final Quality BETA_QUALITY = new Quality( QualityEnum.beta, DEFAULT_QUANTITY );
+  public static final Quality RELEASE_QUALITY = new Quality( QualityEnum.release, DEFAULT_QUANTITY );
+  
+  private static final String snExp    = ".+-(SNAPSHOT|\\d{8}\\.\\d{6}-\\d+)";
+  private static final String alphaExp = ".+-alpha-\\d+";
+  private static final String betaExp  = ".+-beta-\\d+";
+
+  protected QualityEnum quality;
+  protected int quantity;
+  
+  public Quality( QualityEnum quality, int quantity )
+  {
+    this.quality = quality;;
+    this.quantity = quantity;
+  }
+  
+  public Quality( String version )
+  {
+    if( version == null || version.length() < 1 )
+    {
+      quality = QualityEnum.unknown;
+      quantity = -1;
+    }
+    
+    if( version.matches( snExp ) )
+    {
+      quality = QualityEnum.snapshot;
+      if( version.endsWith( Artifact.SNAPSHOT_VERSION ) )
+        quantity = DEFAULT_QUANTITY;
+      else
+        quantity = SNAPSHOT_TS_QUANTITY;
+      return;
+    }
+    
+    if( version.matches( alphaExp ) )
+    {
+      quality = QualityEnum.alpha;
+      quantity = Integer.parseInt( version.substring( version.lastIndexOf( '-' )+1 ) );
+      return;
+    }
+    
+    if( version.matches( betaExp ) )
+    {
+      quality = QualityEnum.beta;
+      quantity = Integer.parseInt( version.substring( version.lastIndexOf( '-' )+1 ) );
+      return;
+    }
+    
+    quality = QualityEnum.release;
+    quantity = DEFAULT_QUANTITY;
+    
+  }
+  
+  public int compareTo( Quality q )
+  {
+    if( q == null )
+      return quality == null ? 0 : 1;
+    
+    int ql1 = (quality == null ? QualityEnum.unknown : quality).getId();
+    int ql2 = (q.quality == null ? QualityEnum.unknown : q.quality).getId();
+    
+    if( ql1 == ql2 )
+    {
+      // snapshots are always equal
+      if( ql1 == QualityEnum.snapshot.getId() )
+        return 0;
+      else
+        return quantity - q.quantity;
+    }
+    
+    // unknown is less'n anyone
+//    if( ql1 == QualityEnum.unknown.getId() )
+//      return -1;
+
+    return sign(ql1 - ql2);
+  }
+  
+  private int sign( int i )
+  {
+    return i<0 ? -1: i == 0 ? 0 : 1;
+  }
+  
+  @Override
+  public boolean equals( Object obj )
+  {
+    if( obj == null )
+    {
+      return false;
+    }
+    if( obj.getClass().isAssignableFrom( Quality.class ))
+      return this.compareTo( (Quality)obj ) == 0;
+    else if( obj.getClass().isAssignableFrom( QualityEnum.class ))
+            return this.compareTo( (QualityEnum)obj ) == 0;
+    
+    return super.equals( obj );
+  }
+
+  public int compareTo( QualityEnum qe )
+  {
+    if( qe == null )
+      return quality == null ? 0 : 1;
+    
+    int ql1 = (quality == null ? QualityEnum.unknown : quality).getId();
+    
+    return sign(ql1 - qe.getId());
+  }
+
+  public QualityEnum getQuality()
+  {
+    return quality;
+  }
+
+  public int getQuantity()
+  {
+    return quantity;
+  }
+
+}

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/QualityEnum.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/QualityEnum.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/QualityEnum.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/QualityEnum.java Fri Aug 15 19:48:50 2008
@@ -9,13 +9,14 @@
  */
 public enum QualityEnum
 {
-  snapshot(1)
+    unknown(-1)
+  , snapshot(1)
   , alpha(2)
   , beta(3)
   , release(10)
   ;
 
-  public static final QualityEnum DEFAULT_QUALITY = snapshot;
+  public static final QualityEnum DEFAULT_QUALITY = unknown;
 
   private int id;
 
@@ -29,5 +30,5 @@
   {
       return id;
   }
-  
+
 }

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ArtifactVersion.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ArtifactVersion.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ArtifactVersion.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ArtifactVersion.java Fri Aug 15 19:48:50 2008
@@ -1,5 +1,7 @@
 package org.apache.maven.mercury.artifact.version;
 
+import org.apache.maven.mercury.artifact.Quality;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -31,4 +33,6 @@
     int getBuildNumber();
 
     String getQualifier();
+    
+    Quality getQuality();
 }

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ComparableVersion.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ComparableVersion.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ComparableVersion.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/ComparableVersion.java Fri Aug 15 19:48:50 2008
@@ -260,6 +260,7 @@
                 Item first = (Item) get( 0 );
                 return first.compareTo( null );
             }
+
             switch ( item.getType() )
             {
                 case INTEGER_ITEM:

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/DefaultArtifactVersion.java Fri Aug 15 19:48:50 2008
@@ -17,6 +17,9 @@
 
 import java.util.StringTokenizer;
 
+import org.apache.maven.mercury.artifact.Quality;
+
+
 /*
  * Default implementation of artifact versioning.
  * 
@@ -27,195 +30,238 @@
 public class DefaultArtifactVersion
     implements ArtifactVersion
 {
-    private Integer majorVersion;
-
-    private Integer minorVersion;
-
-    private Integer incrementalVersion;
-
-    private Integer buildNumber;
-
-    private String qualifier;
-
-    private ComparableVersion comparable;
-
-    public DefaultArtifactVersion( String version )
-    {
-        parseVersion( version );
-    }
-
-    @Override
-    public int hashCode()
-    {
-        return 11 + comparable.hashCode();
-    }
-
-    @Override
-    public boolean equals( Object other )
-    {
-        return compareTo( other ) == 0;
-    }
-
-    public int compareTo( Object o )
-    {
-        DefaultArtifactVersion otherVersion = (DefaultArtifactVersion) o;
-        return this.comparable.compareTo( otherVersion.comparable );
-    }
-
-    public int getMajorVersion()
-    {
-        return majorVersion != null ? majorVersion : 0;
-    }
-
-    public int getMinorVersion()
-    {
-        return minorVersion != null ? minorVersion : 0;
-    }
-
-    public int getIncrementalVersion()
-    {
-        return incrementalVersion != null ? incrementalVersion : 0;
-    }
-
-    public int getBuildNumber()
-    {
-        return buildNumber != null ? buildNumber : 0;
-    }
-
-    public String getQualifier()
-    {
-        return qualifier;
-    }
-
-    public final void parseVersion( String version )
-    {
-        comparable = new ComparableVersion( version );
-
-        int index = version.indexOf( "-" );
-
-        String part1;
-        String part2 = null;
-
-        if ( index < 0 )
-        {
-            part1 = version;
-        }
-        else
-        {
-            part1 = version.substring( 0, index );
-            part2 = version.substring( index + 1 );
-        }
-
-        if ( part2 != null )
-        {
-            try
-            {
-                if ( ( part2.length() == 1 ) || !part2.startsWith( "0" ) )
-                {
-                    buildNumber = Integer.valueOf( part2 );
-                }
-                else
-                {
-                    qualifier = part2;
-                }
-            }
-            catch ( NumberFormatException e )
-            {
-                qualifier = part2;
-            }
-        }
-
-        if ( ( part1.indexOf( "." ) < 0 ) && !part1.startsWith( "0" ) )
-        {
-            try
-            {
-                majorVersion = Integer.valueOf( part1 );
-            }
-            catch ( NumberFormatException e )
-            {
-                // qualifier is the whole version, including "-"
-                qualifier = version;
-                buildNumber = null;
-            }
-        }
+  private String version;
+  
+  private Integer majorVersion;
+
+  private Integer minorVersion;
+
+  private Integer incrementalVersion;
+
+  private Integer buildNumber;
+
+  private String base;
+
+  private String qualifier;
+
+  private ComparableVersion comparable;
+  
+  private Quality quality = Quality.UNKNOWN_QUALITY;
+
+  public DefaultArtifactVersion( String version )
+  {
+    this.version = version;
+    parseVersion( version );
+    parseQuality( version );
+  }
+  
+  public String getBase()
+  {
+    return base;
+  }
+  
+  public boolean sameBase( DefaultArtifactVersion v )
+  {
+    return base.equals( v.base );
+  }
+  
+  public boolean sameBase( String vs )
+  {
+    DefaultArtifactVersion v = new DefaultArtifactVersion(vs);
+    return base.equals( v.base );
+  }
+
+  @Override
+  public int hashCode()
+  {
+    return 11 + comparable.hashCode();
+  }
+
+  @Override
+  public boolean equals( Object other )
+  {
+      return compareTo( other ) == 0;
+  }
+
+  public int compareTo( Object o )
+  {
+      DefaultArtifactVersion otherVersion = (DefaultArtifactVersion) o;
+      return this.comparable.compareTo( otherVersion.comparable );
+  }
+
+  public int getMajorVersion()
+  {
+      return majorVersion != null ? majorVersion : 0;
+  }
+
+  public int getMinorVersion()
+  {
+      return minorVersion != null ? minorVersion : 0;
+  }
+
+  public int getIncrementalVersion()
+  {
+      return incrementalVersion != null ? incrementalVersion : 0;
+  }
+
+  public int getBuildNumber()
+  {
+      return buildNumber != null ? buildNumber : 0;
+  }
+
+  public String getQualifier()
+  {
+      return qualifier;
+  }
+
+  public final void parseVersion( String version )
+  {
+      comparable = new ComparableVersion( version );
+
+      int index = version.indexOf( "-" );
+
+      String part1;
+      String part2 = null;
+
+      if ( index < 0 )
+      {
+          part1 = version;
+      }
+      else
+      {
+          part1 = version.substring( 0, index );
+          part2 = version.substring( index + 1 );
+      }
+
+      if ( part2 != null )
+      {
+          try
+          {
+              if ( ( part2.length() == 1 ) || !part2.startsWith( "0" ) )
+              {
+                  buildNumber = Integer.valueOf( part2 );
+              }
+              else
+              {
+                  qualifier = part2;
+              }
+          }
+          catch ( NumberFormatException e )
+          {
+              qualifier = part2;
+          }
+      }
+
+      if ( ( part1.indexOf( "." ) < 0 ) && !part1.startsWith( "0" ) )
+      {
+          try
+          {
+              majorVersion = Integer.valueOf( part1 );
+          }
+          catch ( NumberFormatException e )
+          {
+              // qualifier is the whole version, including "-"
+              qualifier = version;
+              buildNumber = null;
+          }
+      }
+      else
+      {
+          boolean fallback = false;
+          StringTokenizer tok = new StringTokenizer( part1, "." );
+          try
+          {
+              majorVersion = getNextIntegerToken( tok );
+              if ( tok.hasMoreTokens() )
+              {
+                  minorVersion = getNextIntegerToken( tok );
+              }
+              if ( tok.hasMoreTokens() )
+              {
+                  incrementalVersion = getNextIntegerToken( tok );
+              }
+              if ( tok.hasMoreTokens() )
+              {
+                  fallback = true;
+              }
+          }
+          catch ( NumberFormatException e )
+          {
+              fallback = true;
+          }
+
+          if ( fallback )
+          {
+              // qualifier is the whole version, including "-"
+              qualifier = version;
+              base = "";
+              majorVersion = null;
+              minorVersion = null;
+              incrementalVersion = null;
+              buildNumber = null;
+          }
+      }
+
+      if( base == null )
+      {
+        if( qualifier == null )
+          base = version;
         else
-        {
-            boolean fallback = false;
-            StringTokenizer tok = new StringTokenizer( part1, "." );
-            try
-            {
-                majorVersion = getNextIntegerToken( tok );
-                if ( tok.hasMoreTokens() )
-                {
-                    minorVersion = getNextIntegerToken( tok );
-                }
-                if ( tok.hasMoreTokens() )
-                {
-                    incrementalVersion = getNextIntegerToken( tok );
-                }
-                if ( tok.hasMoreTokens() )
-                {
-                    fallback = true;
-                }
-            }
-            catch ( NumberFormatException e )
-            {
-                fallback = true;
-            }
-
-            if ( fallback )
-            {
-                // qualifier is the whole version, including "-"
-                qualifier = version;
-                majorVersion = null;
-                minorVersion = null;
-                incrementalVersion = null;
-                buildNumber = null;
-            }
-        }
-    }
-
-    private static Integer getNextIntegerToken( StringTokenizer tok )
-    {
-        String s = tok.nextToken();
-        if ( ( s.length() > 1 ) && s.startsWith( "0" ) )
-        {
-            throw new NumberFormatException( "Number part has a leading 0: '" + s + "'" );
-        }
-        return Integer.valueOf( s );
-    }
-
-    @Override
-    public String toString()
-    {
-        StringBuffer buf = new StringBuffer();
-        if ( majorVersion != null )
-        {
-            buf.append( majorVersion );
-        }
-        if ( minorVersion != null )
-        {
-            buf.append( "." );
-            buf.append( minorVersion );
-        }
-        if ( incrementalVersion != null )
-        {
-            buf.append( "." );
-            buf.append( incrementalVersion );
-        }
-        if ( buildNumber != null )
-        {
-            buf.append( "-" );
-            buf.append( buildNumber );
-        }
-        else if ( qualifier != null )
-        {
-            if ( buf.length() > 0 )
-            {
-                buf.append( "-" );
-            }
-            buf.append( qualifier );
-        }
-        return buf.toString();
-    }
+          base = version.substring( 0, version.indexOf( qualifier )-1 );
+      }
+  }
+
+  private static Integer getNextIntegerToken( StringTokenizer tok )
+  {
+      String s = tok.nextToken();
+      if ( ( s.length() > 1 ) && s.startsWith( "0" ) )
+      {
+          throw new NumberFormatException( "Number part has a leading 0: '" + s + "'" );
+      }
+      return Integer.valueOf( s );
+  }
+  
+  private void parseQuality( String version )
+  {
+    quality = new Quality( version );
+  }
+
+  @Override
+  public String toString()
+  {
+      StringBuffer buf = new StringBuffer();
+      if ( majorVersion != null )
+      {
+          buf.append( majorVersion );
+      }
+      if ( minorVersion != null )
+      {
+          buf.append( "." );
+          buf.append( minorVersion );
+      }
+      if ( incrementalVersion != null )
+      {
+          buf.append( "." );
+          buf.append( incrementalVersion );
+      }
+      if ( buildNumber != null )
+      {
+          buf.append( "-" );
+          buf.append( buildNumber );
+      }
+      else if ( qualifier != null )
+      {
+          if ( buf.length() > 0 )
+          {
+              buf.append( "-" );
+          }
+          buf.append( qualifier );
+      }
+      return buf.toString();
+  }
+  
+  public Quality getQuality()
+  {
+    return quality;
+  }
 }

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/main/java/org/apache/maven/mercury/artifact/version/VersionRange.java Fri Aug 15 19:48:50 2008
@@ -1,6 +1,7 @@
 package org.apache.maven.mercury.artifact.version;
 
 import org.apache.maven.mercury.artifact.Artifact;
+import org.apache.maven.mercury.artifact.QualityRange;
 
 /**
  * Single range implementation, similar to OSGi specification:
@@ -18,6 +19,8 @@
 {
   private static final DefaultArtifactVersion ZERO_VERSION = new DefaultArtifactVersion("0.0.0");
   
+  QualityRange _toQualityRange = QualityRange.ALL;
+  
   DefaultArtifactVersion _fromVersion = ZERO_VERSION;
   boolean _fromInclusive = true;
   
@@ -87,6 +90,11 @@
     }
   }
   //--------------------------------------------------------------------------------------------
+  public void setToQualityRange( QualityRange qRange )
+  {
+    this._toQualityRange = qRange;
+  }
+  //--------------------------------------------------------------------------------------------
   private void checkForValidCharacters( String v )
   throws VersionException
   {
@@ -133,7 +141,15 @@
     int cmp2 = ver.compareTo( _toVersion );
     
     if( cmp2 < 0 )
+    {
+      if( ver.sameBase( _toVersion ) )
+      {
+        if( _toQualityRange.isAcceptedQuality( ver.getQuality() ) )
+          return true;
+        return false;
+      }
       return true;
+    }
     
     if( cmp2 == 0 )
       return _toInclusive;

Modified: maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/version/VersionRangeTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/version/VersionRangeTest.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/version/VersionRangeTest.java (original)
+++ maven/sandbox/trunk/mercury/mercury-artifact/src/test/java/org/apache/maven/mercury/artifact/version/VersionRangeTest.java Fri Aug 15 19:48:50 2008
@@ -1,5 +1,8 @@
 package org.apache.maven.mercury.artifact.version;
 
+import org.apache.maven.mercury.artifact.Quality;
+import org.apache.maven.mercury.artifact.QualityRange;
+
 import junit.framework.TestCase;
 
 /**
@@ -53,7 +56,7 @@
     assertFalse( "1.0.0.1.2.1-alpha-1 does match the range "+rangeS, range.includes( "1.0.0.1.2.1-alpha-1" ) );
     assertTrue(  "1.0.0.1.2.2-alpha-1 does not match the range "+rangeS, range.includes( "1.0.0.1.2.2-alpha-1" ) );
   }
- 
+  
   public void testAlphaNumeric()
   throws VersionException
   {
@@ -62,5 +65,47 @@
 
     assertFalse( "1.0.0.0.9 does match the range "+rangeS, range.includes( "1.0.0.0.9" ) );
   }
+  
+  public void testEdge()
+  throws VersionException
+  {
+    String rangeS = "[1.0,2.0)";
+    range = new VersionRange( rangeS );
+
+    assertFalse( range.includes( "1.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "1.1-SNAPSHOT" ) );
+    assertTrue( range.includes( "2.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "2.0-alpha-1" ) );
+    assertFalse( range.includes( "2.0" ) );
+  }
+  
+  public void testBetaEdge()
+  throws VersionException
+  {
+    String rangeS = "[1.0,2.0)";
+    range = new VersionRange( rangeS );
+    range.setToQualityRange( new QualityRange( Quality.BETA_QUALITY, true, Quality.RELEASE_QUALITY, true  ) );
+
+    assertFalse( range.includes( "1.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "1.1-SNAPSHOT" ) );
+    assertFalse( range.includes( "2.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "2.0-beta-1" ) );
+    assertFalse( range.includes( "2.0" ) );
+  }
+  
+  public void testAlphaEdge()
+  throws VersionException
+  {
+    String rangeS = "[1.0,2.0)";
+    range = new VersionRange( rangeS );
+    range.setToQualityRange( new QualityRange( Quality.ALPHA_QUALITY, true, Quality.RELEASE_QUALITY, true  ) );
+
+    assertFalse( range.includes( "1.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "1.1-SNAPSHOT" ) );
+    assertFalse( range.includes( "2.0-SNAPSHOT" ) );
+    assertTrue( range.includes( "2.0-alpha-35" ) );
+    assertTrue( range.includes( "2.0-beta-1" ) );
+    assertFalse( range.includes( "2.0" ) );
+  }
 
 }

Modified: maven/sandbox/trunk/mercury/mercury-pom/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-pom/pom.xml?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-pom/pom.xml (original)
+++ maven/sandbox/trunk/mercury/mercury-pom/pom.xml Fri Aug 15 19:48:50 2008
@@ -269,10 +269,11 @@
     	<artifactId>slf4j-simple</artifactId>
     	<version>1.5.2</version>
     </dependency>
+    
     <dependency>
     	<groupId>org.codehaus.plexus</groupId>
     	<artifactId>plexus-i18n</artifactId>
-    	<version>1.0-beta-10-SNAPSHOT</version>
+    	<version>1.0-beta-10</version>
     </dependency>
   </dependencies>
 

Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java Fri Aug 15 19:48:50 2008
@@ -5,7 +5,9 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.maven.mercury.artifact.Quality;
 import org.apache.maven.mercury.artifact.QualityEnum;
+import org.apache.maven.mercury.artifact.QualityRange;
 import org.apache.maven.mercury.builder.api.MetadataProcessor;
 import org.codehaus.plexus.i18n.DefaultLanguage;
 import org.codehaus.plexus.i18n.Language;
@@ -55,11 +57,8 @@
   //---------------------------------------------------------------------------
   protected String             type = DEFAULT_REPOSITORY_TYPE;
   
-  protected boolean snapshots;
-  protected Set<Integer>  alpha;
-  protected Set<Integer>  beta;
-  protected boolean releases;
-  
+  protected QualityRange       qualityRange = QualityRange.ALL;
+
   protected RepositoryReader   reader;
   protected RepositoryWriter   writer;
   //---------------------------------------------------------------------------
@@ -173,17 +172,17 @@
   //---------------------------------------------------------------------------
   public boolean isSnapshots()
   {
-    return snapshots;
+    return qualityRange.isAcceptedQuality( Quality.SNAPSHOT_QUALITY );
   }
   //---------------------------------------------------------------------------
   public boolean isReleases()
   {
-    return releases;
+    return qualityRange.isAcceptedQuality( Quality.RELEASE_QUALITY );
   }
   //---------------------------------------------------------------------------
-  public boolean isAccepted(QualityEnum quality, int quantity )
+  public boolean isAcceptedQuality( Quality quality )
   {
-    return releases;
+    return qualityRange.isAcceptedQuality( quality );
   }
   //---------------------------------------------------------------------------
   //---------------------------------------------------------------------------

Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java Fri Aug 15 19:48:50 2008
@@ -1,5 +1,6 @@
 package org.apache.maven.mercury.repository.api;
 
+import org.apache.maven.mercury.artifact.Quality;
 import org.apache.maven.mercury.artifact.QualityEnum;
 import org.apache.maven.mercury.builder.api.MetadataProcessor;
 
@@ -61,7 +62,7 @@
   /**
    * reserved
    */
-  public boolean isAccepted( QualityEnum quality, int quantity );
+  public boolean isAcceptedQuality( Quality quality );
   
     /**
      * get default reader, if any

Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java?rev=686439&r1=686438&r2=686439&view=diff
==============================================================================
--- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java (original)
+++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java Fri Aug 15 19:48:50 2008
@@ -10,6 +10,7 @@
 import org.apache.maven.mercury.artifact.ArtifactBasicMetadata;
 import org.apache.maven.mercury.artifact.ArtifactMetadata;
 import org.apache.maven.mercury.artifact.DefaultArtifact;
+import org.apache.maven.mercury.artifact.Quality;
 import org.apache.maven.mercury.artifact.version.VersionException;
 import org.apache.maven.mercury.artifact.version.VersionRange;
 import org.apache.maven.mercury.builder.api.MetadataProcessingException;
@@ -143,9 +144,8 @@
    * direct disk search, no redirects, first attempt
    */
   public Map<ArtifactBasicMetadata, RepositoryOperationResult<ArtifactBasicMetadata>>
-  readVersions( List<? extends ArtifactBasicMetadata> query )
-      throws RepositoryException,
-      IllegalArgumentException
+                                      readVersions( List<? extends ArtifactBasicMetadata> query )
+  throws RepositoryException, IllegalArgumentException
   {
     if( query == null || query.size() < 1 )
       return null;
@@ -178,6 +178,12 @@
         if( !vf.isDirectory() )
           continue;
         
+        String version = vf.getName();
+        
+        Quality q = new Quality( version );
+        if( ! _repo.isAcceptedQuality( q ) )
+          continue;
+        
         if( !versionQuery.includes(  vf.getName() )  )
           continue;