mirror of https://github.com/apache/archiva.git
[MRM-380]: When trying to look at project with empty groupId
git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@542604 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
09eeee41d4
commit
7f4271c1df
|
@ -21,12 +21,14 @@ package org.apache.maven.archiva.consumers.database;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||||
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
|
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
|
||||||
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
|
import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
|
||||||
import org.apache.maven.archiva.consumers.ConsumerException;
|
import org.apache.maven.archiva.consumers.ConsumerException;
|
||||||
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
|
import org.apache.maven.archiva.consumers.DatabaseUnprocessedArtifactConsumer;
|
||||||
import org.apache.maven.archiva.database.ArchivaDAO;
|
import org.apache.maven.archiva.database.ArchivaDAO;
|
||||||
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
import org.apache.maven.archiva.database.ArchivaDatabaseException;
|
||||||
|
import org.apache.maven.archiva.database.ObjectNotFoundException;
|
||||||
import org.apache.maven.archiva.model.ArchivaArtifact;
|
import org.apache.maven.archiva.model.ArchivaArtifact;
|
||||||
import org.apache.maven.archiva.model.ArchivaProjectModel;
|
import org.apache.maven.archiva.model.ArchivaProjectModel;
|
||||||
import org.apache.maven.archiva.model.RepositoryURL;
|
import org.apache.maven.archiva.model.RepositoryURL;
|
||||||
|
@ -34,11 +36,19 @@ import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||||
import org.apache.maven.archiva.repository.layout.LayoutException;
|
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
||||||
|
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
||||||
|
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
||||||
|
import org.apache.maven.archiva.repository.project.filters.EffectiveProjectModelFilter;
|
||||||
|
import org.apache.maven.archiva.repository.project.resolvers.RepositoryProjectModelResolverFactory;
|
||||||
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
||||||
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
||||||
|
import org.codehaus.plexus.registry.Registry;
|
||||||
|
import org.codehaus.plexus.registry.RegistryListener;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -53,7 +63,7 @@ import java.util.List;
|
||||||
*/
|
*/
|
||||||
public class ProjectModelToDatabaseConsumer
|
public class ProjectModelToDatabaseConsumer
|
||||||
extends AbstractMonitoredConsumer
|
extends AbstractMonitoredConsumer
|
||||||
implements DatabaseUnprocessedArtifactConsumer
|
implements DatabaseUnprocessedArtifactConsumer, RegistryListener, Initializable
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @plexus.configuration default-value="update-db-project"
|
* @plexus.configuration default-value="update-db-project"
|
||||||
|
@ -90,6 +100,27 @@ public class ProjectModelToDatabaseConsumer
|
||||||
*/
|
*/
|
||||||
private ProjectModelReader project300Reader;
|
private ProjectModelReader project300Reader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="expression"
|
||||||
|
*/
|
||||||
|
private ProjectModelFilter expressionModelFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private RepositoryProjectModelResolverFactory resolverFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role="org.apache.maven.archiva.repository.project.ProjectModelFilter"
|
||||||
|
* role-hint="effective"
|
||||||
|
*/
|
||||||
|
private EffectiveProjectModelFilter effectiveModelFilter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="database"
|
||||||
|
*/
|
||||||
|
private ProjectModelResolver databaseResolver;
|
||||||
|
|
||||||
private List includes;
|
private List includes;
|
||||||
|
|
||||||
public ProjectModelToDatabaseConsumer()
|
public ProjectModelToDatabaseConsumer()
|
||||||
|
@ -100,14 +131,12 @@ public class ProjectModelToDatabaseConsumer
|
||||||
|
|
||||||
public void beginScan()
|
public void beginScan()
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
/* nothing to do here */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void completeScan()
|
public void completeScan()
|
||||||
{
|
{
|
||||||
// TODO Auto-generated method stub
|
/* nothing to do here */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List getIncludedTypes()
|
public List getIncludedTypes()
|
||||||
|
@ -120,32 +149,64 @@ public class ProjectModelToDatabaseConsumer
|
||||||
{
|
{
|
||||||
if ( !StringUtils.equals( "pom", artifact.getType() ) )
|
if ( !StringUtils.equals( "pom", artifact.getType() ) )
|
||||||
{
|
{
|
||||||
|
// Not a pom. Skip it.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( hasProjectModelInDatabase( artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ) )
|
||||||
|
{
|
||||||
|
// Already in the database. Skip it.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
File artifactFile = toFile( artifact );
|
File artifactFile = toFile( artifact );
|
||||||
RepositoryConfiguration repo = getRepository( artifact );
|
RepositoryConfiguration repo = getRepository( artifact );
|
||||||
|
ProjectModelReader reader = project400Reader;
|
||||||
|
|
||||||
if ( StringUtils.equals( "default", repo.getLayout() ) )
|
if ( StringUtils.equals( "legacy", repo.getLayout() ) )
|
||||||
{
|
{
|
||||||
try
|
reader = project300Reader;
|
||||||
{
|
}
|
||||||
ArchivaProjectModel model = project400Reader.read( artifactFile );
|
|
||||||
|
try
|
||||||
model.setOrigin( "filesystem" );
|
{
|
||||||
|
ArchivaProjectModel model = reader.read( artifactFile );
|
||||||
dao.getProjectModelDAO().saveProjectModel( model );
|
|
||||||
}
|
model.setOrigin( "filesystem" );
|
||||||
catch ( ProjectModelException e )
|
|
||||||
{
|
// Filter the model
|
||||||
getLogger().warn( "Unable to read project model " + artifactFile + " : " + e.getMessage(), e );
|
model = expressionModelFilter.filter( model );
|
||||||
}
|
|
||||||
catch ( ArchivaDatabaseException e )
|
// Resolve the project model
|
||||||
{
|
model = effectiveModelFilter.filter( model );
|
||||||
getLogger().warn(
|
|
||||||
"Unable to save project model " + artifactFile + " to the database : "
|
dao.getProjectModelDAO().saveProjectModel( model );
|
||||||
+ e.getMessage(), e );
|
}
|
||||||
}
|
catch ( ProjectModelException e )
|
||||||
|
{
|
||||||
|
getLogger().warn( "Unable to read project model " + artifactFile + " : " + e.getMessage(), e );
|
||||||
|
}
|
||||||
|
catch ( ArchivaDatabaseException e )
|
||||||
|
{
|
||||||
|
getLogger().warn( "Unable to save project model " + artifactFile + " to the database : " + e.getMessage(),
|
||||||
|
e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasProjectModelInDatabase( String groupId, String artifactId, String version )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ArchivaProjectModel model = dao.getProjectModelDAO().getProjectModel( groupId, artifactId, version );
|
||||||
|
return ( model != null );
|
||||||
|
}
|
||||||
|
catch ( ObjectNotFoundException e )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
catch ( ArchivaDatabaseException e )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -191,4 +252,42 @@ public class ProjectModelToDatabaseConsumer
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||||
|
{
|
||||||
|
/* nothing to do here */
|
||||||
|
}
|
||||||
|
|
||||||
|
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||||
|
{
|
||||||
|
if ( ConfigurationNames.isRepositories( propertyName ) )
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize()
|
||||||
|
throws InitializationException
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
archivaConfiguration.addChangeListener( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void update()
|
||||||
|
{
|
||||||
|
synchronized ( effectiveModelFilter )
|
||||||
|
{
|
||||||
|
effectiveModelFilter.clearResolvers();
|
||||||
|
|
||||||
|
// Add the database resolver first!
|
||||||
|
effectiveModelFilter.addProjectModelResolver( databaseResolver );
|
||||||
|
|
||||||
|
List ret = this.resolverFactory.getAllResolvers();
|
||||||
|
Iterator it = ret.iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
ProjectModelResolver resolver = (ProjectModelResolver) it.next();
|
||||||
|
effectiveModelFilter.addProjectModelResolver( resolver );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,66 @@
|
||||||
|
package org.apache.maven.archiva.consumers.database.project;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves a project model from the database.
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||||
|
* @version $Id$
|
||||||
|
*
|
||||||
|
* @plexus.component role="org.apache.maven.archiva.repository.project.ProjectModelResolver"
|
||||||
|
* role-hint="database"
|
||||||
|
*/
|
||||||
|
public class DatabaseProjectModelResolver
|
||||||
|
implements ProjectModelResolver
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="jdo"
|
||||||
|
*/
|
||||||
|
private ArchivaDAO dao;
|
||||||
|
|
||||||
|
public ArchivaProjectModel resolveProjectModel( VersionedReference reference )
|
||||||
|
throws ProjectModelException
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
ArchivaProjectModel model = dao.getProjectModelDAO().getProjectModel( reference.getGroupId(),
|
||||||
|
reference.getArtifactId(),
|
||||||
|
reference.getVersion() );
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
catch ( ObjectNotFoundException e )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch ( ArchivaDatabaseException e )
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,6 +22,7 @@ package org.apache.maven.archiva.repository;
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||||
|
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
|
||||||
import org.apache.maven.archiva.configuration.functors.LocalRepositoryPredicate;
|
import org.apache.maven.archiva.configuration.functors.LocalRepositoryPredicate;
|
||||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
||||||
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
||||||
|
@ -51,6 +52,11 @@ public class ActiveManagedRepositories
|
||||||
|
|
||||||
private List allManagedRepositories = new ArrayList();
|
private List allManagedRepositories = new ArrayList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link List} of {@link RepositoryConfiguration} objects representing managed repositories.
|
||||||
|
*
|
||||||
|
* @return the {@link List} of {@link RepositoryConfiguration} objects.
|
||||||
|
*/
|
||||||
public List getAllManagedRepositories()
|
public List getAllManagedRepositories()
|
||||||
{
|
{
|
||||||
synchronized ( allManagedRepositories )
|
synchronized ( allManagedRepositories )
|
||||||
|
@ -86,7 +92,7 @@ public class ActiveManagedRepositories
|
||||||
allManagedRepositories.clear();
|
allManagedRepositories.clear();
|
||||||
|
|
||||||
List configRepos = archivaConfiguration.getConfiguration().getRepositories();
|
List configRepos = archivaConfiguration.getConfiguration().getRepositories();
|
||||||
CollectionUtils.select( configRepos, LocalRepositoryPredicate.getInstance() );
|
CollectionUtils.filter( configRepos, LocalRepositoryPredicate.getInstance() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.apache.maven.archiva.repository.project.ProjectModelException;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelMerge;
|
import org.apache.maven.archiva.repository.project.ProjectModelMerge;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
||||||
|
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -42,17 +43,18 @@ import java.util.Map;
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
* @plexus.component role="org.apache.maven.archiva.repository.project.ProjectModelFilter"
|
* @plexus.component role="org.apache.maven.archiva.repository.project.ProjectModelFilter"
|
||||||
* role-hint="effective"
|
* role-hint="effective"
|
||||||
* instantiation-strategy="per-lookup"
|
|
||||||
*/
|
*/
|
||||||
public class EffectiveProjectModelFilter implements ProjectModelFilter
|
public class EffectiveProjectModelFilter
|
||||||
|
extends AbstractLogEnabled
|
||||||
|
implements ProjectModelFilter
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @plexus.requirement role-hint="expression"
|
* @plexus.requirement role-hint="expression"
|
||||||
*/
|
*/
|
||||||
private ProjectModelFilter expressionFilter;
|
private ProjectModelFilter expressionFilter;
|
||||||
|
|
||||||
private List projectModelResolvers;
|
private List projectModelResolvers;
|
||||||
|
|
||||||
public EffectiveProjectModelFilter()
|
public EffectiveProjectModelFilter()
|
||||||
{
|
{
|
||||||
projectModelResolvers = new ArrayList();
|
projectModelResolvers = new ArrayList();
|
||||||
|
@ -99,7 +101,7 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
// Setup Expression Evaluation pieces.
|
// Setup Expression Evaluation pieces.
|
||||||
effectiveProject = expressionFilter.filter( effectiveProject );
|
effectiveProject = expressionFilter.filter( effectiveProject );
|
||||||
|
|
||||||
debug( "Starting build of effective with: " + effectiveProject );
|
getLogger().debug( "Starting build of effective with: " + effectiveProject );
|
||||||
|
|
||||||
// Merge in all the parent poms.
|
// Merge in all the parent poms.
|
||||||
effectiveProject = mergeParent( effectiveProject );
|
effectiveProject = mergeParent( effectiveProject );
|
||||||
|
@ -116,6 +118,11 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
this.projectModelResolvers.remove( resolver );
|
this.projectModelResolvers.remove( resolver );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void clearResolvers()
|
||||||
|
{
|
||||||
|
this.projectModelResolvers.clear();
|
||||||
|
}
|
||||||
|
|
||||||
private void applyDependencyManagement( ArchivaProjectModel pom )
|
private void applyDependencyManagement( ArchivaProjectModel pom )
|
||||||
{
|
{
|
||||||
if ( ( pom.getDependencyManagement() == null ) || ( pom.getDependencies() == null ) )
|
if ( ( pom.getDependencyManagement() == null ) || ( pom.getDependencies() == null ) )
|
||||||
|
@ -123,7 +130,7 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
// Nothing to do. All done!
|
// Nothing to do. All done!
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( pom.getDependencyManagement().isEmpty() || pom.getDependencies().isEmpty() )
|
if ( pom.getDependencyManagement().isEmpty() || pom.getDependencies().isEmpty() )
|
||||||
{
|
{
|
||||||
// Nothing to do. All done!
|
// Nothing to do. All done!
|
||||||
|
@ -149,14 +156,9 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void debug( String msg )
|
|
||||||
{
|
|
||||||
System.out.println( "## " + msg );
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArchivaProjectModel findProject( VersionedReference projectRef )
|
private ArchivaProjectModel findProject( VersionedReference projectRef )
|
||||||
{
|
{
|
||||||
debug( "Trying to find project: " + projectRef );
|
getLogger().debug( "Trying to find project: " + projectRef );
|
||||||
Iterator it = this.projectModelResolvers.iterator();
|
Iterator it = this.projectModelResolvers.iterator();
|
||||||
|
|
||||||
while ( it.hasNext() )
|
while ( it.hasNext() )
|
||||||
|
@ -165,15 +167,15 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
debug( "Trying to find in " + resolver.getClass().getName() );
|
getLogger().debug( "Trying to find in " + resolver.getClass().getName() );
|
||||||
ArchivaProjectModel model = resolver.resolveProjectModel( projectRef );
|
ArchivaProjectModel model = resolver.resolveProjectModel( projectRef );
|
||||||
|
|
||||||
if ( model != null )
|
if ( model != null )
|
||||||
{
|
{
|
||||||
debug( "Found it!: " + model );
|
getLogger().debug( "Found it!: " + model );
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
debug( "Not found." );
|
getLogger().debug( "Not found." );
|
||||||
}
|
}
|
||||||
catch ( ProjectModelException e )
|
catch ( ProjectModelException e )
|
||||||
{
|
{
|
||||||
|
@ -192,14 +194,14 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
{
|
{
|
||||||
ArchivaProjectModel mixedProject;
|
ArchivaProjectModel mixedProject;
|
||||||
|
|
||||||
debug( "Parent: " + pom.getParentProject() );
|
getLogger().debug( "Parent: " + pom.getParentProject() );
|
||||||
|
|
||||||
if ( pom.getParentProject() != null )
|
if ( pom.getParentProject() != null )
|
||||||
{
|
{
|
||||||
// Use parent reference.
|
// Use parent reference.
|
||||||
VersionedReference parentRef = pom.getParentProject();
|
VersionedReference parentRef = pom.getParentProject();
|
||||||
|
|
||||||
debug( "Has parent: " + parentRef );
|
getLogger().debug( "Has parent: " + parentRef );
|
||||||
|
|
||||||
// Find parent using resolvers.
|
// Find parent using resolvers.
|
||||||
ArchivaProjectModel parentProject = findProject( parentRef );
|
ArchivaProjectModel parentProject = findProject( parentRef );
|
||||||
|
@ -219,7 +221,7 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug( "No parent found" );
|
getLogger().debug( "No parent found" );
|
||||||
|
|
||||||
/* Mix in the super-pom.
|
/* Mix in the super-pom.
|
||||||
*
|
*
|
||||||
|
@ -245,7 +247,7 @@ public class EffectiveProjectModelFilter implements ProjectModelFilter
|
||||||
private ArchivaProjectModel mixinSuperPom( ArchivaProjectModel pom )
|
private ArchivaProjectModel mixinSuperPom( ArchivaProjectModel pom )
|
||||||
{
|
{
|
||||||
// TODO: add super pom repositories.
|
// TODO: add super pom repositories.
|
||||||
debug( "Mix in Super POM: " + pom );
|
getLogger().debug( "Mix in Super POM: " + pom );
|
||||||
|
|
||||||
return pom;
|
return pom;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,233 @@
|
||||||
|
package org.apache.maven.archiva.repository.project.resolvers;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you under the Apache License, Version 2.0 (the
|
||||||
|
* "License"); you may not use this file except in compliance
|
||||||
|
* with the License. You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.ConfigurationNames;
|
||||||
|
import org.apache.maven.archiva.configuration.RepositoryConfiguration;
|
||||||
|
import org.apache.maven.archiva.configuration.functors.LocalRepositoryPredicate;
|
||||||
|
import org.apache.maven.archiva.model.ArchivaRepository;
|
||||||
|
import org.apache.maven.archiva.repository.ArchivaConfigurationAdaptor;
|
||||||
|
import org.apache.maven.archiva.repository.RepositoryException;
|
||||||
|
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||||
|
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayoutFactory;
|
||||||
|
import org.apache.maven.archiva.repository.layout.LayoutException;
|
||||||
|
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
||||||
|
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
||||||
|
import org.codehaus.plexus.logging.AbstractLogEnabled;
|
||||||
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
|
||||||
|
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
|
||||||
|
import org.codehaus.plexus.registry.Registry;
|
||||||
|
import org.codehaus.plexus.registry.RegistryListener;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Factory for ProjectModelResolver objects
|
||||||
|
*
|
||||||
|
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||||
|
* @version $Id$
|
||||||
|
*
|
||||||
|
* @plexus.component role="org.apache.maven.archiva.repository.project.resolvers.RepositoryProjectModelResolverFactory"
|
||||||
|
*/
|
||||||
|
public class RepositoryProjectModelResolverFactory
|
||||||
|
extends AbstractLogEnabled
|
||||||
|
implements RegistryListener, Initializable
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private ArchivaConfiguration archivaConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement
|
||||||
|
*/
|
||||||
|
private BidirectionalRepositoryLayoutFactory layoutFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="model400"
|
||||||
|
*/
|
||||||
|
private ProjectModelReader project400Reader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @plexus.requirement role-hint="model300"
|
||||||
|
*/
|
||||||
|
private ProjectModelReader project300Reader;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link ProjectModelResolver} for the specific archiva repository.
|
||||||
|
*
|
||||||
|
* @param repo the repository to base resolver on.
|
||||||
|
* @return return the resolver for the archiva repository provided.
|
||||||
|
* @throws RepositoryException if unable to create a resolver for the provided {@link ArchivaRepository}
|
||||||
|
*/
|
||||||
|
public ProjectModelResolver getResolver( ArchivaRepository repo )
|
||||||
|
throws RepositoryException
|
||||||
|
{
|
||||||
|
if ( resolverMap.containsKey( repo.getId() ) )
|
||||||
|
{
|
||||||
|
return (ProjectModelResolver) this.resolverMap.get( repo.getId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
ProjectModelResolver resolver = toResolver( repo );
|
||||||
|
resolverMap.put( repo.getId(), resolver );
|
||||||
|
|
||||||
|
return resolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link ProjectModelResolver} for the specific archiva repository based on repository id.
|
||||||
|
*
|
||||||
|
* @param repoid the repository id to get the resolver for.
|
||||||
|
* @return the {@link ProjectModelResolver} if found, or null if repository is not found.
|
||||||
|
*/
|
||||||
|
public ProjectModelResolver getResolver( String repoid )
|
||||||
|
{
|
||||||
|
return (ProjectModelResolver) this.resolverMap.get( repoid );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the {@link List} of {@link ProjectModelResolver} for
|
||||||
|
* the {@link List} of {@link ArchivaRepository} objects provided.
|
||||||
|
*
|
||||||
|
* @param repositoryList the {@link List} of {@link ArchivaRepository} objects to
|
||||||
|
* get {@link ProjectModelResolver} for.
|
||||||
|
* @return the {@link List} of {@link ProjectModelResolver} objects.
|
||||||
|
* @throws RepositoryException if unable to convert any of the provided {@link ArchivaRepository} objects into
|
||||||
|
* a {@link ProjectModelResolver} object.
|
||||||
|
*/
|
||||||
|
public List getResolverList( List repositoryList )
|
||||||
|
throws RepositoryException
|
||||||
|
{
|
||||||
|
List ret = new ArrayList();
|
||||||
|
|
||||||
|
if ( CollectionUtils.isEmpty( repositoryList ) )
|
||||||
|
{
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
Iterator it = repositoryList.iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
ArchivaRepository repo = (ArchivaRepository) it.next();
|
||||||
|
ret.add( getResolver( repo ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the entire {@link List} of {@link ProjectModelResolver} that the factory is tracking.
|
||||||
|
*
|
||||||
|
* @return the entire list of {@link ProjectModelResolver} that is being tracked.
|
||||||
|
*/
|
||||||
|
public List getAllResolvers()
|
||||||
|
{
|
||||||
|
List ret = new ArrayList();
|
||||||
|
|
||||||
|
ret.addAll( this.resolverMap.values() );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||||
|
{
|
||||||
|
/* do nothing */
|
||||||
|
}
|
||||||
|
|
||||||
|
public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
|
||||||
|
{
|
||||||
|
if ( ConfigurationNames.isRepositories( propertyName ) )
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Map resolverMap = new HashMap();
|
||||||
|
|
||||||
|
private void update()
|
||||||
|
{
|
||||||
|
synchronized ( resolverMap )
|
||||||
|
{
|
||||||
|
resolverMap.clear();
|
||||||
|
|
||||||
|
List configRepos = archivaConfiguration.getConfiguration().getRepositories();
|
||||||
|
CollectionUtils.filter( configRepos, LocalRepositoryPredicate.getInstance() );
|
||||||
|
|
||||||
|
Iterator it = configRepos.iterator();
|
||||||
|
while ( it.hasNext() )
|
||||||
|
{
|
||||||
|
RepositoryConfiguration repoconfig = (RepositoryConfiguration) it.next();
|
||||||
|
ArchivaRepository repo = ArchivaConfigurationAdaptor.toArchivaRepository( repoconfig );
|
||||||
|
try
|
||||||
|
{
|
||||||
|
RepositoryProjectResolver resolver = toResolver( repo );
|
||||||
|
resolverMap.put( repo.getId(), resolver );
|
||||||
|
}
|
||||||
|
catch ( RepositoryException e )
|
||||||
|
{
|
||||||
|
getLogger().warn( e.getMessage(), e );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private RepositoryProjectResolver toResolver( ArchivaRepository repo )
|
||||||
|
throws RepositoryException
|
||||||
|
{
|
||||||
|
if ( !repo.isManaged() )
|
||||||
|
{
|
||||||
|
throw new RepositoryException( "Unable to create RepositoryProjectResolver from non-managed repository: "
|
||||||
|
+ repo );
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
BidirectionalRepositoryLayout layout = layoutFactory.getLayout( repo.getLayoutType() );
|
||||||
|
ProjectModelReader reader = project400Reader;
|
||||||
|
|
||||||
|
if ( StringUtils.equals( "legacy", repo.getLayoutType() ) )
|
||||||
|
{
|
||||||
|
reader = project300Reader;
|
||||||
|
}
|
||||||
|
|
||||||
|
RepositoryProjectResolver resolver = new RepositoryProjectResolver( repo, reader, layout );
|
||||||
|
return resolver;
|
||||||
|
}
|
||||||
|
catch ( LayoutException e )
|
||||||
|
{
|
||||||
|
throw new RepositoryException( "Unable to create RepositoryProjectResolver due to invalid layout spec: "
|
||||||
|
+ repo );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void initialize()
|
||||||
|
throws InitializationException
|
||||||
|
{
|
||||||
|
update();
|
||||||
|
archivaConfiguration.addChangeListener( this );
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,16 +24,14 @@ import org.apache.maven.archiva.model.ArchivaProjectModel;
|
||||||
import org.apache.maven.archiva.model.ArchivaRepository;
|
import org.apache.maven.archiva.model.ArchivaRepository;
|
||||||
import org.apache.maven.archiva.model.VersionedReference;
|
import org.apache.maven.archiva.model.VersionedReference;
|
||||||
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||||
import org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout;
|
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
import org.apache.maven.archiva.repository.project.ProjectModelResolver;
|
||||||
import org.apache.maven.archiva.repository.project.readers.ProjectModel400Reader;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RepositoryProjectResolver
|
* Resolve Project from filesystem.
|
||||||
*
|
*
|
||||||
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
* @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
|
@ -47,11 +45,11 @@ public class RepositoryProjectResolver
|
||||||
|
|
||||||
private BidirectionalRepositoryLayout layout;
|
private BidirectionalRepositoryLayout layout;
|
||||||
|
|
||||||
public RepositoryProjectResolver( ArchivaRepository repository )
|
public RepositoryProjectResolver( ArchivaRepository repository, ProjectModelReader reader, BidirectionalRepositoryLayout layout )
|
||||||
{
|
{
|
||||||
this.repository = repository;
|
this.repository = repository;
|
||||||
this.reader = new ProjectModel400Reader();
|
this.reader = reader;
|
||||||
this.layout = new DefaultBidirectionalRepositoryLayout();
|
this.layout = layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArchivaProjectModel resolveProjectModel( VersionedReference reference )
|
public ArchivaProjectModel resolveProjectModel( VersionedReference reference )
|
||||||
|
|
|
@ -23,6 +23,8 @@ import org.apache.maven.archiva.model.ArchivaProjectModel;
|
||||||
import org.apache.maven.archiva.model.ArchivaRepository;
|
import org.apache.maven.archiva.model.ArchivaRepository;
|
||||||
import org.apache.maven.archiva.model.Dependency;
|
import org.apache.maven.archiva.model.Dependency;
|
||||||
import org.apache.maven.archiva.model.Individual;
|
import org.apache.maven.archiva.model.Individual;
|
||||||
|
import org.apache.maven.archiva.repository.layout.BidirectionalRepositoryLayout;
|
||||||
|
import org.apache.maven.archiva.repository.layout.DefaultBidirectionalRepositoryLayout;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
import org.apache.maven.archiva.repository.project.ProjectModelException;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
import org.apache.maven.archiva.repository.project.ProjectModelFilter;
|
||||||
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
import org.apache.maven.archiva.repository.project.ProjectModelReader;
|
||||||
|
@ -71,7 +73,9 @@ public class EffectiveProjectModelFilterTest
|
||||||
ArchivaRepository repo = new ArchivaRepository( "defaultTestRepo", "Default Test Repo", "file://"
|
ArchivaRepository repo = new ArchivaRepository( "defaultTestRepo", "Default Test Repo", "file://"
|
||||||
+ defaultRepoDir.getAbsolutePath() );
|
+ defaultRepoDir.getAbsolutePath() );
|
||||||
|
|
||||||
RepositoryProjectResolver resolver = new RepositoryProjectResolver( repo );
|
ProjectModelReader reader = new ProjectModel400Reader();
|
||||||
|
BidirectionalRepositoryLayout layout = new DefaultBidirectionalRepositoryLayout();
|
||||||
|
RepositoryProjectResolver resolver = new RepositoryProjectResolver( repo, reader, layout );
|
||||||
|
|
||||||
return resolver;
|
return resolver;
|
||||||
}
|
}
|
||||||
|
@ -101,10 +105,10 @@ public class EffectiveProjectModelFilterTest
|
||||||
assertContainsSameIndividuals( "Individuals", expectedModel.getIndividuals(), effectiveModel.getIndividuals() );
|
assertContainsSameIndividuals( "Individuals", expectedModel.getIndividuals(), effectiveModel.getIndividuals() );
|
||||||
dumpDependencyList( "Expected", expectedModel.getDependencies() );
|
dumpDependencyList( "Expected", expectedModel.getDependencies() );
|
||||||
dumpDependencyList( "Effective", effectiveModel.getDependencies() );
|
dumpDependencyList( "Effective", effectiveModel.getDependencies() );
|
||||||
assertContainsSameDependencies( "Dependencies", expectedModel.getDependencies(),
|
assertContainsSameDependencies( "Dependencies", expectedModel.getDependencies(), effectiveModel
|
||||||
effectiveModel.getDependencies() );
|
.getDependencies() );
|
||||||
assertContainsSameDependencies( "DependencyManagement", expectedModel.getDependencyManagement(),
|
assertContainsSameDependencies( "DependencyManagement", expectedModel.getDependencyManagement(), effectiveModel
|
||||||
effectiveModel.getDependencyManagement() );
|
.getDependencyManagement() );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dumpDependencyList( String type, List deps )
|
private void dumpDependencyList( String type, List deps )
|
||||||
|
|
Loading…
Reference in New Issue