[MRM-1512] api to configure RepositoryScanningConfiguration : refactor to remove full access to bean with a large tree of nesteed beans. use simple methods to update fields of RepositoryScanningConfiguration.

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1167224 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2011-09-09 14:41:04 +00:00
parent 97de6d3118
commit b31467ae8d
9 changed files with 158 additions and 160 deletions

View File

@ -39,18 +39,15 @@ public interface ArchivaAdministration
void deleteLegacyArtifactPath( String path, AuditInformation auditInformation )
throws RepositoryAdminException;
RepositoryScanning getRepositoryScanning()
throws RepositoryAdminException;
void updateRepositoryScanning( RepositoryScanning repositoryScanning, AuditInformation auditInformation )
throws RepositoryAdminException;
void addFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
throws RepositoryAdminException;
void removeFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
throws RepositoryAdminException;
List<FileType> getFileTypes()
throws RepositoryAdminException;
FileType getFileType( String fileTypeId )
throws RepositoryAdminException;
@ -66,6 +63,8 @@ public interface ArchivaAdministration
void setKnownContentConsumers( List<String> knownContentConsumers, AuditInformation auditInformation )
throws RepositoryAdminException;
List<String> getKnownContentConsumers()
throws RepositoryAdminException;
void removeKnownContentConsumer( String knownContentConsumer, AuditInformation auditInformation )
throws RepositoryAdminException;
@ -76,6 +75,9 @@ public interface ArchivaAdministration
void setInvalidContentConsumers( List<String> invalidContentConsumers, AuditInformation auditInformation )
throws RepositoryAdminException;
List<String> getInvalidContentConsumers()
throws RepositoryAdminException;
void removeInvalidContentConsumer( String invalidContentConsumer, AuditInformation auditInformation )
throws RepositoryAdminException;

View File

@ -25,10 +25,10 @@ import org.apache.archiva.admin.repository.RepositoryAdminException;
import org.apache.archiva.audit.AuditEvent;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.RepositoryScanningConfiguration;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@ -78,27 +78,6 @@ public class DefaultArchivaAdministration
triggerAuditEvent( "", "", AuditEvent.REMOVE_LEGACY_PATH, auditInformation );
}
public void updateRepositoryScanning( RepositoryScanning repositoryScanning, AuditInformation auditInformation )
throws RepositoryAdminException
{
Configuration configuration = getArchivaConfiguration().getConfiguration();
configuration.setRepositoryScanning(
new BeanReplicator().replicateBean( repositoryScanning, RepositoryScanningConfiguration.class ) );
saveConfiguration( configuration );
}
public RepositoryScanning getRepositoryScanning()
throws RepositoryAdminException
{
RepositoryScanning repositoryScanning =
new BeanReplicator().replicateBean( getArchivaConfiguration().getConfiguration().getRepositoryScanning(),
RepositoryScanning.class )
return repositoryScanning;
}
public void addFileTypePattern( String fileTypeId, String pattern, AuditInformation auditInformation )
throws RepositoryAdminException
@ -242,6 +221,37 @@ public class DefaultArchivaAdministration
}
}
public List<FileType> getFileTypes()
throws RepositoryAdminException
{
List<org.apache.maven.archiva.configuration.FileType> configFileTypes =
getArchivaConfiguration().getConfiguration().getRepositoryScanning().getFileTypes();
if ( configFileTypes == null || configFileTypes.isEmpty() )
{
return Collections.emptyList();
}
List<FileType> fileTypes = new ArrayList<FileType>();
for ( org.apache.maven.archiva.configuration.FileType fileType : configFileTypes )
{
fileTypes.add( new BeanReplicator().replicateBean( fileType, FileType.class ) );
}
return fileTypes;
}
public List<String> getKnownContentConsumers()
throws RepositoryAdminException
{
return new ArrayList<String>(
getArchivaConfiguration().getConfiguration().getRepositoryScanning().getKnownContentConsumers() );
}
public List<String> getInvalidContentConsumers()
throws RepositoryAdminException
{
return new ArrayList<String>(
getArchivaConfiguration().getConfiguration().getRepositoryScanning().getInvalidContentConsumers() );
}
//-------------------------
//
//-------------------------
@ -257,4 +267,5 @@ public class DefaultArchivaAdministration
}
return null;
}
}

