Author: brett
Date: Thu Dec 24 04:02:11 2009
New Revision: 893691

URL: http://svn.apache.org/viewvc?rev=893691&view=rev
Log:
[MRM-1283] keep track of incomplete metadata so that it can self correct and 
show a meaningful message to the user

Modified:
    
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
    
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
    
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java
    
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
    
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
    
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
 Thu Dec 24 04:02:11 2009
@@ -166,8 +166,9 @@
         ProjectVersionMetadata versionMetadata = null;
         try
         {
-            versionMetadata = storageResolver.getProjectVersion( 
repository.getId(), artifact.getGroupId(), artifact.getArtifactId(),
-                                               projectVersion );
+            versionMetadata =
+                storageResolver.getProjectVersion( repository.getId(), 
artifact.getGroupId(), artifact.getArtifactId(),
+                                                   projectVersion );
         }
         catch ( MetadataResolutionException e )
         {
@@ -180,6 +181,7 @@
             log.warn( "Missing or invalid POM for artifact: " + path + "; 
creating empty metadata" );
             versionMetadata = new ProjectVersionMetadata();
             versionMetadata.setId( projectVersion );
+            versionMetadata.setIncomplete( true );
             createVersionMetadata = true;
         }
 

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/ShowArtifactAction.java
 Thu Dec 24 04:02:11 2009
@@ -121,7 +121,11 @@
                 }
                 catch ( MetadataResolutionException e )
                 {
-                    errorMsg = e.getMessage();
+                    addIncompleteModelWarning();
+                    
+                    // TODO: need a consistent way to construct this - same in 
ArchivaMetadataCreationConsumer
+                    versionMetadata = new ProjectVersionMetadata();
+                    versionMetadata.setId( version );
                 }
                 if ( versionMetadata != null )
                 {
@@ -161,11 +165,22 @@
             addActionError( errorMsg != null ? errorMsg : "Artifact not found" 
);
             return ERROR;
         }
+
+        if ( versionMetadata.isIncomplete() )
+        {
+            addIncompleteModelWarning();
+        }
+
         model = versionMetadata;
 
         return SUCCESS;
     }
 
+    private void addIncompleteModelWarning()
+    {
+        addActionMessage( "The model may be incomplete due to a previous error 
in resolving information. Refer to the repository problem reports for more 
information." );
+    }
+
     /**
      * Show the artifact information tab.
      */

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/WEB-INF/jsp/showArtifact.jsp
 Thu Dec 24 04:02:11 2009
@@ -225,6 +225,12 @@
         <%@ include file="/WEB-INF/jsp/include/artifactInfo.jspf" %>
       </c:otherwise>
     </c:choose>
+
+    <s:if test="hasActionMessages()">
+      <div id="messages">
+        <s:actionmessage />
+      </div>
+    </s:if>
   </div>
 </div>
 

Modified: 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/css/site.css
 Thu Dec 24 04:02:11 2009
@@ -338,4 +338,15 @@
 div.versions a.expand {
     font-size: 7pt;
        color: gray;    
-}
\ No newline at end of file
+}
+
+#messages {
+    background-color: yellow;
+    border: 1px solid orange;
+    margin-top: 2em;
+}
+
+#messages ul {
+    list-style-image: url(../images/icon_warning_sml.gif)
+}
+

Modified: 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-model/src/main/java/org/apache/archiva/metadata/model/ProjectVersionMetadata.java
 Thu Dec 24 04:02:11 2009
@@ -51,6 +51,8 @@
 
     private List<Dependency> dependencies = new ArrayList<Dependency>();
 
+    private boolean incomplete;
+
     public String getId()
     {
         return id;
@@ -205,4 +207,14 @@
     {
         this.dependencies.add( dependency );
     }
+
+    public boolean isIncomplete()
+    {
+        return incomplete;
+    }
+
+    public void setIncomplete( boolean incomplete )
+    {
+        this.incomplete = incomplete;
+    }
 }

Modified: 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
 Thu Dec 24 04:02:11 2009
@@ -68,7 +68,10 @@
             metadataRepository.getProjectVersion( repoId, namespace, 
projectId, projectVersion );
         // TODO: do we want to detect changes as well by comparing timestamps? 
isProjectVersionNewerThan(updated)
         //       in such cases we might also remove/update stale metadata, 
including adjusting plugin-based facets
-        if ( metadata == null )
+        //       This would also be better than checking for completeness - we 
can then refresh only when fixed (though
+        //       sometimes this has an additional dependency - such as a 
parent - requesting the user to force an update
+        //       may then work here and be more efficient than always trying 
again)
+        if ( metadata == null || metadata.isIncomplete() )
         {
             metadata = storageResolver.getProjectVersion( repoId, namespace, 
projectId, projectVersion );
             if ( metadata != null )

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
 Thu Dec 24 04:02:11 2009
@@ -131,6 +131,7 @@
         setProperty( properties, "name", versionMetadata.getName() );
         setProperty( properties, "description", 
versionMetadata.getDescription() );
         setProperty( properties, "url", versionMetadata.getUrl() );
+        setProperty( properties, "incomplete", String.valueOf( 
versionMetadata.isIncomplete() ) );
         if ( versionMetadata.getScm() != null )
         {
             setProperty( properties, "scm.connection", 
versionMetadata.getScm().getConnection() );
@@ -653,6 +654,7 @@
             versionMetadata.setName( properties.getProperty( "name" ) );
             versionMetadata.setDescription( properties.getProperty( 
"description" ) );
             versionMetadata.setUrl( properties.getProperty( "url" ) );
+            versionMetadata.setIncomplete( Boolean.valueOf( 
properties.getProperty( "incomplete", "false" ) ) );
 
             String scmConnection = properties.getProperty( "scm.connection" );
             String scmDeveloperConnection = properties.getProperty( 
"scm.developerConnection" );

Modified: 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
URL: 
http://svn.apache.org/viewvc/archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java?rev=893691&r1=893690&r2=893691&view=diff
==============================================================================
--- 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 (original)
+++ 
archiva/branches/MRM-1025/archiva-modules/plugins/metadata-repository-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java
 Thu Dec 24 04:02:11 2009
@@ -39,6 +39,9 @@
 import org.apache.commons.io.FileUtils;
 import org.codehaus.plexus.spring.PlexusInSpringTestCase;
 
+/**
+ * @todo should this be a generic MetadataRepository implementation test?
+ */
 public class FileMetadataRepositoryTest
     extends PlexusInSpringTestCase
 {
@@ -113,6 +116,17 @@
         repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, 
TEST_PROJECT, metadata );
     }
 
+    public void testUpdateProjectVersionMetadataIncomplete()
+    {
+        ProjectVersionMetadata metadata = new ProjectVersionMetadata();
+        metadata.setId( TEST_PROJECT_VERSION );
+        metadata.setIncomplete( true );
+        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, 
TEST_PROJECT, metadata );
+
+        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, 
TEST_PROJECT, TEST_PROJECT_VERSION );
+        assertEquals( true, metadata.isIncomplete() );
+    }
+
     public void testUpdateProjectVersionMetadataWithExistingFacets()
     {
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();


Reply via email to