import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.rest.api.model.Artifact;
import org.apache.archiva.rest.api.model.BrowseResult;
import org.apache.archiva.rest.api.model.TreeEntry;
import org.apache.archiva.rest.api.model.VersionsList;
@PathParam( "v" ) String version,
@QueryParam( "repositoryId" ) String repositoryId )
throws ArchivaRestServiceException;
+
+ @Path( "dependees/{g}/{a}/{v}" )
+ @GET
+ @Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
+ @RedbackAuthorization( noPermission = true, noRestriction = true )
+ List<Artifact> getDependees( @PathParam( "g" ) String groupId, @PathParam( "a" ) String artifactId,
+ @PathParam( "v" ) String version, @QueryParam( "repositoryId" ) String repositoryId )
+ throws ArchivaRestServiceException;
}
import org.apache.archiva.common.utils.VersionComparator;
import org.apache.archiva.dependency.tree.maven2.DependencyTreeBuilder;
import org.apache.archiva.metadata.model.ProjectVersionMetadata;
+import org.apache.archiva.metadata.model.ProjectVersionReference;
import org.apache.archiva.metadata.repository.MetadataResolutionException;
import org.apache.archiva.metadata.repository.MetadataResolver;
import org.apache.archiva.metadata.repository.RepositorySession;
}
}
+ public List<Artifact> getDependees( String groupId, String artifactId, String version, String repositoryId )
+ throws ArchivaRestServiceException
+ {
+ List<ProjectVersionReference> references = new ArrayList<ProjectVersionReference>();
+ // TODO: what if we get duplicates across repositories?
+ RepositorySession repositorySession = repositorySessionFactory.createSession();
+ try
+ {
+ MetadataResolver metadataResolver = repositorySession.getResolver();
+ for ( String repoId : getObservableRepos() )
+ {
+ // TODO: what about if we want to see this irrespective of version?
+ references.addAll(
+ metadataResolver.resolveProjectReferences( repositorySession, repoId, groupId, artifactId,
+ version ) );
+ }
+ }
+ catch ( MetadataResolutionException e )
+ {
+ throw new ArchivaRestServiceException( e.getMessage(),
+ Response.Status.INTERNAL_SERVER_ERROR.getStatusCode() );
+ }
+ finally
+ {
+ repositorySession.close();
+ }
+
+ List<Artifact> artifacts = new ArrayList<Artifact>( references.size() );
+
+ for ( ProjectVersionReference projectVersionReference : references )
+ {
+ artifacts.add( new Artifact( projectVersionReference.getNamespace(), projectVersionReference.getProjectId(),
+ projectVersionReference.getProjectVersion() ) );
+ }
+ return artifacts;
+ }
+
//---------------------------
// internals
//---------------------------