View File

@ -69,7 +69,7 @@ public class ArchivaAdministrationTest
public void addAndUpdateAndDeleteFileType()
throws RepositoryAdminException
{
int initialSize = archivaAdministration.getRepositoryScanning().getFileTypes().size();
int initialSize = archivaAdministration.getFileTypes().size();
FileType fileType = new FileType();
fileType.setId( "foo" );
@ -77,11 +77,11 @@ public class ArchivaAdministrationTest
archivaAdministration.addFileType( fileType, getFakeAuditInformation() );
assertEquals( initialSize + 1, archivaAdministration.getRepositoryScanning().getFileTypes().size() );
assertEquals( initialSize + 1, archivaAdministration.getFileTypes().size() );
archivaAdministration.addFileTypePattern( "foo", "zorro", getFakeAuditInformation() );
assertEquals( initialSize + 1, archivaAdministration.getRepositoryScanning().getFileTypes().size() );
assertEquals( initialSize + 1, archivaAdministration.getFileTypes().size() );
assertEquals( 3, archivaAdministration.getFileType( "foo" ).getPatterns().size() );
@ -91,7 +91,7 @@ public class ArchivaAdministrationTest
archivaAdministration.removeFileTypePattern( "foo", "zorro", getFakeAuditInformation() );
assertEquals( initialSize + 1, archivaAdministration.getRepositoryScanning().getFileTypes().size() );
assertEquals( initialSize + 1, archivaAdministration.getFileTypes().size() );
assertEquals( 2, archivaAdministration.getFileType( "foo" ).getPatterns().size() );
@ -101,7 +101,7 @@ public class ArchivaAdministrationTest
archivaAdministration.removeFileType( "foo", getFakeAuditInformation() );
assertEquals( initialSize, archivaAdministration.getRepositoryScanning().getFileTypes().size() );
assertEquals( initialSize, archivaAdministration.getFileTypes().size() );
assertNull( archivaAdministration.getFileType( "foo" ) );
mockAuditListener.clearEvents();
}
@ -110,27 +110,23 @@ public class ArchivaAdministrationTest
public void knownContentConsumersTest()
throws Exception
{
int initialSize = archivaAdministration.getRepositoryScanning().getKnownContentConsumers().size();
int initialSize = archivaAdministration.getKnownContentConsumers().size();
archivaAdministration.addKnownContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize + 1,
archivaAdministration.getRepositoryScanning().getKnownContentConsumers().size() );
assertTrue( archivaAdministration.getRepositoryScanning().getKnownContentConsumers().contains( "foo" ) );
assertEquals( initialSize + 1, archivaAdministration.getKnownContentConsumers().size() );
assertTrue( archivaAdministration.getKnownContentConsumers().contains( "foo" ) );
// ensure we don't add it twice as it's an ArrayList as storage
archivaAdministration.addKnownContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize + 1,
archivaAdministration.getRepositoryScanning().getKnownContentConsumers().size() );
assertTrue( archivaAdministration.getRepositoryScanning().getKnownContentConsumers().contains( "foo" ) );
assertEquals( initialSize + 1, archivaAdministration.getKnownContentConsumers().size() );
assertTrue( archivaAdministration.getKnownContentConsumers().contains( "foo" ) );
archivaAdministration.removeKnownContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize ,
archivaAdministration.getRepositoryScanning().getKnownContentConsumers().size() );
assertFalse( archivaAdministration.getRepositoryScanning().getKnownContentConsumers().contains( "foo" ) );
assertEquals( initialSize, archivaAdministration.getKnownContentConsumers().size() );
assertFalse( archivaAdministration.getKnownContentConsumers().contains( "foo" ) );
assertEquals( 2, mockAuditListener.getAuditEvents().size() );
assertEquals( AuditEvent.ENABLE_REPO_CONSUMER, mockAuditListener.getAuditEvents().get( 0 ).getAction() );
@ -144,25 +140,23 @@ public class ArchivaAdministrationTest
public void invalidContentConsumersTest()
throws Exception
{
int initialSize = archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().size();
int initialSize = archivaAdministration.getInvalidContentConsumers().size();
archivaAdministration.addInvalidContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize + 1,
archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().size() );
assertTrue( archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().contains( "foo" ) );
assertEquals( initialSize + 1, archivaAdministration.getInvalidContentConsumers().size() );
assertTrue( archivaAdministration.getInvalidContentConsumers().contains( "foo" ) );
// ensure we don't add it twice as it's an ArrayList as storage
archivaAdministration.addInvalidContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize + 1,
archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().size() );
assertTrue( archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().contains( "foo" ) );
assertEquals( initialSize + 1, archivaAdministration.getInvalidContentConsumers().size() );
assertTrue( archivaAdministration.getInvalidContentConsumers().contains( "foo" ) );
archivaAdministration.removeInvalidContentConsumer( "foo", getFakeAuditInformation() );
assertEquals( initialSize, archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().size() );
assertFalse( archivaAdministration.getRepositoryScanning().getInvalidContentConsumers().contains( "foo" ) );
assertEquals( initialSize, archivaAdministration.getInvalidContentConsumers().size() );
assertFalse( archivaAdministration.getInvalidContentConsumers().contains( "foo" ) );
assertEquals( 2, mockAuditListener.getAuditEvents().size() );
assertEquals( AuditEvent.ENABLE_REPO_CONSUMER, mockAuditListener.getAuditEvents().get( 0 ).getAction() );

