Adapting the web modules to the new repository api

This commit is contained in:
Martin Stockhammer 2017-11-01 15:39:07 +01:00
parent 32ff2ca265
commit d6120d6c22
38 changed files with 330 additions and 206 deletions

View File

@ -18,6 +18,8 @@
* under the License. * under the License.
*/ */
import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.ManagedRepository;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;

View File

@ -55,7 +55,6 @@
<dependency> <dependency>
<groupId>org.apache.archiva</groupId> <groupId>org.apache.archiva</groupId>
<artifactId>archiva-configuration</artifactId> <artifactId>archiva-configuration</artifactId>
<scope>runtime</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.archiva</groupId> <groupId>org.apache.archiva</groupId>

View File

@ -37,8 +37,11 @@
import org.apache.archiva.redback.rest.services.RedbackAuthenticationThreadLocal; import org.apache.archiva.redback.rest.services.RedbackAuthenticationThreadLocal;
import org.apache.archiva.redback.rest.services.RedbackRequestInformation; import org.apache.archiva.redback.rest.services.RedbackRequestInformation;
import org.apache.archiva.redback.users.User; import org.apache.archiva.redback.users.User;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryContentFactory; import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryException; import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.events.AuditListener; import org.apache.archiva.repository.events.AuditListener;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.apache.archiva.rest.services.utils.ArtifactBuilder; import org.apache.archiva.rest.services.utils.ArtifactBuilder;
@ -98,6 +101,9 @@ public abstract class AbstractRestService
@Inject @Inject
protected ManagedRepositoryAdmin managedRepositoryAdmin; protected ManagedRepositoryAdmin managedRepositoryAdmin;
@Inject
protected RepositoryRegistry repositoryRegistry;
@Inject @Inject
protected RepositoryContentFactory repositoryContentFactory; protected RepositoryContentFactory repositoryContentFactory;
@ -322,10 +328,14 @@ protected List<Artifact> buildArtifacts( Collection<ArtifactMetadata> artifactMe
if ( repoId == null ) { if ( repoId == null ) {
throw new IllegalStateException( "Repository Id is null" ); throw new IllegalStateException( "Repository Id is null" );
} }
ManagedRepository repo = repositoryRegistry.getManagedRepository( repoId );
if (repo==null) {
throw new RepositoryException( "Repository not found "+repoId );
}
ManagedRepositoryContent content = repo.getContent( );
ArtifactBuilder builder = ArtifactBuilder builder =
new ArtifactBuilder().forArtifactMetadata( artifact ).withManagedRepositoryContent( new ArtifactBuilder().forArtifactMetadata( artifact ).withManagedRepositoryContent(
repositoryContentFactory.getManagedRepositoryContent( repoId ) ); content );
Artifact art = builder.build(); Artifact art = builder.build();
art.setUrl( getArtifactUrl( art, repositoryId ) ); art.setUrl( getArtifactUrl( art, repositoryId ) );
artifacts.add( art ); artifacts.add( art );

View File

@ -42,6 +42,7 @@
import org.apache.archiva.repository.RepositoryContentFactory; import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryException; import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryNotFoundException; import org.apache.archiva.repository.RepositoryNotFoundException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.metadata.MetadataTools; import org.apache.archiva.repository.metadata.MetadataTools;
import org.apache.archiva.rest.api.model.*; import org.apache.archiva.rest.api.model.*;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException; import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
@ -82,9 +83,6 @@ public class DefaultBrowseService
@Inject @Inject
private DependencyTreeBuilder dependencyTreeBuilder; private DependencyTreeBuilder dependencyTreeBuilder;
@Inject
private RepositoryContentFactory repositoryContentFactory;
@Inject @Inject
@Named( value = "repositoryProxyConnectors#default" ) @Named( value = "repositoryProxyConnectors#default" )
private RepositoryProxyConnectors connectors; private RepositoryProxyConnectors connectors;
@ -93,6 +91,15 @@ public class DefaultBrowseService
@Named( value = "browse#versionMetadata" ) @Named( value = "browse#versionMetadata" )
private Cache<String, ProjectVersionMetadata> versionMetadataCache; private Cache<String, ProjectVersionMetadata> versionMetadataCache;
private ManagedRepositoryContent getManagedRepositoryContent(String id) throws RepositoryException
{
org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( id );
if (repo==null) {
throw new RepositoryException( "Could not find repository "+id );
}
return repo.getContent();
}
@Override @Override
public BrowseResult getRootGroups( String repositoryId ) public BrowseResult getRootGroups( String repositoryId )
throws ArchivaRestServiceException throws ArchivaRestServiceException
@ -687,7 +694,7 @@ public List<ArtifactContentEntry> getArtifactContentEntries( String groupId, Str
{ {
ManagedRepositoryContent managedRepositoryContent = ManagedRepositoryContent managedRepositoryContent =
repositoryContentFactory.getManagedRepositoryContent( repoId ); getManagedRepositoryContent( repoId );
ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier, ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier,
StringUtils.isEmpty( type ) ? "jar" : type, StringUtils.isEmpty( type ) ? "jar" : type,
repoId ); repoId );
@ -763,8 +770,16 @@ public ArtifactContent getArtifactContentText( String groupId, String artifactId
for ( String repoId : selectedRepos ) for ( String repoId : selectedRepos )
{ {
ManagedRepositoryContent managedRepositoryContent = ManagedRepositoryContent managedRepositoryContent = null;
repositoryContentFactory.getManagedRepositoryContent( repoId ); try
{
managedRepositoryContent = getManagedRepositoryContent( repoId );
}
catch ( RepositoryException e )
{
log.error("No repository content found for "+repoId);
continue;
}
ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier, ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, classifier,
StringUtils.isEmpty( type ) ? "jar" : type, StringUtils.isEmpty( type ) ? "jar" : type,
repoId ); repoId );
@ -797,18 +812,6 @@ public ArtifactContent getArtifactContentText( String groupId, String artifactId
throw new ArchivaRestServiceException( e.getMessage(), throw new ArchivaRestServiceException( e.getMessage(),
Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e ); Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
} }
catch ( RepositoryNotFoundException e )
{
log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( e.getMessage(),
Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
}
catch ( RepositoryException e )
{
log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( e.getMessage(),
Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
}
log.debug( "artifact: {}:{}:{}:{}:{} not found", groupId, artifactId, version, classifier, type ); log.debug( "artifact: {}:{}:{}:{}:{} not found", groupId, artifactId, version, classifier, type );
// 404 ? // 404 ?
return new ArtifactContent(); return new ArtifactContent();
@ -835,8 +838,8 @@ public Boolean artifactAvailable( String groupId, String artifactId, String vers
{ {
continue; continue;
} }
ManagedRepositoryContent managedRepositoryContent = ManagedRepositoryContent managedRepositoryContent = getManagedRepositoryContent( repoId );
repositoryContentFactory.getManagedRepositoryContent( repoId );
// FIXME default to jar which can be wrong for war zip etc.... // FIXME default to jar which can be wrong for war zip etc....
ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version, ArchivaArtifact archivaArtifact = new ArchivaArtifact( groupId, artifactId, version,
StringUtils.isEmpty( classifier ) StringUtils.isEmpty( classifier )

View File

@ -48,6 +48,7 @@
import org.apache.archiva.redback.users.UserManagerException; import org.apache.archiva.redback.users.UserManagerException;
import org.apache.archiva.redback.users.UserNotFoundException; import org.apache.archiva.redback.users.UserNotFoundException;
import org.apache.archiva.repository.*; import org.apache.archiva.repository.*;
import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
import org.apache.archiva.repository.events.RepositoryListener; import org.apache.archiva.repository.events.RepositoryListener;
import org.apache.archiva.repository.metadata.MetadataTools; import org.apache.archiva.repository.metadata.MetadataTools;
import org.apache.archiva.repository.metadata.RepositoryMetadataException; import org.apache.archiva.repository.metadata.RepositoryMetadataException;
@ -101,6 +102,9 @@ public class DefaultRepositoriesService
@Named(value = "taskExecutor#indexing") @Named(value = "taskExecutor#indexing")
private ArchivaIndexingTaskExecutor archivaIndexingTaskExecutor; private ArchivaIndexingTaskExecutor archivaIndexingTaskExecutor;
@Inject
private RepositoryRegistry repositoryRegistry;
@Inject @Inject
private ManagedRepositoryAdmin managedRepositoryAdmin; private ManagedRepositoryAdmin managedRepositoryAdmin;
@ -110,9 +114,6 @@ public class DefaultRepositoriesService
@Inject @Inject
private SecuritySystem securitySystem; private SecuritySystem securitySystem;
@Inject
private RepositoryContentFactory repositoryFactory;
@Inject @Inject
@Named(value = "archivaTaskScheduler#repository") @Named(value = "archivaTaskScheduler#repository")
private ArchivaTaskScheduler scheduler; private ArchivaTaskScheduler scheduler;
@ -180,6 +181,15 @@ public Boolean removeScanningTaskFromQueue( String repositoryId )
} }
} }
private ManagedRepositoryContent getManagedRepositoryContent(String id) throws RepositoryException
{
org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( id );
if (repo==null) {
throw new RepositoryException( "Repository not found "+id );
}
return repo.getContent();
}
@Override @Override
public Boolean scanRepositoryNow( String repositoryId, boolean fullScan ) public Boolean scanRepositoryNow( String repositoryId, boolean fullScan )
throws ArchivaRestServiceException throws ArchivaRestServiceException
@ -187,7 +197,8 @@ public Boolean scanRepositoryNow( String repositoryId, boolean fullScan )
try try
{ {
ManagedRepository repository = managedRepositoryAdmin.getManagedRepository( repositoryId );
org.apache.archiva.repository.ManagedRepository repository = repositoryRegistry.getManagedRepository( repositoryId );
IndexingContext context = managedRepositoryAdmin.createIndexContext( repository ); IndexingContext context = managedRepositoryAdmin.createIndexContext( repository );
@ -367,7 +378,7 @@ public Boolean copyArtifact( ArtifactTransferRequest artifactTransferRequest )
{ {
ManagedRepositoryContent sourceRepository = ManagedRepositoryContent sourceRepository =
repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getRepositoryId() ); getManagedRepositoryContent( artifactTransferRequest.getRepositoryId() );
String artifactSourcePath = sourceRepository.toPath( artifactReference ); String artifactSourcePath = sourceRepository.toPath( artifactReference );
@ -388,7 +399,7 @@ public Boolean copyArtifact( ArtifactTransferRequest artifactTransferRequest )
} }
ManagedRepositoryContent targetRepository = ManagedRepositoryContent targetRepository =
repositoryFactory.getManagedRepositoryContent( artifactTransferRequest.getTargetRepositoryId() ); getManagedRepositoryContent( artifactTransferRequest.getTargetRepositoryId() );
String artifactPath = targetRepository.toPath( artifactReference ); String artifactPath = targetRepository.toPath( artifactReference );
@ -646,7 +657,7 @@ public Boolean removeProjectVersion( String repositoryId, String namespace, Stri
try try
{ {
ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId ); ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
VersionedReference ref = new VersionedReference(); VersionedReference ref = new VersionedReference();
ref.setArtifactId( projectId ); ref.setArtifactId( projectId );
@ -767,7 +778,7 @@ public Boolean deleteArtifact( Artifact artifact )
ref.setGroupId( artifact.getGroupId() ); ref.setGroupId( artifact.getGroupId() );
ref.setVersion( artifact.getVersion() ); ref.setVersion( artifact.getVersion() );
ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId ); ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
ArtifactReference artifactReference = new ArtifactReference(); ArtifactReference artifactReference = new ArtifactReference();
artifactReference.setArtifactId( artifact.getArtifactId() ); artifactReference.setArtifactId( artifact.getArtifactId() );
@ -977,7 +988,7 @@ public Boolean deleteGroupId( String groupId, String repositoryId )
try try
{ {
ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId ); ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
repository.deleteGroupId( groupId ); repository.deleteGroupId( groupId );
@ -1038,7 +1049,7 @@ public Boolean deleteProject( String groupId, String projectId, String repositor
try try
{ {
ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId ); ManagedRepositoryContent repository = getManagedRepositoryContent( repositoryId );
repository.deleteProject( groupId, projectId ); repository.deleteProject( groupId, projectId );
} }
@ -1100,18 +1111,13 @@ public RepositoryScanStatistics scanRepositoryDirectoriesNow( String repositoryI
long sinceWhen = RepositoryScanner.FRESH_SCAN; long sinceWhen = RepositoryScanner.FRESH_SCAN;
try try
{ {
return repoScanner.scan( getManagedRepositoryAdmin().getManagedRepository( repositoryId ), sinceWhen ); return repoScanner.scan( repositoryRegistry.getManagedRepository( repositoryId ), sinceWhen );
} }
catch ( RepositoryScannerException e ) catch ( RepositoryScannerException e )
{ {
log.error( e.getMessage(), e ); log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e ); throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );
} }
catch ( RepositoryAdminException e )
{
log.error( e.getMessage(), e );
throw new ArchivaRestServiceException( "RepositoryScannerException exception: " + e.getMessage(), 500, e );
}
} }
/** /**
@ -1191,16 +1197,6 @@ public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryA
this.managedRepositoryAdmin = managedRepositoryAdmin; this.managedRepositoryAdmin = managedRepositoryAdmin;
} }
public RepositoryContentFactory getRepositoryFactory()
{
return repositoryFactory;
}
public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
{
this.repositoryFactory = repositoryFactory;
}
public RepositorySessionFactory getRepositorySessionFactory() public RepositorySessionFactory getRepositorySessionFactory()
{ {
return repositorySessionFactory; return repositorySessionFactory;

View File

@ -18,6 +18,8 @@
* under the License. * under the License.
*/ */
import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
import org.apache.archiva.redback.components.cache.Cache; import org.apache.archiva.redback.components.cache.Cache;
import org.apache.archiva.redback.components.cache.CacheStatistics; import org.apache.archiva.redback.components.cache.CacheStatistics;
import org.apache.archiva.redback.components.taskqueue.TaskQueue; import org.apache.archiva.redback.components.taskqueue.TaskQueue;
@ -57,6 +59,8 @@ public class DefaultSystemStatusService
private RepositoryScanner scanner; private RepositoryScanner scanner;
ManagedRepositoryAdmin managedRepositoryAdmin;
// display spring scheduled // display spring scheduled
//@Inject @Named (value="springScheduler"); //@Inject @Named (value="springScheduler");
@ -69,6 +73,8 @@ public DefaultSystemStatusService( ApplicationContext applicationContext, Reposi
queues = getBeansOfType( applicationContext, TaskQueue.class ); queues = getBeansOfType( applicationContext, TaskQueue.class );
caches = getBeansOfType( applicationContext, Cache.class ); caches = getBeansOfType( applicationContext, Cache.class );
managedRepositoryAdmin = applicationContext.getBean( ManagedRepositoryAdmin.class );
} }
@Override @Override
@ -178,11 +184,19 @@ public List<RepositoryScannerStatistics> getRepositoryScannerStatistics()
List<RepositoryScannerStatistics> repositoryScannerStatisticsList = List<RepositoryScannerStatistics> repositoryScannerStatisticsList =
new ArrayList<RepositoryScannerStatistics>( repositoryScannerInstances.size() ); new ArrayList<RepositoryScannerStatistics>( repositoryScannerInstances.size() );
for ( RepositoryScannerInstance instance : repositoryScannerInstances ) for ( RepositoryScannerInstance instance : repositoryScannerInstances )
{ {
RepositoryScannerStatistics repositoryScannerStatistics = new RepositoryScannerStatistics(); RepositoryScannerStatistics repositoryScannerStatistics = new RepositoryScannerStatistics();
repositoryScannerStatisticsList.add( repositoryScannerStatistics ); repositoryScannerStatisticsList.add( repositoryScannerStatistics );
repositoryScannerStatistics.setManagedRepository( instance.getRepository() ); try
{
repositoryScannerStatistics.setManagedRepository( managedRepositoryAdmin.getManagedRepository( instance.getRepository().getId()) );
}
catch ( RepositoryAdminException e )
{
log.error("Could not retrieve repository '{}'", instance.getRepository().getId());
}
repositoryScannerStatistics.setNewFileCount( instance.getStats().getNewFileCount() ); repositoryScannerStatistics.setNewFileCount( instance.getStats().getNewFileCount() );
repositoryScannerStatistics.setTotalFileCount( instance.getStats().getTotalFileCount() ); repositoryScannerStatistics.setTotalFileCount( instance.getStats().getTotalFileCount() );
repositoryScannerStatistics.setConsumerScanningStatistics( mapConsumerScanningStatistics( instance ) ); repositoryScannerStatistics.setConsumerScanningStatistics( mapConsumerScanningStatistics( instance ) );

View File

@ -43,6 +43,7 @@
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.Locale;
/** /**
* @author Olivier Lamy * @author Olivier Lamy
@ -320,7 +321,7 @@ protected CommonServices getCommonServices( String authzHeader )
protected ManagedRepository getTestManagedRepository() protected ManagedRepository getTestManagedRepository()
{ {
String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repo" ).toAbsolutePath().toString(); String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repo" ).toAbsolutePath().toString();
return new ManagedRepository( "TEST", "test", location, "default", true, true, false, "2 * * * * ?", null, return new ManagedRepository( Locale.getDefault(), "TEST", "test", location, "default", true, true, false, "2 * * * * ?", null,
false, 2, 3, true, false, "my nice repo", false ); false, 2, 3, true, false, "my nice repo", false );
} }
@ -429,7 +430,7 @@ protected void createAndIndexRepo( String testRepoId, String repoPath, boolean s
getManagedRepositoriesService( authorizationHeader ).deleteManagedRepository( testRepoId, false ); getManagedRepositoriesService( authorizationHeader ).deleteManagedRepository( testRepoId, false );
} }
ManagedRepository managedRepository = new ManagedRepository(); ManagedRepository managedRepository = new ManagedRepository(Locale.getDefault());
managedRepository.setId( testRepoId ); managedRepository.setId( testRepoId );
managedRepository.setName( "test repo" ); managedRepository.setName( "test repo" );

View File

@ -26,6 +26,7 @@
import javax.ws.rs.ForbiddenException; import javax.ws.rs.ForbiddenException;
import java.util.List; import java.util.List;
import java.util.Locale;
/** /**
* @author Olivier Lamy * @author Olivier Lamy
@ -201,21 +202,21 @@ public void checkRemoteConnectivity3()
RemoteRepository getRemoteRepository() RemoteRepository getRemoteRepository()
{ {
return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120, return new RemoteRepository( Locale.getDefault( ), "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
"cool repo" ); "cool repo" );
} }
RemoteRepository getRemoteMavenRepository() RemoteRepository getRemoteMavenRepository()
{ {
return new RemoteRepository( "id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120, return new RemoteRepository( Locale.getDefault( ),"id-maven1", "Maven1", "http://repo.maven.apache.org/maven2", "default", "foo", "foopassword", 120,
"cool repo3" ); "cool repo3" );
} }
RemoteRepository getRemoteOracleRepository() RemoteRepository getRemoteOracleRepository()
{ {
return new RemoteRepository( "id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120, return new RemoteRepository( Locale.getDefault( ),"id-oracle", "Oracle", "http://download.oracle.com/maven", "default", "foo", "foopassword", 120,
"cool repo4" ); "cool repo4" );
} }

View File

@ -37,6 +37,7 @@
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List; import java.util.List;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -544,7 +545,7 @@ protected void cleanSnapshotRepo()
protected ManagedRepository getTestManagedRepository( String id, String path ) protected ManagedRepository getTestManagedRepository( String id, String path )
{ {
String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/" + path ).toAbsolutePath().toString(); String location = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/" + path ).toAbsolutePath().toString();
return new ManagedRepository( id, id, location, "default", true, true, true, "2 * * * * ?", null, false, 80, 80, return new ManagedRepository( Locale.getDefault(), id, id, location, "default", true, true, true, "2 * * * * ?", null, false, 80, 80,
true, false ); true, false );
} }

View File

@ -32,7 +32,10 @@
<context:annotation-config/> <context:annotation-config/>
<context:component-scan <context:component-scan
base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils"/> base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils,org.apache.archiva.repository.content.maven2"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
<property name="properties"> <property name="properties">

View File

@ -32,6 +32,7 @@
import org.apache.archiva.redback.users.User; import org.apache.archiva.redback.users.User;
import org.apache.archiva.redback.users.UserManager; import org.apache.archiva.redback.users.UserManager;
import org.apache.archiva.redback.users.UserManagerException; import org.apache.archiva.redback.users.UserManagerException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.security.common.ArchivaRoleConstants; import org.apache.archiva.security.common.ArchivaRoleConstants;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
@ -79,6 +80,9 @@ public abstract class AbstractSecurityTest
@Named(value = "archivaConfiguration#default") @Named(value = "archivaConfiguration#default")
private ArchivaConfiguration archivaConfiguration; private ArchivaConfiguration archivaConfiguration;
@Inject
private RepositoryRegistry repositoryRegistry;
@Inject @Inject
protected UserRepositories userRepos; protected UserRepositories userRepos;
@ -94,6 +98,7 @@ protected void setupRepository( String repoId )
{ {
archivaConfiguration.getConfiguration().addManagedRepository( repoConfig ); archivaConfiguration.getConfiguration().addManagedRepository( repoConfig );
} }
repositoryRegistry.reload();
// Add repo roles to security. // Add repo roles to security.
userRepos.createMissingRepositoryRoles( repoId ); userRepos.createMissingRepositoryRoles( repoId );

View File

@ -156,7 +156,7 @@ public boolean unQueueTask( RepositoryTask task )
} }
@Override @Override
public String getFilePath( String requestPath, ManagedRepository managedRepository ) public String getFilePath( String requestPath, org.apache.archiva.repository.ManagedRepository managedRepository )
{ {
return null; return null;
} }

View File

@ -27,6 +27,9 @@
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"
default-lazy-init="true"> default-lazy-init="true">
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="securitySystem#testable" class="org.apache.archiva.redback.system.DefaultSecuritySystem"> <bean name="securitySystem#testable" class="org.apache.archiva.redback.system.DefaultSecuritySystem">
<property name="userManager" ref="userManager#memory"/> <property name="userManager" ref="userManager#memory"/>
<property name="keyManager" ref="keyManager#memory"/> <property name="keyManager" ref="keyManager#memory"/>

View File

@ -18,10 +18,10 @@
* under the License. * under the License.
*/ */
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.ConsumerException;
import org.apache.archiva.consumers.ConsumerMonitor; import org.apache.archiva.consumers.ConsumerMonitor;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.repository.ManagedRepository;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;

View File

@ -84,7 +84,7 @@ index.directory=Index Directory
retentionCount=Retention Count retentionCount=Retention Count
snapshots=Snapshots snapshots=Snapshots
blockRedeployments=Block Redeployments blockRedeployments=Block Redeployments
retentionTime=Days Older retentionPeriod=Days Older
cronExpression=Cron Expression cronExpression=Cron Expression
cronExpression.help.title=Cron Expression Format cronExpression.help.title=Cron Expression Format
cronExpression.help.content= Quartz cron is used. Documentation is: <a target="_blank" href="http://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/">here</a> cronExpression.help.content= Quartz cron is used. Documentation is: <a target="_blank" href="http://quartz-scheduler.org/documentation/quartz-2.1.x/cookbook/">here</a>
@ -129,8 +129,8 @@ managedRepository.location.help.title=Location
managedRepository.location.help.content=Location on File System (can be relative to Archiva base directory or absolute path) managedRepository.location.help.content=Location on File System (can be relative to Archiva base directory or absolute path)
managedRepository.indexDirectory.help.title=Index Directory managedRepository.indexDirectory.help.title=Index Directory
managedRepository.indexDirectory.help.content=Path to the Maven Index directory managedRepository.indexDirectory.help.content=Path to the Maven Index directory
managedRepository.retentionTime.help.title=Days Older managedRepository.retentionPeriod.help.title=Days Older
managedRepository.retentionTime.help.content=For snapshots repositories, maximum file days age you want to keep managedRepository.retentionPeriod.help.content=For snapshots repositories, maximum file days age you want to keep
managedRepository.retentionCount.help.title=Retention Count managedRepository.retentionCount.help.title=Retention Count
managedRepository.retentionCount.help.content=For snapshots repositories, maximum of files you want to keep. managedRepository.retentionCount.help.content=For snapshots repositories, maximum of files you want to keep.
managedRepository.description.help.content=A free description for your repository managedRepository.description.help.content=A free description for your repository

View File

@ -34,6 +34,7 @@
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Locale;
/** /**
* @author Olivier Lamy * @author Olivier Lamy
@ -88,7 +89,7 @@ protected String createAndScanRepo()
FileUtils.deleteDirectory( tmpIndexDir.toFile() ); FileUtils.deleteDirectory( tmpIndexDir.toFile() );
} }
String id = Long.toString( System.currentTimeMillis() ); String id = Long.toString( System.currentTimeMillis() );
ManagedRepository managedRepository = new ManagedRepository(); ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );

View File

@ -39,6 +39,7 @@
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -92,7 +93,7 @@ public void downloadMergedIndexWithNonDefaultPath()
org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir ); org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir );
} }
String id = Long.toString( System.currentTimeMillis() ); String id = Long.toString( System.currentTimeMillis() );
ManagedRepository managedRepository = new ManagedRepository(); ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@ -138,7 +139,7 @@ public void downloadMergedIndexWithNonDefaultPath()
// create a repo with a remote on the one with index // create a repo with a remote on the one with index
id = Long.toString( System.currentTimeMillis() ); id = Long.toString( System.currentTimeMillis() );
managedRepository = new ManagedRepository(); managedRepository = new ManagedRepository(Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@ -153,7 +154,7 @@ public void downloadMergedIndexWithNonDefaultPath()
String remoteId = Long.toString( System.currentTimeMillis() ); String remoteId = Long.toString( System.currentTimeMillis() );
RemoteRepository remoteRepository = new RemoteRepository(); RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
remoteRepository.setId( remoteId ); remoteRepository.setId( remoteId );
remoteRepository.setName( remoteId ); remoteRepository.setName( remoteId );
remoteRepository.setDownloadRemoteIndex( true ); remoteRepository.setDownloadRemoteIndex( true );

View File

@ -41,6 +41,7 @@
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -98,7 +99,7 @@ public void downloadMergedIndex()
FileUtils.deleteDirectory( tmpIndexDir.toFile() ); FileUtils.deleteDirectory( tmpIndexDir.toFile() );
} }
String id = Long.toString( System.currentTimeMillis() ); String id = Long.toString( System.currentTimeMillis() );
ManagedRepository managedRepository = new ManagedRepository(); ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@ -142,7 +143,7 @@ public void downloadMergedIndex()
// create a repo with a remote on the one with index // create a repo with a remote on the one with index
id = Long.toString( System.currentTimeMillis() ); id = Long.toString( System.currentTimeMillis() );
managedRepository = new ManagedRepository(); managedRepository = new ManagedRepository(Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/test-repo" );
@ -155,7 +156,7 @@ public void downloadMergedIndex()
getManagedRepositoriesService().addManagedRepository( managedRepository ); getManagedRepositoriesService().addManagedRepository( managedRepository );
RemoteRepository remoteRepository = new RemoteRepository(); RemoteRepository remoteRepository = new RemoteRepository(Locale.getDefault());
remoteRepository.setId( "all-merged" ); remoteRepository.setId( "all-merged" );
remoteRepository.setName( "all-merged" ); remoteRepository.setName( "all-merged" );
remoteRepository.setDownloadRemoteIndex( true ); remoteRepository.setDownloadRemoteIndex( true );

View File

@ -38,6 +38,7 @@
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipFile; import java.util.zip.ZipFile;
@ -82,7 +83,7 @@ public void downloadSNAPSHOT()
org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir ); org.apache.archiva.common.utils.FileUtils.deleteDirectory( tmpIndexDir );
} }
String id = Long.toString( System.currentTimeMillis() ); String id = Long.toString( System.currentTimeMillis() );
ManagedRepository managedRepository = new ManagedRepository(); ManagedRepository managedRepository = new ManagedRepository( Locale.getDefault());
managedRepository.setId( id ); managedRepository.setId( id );
managedRepository.setName( "name of " + id ); managedRepository.setName( "name of " + id );
managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/snapshot-repo" ); managedRepository.setLocation( System.getProperty( "basedir" ) + "/src/test/repositories/snapshot-repo" );

View File

@ -36,6 +36,7 @@
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.Locale;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
@ -184,7 +185,7 @@ protected Server buildStaticServer( Path path )
RemoteRepository getRemoteRepository() RemoteRepository getRemoteRepository()
{ {
return new RemoteRepository( "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120, return new RemoteRepository( Locale.getDefault( ), "id-new", "new one", "http://foo.com", "default", "foo", "foopassword", 120,
"cool repo" ); "cool repo" );
} }

View File

@ -30,6 +30,11 @@
<context:property-placeholder system-properties-mode="OVERRIDE"/> <context:property-placeholder system-properties-mode="OVERRIDE"/>
<context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry"> <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">
<property name="properties"> <property name="properties">
<value> <value>

View File

@ -29,6 +29,10 @@
default-lazy-init="true"> default-lazy-init="true">
<context:property-placeholder system-properties-mode="OVERRIDE"/> <context:property-placeholder system-properties-mode="OVERRIDE"/>
<context:component-scan base-package="org.apache.archiva.repository.content.maven2" />
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry"> <bean name="commons-configuration" class="org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry">

View File

@ -30,7 +30,11 @@
<context:property-placeholder system-properties-mode="OVERRIDE"/> <context:property-placeholder system-properties-mode="OVERRIDE"/>
<context:annotation-config/> <context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.webtest.memory"/> <context:component-scan base-package="org.apache.archiva.webtest.memory,org.apache.archiva.repository.content.maven2"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<alias name="repositorySessionFactory#test" alias="repositorySessionFactory"/> <alias name="repositorySessionFactory#test" alias="repositorySessionFactory"/>

View File

@ -29,7 +29,9 @@
<context:annotation-config/> <context:annotation-config/>
<context:component-scan <context:component-scan
base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils"/> base-package="org.apache.archiva.redback.keys,org.apache.archiva.rest.services.utils,org.apache.archiva.repository.content.maven2"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
<property name="properties"> <property name="properties">

View File

@ -37,6 +37,10 @@
</bean> </bean>
--> -->
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<alias name="repositorySessionFactory#jcr" alias="repositorySessionFactory"/> <alias name="repositorySessionFactory#jcr" alias="repositorySessionFactory"/>
<bean name="TestRepositorySessionFactoryBean" class="org.apache.archiva.TestRepositorySessionFactoryBean"> <bean name="TestRepositorySessionFactoryBean" class="org.apache.archiva.TestRepositorySessionFactoryBean">

View File

@ -32,7 +32,7 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
]; ];
ManagedRepository=function(id,name,layout,indexDirectory,location,snapshots,releases,blockRedeployments,cronExpression, ManagedRepository=function(id,name,layout,indexDirectory,location,snapshots,releases,blockRedeployments,cronExpression,
scanned,retentionTime,retentionCount,deleteReleasedSnapshots,stageRepoNeeded,description, scanned,retentionPeriod,retentionCount,deleteReleasedSnapshots,stageRepoNeeded,description,
skipPackedIndexCreation,feedsUrl,url){ skipPackedIndexCreation,feedsUrl,url){
var self=this; var self=this;
@ -63,9 +63,9 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
//private ManagedRepository stagingRepository; //private ManagedRepository stagingRepository;
//private int retentionTime = 100; //private int retentionPeriod = 100;
this.retentionTime=ko.observable(retentionTime); this.retentionPeriod=ko.observable(retentionPeriod);
this.retentionTime.subscribe(function(newValue){self.modified(true)}); this.retentionPeriod.subscribe(function(newValue){self.modified(true)});
//private int retentionCount = 2; //private int retentionCount = 2;
this.retentionCount=ko.observable(retentionCount); this.retentionCount=ko.observable(retentionCount);
@ -167,7 +167,7 @@ function(jquery,i18n,jqueryTmpl,bootstrap,jqueryValidate,ko) {
return new ManagedRepository(data.id,data.name,data.layout,data.indexDirectory,data.location,data.snapshots return new ManagedRepository(data.id,data.name,data.layout,data.indexDirectory,data.location,data.snapshots
,data.releases, ,data.releases,
data.blockRedeployments,data.cronExpression, data.blockRedeployments,data.cronExpression,
data.scanned,data.retentionTime,data.retentionCount,data.deleteReleasedSnapshots, data.scanned,data.retentionPeriod,data.retentionCount,data.deleteReleasedSnapshots,
data.stageRepoNeeded,data.description,data.skipPackedIndexCreation); data.stageRepoNeeded,data.description,data.skipPackedIndexCreation);
} }

View File

@ -282,14 +282,14 @@ <h2><img src="images/system-file-manager-32-32.png"/>${$.i18n.prop('administrati
</div> </div>
</div> </div>
<div class="control-group"> <div class="control-group">
<label class="control-label" for="retentionTime">${$.i18n.prop('retentionTime')}</label> <label class="control-label" for="retentionPeriod">${$.i18n.prop('retentionPeriod')}</label>
<div class="controls"> <div class="controls">
<input type="text" id="retentionTime" class="digits" name="retentionTime" size="5" <input type="text" id="retentionPeriod" class="digits" name="retentionPeriod" size="5"
data-bind="value: managedRepository.retentionTime"/> data-bind="value: managedRepository.retentionPeriod"/>
<a class="btn btn-warning btn-mini popover-doc" id="managedRepository-retentionTime-info-button" <a class="btn btn-warning btn-mini popover-doc" id="managedRepository-retentionPeriod-info-button"
data-original-title="${$.i18n.prop('managedRepository.retentionTime.help.title')}" data-original-title="${$.i18n.prop('managedRepository.retentionPeriod.help.title')}"
data-content="${$.i18n.prop('managedRepository.retentionTime.help.content')}"> data-content="${$.i18n.prop('managedRepository.retentionPeriod.help.content')}">
<i class="icon-question-sign icon-white"></i> <i class="icon-question-sign icon-white"></i>
</a> </a>
</div> </div>
@ -604,7 +604,7 @@ <h2>POM Snippet</h2></div>
<label class="control-label" for="timeout">${$.i18n.prop('timeout')}</label> <label class="control-label" for="timeout">${$.i18n.prop('timeout')}</label>
<div class="controls"> <div class="controls">
<input type="text" id="timeout" class="digits" name="retentionTime" size="5" <input type="text" id="timeout" class="digits" name="retentionPeriod" size="5"
data-bind="value: remoteRepository.timeout"/> data-bind="value: remoteRepository.timeout"/>
<a class="btn btn-warning btn-mini popover-doc" id="remoteRepository-timeout-info-button" <a class="btn btn-warning btn-mini popover-doc" id="remoteRepository-timeout-info-button"
data-original-title="${$.i18n.prop('remoteRepository.timeout.help.title')}" data-original-title="${$.i18n.prop('remoteRepository.timeout.help.title')}"

View File

@ -19,7 +19,6 @@
* under the License. * under the License.
*/ */
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.filelock.FileLockException; import org.apache.archiva.common.filelock.FileLockException;
import org.apache.archiva.common.filelock.FileLockManager; import org.apache.archiva.common.filelock.FileLockManager;
import org.apache.archiva.common.filelock.FileLockTimeoutException; import org.apache.archiva.common.filelock.FileLockTimeoutException;
@ -35,11 +34,28 @@
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.util.Text; import org.apache.jackrabbit.util.Text;
import org.apache.jackrabbit.webdav.*; import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceFactory;
import org.apache.jackrabbit.webdav.DavResourceIterator;
import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;
import org.apache.jackrabbit.webdav.DavResourceLocator;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
import org.apache.jackrabbit.webdav.io.InputContext; import org.apache.jackrabbit.webdav.io.InputContext;
import org.apache.jackrabbit.webdav.io.OutputContext; import org.apache.jackrabbit.webdav.io.OutputContext;
import org.apache.jackrabbit.webdav.lock.*; import org.apache.jackrabbit.webdav.lock.ActiveLock;
import org.apache.jackrabbit.webdav.property.*; import org.apache.jackrabbit.webdav.lock.LockInfo;
import org.apache.jackrabbit.webdav.lock.LockManager;
import org.apache.jackrabbit.webdav.lock.Scope;
import org.apache.jackrabbit.webdav.lock.Type;
import org.apache.jackrabbit.webdav.property.DavProperty;
import org.apache.jackrabbit.webdav.property.DavPropertyName;
import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
import org.apache.jackrabbit.webdav.property.DavPropertySet;
import org.apache.jackrabbit.webdav.property.DefaultDavProperty;
import org.apache.jackrabbit.webdav.property.ResourceType;
import org.joda.time.DateTime; import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat; import org.joda.time.format.ISODateTimeFormat;
@ -80,7 +96,7 @@ public class ArchivaDavResource
private String remoteAddr; private String remoteAddr;
private final ManagedRepository repository; private final org.apache.archiva.repository.ManagedRepository repository;
private final MimeTypes mimeTypes; private final MimeTypes mimeTypes;
@ -96,7 +112,7 @@ public class ArchivaDavResource
private Logger log = LoggerFactory.getLogger( ArchivaDavResource.class ); private Logger log = LoggerFactory.getLogger( ArchivaDavResource.class );
public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository, public ArchivaDavResource( String localResource, String logicalResource, org.apache.archiva.repository.ManagedRepository repository,
DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory, DavSession session, ArchivaDavResourceLocator locator, DavResourceFactory factory,
MimeTypes mimeTypes, List<AuditListener> auditListeners, MimeTypes mimeTypes, List<AuditListener> auditListeners,
RepositoryArchivaTaskScheduler scheduler, FileLockManager fileLockManager ) RepositoryArchivaTaskScheduler scheduler, FileLockManager fileLockManager )
@ -117,7 +133,7 @@ public ArchivaDavResource( String localResource, String logicalResource, Managed
this.fileLockManager = fileLockManager; this.fileLockManager = fileLockManager;
} }
public ArchivaDavResource( String localResource, String logicalResource, ManagedRepository repository, public ArchivaDavResource( String localResource, String logicalResource, org.apache.archiva.repository.ManagedRepository repository,
String remoteAddr, String principal, DavSession session, String remoteAddr, String principal, DavSession session,
ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes, ArchivaDavResourceLocator locator, DavResourceFactory factory, MimeTypes mimeTypes,
List<AuditListener> auditListeners, RepositoryArchivaTaskScheduler scheduler, List<AuditListener> auditListeners, RepositoryArchivaTaskScheduler scheduler,

View File

@ -20,7 +20,6 @@
*/ */
import org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.RepositoryAdminException;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.admin.model.beans.RemoteRepository; import org.apache.archiva.admin.model.beans.RemoteRepository;
import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin;
import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin; import org.apache.archiva.admin.model.remote.RemoteRepositoryAdmin;
@ -32,7 +31,12 @@
import org.apache.archiva.common.utils.VersionUtil; import org.apache.archiva.common.utils.VersionUtil;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.RepositoryGroupConfiguration; import org.apache.archiva.configuration.RepositoryGroupConfiguration;
import org.apache.archiva.indexer.merger.*; import org.apache.archiva.indexer.merger.IndexMerger;
import org.apache.archiva.indexer.merger.IndexMergerException;
import org.apache.archiva.indexer.merger.IndexMergerRequest;
import org.apache.archiva.indexer.merger.MergedRemoteIndexesTask;
import org.apache.archiva.indexer.merger.MergedRemoteIndexesTaskRequest;
import org.apache.archiva.indexer.merger.TemporaryGroupIndex;
import org.apache.archiva.indexer.search.RepositorySearch; import org.apache.archiva.indexer.search.RepositorySearch;
import org.apache.archiva.maven2.metadata.MavenMetadataReader; import org.apache.archiva.maven2.metadata.MavenMetadataReader;
import org.apache.archiva.metadata.model.facets.AuditEvent; import org.apache.archiva.metadata.model.facets.AuditEvent;
@ -52,12 +56,16 @@
import org.apache.archiva.redback.system.SecuritySession; import org.apache.archiva.redback.system.SecuritySession;
import org.apache.archiva.redback.users.User; import org.apache.archiva.redback.users.User;
import org.apache.archiva.redback.users.UserManager; import org.apache.archiva.redback.users.UserManager;
import org.apache.archiva.repository.ManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.ReleaseScheme;
import org.apache.archiva.repository.RepositoryContentFactory; import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryException; import org.apache.archiva.repository.RepositoryException;
import org.apache.archiva.repository.RepositoryNotFoundException; import org.apache.archiva.repository.RepositoryNotFoundException;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.content.maven2.RepositoryRequest; import org.apache.archiva.repository.content.maven2.RepositoryRequest;
import org.apache.archiva.repository.events.AuditListener; import org.apache.archiva.repository.events.AuditListener;
import org.apache.archiva.repository.features.IndexCreationFeature;
import org.apache.archiva.repository.layout.LayoutException; import org.apache.archiva.repository.layout.LayoutException;
import org.apache.archiva.repository.metadata.MetadataTools; import org.apache.archiva.repository.metadata.MetadataTools;
import org.apache.archiva.repository.metadata.RepositoryMetadataException; import org.apache.archiva.repository.metadata.RepositoryMetadataException;
@ -72,7 +80,13 @@
import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.SystemUtils;
import org.apache.jackrabbit.webdav.*; import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceFactory;
import org.apache.jackrabbit.webdav.DavResourceLocator;
import org.apache.jackrabbit.webdav.DavServletRequest;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.lock.LockManager; import org.apache.jackrabbit.webdav.lock.LockManager;
import org.apache.jackrabbit.webdav.lock.SimpleLockManager; import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
import org.apache.maven.index.context.IndexingContext; import org.apache.maven.index.context.IndexingContext;
@ -94,7 +108,13 @@
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.*; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* *
@ -142,6 +162,9 @@ public class ArchivaDavResourceFactory
@Inject @Inject
private ManagedRepositoryAdmin managedRepositoryAdmin; private ManagedRepositoryAdmin managedRepositoryAdmin;
@Inject
private RepositoryRegistry repositoryRegistry;
@Inject @Inject
private IndexMerger indexMerger; private IndexMerger indexMerger;
@ -283,40 +306,28 @@ public DavResource createResource( final DavResourceLocator locator, final DavSe
archivaLocator.getRepositoryId(), e.getMessage() ); archivaLocator.getRepositoryId(), e.getMessage() );
} }
ManagedRepositoryContent managedRepositoryContent = null;
try ManagedRepository repo = repositoryRegistry.getManagedRepository( archivaLocator.getRepositoryId() );
{ if (repo==null) {
managedRepositoryContent =
repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );
}
catch ( RepositoryNotFoundException e )
{
throw new DavException( HttpServletResponse.SC_NOT_FOUND, throw new DavException( HttpServletResponse.SC_NOT_FOUND,
"Invalid repository: " + archivaLocator.getRepositoryId() ); "Invalid repository: " + archivaLocator.getRepositoryId() );
} }
catch ( RepositoryException e ) ManagedRepositoryContent managedRepositoryContent = repo.getContent( );
{ if (managedRepositoryContent==null) {
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e ); log.error("Inconsistency detected. Repository content not found for '{}'", archivaLocator.getRepositoryId());
throw new DavException( HttpServletResponse.SC_NOT_FOUND,
"Invalid repository: " + archivaLocator.getRepositoryId() );
} }
log.debug( "Managed repository '{}' accessed by '{}'", managedRepositoryContent.getId(), activePrincipal ); log.debug( "Managed repository '{}' accessed by '{}'", managedRepositoryContent.getId(), activePrincipal );
try resource = processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
{ repo);
resource = processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
managedRepositoryAdmin.getManagedRepository(
archivaLocator.getRepositoryId() ) );
String logicalResource = getLogicalResource( archivaLocator, null, false ); String logicalResource = getLogicalResource( archivaLocator, null, false );
resourcesInAbsolutePath.add( resourcesInAbsolutePath.add(
Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource ).toAbsolutePath().toString() ); Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource ).toAbsolutePath().toString() );
}
catch ( RepositoryAdminException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
}
} }
String requestedResource = request.getRequestURI(); String requestedResource = request.getRequestURI();
@ -457,22 +468,17 @@ private DavResource processRepositoryGroup( final DavServletRequest request,
for ( String repositoryId : repositories ) for ( String repositoryId : repositories )
{ {
ManagedRepositoryContent managedRepositoryContent; ManagedRepositoryContent managedRepositoryContent;
ManagedRepository managedRepository = repositoryRegistry.getManagedRepository( repositoryId );
if (managedRepository==null) {
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not find repository with id "+repositoryId );
}
managedRepositoryContent = managedRepository.getContent();
if (managedRepositoryContent==null) {
log.error("Inconsistency detected. Repository content not found for '{}'",repositoryId);
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Could not find repository content with id "+repositoryId );
}
try try
{ {
managedRepositoryContent = repositoryFactory.getManagedRepositoryContent( repositoryId );
}
catch ( RepositoryNotFoundException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
}
catch ( RepositoryException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
}
try
{
ManagedRepository managedRepository = managedRepositoryAdmin.getManagedRepository( repositoryId );
DavResource updatedResource = DavResource updatedResource =
processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent, processRepository( request, archivaLocator, activePrincipal, managedRepositoryContent,
managedRepository ); managedRepository );
@ -493,10 +499,6 @@ private DavResource processRepositoryGroup( final DavServletRequest request,
{ {
storedExceptions.add( e ); storedExceptions.add( e );
} }
catch ( RepositoryAdminException e )
{
storedExceptions.add( new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e ) );
}
} }
} }
if ( resource == null ) if ( resource == null )
@ -522,12 +524,12 @@ private DavResource processRepositoryGroup( final DavServletRequest request,
return resource; return resource;
} }
private String getLogicalResource( ArchivaDavResourceLocator archivaLocator, ManagedRepository managedRepository, private String getLogicalResource( ArchivaDavResourceLocator archivaLocator, org.apache.archiva.repository.ManagedRepository managedRepository,
boolean useOrigResourcePath ) boolean useOrigResourcePath )
{ {
// FIXME remove this hack // FIXME remove this hack
// but currently managedRepository can be null in case of group // but currently managedRepository can be null in case of group
String layout = managedRepository == null ? new ManagedRepository().getLayout() : managedRepository.getLayout(); String layout = managedRepository == null ? "default" : managedRepository.getLayout();
RepositoryStorage repositoryStorage = RepositoryStorage repositoryStorage =
this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class ); this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
String path = repositoryStorage.getFilePath( String path = repositoryStorage.getFilePath(
@ -545,7 +547,7 @@ private String evaluatePathWithVersion( ArchivaDavResourceLocator archivaLocator
throws DavException throws DavException
{ {
String layout = managedRepositoryContent.getRepository() == null String layout = managedRepositoryContent.getRepository() == null
? new ManagedRepository().getLayout() ? "default"
: managedRepositoryContent.getRepository().getLayout(); : managedRepositoryContent.getRepository().getLayout();
RepositoryStorage repositoryStorage = RepositoryStorage repositoryStorage =
this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class ); this.applicationContext.getBean( "repositoryStorage#" + layout, RepositoryStorage.class );
@ -570,7 +572,7 @@ private String evaluatePathWithVersion( ArchivaDavResourceLocator archivaLocator
private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator, private DavResource processRepository( final DavServletRequest request, ArchivaDavResourceLocator archivaLocator,
String activePrincipal, ManagedRepositoryContent managedRepositoryContent, String activePrincipal, ManagedRepositoryContent managedRepositoryContent,
ManagedRepository managedRepository ) org.apache.archiva.repository.ManagedRepository managedRepository )
throws DavException throws DavException
{ {
DavResource resource = null; DavResource resource = null;
@ -659,7 +661,7 @@ private DavResource processRepository( final DavServletRequest request, ArchivaD
// check if target repo is enabled for releases // check if target repo is enabled for releases
// we suppose that release-artifacts can be deployed only to repos enabled for releases // we suppose that release-artifacts can be deployed only to repos enabled for releases
if ( managedRepositoryContent.getRepository().isReleases() && !repositoryRequest.isMetadata( if ( managedRepositoryContent.getRepository().getActiveReleaseSchemes().contains( ReleaseScheme.RELEASE ) && !repositoryRequest.isMetadata(
resourcePath ) && !repositoryRequest.isSupportFile( resourcePath ) ) resourcePath ) && !repositoryRequest.isSupportFile( resourcePath ) )
{ {
ArtifactReference artifact = null; ArtifactReference artifact = null;
@ -671,7 +673,7 @@ private DavResource processRepository( final DavServletRequest request, ArchivaD
{ {
// check if artifact already exists and if artifact re-deployment to the repository is allowed // check if artifact already exists and if artifact re-deployment to the repository is allowed
if ( managedRepositoryContent.hasContent( artifact ) if ( managedRepositoryContent.hasContent( artifact )
&& managedRepositoryContent.getRepository().isBlockRedeployments() ) && managedRepositoryContent.getRepository().blocksRedeployments())
{ {
log.warn( "Overwriting released artifacts in repository '{}' is not allowed.", log.warn( "Overwriting released artifacts in repository '{}' is not allowed.",
managedRepositoryContent.getId() ); managedRepositoryContent.getId() );
@ -727,41 +729,30 @@ public DavResource createResource( final DavResourceLocator locator, final DavSe
ArchivaDavResourceLocator archivaLocator = checkLocatorIsInstanceOfRepositoryLocator( locator ); ArchivaDavResourceLocator archivaLocator = checkLocatorIsInstanceOfRepositoryLocator( locator );
ManagedRepositoryContent managedRepositoryContent; ManagedRepositoryContent managedRepositoryContent;
try ManagedRepository repo = repositoryRegistry.getManagedRepository( archivaLocator.getRepositoryId( ) );
{ if (repo==null) {
managedRepositoryContent =
repositoryFactory.getManagedRepositoryContent( archivaLocator.getRepositoryId() );
}
catch ( RepositoryNotFoundException e )
{
throw new DavException( HttpServletResponse.SC_NOT_FOUND, throw new DavException( HttpServletResponse.SC_NOT_FOUND,
"Invalid repository: " + archivaLocator.getRepositoryId() ); "Invalid repository: " + archivaLocator.getRepositoryId() );
} }
catch ( RepositoryException e ) managedRepositoryContent = repo.getContent();
{ if (managedRepositoryContent==null) {
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e ); log.error("Inconsistency detected. Repository content not found for '{}'", archivaLocator.getRepositoryId());
throw new DavException( HttpServletResponse.SC_NOT_FOUND,
"Invalid repository: " + archivaLocator.getRepositoryId() );
} }
DavResource resource = null; DavResource resource = null;
try String logicalResource = getLogicalResource( archivaLocator, repo, false );
if ( logicalResource.startsWith( "/" ) )
{ {
String logicalResource = getLogicalResource( archivaLocator, managedRepositoryAdmin.getManagedRepository( logicalResource = logicalResource.substring( 1 );
archivaLocator.getRepositoryId() ), false ); }
if ( logicalResource.startsWith( "/" ) ) Path resourceFile = Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource );
{ resource = new ArchivaDavResource( resourceFile.toAbsolutePath().toString(), logicalResource,
logicalResource = logicalResource.substring( 1 ); repo, davSession, archivaLocator,
} this, mimeTypes, auditListeners, scheduler, fileLockManager );
Path resourceFile = Paths.get( managedRepositoryContent.getRepoRoot(), logicalResource );
resource = new ArchivaDavResource( resourceFile.toAbsolutePath().toString(), logicalResource,
managedRepositoryContent.getRepository(), davSession, archivaLocator,
this, mimeTypes, auditListeners, scheduler, fileLockManager );
resource.addLockManager( lockManager ); resource.addLockManager( lockManager );
}
catch ( RepositoryAdminException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e );
}
return resource; return resource;
} }
@ -1027,7 +1018,7 @@ private DavResource getResourceFromGroup( DavServletRequest request, List<String
// FIXME add a method with group in the repository storage // FIXME add a method with group in the repository storage
String firstRepoId = repositoryGroupConfiguration.getRepositories().get( 0 ); String firstRepoId = repositoryGroupConfiguration.getRepositories().get( 0 );
String path = getLogicalResource( locator, managedRepositoryAdmin.getManagedRepository( firstRepoId ), false ); String path = getLogicalResource( locator, repositoryRegistry.getManagedRepository( firstRepoId ), false );
if ( path.startsWith( "/" ) ) if ( path.startsWith( "/" ) )
{ {
path = path.substring( 1 ); path = path.substring( 1 );
@ -1084,32 +1075,28 @@ private DavResource getResourceFromGroup( DavServletRequest request, List<String
for ( String repository : repositories ) for ( String repository : repositories )
{ {
ManagedRepositoryContent managedRepository = null; ManagedRepositoryContent managedRepository = null;
ManagedRepository repo = repositoryRegistry.getManagedRepository( repository );
try if (repo == null) {
{
managedRepository = repositoryFactory.getManagedRepositoryContent( repository );
}
catch ( RepositoryNotFoundException e )
{
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Invalid managed repository <" + repository + ">: " + e.getMessage() ); "Invalid managed repository <" + repository + ">");
} }
catch ( RepositoryException e ) managedRepository = repo.getContent();
{ if (managedRepository==null) {
log.error("Inconsistency detected. Repository content not found for '{}'",repository);
throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR, throw new DavException( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
"Invalid managed repository <" + repository + ">: " + e.getMessage() ); "Invalid managed repository <" + repository + ">");
} }
Path resourceFile = Paths.get( managedRepository.getRepoRoot(), logicalResource.getPath() ); Path resourceFile = Paths.get( managedRepository.getRepoRoot(), logicalResource.getPath() );
if ( Files.exists(resourceFile) ) if ( Files.exists(resourceFile) )
{ {
// in case of group displaying index directory doesn't have sense !! // in case of group displaying index directory doesn't have sense !!
String repoIndexDirectory = managedRepository.getRepository().getIndexDirectory(); IndexCreationFeature idf = managedRepository.getRepository().getFeature(IndexCreationFeature.class).get();
String repoIndexDirectory = idf.getIndexPath().toString();
if ( StringUtils.isNotEmpty( repoIndexDirectory ) ) if ( StringUtils.isNotEmpty( repoIndexDirectory ) )
{ {
if ( !Paths.get( repoIndexDirectory ).isAbsolute() ) if ( !Paths.get( repoIndexDirectory ).isAbsolute() )
{ {
repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation(), repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation() ).resolve(
StringUtils.isEmpty( repoIndexDirectory ) StringUtils.isEmpty( repoIndexDirectory )
? ".indexer" ? ".indexer"
: repoIndexDirectory ).toAbsolutePath().toString(); : repoIndexDirectory ).toAbsolutePath().toString();
@ -1117,7 +1104,7 @@ private DavResource getResourceFromGroup( DavServletRequest request, List<String
} }
if ( StringUtils.isEmpty( repoIndexDirectory ) ) if ( StringUtils.isEmpty( repoIndexDirectory ) )
{ {
repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation(), repoIndexDirectory = Paths.get( managedRepository.getRepository().getLocation() ).resolve(
".indexer" ).toAbsolutePath().toString(); ".indexer" ).toAbsolutePath().toString();
} }
@ -1460,4 +1447,14 @@ public void setManagedRepositoryAdmin( ManagedRepositoryAdmin managedRepositoryA
{ {
this.managedRepositoryAdmin = managedRepositoryAdmin; this.managedRepositoryAdmin = managedRepositoryAdmin;
} }
public RepositoryRegistry getRepositoryRegistry( )
{
return repositoryRegistry;
}
public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry )
{
this.repositoryRegistry = repositoryRegistry;
}
} }

View File

@ -204,7 +204,7 @@ public synchronized void initServers( ServletConfig servletConfig )
long end = System.currentTimeMillis(); long end = System.currentTimeMillis();
log.info( "initServers done in {} ms", (end - start) ); log.debug( "initServers done in {} ms", (end - start) );
} }
@Override @Override

View File

@ -28,6 +28,7 @@
import org.apache.archiva.configuration.Configuration; import org.apache.archiva.configuration.Configuration;
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.archiva.webdav.httpunit.MkColMethodWebRequest; import org.apache.archiva.webdav.httpunit.MkColMethodWebRequest;
import org.apache.archiva.webdav.util.MavenIndexerCleaner; import org.apache.archiva.webdav.util.MavenIndexerCleaner;
@ -99,6 +100,9 @@ public abstract class AbstractRepositoryServletTestCase
@Inject @Inject
protected ManagedRepositoryAdmin managedRepositoryAdmin; protected ManagedRepositoryAdmin managedRepositoryAdmin;
@Inject
RepositoryRegistry repositoryRegistry;
protected Logger log = LoggerFactory.getLogger( getClass() ); protected Logger log = LoggerFactory.getLogger( getClass() );
@ -106,6 +110,7 @@ protected void saveConfiguration()
throws Exception throws Exception
{ {
saveConfiguration( archivaConfiguration ); saveConfiguration( archivaConfiguration );
repositoryRegistry.reload();
} }
@Before @Before
@ -135,6 +140,7 @@ public void setUp()
config.addManagedRepository( config.addManagedRepository(
createManagedRepository( REPOID_INTERNAL, "Internal Test Repo", repoRootInternal, true ) ); createManagedRepository( REPOID_INTERNAL, "Internal Test Repo", repoRootInternal, true ) );
repositoryRegistry.reload();
managedRepositoryAdmin.createIndexContext( managedRepositoryAdmin.getManagedRepository( REPOID_INTERNAL ) ); managedRepositoryAdmin.createIndexContext( managedRepositoryAdmin.getManagedRepository( REPOID_INTERNAL ) );
@ -776,6 +782,7 @@ protected RemoteRepositoryConfiguration createRemoteRepository( String id, Strin
protected void saveConfiguration( ArchivaConfiguration archivaConfiguration ) protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
throws Exception throws Exception
{ {
repositoryRegistry.reload();
archivaConfiguration.save( archivaConfiguration.getConfiguration() ); archivaConfiguration.save( archivaConfiguration.getConfiguration() );
} }

View File

@ -34,8 +34,10 @@
import org.apache.archiva.configuration.RepositoryGroupConfiguration; import org.apache.archiva.configuration.RepositoryGroupConfiguration;
import org.apache.archiva.proxy.DefaultRepositoryProxyConnectors; import org.apache.archiva.proxy.DefaultRepositoryProxyConnectors;
import org.apache.archiva.proxy.model.ProxyFetchResult; import org.apache.archiva.proxy.model.ProxyFetchResult;
import org.apache.archiva.repository.EditableManagedRepository;
import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryContentFactory; import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent; import org.apache.archiva.repository.content.maven2.ManagedDefaultRepositoryContent;
import org.apache.archiva.repository.content.maven2.RepositoryRequest; import org.apache.archiva.repository.content.maven2.RepositoryRequest;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
@ -44,12 +46,15 @@
import org.apache.jackrabbit.webdav.DavResourceLocator; import org.apache.jackrabbit.webdav.DavResourceLocator;
import org.apache.jackrabbit.webdav.DavServletRequest; import org.apache.jackrabbit.webdav.DavServletRequest;
import org.apache.jackrabbit.webdav.DavServletResponse; import org.apache.jackrabbit.webdav.DavServletResponse;
import org.easymock.EasyMock;
import org.easymock.IMocksControl; import org.easymock.IMocksControl;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import javax.inject.Inject; import javax.inject.Inject;
@ -58,6 +63,7 @@
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import static org.easymock.EasyMock.*; import static org.easymock.EasyMock.*;
@ -112,6 +118,9 @@ public class ArchivaDavResourceFactoryTest
@Inject @Inject
DefaultManagedRepositoryAdmin defaultManagedRepositoryAdmin; DefaultManagedRepositoryAdmin defaultManagedRepositoryAdmin;
@Inject
RepositoryRegistry repositoryRegistry;
@Inject @Inject
RemoteRepositoryAdmin remoteRepositoryAdmin; RemoteRepositoryAdmin remoteRepositoryAdmin;
@ -138,13 +147,18 @@ public void setUp()
archivaConfiguration = archivaConfigurationControl.createMock( ArchivaConfiguration.class ); archivaConfiguration = archivaConfigurationControl.createMock( ArchivaConfiguration.class );
config = new Configuration(); config = new Configuration();
expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 5, 20 ); expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2, 20 );
expect (archivaConfiguration.getDefaultLocale()).andReturn( Locale.getDefault() ).anyTimes();
archivaConfiguration.addListener( EasyMock.anyObject( ) );
expectLastCall().times(0, 4);
archivaConfiguration.save( config ); archivaConfiguration.save( config );
expectLastCall().times( 1, 4 ); expectLastCall().times( 0, 4 );
archivaConfigurationControl.replay(); archivaConfigurationControl.replay();
defaultManagedRepositoryAdmin.setArchivaConfiguration( archivaConfiguration ); defaultManagedRepositoryAdmin.setArchivaConfiguration( archivaConfiguration );
repositoryRegistry.setArchivaConfiguration( archivaConfiguration );
repositoryRegistry.reload();
( (DefaultRepositoryCommonValidator) defaultManagedRepositoryAdmin.getRepositoryCommonValidator() ).setArchivaConfiguration( ( (DefaultRepositoryCommonValidator) defaultManagedRepositoryAdmin.getRepositoryCommonValidator() ).setArchivaConfiguration(
archivaConfiguration ); archivaConfiguration );
if ( defaultManagedRepositoryAdmin.getManagedRepository( RELEASES_REPO ) == null ) if ( defaultManagedRepositoryAdmin.getManagedRepository( RELEASES_REPO ) == null )
@ -184,11 +198,12 @@ public void setUp()
resourceFactory.setConnectors( new OverridingRepositoryProxyConnectors() ); resourceFactory.setConnectors( new OverridingRepositoryProxyConnectors() );
resourceFactory.setRemoteRepositoryAdmin( remoteRepositoryAdmin ); resourceFactory.setRemoteRepositoryAdmin( remoteRepositoryAdmin );
resourceFactory.setManagedRepositoryAdmin( defaultManagedRepositoryAdmin ); resourceFactory.setManagedRepositoryAdmin( defaultManagedRepositoryAdmin );
resourceFactory.setRepositoryRegistry( repositoryRegistry );
} }
private ManagedRepository createManagedRepository( String id, String location, String layout ) private ManagedRepository createManagedRepository( String id, String location, String layout )
{ {
ManagedRepository repoConfig = new ManagedRepository(); ManagedRepository repoConfig = new ManagedRepository( Locale.getDefault());
repoConfig.setId( id ); repoConfig.setId( id );
repoConfig.setName( id ); repoConfig.setName( id );
repoConfig.setLocation( location ); repoConfig.setLocation( location );
@ -201,8 +216,12 @@ private ManagedRepositoryContent createManagedRepositoryContent( String repoId )
throws RepositoryAdminException throws RepositoryAdminException
{ {
ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent(); ManagedRepositoryContent repoContent = new ManagedDefaultRepositoryContent();
repoContent.setRepository( defaultManagedRepositoryAdmin.getManagedRepository( repoId ) ); org.apache.archiva.repository.ManagedRepository repo = repositoryRegistry.getManagedRepository( repoId );
repoContent.setRepository( repo );
if (repo!=null && repo instanceof EditableManagedRepository)
{
( (EditableManagedRepository) repo ).setContent( repoContent );
}
return repoContent; return repoContent;
} }
@ -466,9 +485,7 @@ public void testRequestArtifactMetadataThreePartsRepoHasDefaultLayout()
{ {
archivaConfigurationControl.reset(); archivaConfigurationControl.reset();
expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 2 ); expect( archivaConfiguration.getConfiguration() ).andReturn( config ).times( 1 );
expect( repoFactory.getManagedRepositoryContent( INTERNAL_REPO ) ).andReturn( internalRepo );
expect( request.getMethod() ).andReturn( "GET" ).times( 4 ); expect( request.getMethod() ).andReturn( "GET" ).times( 4 );
@ -561,6 +578,9 @@ public void testRequestArtifactMetadataTwoPartsRepoHasDefaultLayout()
public void testRequestMetadataRepoIsLegacy() public void testRequestMetadataRepoIsLegacy()
throws Exception throws Exception
{ {
ManagedRepositoryContent legacyRepo = createManagedRepositoryContent( LEGACY_REPO );
ConfigurableListableBeanFactory beanFactory = ((ConfigurableApplicationContext) applicationContext).getBeanFactory();
beanFactory.registerSingleton("managedRepositoryContent#legacy", legacyRepo);
defaultManagedRepositoryAdmin.addManagedRepository( defaultManagedRepositoryAdmin.addManagedRepository(
createManagedRepository( LEGACY_REPO, Paths.get( "target/test-classes/" + LEGACY_REPO ).toString(), createManagedRepository( LEGACY_REPO, Paths.get( "target/test-classes/" + LEGACY_REPO ).toString(),
"legacy" ), false, null ); "legacy" ), false, null );
@ -568,7 +588,6 @@ public void testRequestMetadataRepoIsLegacy()
new ArchivaDavResourceLocator( "", "/repository/" + LEGACY_REPO + "/eclipse/maven-metadata.xml", new ArchivaDavResourceLocator( "", "/repository/" + LEGACY_REPO + "/eclipse/maven-metadata.xml",
LEGACY_REPO, new ArchivaDavLocatorFactory() ); LEGACY_REPO, new ArchivaDavLocatorFactory() );
ManagedRepositoryContent legacyRepo = createManagedRepositoryContent( LEGACY_REPO );
// use actual object (this performs the isMetadata, isDefault and isSupportFile check!) // use actual object (this performs the isMetadata, isDefault and isSupportFile check!)
RepositoryRequest repoRequest = new RepositoryRequest( ); RepositoryRequest repoRequest = new RepositoryRequest( );

View File

@ -20,13 +20,24 @@
*/ */
import junit.framework.TestCase; import junit.framework.TestCase;
import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.filelock.FileLockManager; import org.apache.archiva.common.filelock.FileLockManager;
import org.apache.archiva.repository.events.AuditListener; import org.apache.archiva.repository.events.AuditListener;
import org.apache.archiva.repository.maven2.MavenManagedRepository;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.apache.archiva.webdav.util.MimeTypes; import org.apache.archiva.webdav.util.MimeTypes;
import org.apache.jackrabbit.webdav.*; import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.lock.*; import org.apache.jackrabbit.webdav.DavResource;
import org.apache.jackrabbit.webdav.DavResourceFactory;
import org.apache.jackrabbit.webdav.DavResourceLocator;
import org.apache.jackrabbit.webdav.DavServletRequest;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.DavSession;
import org.apache.jackrabbit.webdav.lock.ActiveLock;
import org.apache.jackrabbit.webdav.lock.LockInfo;
import org.apache.jackrabbit.webdav.lock.LockManager;
import org.apache.jackrabbit.webdav.lock.Scope;
import org.apache.jackrabbit.webdav.lock.SimpleLockManager;
import org.apache.jackrabbit.webdav.lock.Type;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -66,7 +77,7 @@ public class DavResourceTest
private LockManager lockManager; private LockManager lockManager;
private ManagedRepository repository = new ManagedRepository(); private MavenManagedRepository repository = new MavenManagedRepository( "repo001", "repo001");
@Override @Override
@Before @Before

View File

@ -125,6 +125,7 @@ public void setUp()
configuration.removeManagedRepository( managedRepositoryConfiguration ); configuration.removeManagedRepository( managedRepositoryConfiguration );
org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoRootInvalid ); org.apache.archiva.common.utils.FileUtils.deleteDirectory( repoRootInvalid );
repositoryRegistry.reload();
saveConfiguration( archivaConfiguration ); saveConfiguration( archivaConfiguration );
startRepository(); startRepository();

View File

@ -33,6 +33,7 @@
import org.apache.archiva.redback.system.SecuritySession; import org.apache.archiva.redback.system.SecuritySession;
import org.apache.archiva.redback.users.User; import org.apache.archiva.redback.users.User;
import org.apache.archiva.redback.users.memory.SimpleUser; import org.apache.archiva.redback.users.memory.SimpleUser;
import org.apache.archiva.repository.RepositoryRegistry;
import org.apache.archiva.repository.audit.TestAuditListener; import org.apache.archiva.repository.audit.TestAuditListener;
import org.apache.archiva.security.ServletAuthenticator; import org.apache.archiva.security.ServletAuthenticator;
import org.apache.archiva.security.common.ArchivaRoleConstants; import org.apache.archiva.security.common.ArchivaRoleConstants;
@ -86,6 +87,9 @@ public class RepositoryServletSecurityTest
@Inject @Inject
protected ArchivaConfiguration archivaConfiguration; protected ArchivaConfiguration archivaConfiguration;
@Inject
protected RepositoryRegistry repositoryRegistry;
private DavSessionProvider davSessionProvider; private DavSessionProvider davSessionProvider;
private IMocksControl servletAuthControl; private IMocksControl servletAuthControl;
@ -188,6 +192,7 @@ protected ManagedRepositoryConfiguration createManagedRepository( String id, Str
protected void saveConfiguration( ArchivaConfiguration archivaConfiguration ) protected void saveConfiguration( ArchivaConfiguration archivaConfiguration )
throws Exception throws Exception
{ {
repositoryRegistry.reload();
archivaConfiguration.save( archivaConfiguration.getConfiguration() ); archivaConfiguration.save( archivaConfiguration.getConfiguration() );
} }

View File

@ -20,7 +20,7 @@
<configuration> <configuration>
<version>2</version> <version>3.0.0</version>
<repositoryScanning> <repositoryScanning>
<fileTypes> <fileTypes>

View File

@ -31,7 +31,10 @@
<context:annotation-config/> <context:annotation-config/>
<context:component-scan <context:component-scan
base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.webdav.util,org.apache.archiva.common.plexusbridge"/> base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.webdav.util,org.apache.archiva.common.plexusbridge,org.apache.archiva.repository.content.maven2,org.apache.archiva.repository"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
<property name="properties"> <property name="properties">

View File

@ -30,7 +30,10 @@
<context:property-placeholder system-properties-mode="OVERRIDE"/> <context:property-placeholder system-properties-mode="OVERRIDE"/>
<context:annotation-config/> <context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository"/> <context:component-scan base-package="org.apache.archiva.redback.keys,org.apache.archiva.webdav,org.apache.archiva.metadata.repository,org.apache.archiva.repository,org.apache.archiva.repository.content.maven2"/>
<alias name="managedRepositoryContent#maven" alias="managedRepositoryContent#default" />
<alias name="remoteRepositoryContent#maven" alias="remoteRepositoryContent#default" />
<bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler"> <bean name="scheduler" class="org.apache.archiva.redback.components.scheduler.DefaultScheduler">
<property name="properties"> <property name="properties">