Author: brett
Date: Tue Jun 28 08:05:07 2011
New Revision: 1140473

URL: http://svn.apache.org/viewvc?rev=1140473&view=rev
Log:
[MRM-1335] improve the message appearing when an artifact's metadata is 
incomplete
Submitted by: Greg Michael Meneses

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
    archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml
    
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=1140473&r1=1140472&r2=1140473&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 Tue Jun 28 08:05:07 2011
@@ -24,6 +24,7 @@ import org.apache.archiva.metadata.gener
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.Dependency;
 import org.apache.archiva.metadata.model.MailingList;
+import org.apache.archiva.metadata.model.MetadataFacet;
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.model.ProjectVersionReference;
 import org.apache.archiva.metadata.repository.MetadataRepository;
@@ -32,6 +33,7 @@ import org.apache.archiva.metadata.repos
 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.reports.RepositoryProblemFacet;
 import org.apache.commons.lang.StringUtils;
 import org.apache.maven.archiva.model.ArtifactReference;
 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
@@ -41,7 +43,6 @@ import org.apache.maven.artifact.version
 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;
@@ -53,6 +54,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import javax.inject.Inject;
 
 /**
  * Browse the repository.
@@ -144,7 +146,7 @@ public class ShowArtifactAction
 
         if ( versionMetadata.isIncomplete() )
         {
-            addIncompleteModelWarning();
+            addIncompleteModelWarning( "Artifact metadata is incomplete." );
         }
 
         model = versionMetadata;
@@ -158,7 +160,7 @@ public class ShowArtifactAction
         artifacts = new LinkedHashMap<String, List<ArtifactDownloadInfo>>();
 
         List<String> repos = getObservableRepos();
-
+        
         MetadataResolver metadataResolver = session.getResolver();
         for ( String repoId : repos )
         {
@@ -170,11 +172,22 @@ public class ShowArtifactAction
                 {
                     versionMetadata = metadataResolver.resolveProjectVersion( 
session, repoId, groupId, artifactId,
                                                                               
version );
+                    if ( versionMetadata != null )
+                    {
+                        MetadataFacet repoProbFacet;
+                        if ( (repoProbFacet = versionMetadata.getFacet( 
RepositoryProblemFacet.FACET_ID ) ) != null )
+                        {
+                            addIncompleteModelWarning( "Artifact metadata is 
incomplete: " + ( ( RepositoryProblemFacet) repoProbFacet ).getProblem() );
+                            //set metadata to complete so that no additional 
'Artifact metadata is incomplete' warning is logged
+                            versionMetadata.setIncomplete( false );
+                        }
+                    }
+                    
                 }
                 catch ( MetadataResolutionException e )
                 {
-                    addIncompleteModelWarning();
-
+                    addIncompleteModelWarning( "Error resolving artifact 
metadata: " + e.getMessage() );
+                    
                     // TODO: need a consistent way to construct this - same in 
ArchivaMetadataCreationConsumer
                     versionMetadata = new ProjectVersionMetadata();
                     versionMetadata.setId( version );
@@ -193,8 +206,7 @@ public class ShowArtifactAction
                     }
                     catch ( MetadataResolutionException e )
                     {
-                        addIncompleteModelWarning();
-
+                        addIncompleteModelWarning( "Error resolving artifact 
metadata: " + e.getMessage() );
                         artifacts = Collections.emptyList();
                     }
                     Collections.sort( artifacts, new 
Comparator<ArtifactMetadata>()
@@ -226,11 +238,11 @@ public class ShowArtifactAction
 
         return versionMetadata;
     }
-
-    private void addIncompleteModelWarning()
+    
+    private void addIncompleteModelWarning( String warningMessage )
     {
-        addActionMessage(
-            "The model may be incomplete due to a previous error in resolving 
information. Refer to the repository problem reports for more information." );
+        addActionError( warningMessage );
+        //"The model may be incomplete due to a previous error in resolving 
information. Refer to the repository problem reports for more information." );
     }
 
     /**

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java?rev=1140473&r1=1140472&r2=1140473&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/ShowArtifactActionTest.java
 Tue Jun 28 08:05:07 2011
@@ -30,6 +30,7 @@ import org.apache.archiva.metadata.repos
 import org.apache.archiva.metadata.repository.memory.TestMetadataResolver;
 import 
org.apache.archiva.metadata.repository.memory.TestRepositorySessionFactory;
 import 
org.apache.archiva.metadata.repository.storage.maven2.MavenArtifactFacet;
+import org.apache.archiva.reports.RepositoryProblemFacet;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.Configuration;
@@ -57,6 +58,8 @@ public class ShowArtifactActionTest
     private static final String TEST_SNAPSHOT_VERSION = "1.0-SNAPSHOT";
 
     private static final String TEST_TS_SNAPSHOT_VERSION = 
"1.0-20091120.111111-1";
+    
+    private static final String TEST_NAMESPACE = "namespace";
 
     private static final String OTHER_TEST_REPO = "first-repo";
 
@@ -290,6 +293,56 @@ public class ShowArtifactActionTest
         assertNull( action.getMailingLists() );
         assertTrue( action.getArtifacts().isEmpty() );
     }
+    
+    public void testMetadataHasRepositoryFacetProblem()
+    {
+        String errMsg = "Error in resolving artifact's parent POM file: Sample 
Parent POM not found";
+        ProjectVersionMetadata metaData = 
createProjectModel(TEST_SNAPSHOT_VERSION);
+        metaData.addFacet( createRepositoryProblemFacet( TEST_REPO, errMsg, 
+                                                         TEST_GROUP_ID, 
TEST_SNAPSHOT_VERSION, TEST_NAMESPACE ) );
+        
+        
+        metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, 
TEST_ARTIFACT_ID, metaData );
+        
+        metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, 
TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
+                                  TEST_SNAPSHOT_ARTIFACTS );
+
+        action.setGroupId( TEST_GROUP_ID );
+        action.setArtifactId( TEST_ARTIFACT_ID );
+        action.setVersion( TEST_SNAPSHOT_VERSION );
+
+        String result = action.artifact();
+        
+        assertEquals( Action.SUCCESS, result );
+
+        assertTrue( action.hasActionErrors() );
+        assertFalse( action.hasActionMessages() );
+        assertEquals( "Artifact metadata is incomplete: " + errMsg, 
action.getActionErrors().toArray()[0].toString() );
+    }
+    
+    public void testMetadataIncomplete()
+    {
+        ProjectVersionMetadata metaData = 
createProjectModel(TEST_SNAPSHOT_VERSION);
+        metaData.setIncomplete( true );
+        
+        metadataResolver.setProjectVersion( TEST_REPO, TEST_GROUP_ID, 
TEST_ARTIFACT_ID, metaData );
+        
+        metadataResolver.setArtifacts( TEST_REPO, TEST_GROUP_ID, 
TEST_ARTIFACT_ID, TEST_SNAPSHOT_VERSION,
+                                  TEST_SNAPSHOT_ARTIFACTS );
+
+        action.setGroupId( TEST_GROUP_ID );
+        action.setArtifactId( TEST_ARTIFACT_ID );
+        action.setVersion( TEST_SNAPSHOT_VERSION );;
+
+        String result = action.artifact();
+        
+        assertEquals( Action.SUCCESS, result );
+
+        assertTrue( action.hasActionErrors() );
+        assertFalse( action.hasActionMessages() );
+
+        assertEquals( "Artifact metadata is incomplete.", 
action.getActionErrors().toArray()[0].toString() );
+    }
 
     public void testGetMailingLists()
     {
@@ -626,6 +679,19 @@ public class ShowArtifactActionTest
         assertTrue( action.getActionErrors().isEmpty() );
         assertTrue( action.getActionMessages().isEmpty() );
     }
+    
+    private RepositoryProblemFacet createRepositoryProblemFacet( String 
repoId, String errMsg, String projectId, String projectVersion, String 
namespace )
+    {
+        RepositoryProblemFacet repoProblemFacet = new RepositoryProblemFacet();
+        repoProblemFacet.setRepositoryId( repoId );
+        repoProblemFacet.setId( repoId );
+        repoProblemFacet.setMessage( errMsg );
+        repoProblemFacet.setProblem( errMsg );
+        repoProblemFacet.setProject( projectId );
+        repoProblemFacet.setVersion( projectVersion );
+        repoProblemFacet.setNamespace( namespace );
+        return repoProblemFacet;
+    }
 
     protected void setUp()
         throws Exception

Modified: archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml?rev=1140473&r1=1140472&r2=1140473&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml (original)
+++ archiva/trunk/archiva-modules/plugins/maven2-repository/pom.xml Tue Jun 28 
08:05:07 2011
@@ -39,6 +39,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.archiva</groupId>
+      <artifactId>problem-reports</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.archiva</groupId>
       <artifactId>archiva-proxy-common</artifactId>
     </dependency>
     <dependency>

Modified: 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java?rev=1140473&r1=1140472&r2=1140473&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
 (original)
+++ 
archiva/trunk/archiva-modules/plugins/maven2-repository/src/main/java/org/apache/archiva/metadata/repository/storage/maven2/Maven2RepositoryStorage.java
 Tue Jun 28 08:05:07 2011
@@ -30,6 +30,7 @@ import org.apache.archiva.metadata.repos
 import 
org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
 import 
org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
 import org.apache.archiva.proxy.common.WagonFactory;
+import org.apache.archiva.reports.RepositoryProblemFacet;
 import org.apache.maven.archiva.common.utils.VersionUtil;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -56,9 +57,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FilenameFilter;
@@ -71,6 +69,9 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
 
 /**
  * Maven 2 repository format storage implementation. This class currently 
takes parameters to indicate the repository to
@@ -246,6 +247,18 @@ public class Maven2RepositoryStorage
                     facet.setPackaging( "jar" );
                     metadata.addFacet( facet );
 
+                    String errMsg = "Error in resolving artifact's parent POM 
file. " + problem.getException().getMessage();
+                    RepositoryProblemFacet repoProblemFacet = new 
RepositoryProblemFacet();
+                    repoProblemFacet.setRepositoryId( repoId );
+                    repoProblemFacet.setId( repoId );
+                    repoProblemFacet.setMessage( errMsg );
+                    repoProblemFacet.setProblem( errMsg );
+                    repoProblemFacet.setProject( projectId );
+                    repoProblemFacet.setVersion( projectVersion );
+                    repoProblemFacet.setNamespace( namespace );
+                    
+                    metadata.addFacet( repoProblemFacet );
+                    
                     return metadata;
                 }
             }


Reply via email to