View File

@ -20,7 +20,6 @@ package org.apache.archiva.rest.api.services;
import org.apache.archiva.rest.api.model.FileType;
import org.apache.archiva.rest.api.model.LegacyArtifactPath;
import org.apache.archiva.rest.api.model.RepositoryScanning;
import org.apache.archiva.security.common.ArchivaRoleConstants;
import org.codehaus.plexus.redback.authorization.RedbackAuthorization;
@ -62,20 +61,6 @@ public interface ArchivaAdministrationService
Boolean deleteLegacyArtifactPath( @QueryParam( "path" ) String path )
throws ArchivaRestServiceException;
@Path( "getRepositoryScanning" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
RepositoryScanning getRepositoryScanning()
throws ArchivaRestServiceException;
@Path( "updateRepositoryScanning" )
@POST
@Consumes( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
void updateRepositoryScanning( RepositoryScanning repositoryScanning )
throws ArchivaRestServiceException;
@Path( "addFileTypePattern" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@ -95,7 +80,7 @@ public interface ArchivaAdministrationService
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
FileType getFileType( String fileTypeId )
FileType getFileType( @QueryParam( "fileTypeId" ) String fileTypeId )
throws ArchivaRestServiceException;
@Path( "addFileType" )
@ -154,4 +139,25 @@ public interface ArchivaAdministrationService
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
Boolean removeInvalidContentConsumer( @QueryParam( "invalidContentConsumer" ) String invalidContentConsumer )
throws ArchivaRestServiceException;
@Path( "getFileTypes" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<FileType> getFileTypes()
throws ArchivaRestServiceException;
@Path( "getKnownContentConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<String> getKnownContentConsumers()
throws ArchivaRestServiceException;
@Path( "getInvalidContentConsumers" )
@GET
@Produces( { MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, MediaType.TEXT_PLAIN } )
@RedbackAuthorization( permission = ArchivaRoleConstants.OPERATION_MANAGE_CONFIGURATION )
List<String> getInvalidContentConsumers()
throws ArchivaRestServiceException;
}

View File

@ -41,6 +41,11 @@
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-repository-admin</artifactId>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>archiva-configuration</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.archiva</groupId>
<artifactId>audit</artifactId>

View File

@ -18,19 +18,18 @@ package org.apache.archiva.rest.services;
* under the License.
*/
import net.sf.beanlib.provider.BeanTransformer;
import net.sf.beanlib.provider.replicator.BeanReplicator;
import org.apache.archiva.admin.repository.RepositoryAdminException;
import org.apache.archiva.admin.repository.admin.ArchivaAdministration;
import org.apache.archiva.rest.api.model.FileType;
import org.apache.archiva.rest.api.model.LegacyArtifactPath;
import org.apache.archiva.rest.api.model.RepositoryScanning;
import org.apache.archiva.rest.api.services.ArchivaAdministrationService;
import org.apache.archiva.rest.api.services.ArchivaRestServiceException;
import org.springframework.stereotype.Service;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
@ -93,51 +92,6 @@ public class DefaultArchivaAdministrationService
}
}
public RepositoryScanning getRepositoryScanning()
throws ArchivaRestServiceException
{
try
{
BeanTransformer beanTransformer = new BeanTransformer()
{
@Override
protected <T> T createToInstance( Object from, Class<T> toClass )
throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException
{
if ( from.getClass().equals( org.apache.maven.archiva.configuration.FileType.class ) )
{
return (T) new FileType();
}
return super.createToInstance( from, toClass );
}
};
BeanReplicator beanReplicator = new BeanReplicator( beanTransformer );
RepositoryScanning repositoryScanning =
beanReplicator.replicateBean( archivaAdministration.getRepositoryScanning(), RepositoryScanning.class );
return repositoryScanning;
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage() );
}
}
public void updateRepositoryScanning( RepositoryScanning repositoryScanning )
throws ArchivaRestServiceException
{
try
{
archivaAdministration.updateRepositoryScanning( new BeanReplicator().replicateBean( getRepositoryScanning(),
org.apache.archiva.admin.repository.admin.RepositoryScanning.class ),
getAuditInformation() );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage() );
}
}
public Boolean addFileTypePattern( String fileTypeId, String pattern )
throws ArchivaRestServiceException
@ -296,4 +250,54 @@ public class DefaultArchivaAdministrationService
throw new ArchivaRestServiceException( e.getMessage() );
}
}
public List<FileType> getFileTypes()
throws ArchivaRestServiceException
{
try
{
List<org.apache.archiva.admin.repository.admin.FileType> modelfileTypes =
archivaAdministration.getFileTypes();
if ( modelfileTypes == null || modelfileTypes.isEmpty() )
{
return Collections.emptyList();
}
List<FileType> fileTypes = new ArrayList<FileType>( modelfileTypes.size() );
for ( org.apache.archiva.admin.repository.admin.FileType fileType : modelfileTypes )
{
fileTypes.add( new BeanReplicator().replicateBean( fileType, FileType.class ) );
}
return fileTypes;
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage() );
}
}
public List<String> getKnownContentConsumers()
throws ArchivaRestServiceException
{
try
{
return new ArrayList<String>( archivaAdministration.getKnownContentConsumers() );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage() );
}
}
public List<String> getInvalidContentConsumers()
throws ArchivaRestServiceException
{
try
{
return new ArrayList<String>( archivaAdministration.getInvalidContentConsumers() );
}
catch ( RepositoryAdminException e )
{
throw new ArchivaRestServiceException( e.getMessage() );
}
}
}

