Author: joakime
Date: Tue May 29 12:24:48 2007
New Revision: 542631

URL: http://svn.apache.org/viewvc?view=rev&rev=542631
Log:
[MRM-380]: When trying to look at project with empty groupId
Update for efficicency.  Save resolved project models to database as they are 
resolved.

Added:
    
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
   (with props)
Modified:
    
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java

Modified: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java?view=diff&rev=542631&r1=542630&r2=542631
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
 (original)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
 Tue May 29 12:24:48 2007
@@ -26,6 +26,7 @@
 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
 import org.apache.maven.archiva.consumers.ConsumerException;
 import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
+import 
org.apache.maven.archiva.consumers.database.project.WrappedDatabaseProjectModelResolver;
 import org.apache.maven.archiva.database.ArchivaDAO;
 import org.apache.maven.archiva.database.ArchivaDatabaseException;
 import org.apache.maven.archiva.database.ObjectNotFoundException;
@@ -286,7 +287,8 @@
             while ( it.hasNext() )
             {
                 ProjectModelResolver resolver = (ProjectModelResolver) 
it.next();
-                effectiveModelFilter.addProjectModelResolver( resolver );
+                ProjectModelResolver wrapped = new 
WrappedDatabaseProjectModelResolver( dao, resolver );
+                effectiveModelFilter.addProjectModelResolver( wrapped );
             }
         }
     }

Added: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
URL: 
http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java?view=auto&rev=542631
==============================================================================
--- 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
 (added)
+++ 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
 Tue May 29 12:24:48 2007
@@ -0,0 +1,93 @@
+package org.apache.maven.archiva.consumers.database.project;
+
+import org.apache.maven.archiva.database.ArchivaDAO;
+import org.apache.maven.archiva.database.ArchivaDatabaseException;
+import org.apache.maven.archiva.database.ObjectNotFoundException;
+import org.apache.maven.archiva.model.ArchivaProjectModel;
+import org.apache.maven.archiva.model.VersionedReference;
+import org.apache.maven.archiva.repository.project.ProjectModelException;
+import org.apache.maven.archiva.repository.project.ProjectModelResolver;
+
+/**
+ * Wrapped [EMAIL PROTECTED] ProjectModelResolver} to allow for insertion of 
resolved project models on discovery. 
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class WrappedDatabaseProjectModelResolver
+    implements ProjectModelResolver
+{
+    private ArchivaDAO dao;
+
+    private ProjectModelResolver resolver;
+
+    public WrappedDatabaseProjectModelResolver( ArchivaDAO dao, 
ProjectModelResolver resolver )
+    {
+        this.dao = dao;
+        this.resolver = resolver;
+    }
+
+    public ArchivaProjectModel resolveProjectModel( VersionedReference 
reference )
+        throws ProjectModelException
+    {
+        ArchivaProjectModel model = resolver.resolveProjectModel( reference );
+        if ( model == null )
+        {
+            return model;
+        }
+
+        // Test if it exists.
+        if ( existsInDatabase( model ) )
+        {
+            removeFromDatabase( model );
+        }
+
+        saveInDatabase( model );
+
+        return model;
+    }
+
+    private void saveInDatabase( ArchivaProjectModel model ) throws 
ProjectModelException
+    {
+        try
+        {
+            dao.getProjectModelDAO().saveProjectModel( model );
+        }
+        catch ( ArchivaDatabaseException e )
+        {
+            throw new ProjectModelException( "Unable to save model to 
database: " + e.getMessage(), e );
+        }
+    }
+
+    private void removeFromDatabase( ArchivaProjectModel model ) throws 
ProjectModelException
+    {
+        try
+        {
+            dao.getProjectModelDAO().deleteProjectModel( model );
+        }
+        catch ( ArchivaDatabaseException e )
+        {
+            throw new ProjectModelException( "Unable to remove existing model 
from database: " + e.getMessage(), e );
+        }
+    }
+
+    private boolean existsInDatabase( ArchivaProjectModel model ) throws 
ProjectModelException
+    {
+        try
+        {
+            ArchivaProjectModel dbmodel = 
dao.getProjectModelDAO().getProjectModel( model.getGroupId(),
+                                                                               
     model.getArtifactId(),
+                                                                               
     model.getVersion() );
+
+            return ( dbmodel != null );
+        }
+        catch ( ObjectNotFoundException e )
+        {
+            return false;
+        }
+        catch ( ArchivaDatabaseException e )
+        {
+            throw new ProjectModelException( "Unable to check for existing 
model from database: " + e.getMessage(), e );
+        }
+    }
+}

Propchange: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: 
maven/archiva/trunk/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain


Reply via email to