diff options
author | Joakim Erdfelt <joakime@apache.org> | 2007-05-29 19:24:48 +0000 |
---|---|---|
committer | Joakim Erdfelt <joakime@apache.org> | 2007-05-29 19:24:48 +0000 |
commit | 188b3e45e52a14ba2f277a9f0b9e3cb3df0989a4 (patch) | |
tree | 67396101a22f2e70a74fe1b0e9cc20827bc2218b /archiva-base | |
parent | fee31978aa1896b1db9720088d8f88731e95a341 (diff) | |
download | archiva-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')
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 ); + } + } +} |