View File

@ -22,13 +22,9 @@ package org.apache.archiva.rest.services;
import org.apache.archiva.admin.repository.managed.ManagedRepositoryAdmin;
import org.apache.archiva.metadata.repository.RepositorySessionFactory;
import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
import org.apache.archiva.rest.api.model.RemoteRepository;
import org.apache.archiva.rest.api.services.RepositoriesService;
import org.apache.archiva.scheduler.repository.RepositoryArchivaTaskScheduler;
import org.apache.archiva.scheduler.repository.RepositoryTask;
import org.apache.maven.archiva.configuration.ArchivaConfiguration;
import org.apache.maven.archiva.configuration.Configuration;
import org.apache.maven.archiva.configuration.RemoteRepositoryConfiguration;
import org.codehaus.plexus.redback.role.RoleManager;
import org.codehaus.plexus.registry.Registry;
import org.codehaus.plexus.taskqueue.TaskQueueException;
@ -39,8 +35,6 @@ import org.springframework.stereotype.Service;
import javax.inject.Inject;
import javax.inject.Named;
import javax.ws.rs.PathParam;
import java.util.ArrayList;
import java.util.List;
/**
* @author Olivier Lamy
@ -53,36 +47,13 @@ public class DefaultRepositoriesService
{
private Logger log = LoggerFactory.getLogger( getClass() );
// FIXME duplicate from xmlrpc
// olamy move this to a common remote services api
private static final String REPOSITORY_ID_VALID_EXPRESSION = "^[a-zA-Z0-9._-]+$";
private static final String REPOSITORY_NAME_VALID_EXPRESSION = "^([a-zA-Z0-9.)/_(-]|\\s)+$";
private static final String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&amp;=\\\\]+$";
@Inject
protected RoleManager roleManager;
@Inject
protected ArchivaConfiguration archivaConfiguration;
@Inject
@Named( value = "archivaTaskScheduler#repository" )
private RepositoryArchivaTaskScheduler repositoryTaskScheduler;
@Inject
@Named( value = "commons-configuration" )
private Registry registry;
@Inject
private RepositoryStatisticsManager repositoryStatisticsManager;
@Inject
private RepositorySessionFactory repositorySessionFactory;
@Inject
private ManagedRepositoryAdmin managedRepositoryAdmin;
// FIXME olamy move this to repository admin component !
public Boolean scanRepository( String repositoryId, boolean fullScan )

View File

@ -57,16 +57,21 @@ public class ArchivaAdministrationServiceTest
public void addAndDeleteFileType()
throws Exception
{
int initialSize = getArchivaAdministrationService().getRepositoryScanning().getFileTypes().size();
int initialSize = getArchivaAdministrationService().getFileTypes().size();
FileType fileType = new FileType();
fileType.setId( "foo" );
fileType.setId( "footwo" );
fileType.setPatterns( Arrays.asList( "foo", "bar" ) );
getArchivaAdministrationService().addFileType( fileType );
assertEquals( initialSize + 1,
getArchivaAdministrationService().getRepositoryScanning().getFileTypes().size() );
assertEquals( initialSize + 1, getArchivaAdministrationService().getFileTypes().size() );
assertNotNull( getArchivaAdministrationService().getFileType( "foo" ) );
assertNotNull( getArchivaAdministrationService().getFileType( "footwo" ) );
assertEquals( Arrays.asList( "foo", "bar" ),
getArchivaAdministrationService().getFileType( "foo" ).getPatterns() );
getArchivaAdministrationService().getFileType( "footwo" ).getPatterns() );
getArchivaAdministrationService().removeFileType( "footwo" );
assertEquals( initialSize , getArchivaAdministrationService().getFileTypes().size() );
assertNull( getArchivaAdministrationService().getFileType( "footwo" ) );
}
}

View File

@ -191,20 +191,20 @@ public class RepositoryScanningAction
public void prepare()
throws Exception
{
RepositoryScanning reposcanning = archivaAdministration.getRepositoryScanning();
FiletypeToMapClosure filetypeToMapClosure = new FiletypeToMapClosure();
CollectionUtils.forAllDo( reposcanning.getFileTypes(), filetypeToMapClosure );
CollectionUtils.forAllDo( archivaAdministration.getFileTypes(), filetypeToMapClosure );
fileTypeMap = filetypeToMapClosure.getMap();
AddAdminRepoConsumerClosure addAdminRepoConsumer =
new AddAdminRepoConsumerClosure( reposcanning.getKnownContentConsumers() );
new AddAdminRepoConsumerClosure( archivaAdministration.getKnownContentConsumers() );
CollectionUtils.forAllDo( repoconsumerUtil.getAvailableKnownConsumers(), addAdminRepoConsumer );
this.knownContentConsumers = addAdminRepoConsumer.getList();
Collections.sort( knownContentConsumers, AdminRepositoryConsumerComparator.getInstance() );
addAdminRepoConsumer = new AddAdminRepoConsumerClosure( reposcanning.getInvalidContentConsumers() );
addAdminRepoConsumer = new AddAdminRepoConsumerClosure( archivaAdministration.getInvalidContentConsumers() );
CollectionUtils.forAllDo( repoconsumerUtil.getAvailableInvalidConsumers(), addAdminRepoConsumer );
this.invalidContentConsumers = addAdminRepoConsumer.getList();
Collections.sort( invalidContentConsumers, AdminRepositoryConsumerComparator.getInstance() );
@ -229,7 +229,7 @@ public class RepositoryScanningAction
try
{
List<String> oldConsumers = getArchivaAdministration().getRepositoryScanning().getInvalidContentConsumers();
List<String> oldConsumers = getArchivaAdministration().getInvalidContentConsumers();
if ( enabledInvalidContentConsumers != null )
{
@ -270,7 +270,7 @@ public class RepositoryScanningAction
try
{
List<String> oldConsumers = getArchivaAdministration().getRepositoryScanning().getKnownContentConsumers();
List<String> oldConsumers = getArchivaAdministration().getKnownContentConsumers();
if ( enabledKnownContentConsumers != null )
{