From fce624a1fe91b93d0170c68e5984426623ad3d83 Mon Sep 17 00:00:00 2001 From: Olivier Lamy Date: Sat, 19 May 2012 10:43:26 +0000 Subject: [PATCH] move internal class oArtifactDownloadInfo to rest api to have a reusable class git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1340411 13f79535-47bb-0310-9956-ffa450edef68 --- .../web/action/ShowArtifactAction.java | 166 ++++-------------- 1 file changed, 30 insertions(+), 136 deletions(-) diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/ShowArtifactAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/ShowArtifactAction.java index cb9ef9ee5..c1563d7f8 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/ShowArtifactAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/archiva/web/action/ShowArtifactAction.java @@ -32,20 +32,18 @@ import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.MetadataResolutionException; import org.apache.archiva.metadata.repository.MetadataResolver; import org.apache.archiva.metadata.repository.RepositorySession; -import org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet; -import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.reports.RepositoryProblemFacet; -import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.RepositoryContentFactory; import org.apache.archiva.repository.RepositoryException; +import org.apache.archiva.repository.RepositoryNotFoundException; +import org.apache.archiva.rest.api.model.ArtifactDownloadInfo; +import org.apache.archiva.rest.services.utils.ArtifactDownloadInfoBuilder; import org.apache.commons.lang.StringUtils; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import javax.inject.Inject; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -53,7 +51,6 @@ import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; -import java.util.Locale; import java.util.Map; /** @@ -120,13 +117,22 @@ public class ShowArtifactAction { return handleArtifact( repositorySession ); } + catch ( Exception e ) + { + log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e ); + addActionError( "Unable to getProjectVersionMetadata - consult application logs." ); + return ERROR; + } finally + { repositorySession.close(); } + } private String handleArtifact( RepositorySession session ) + throws RepositoryNotFoundException, RepositoryException { // In the future, this should be replaced by the repository grouping mechanism, so that we are only making // simple resource requests here and letting the resolver take care of it @@ -149,6 +155,7 @@ public class ShowArtifactAction } private ProjectVersionMetadata getProjectVersionMetadata( RepositorySession session ) + throws RepositoryNotFoundException, RepositoryException { ProjectVersionMetadata versionMetadata = null; artifacts = new LinkedHashMap>(); @@ -223,7 +230,10 @@ public class ShowArtifactAction l = new ArrayList(); this.artifacts.put( artifact.getVersion(), l ); } - l.add( new ArtifactDownloadInfo( artifact ) ); + ArtifactDownloadInfoBuilder builder = new ArtifactDownloadInfoBuilder().forArtifactMetadata( + artifact ).withManagedRepositoryContent( + repositoryFactory.getManagedRepositoryContent( repositoryId ) ); + l.add( builder.build() ); } } } @@ -390,6 +400,12 @@ public class ShowArtifactAction // TODO: why re-retrieve? projectMetadata = getProjectVersionMetadata( repositorySession ); } + catch ( Exception e ) + { + log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e ); + addActionError( "Unable to getProjectVersionMetadata - consult application logs." ); + return ERROR; + } finally { repositorySession.close(); @@ -459,6 +475,13 @@ public class ShowArtifactAction return ERROR; } } + catch ( Exception e ) + { + log.warn( "Unable to getProjectVersionMetadata: " + e.getMessage(), e ); + addActionError( "Unable to getProjectVersionMetadata - consult application logs." ); + return ERROR; + + } finally { repositorySession.close(); @@ -612,134 +635,5 @@ public class ShowArtifactAction this.repositoryFactory = repositoryFactory; } - // TODO: move this into the artifact metadata itself via facets where necessary - - public class ArtifactDownloadInfo - { - private String type; - - private String namespace; - - private String project; - - private String size; - - private String id; - - private String repositoryId; - - private String version; - - private String path; - - private String classifier; - - public ArtifactDownloadInfo( ArtifactMetadata artifact ) - { - repositoryId = artifact.getRepositoryId(); - - // TODO: use metadata resolver capability instead - maybe the storage path could be stored in the metadata - // though keep in mind the request may not necessarily need to reflect the storage - ManagedRepositoryContent repo; - try - { - repo = repositoryFactory.getManagedRepositoryContent( repositoryId ); - } - catch ( RepositoryException e ) - { - throw new RuntimeException( e ); - } - - ArtifactReference ref = new ArtifactReference(); - ref.setArtifactId( artifact.getProject() ); - ref.setGroupId( artifact.getNamespace() ); - ref.setVersion( artifact.getVersion() ); - path = repo.toPath( ref ); - path = path.substring( 0, path.lastIndexOf( "/" ) + 1 ) + artifact.getId(); - - // TODO: need to accommodate Maven 1 layout too. Non-maven repository formats will need to generate this - // facet (perhaps on the fly) if wanting to display the Maven 2 elements on the Archiva pages - String type = null; - MavenArtifactFacet facet = (MavenArtifactFacet) artifact.getFacet( MavenArtifactFacet.FACET_ID ); - if ( facet != null ) - { - this.type = facet.getType(); - this.classifier = facet.getClassifier(); - } - - namespace = artifact.getNamespace(); - project = artifact.getProject(); - - // TODO: find a reusable formatter for this - double s = artifact.getSize(); - String symbol = "b"; - if ( s > 1024 ) - { - symbol = "K"; - s /= 1024; - - if ( s > 1024 ) - { - symbol = "M"; - s /= 1024; - - if ( s > 1024 ) - { - symbol = "G"; - s /= 1024; - } - } - } - - DecimalFormat df = new DecimalFormat( "#,###.##", new DecimalFormatSymbols( Locale.US ) ); - size = df.format( s ) + " " + symbol; - id = artifact.getId(); - version = artifact.getVersion(); - } - - public String getNamespace() - { - return namespace; - } - - public String getType() - { - return type; - } - - public String getProject() - { - return project; - } - - public String getSize() - { - return size; - } - - public String getId() - { - return id; - } - - public String getVersion() - { - return version; - } - - public String getRepositoryId() - { - return repositoryId; - } - public String getPath() - { - return path; - } - - public String getClassifier() - { - return classifier; - } - } } -- 2.39.5