Support ranges
git-svn-id: https://svn.apache.org/repos/asf/maven/sandbox/trunk@1538169 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
index 0e9910e..f5aa0e8 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/AbstractDistCheckMojo.java
@@ -28,6 +28,7 @@
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.URL;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
@@ -38,6 +39,9 @@
import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
import org.apache.maven.artifact.repository.metadata.Metadata;
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.versioning.ArtifactVersion;
+import org.apache.maven.artifact.versioning.DefaultArtifactVersion;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.doxia.sink.Sink;
import org.apache.maven.doxia.siterenderer.Renderer;
import org.apache.maven.plugin.MojoExecutionException;
@@ -195,7 +199,15 @@
// 3 space
if ( line.startsWith( " " ) )
{
- ConfigurationLineInfo aLine = new ConfigurationLineInfo( currentGroup, line.trim().split( " " ) );
+ ConfigurationLineInfo aLine;
+ try
+ {
+ aLine = new ConfigurationLineInfo( currentGroup, line.trim().split( " " ) );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new MojoExecutionException( e.getMessage() );
+ }
if ( useDetailed() )
{
checkArtifact( aLine, getVersion( aLine ) );
@@ -203,7 +215,15 @@
}
else if ( line.startsWith( " " ) )
{
- ConfigurationLineInfo aLine = new ConfigurationLineInfo( currentGroup, line.trim().split( " " ) );
+ ConfigurationLineInfo aLine;
+ try
+ {
+ aLine = new ConfigurationLineInfo( currentGroup, line.trim().split( " " ) );
+ }
+ catch ( InvalidVersionSpecificationException e )
+ {
+ throw new MojoExecutionException( e.getMessage() );
+ }
checkArtifact( aLine, getVersion( aLine ) );
}
@@ -227,10 +247,29 @@
aLine.setMetadata( metadata );
- String version =
- ( aLine.getForcedVersion() == null ) ? metadata.getVersioning().getLatest()
- : aLine.getForcedVersion();
-
+ String version;
+ if ( aLine.getVersionRange() != null )
+ {
+ if ( aLine.getVersionRange().hasRestrictions() )
+ {
+ List<ArtifactVersion> artifactVersions = new ArrayList<>();
+ for ( String versioningVersion : metadata.getVersioning().getVersions() )
+ {
+ artifactVersions.add( new DefaultArtifactVersion( versioningVersion ) );
+ }
+ version = aLine.getVersionRange().matchVersion( artifactVersions ).toString();
+ }
+ else
+ {
+ version = aLine.getVersionRange().getRecommendedVersion().toString();
+ }
+ aLine.setForceVersion( version );
+ }
+ else
+ {
+ version = metadata.getVersioning().getLatest();
+ }
+
if ( getLog().isDebugEnabled() )
{
getLog().debug( "Checking information for artifact: " + aLine.getGroupId() + ":"
diff --git a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java
index 49bba0b..530d187 100644
--- a/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java
+++ b/dist-tools/dist-tool-plugin/src/main/java/org/apache/maven/dist/tools/ConfigurationLineInfo.java
@@ -26,6 +26,8 @@
import java.util.List;
import org.apache.maven.artifact.repository.metadata.Metadata;
+import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
+import org.apache.maven.artifact.versioning.VersionRange;
/**
*
@@ -40,7 +42,9 @@
private final boolean srcBin;
private final String artifactId;
- private final String forceVersion;
+ private final VersionRange versionRange;
+
+ private String forceVersion;
private String indexPageId;
private Metadata metadata;
@@ -51,18 +55,18 @@
this.srcBin = ( infos.length > 2 ) && "src+bin".equals( infos[2] );
this.artifactId = null;
- this.forceVersion = null;
+ this.versionRange = null;
this.indexPageId = null;
}
- public ConfigurationLineInfo( ConfigurationLineInfo group, String[] infos )
+ public ConfigurationLineInfo( ConfigurationLineInfo group, String[] infos ) throws InvalidVersionSpecificationException
{
this.directory = group.getDirectory();
this.groupId = group.getGroupId();
this.srcBin = group.isSrcBin();
this.artifactId = infos[0];
- this.forceVersion = ( infos.length > 1 && !infos[1].startsWith( "IP" ) ) ? infos[1] : null;
+ this.versionRange = ( infos.length > 1 && !infos[1].startsWith( "IP" ) ) ? VersionRange.createFromVersionSpec( infos[1] ) : null;
this.indexPageId = null;
for ( String info : infos )
{
@@ -83,6 +87,16 @@
{
return forceVersion;
}
+
+ public void setForceVersion( String forceVersion )
+ {
+ this.forceVersion = forceVersion;
+ }
+
+ public VersionRange getVersionRange()
+ {
+ return versionRange;
+ }
/**
* @return the groupId