aboutsummaryrefslogtreecommitdiffstats
path: root/archiva-base
diff options
context:
space:
mode:
authorJoakim Erdfelt <joakime@apache.org>2007-05-29 19:24:48 +0000
committerJoakim Erdfelt <joakime@apache.org>2007-05-29 19:24:48 +0000
commit188b3e45e52a14ba2f277a9f0b9e3cb3df0989a4 (patch)
tree67396101a22f2e70a74fe1b0e9cc20827bc2218b /archiva-base
parentfee31978aa1896b1db9720088d8f88731e95a341 (diff)
downloadarchiva-188b3e45e52a14ba2f277a9f0b9e3cb3df0989a4.tar.gz
archiva-188b3e45e52a14ba2f277a9f0b9e3cb3df0989a4.zip
[MRM-380]: When trying to look at project with empty groupId
Update for efficicency. Save resolved project models to database as they are resolved. git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@542631 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-base')
-rw-r--r--archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java4
-rw-r--r--archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java93
2 files changed, 96 insertions, 1 deletions
diff --git a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
index 7abe24297..334ac7ae0 100644
--- a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
+++ b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/ProjectModelToDatabaseConsumer.java
@@ -26,6 +26,7 @@ import org.apache.maven.archiva.configuration.RepositoryConfiguration;
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 @@ public class ProjectModelToDatabaseConsumer
while ( it.hasNext() )
{
ProjectModelResolver resolver = (ProjectModelResolver) it.next();
- effectiveModelFilter.addProjectModelResolver( resolver );
+ ProjectModelResolver wrapped = new WrappedDatabaseProjectModelResolver( dao, resolver );
+ effectiveModelFilter.addProjectModelResolver( wrapped );
}
}
}
diff --git a/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
new file mode 100644
index 000000000..adbf3b2be
--- /dev/null
+++ b/archiva-base/archiva-consumers/archiva-database-consumers/src/main/java/org/apache/maven/archiva/consumers/database/project/WrappedDatabaseProjectModelResolver.java
@@ -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 {@link ProjectModelResolver} to allow for insertion of resolved project models on discovery.
+ *
+ * @author <a href="mailto:joakim@erdfelt.com">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 );
+ }
+ }
+}