mirror of https://github.com/apache/archiva.git
[MRM-1843] provide mechanism to obtain the latest version of an artifact
Implements LATEST keyword
This commit is contained in:
parent
511858d4ab
commit
b272a1bc2f
|
@ -19,6 +19,7 @@ package org.apache.archiva.rest.services;
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import org.apache.archiva.common.utils.VersionComparator;
|
||||||
import org.apache.archiva.indexer.search.RepositorySearch;
|
import org.apache.archiva.indexer.search.RepositorySearch;
|
||||||
import org.apache.archiva.indexer.search.RepositorySearchException;
|
import org.apache.archiva.indexer.search.RepositorySearchException;
|
||||||
import org.apache.archiva.indexer.search.SearchFields;
|
import org.apache.archiva.indexer.search.SearchFields;
|
||||||
|
@ -43,16 +44,19 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.TreeMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Olivier Lamy
|
* @author Olivier Lamy
|
||||||
*/
|
*/
|
||||||
@Service("searchService#rest")
|
@Service( "searchService#rest" )
|
||||||
public class DefaultSearchService
|
public class DefaultSearchService
|
||||||
extends AbstractRestService
|
extends AbstractRestService
|
||||||
implements SearchService
|
implements SearchService
|
||||||
{
|
{
|
||||||
|
|
||||||
|
private static final String LATEST_KEYWORD = "LATEST";
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private RepositorySearch repositorySearch;
|
private RepositorySearch repositorySearch;
|
||||||
|
|
||||||
|
@ -265,35 +269,14 @@ public class DefaultSearchService
|
||||||
} ).build();
|
} ).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( StringUtils.isEmpty( version ) )
|
|
||||||
{
|
|
||||||
return Response.status( new Response.StatusType()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public int getStatusCode()
|
|
||||||
{
|
|
||||||
return Response.Status.BAD_REQUEST.getStatusCode();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Response.Status.Family getFamily()
|
|
||||||
{
|
|
||||||
return Response.Status.BAD_REQUEST.getFamily();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getReasonPhrase()
|
|
||||||
{
|
|
||||||
return "version mandatory";
|
|
||||||
}
|
|
||||||
} ).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchFields searchField = new SearchFields();
|
SearchFields searchField = new SearchFields();
|
||||||
searchField.setGroupId( groupId );
|
searchField.setGroupId( groupId );
|
||||||
searchField.setArtifactId( artifactId );
|
searchField.setArtifactId( artifactId );
|
||||||
searchField.setPackaging( StringUtils.isBlank( packaging ) ? "jar" : packaging );
|
searchField.setPackaging( StringUtils.isBlank( packaging ) ? "jar" : packaging );
|
||||||
searchField.setVersion( version );
|
if ( !StringUtils.equals( version, LATEST_KEYWORD ) )
|
||||||
|
{
|
||||||
|
searchField.setVersion( version );
|
||||||
|
}
|
||||||
searchField.setClassifier( classifier );
|
searchField.setClassifier( classifier );
|
||||||
List<String> userRepos = getObservablesRepoIds().getStrings();
|
List<String> userRepos = getObservablesRepoIds().getStrings();
|
||||||
searchField.setRepositories(
|
searchField.setRepositories(
|
||||||
|
@ -343,7 +326,7 @@ public class DefaultSearchService
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO return json result of the query ?
|
// TODO return json result of the query ?
|
||||||
if ( artifacts.size() > 1 )
|
if ( artifacts.size() > 1 && !StringUtils.equals( version, LATEST_KEYWORD ) )
|
||||||
{
|
{
|
||||||
return Response.status( new Response.StatusType()
|
return Response.status( new Response.StatusType()
|
||||||
{
|
{
|
||||||
|
@ -367,6 +350,21 @@ public class DefaultSearchService
|
||||||
} ).build();
|
} ).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// version is LATEST so we have to find the latest one from the result
|
||||||
|
if ( artifacts.size() > 1 && StringUtils.equals( version, LATEST_KEYWORD ) )
|
||||||
|
{
|
||||||
|
TreeMap<String, Artifact> artifactPerVersion = new TreeMap<>( VersionComparator.getInstance() );
|
||||||
|
|
||||||
|
for ( Artifact artifact : artifacts )
|
||||||
|
{
|
||||||
|
artifactPerVersion.put( artifact.getVersion(), artifact );
|
||||||
|
}
|
||||||
|
|
||||||
|
return Response.temporaryRedirect(
|
||||||
|
new URI( artifactPerVersion.lastEntry().getValue().getUrl() ) ).build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Artifact artifact = artifacts.get( 0 );
|
Artifact artifact = artifacts.get( 0 );
|
||||||
|
|
||||||
return Response.temporaryRedirect( new URI( artifact.getUrl() ) ).build();
|
return Response.temporaryRedirect( new URI( artifact.getUrl() ) ).build();
|
||||||
|
|
Loading…
Reference in New Issue