You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@continuum.apache.org by ba...@apache.org on 2015/04/06 20:59:51 UTC
svn commit: r1671646 -
/continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java
Author: batkinson
Date: Mon Apr 6 18:59:51 2015
New Revision: 1671646
URL: http://svn.apache.org/r1671646
Log:
Pulled repository executor creation out of controller and into factory.
Modified:
continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java
Modified: continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java
URL: http://svn.apache.org/viewvc/continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java?rev=1671646&r1=1671645&r2=1671646&view=diff
==============================================================================
--- continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java (original)
+++ continuum/trunk/continuum-purge/continuum-purge-master/src/main/java/org/apache/continuum/purge/controller/RepositoryPurgeController.java Mon Apr 6 18:59:51 2015
@@ -39,6 +39,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
+import java.util.Arrays;
+import java.util.List;
/**
* DefaultPurgeController
@@ -47,13 +49,11 @@ import java.io.File;
*/
@Component( role = org.apache.continuum.purge.controller.PurgeController.class, hint = "purge-repository" )
public class RepositoryPurgeController
- implements PurgeController, ScannerHandler
+ implements PurgeController
{
private static final Logger log = LoggerFactory.getLogger( RepositoryPurgeController.class );
- private ContinuumPurgeExecutor purgeExecutor;
-
- private ContinuumPurgeExecutor purgeReleasedSnapshotsExecutor;
+ private ContinuumPurgeExecutor executor;
@Requirement
private PurgeConfigurationService purgeConfigurationService;
@@ -61,10 +61,6 @@ public class RepositoryPurgeController
@Requirement( hint = "repository-scanner" )
private RepositoryScanner scanner;
- private boolean deleteReleasedSnapshots = false;
-
- private boolean deleteAll = false;
-
public void configure( AbstractPurgeConfiguration purgeConfig )
throws ContinuumPurgeExecutorException
{
@@ -81,58 +77,73 @@ public class RepositoryPurgeController
{
throw new ContinuumPurgeExecutorException( "Error while initializing purge executors", e );
}
+ executor =
+ new RepositoryPurgeExecutorFactoryImpl( scanner ).create( repoPurge.isDeleteAll(), repoPurge.getDaysOlder(),
+ repoPurge.getRetentionCount(),
+ repoPurge.isDeleteReleasedSnapshots(),
+ repositoryContent );
+ }
- if ( repoPurge.isDeleteAll() )
+ public void purge( AbstractPurgeConfiguration purgeConfig )
+ {
+ RepositoryPurgeConfiguration repoPurge = (RepositoryPurgeConfiguration) purgeConfig;
+ String path = repoPurge.getRepository().getLocation();
+ log.info( "--- Start: Purging repository {} ---", path );
+ try
{
- deleteAll = true;
- purgeExecutor = new CleanAllPurgeExecutor( ContinuumPurgeConstants.PURGE_REPOSITORY );
+ executor.purge( path );
}
- else
+ catch ( ContinuumPurgeExecutorException e )
{
- if ( repoPurge.getDaysOlder() > 0 )
- {
- purgeExecutor = new DaysOldRepositoryPurgeExecutor( repositoryContent, repoPurge.getDaysOlder(),
- repoPurge.getRetentionCount() );
- }
- else
- {
- purgeExecutor = new RetentionCountRepositoryPurgeExecutor( repositoryContent,
- repoPurge.getRetentionCount() );
- }
-
- purgeReleasedSnapshotsExecutor = new ReleasedSnapshotsRepositoryPurgeExecutor( repositoryContent );
- deleteReleasedSnapshots = repoPurge.isDeleteReleasedSnapshots();
+ log.error( "failure during repo purge", e );
}
+ log.info( "--- End: Purging repository {} ---", path );
}
+}
- public void purge( AbstractPurgeConfiguration purgeConfig )
+interface RepositoryPurgeExecutorFactory
+{
+ ContinuumPurgeExecutor create( boolean deleteAll, int daysOld, int retentionCount, boolean deleteReleasedSnapshots,
+ RepositoryManagedContent repoContent );
+}
+
+class MultiplexedPurgeExecutor
+ implements ContinuumPurgeExecutor
+{
+ List<ContinuumPurgeExecutor> constituents;
+
+ public MultiplexedPurgeExecutor( ContinuumPurgeExecutor... executors )
{
- RepositoryPurgeConfiguration repoPurge = (RepositoryPurgeConfiguration) purgeConfig;
- doPurge( repoPurge.getRepository().getLocation() );
+ constituents = Arrays.asList( executors );
}
- private void doPurge( String path )
+ public void purge( String path )
+ throws ContinuumPurgeExecutorException
{
- log.info( "--- Start: Purging repository {} ---", path );
- if ( deleteAll )
- {
- handle( path );
- }
- else
+ for ( ContinuumPurgeExecutor child : constituents )
{
- try
- {
- scan( path );
- }
- catch ( ContinuumPurgeExecutorException e )
- {
- log.error( "failure while scanning", e );
- }
+ child.purge( path );
}
- log.info( "--- End: Purging repository {} ---", path );
}
+}
+
+class ScanningPurgeExecutor
+ implements ContinuumPurgeExecutor, ScannerHandler
+{
- private void scan( String path )
+ private static final Logger log = LoggerFactory.getLogger( ScanningPurgeExecutor.class );
+
+ RepositoryScanner scanner;
+
+ ContinuumPurgeExecutor executor;
+
+ public ScanningPurgeExecutor( RepositoryScanner scanner, ContinuumPurgeExecutor executor )
+ {
+ this.scanner = scanner;
+ this.executor = executor;
+ }
+
+ public void purge( String path )
throws ContinuumPurgeExecutorException
{
scanner.scan( new File( path ), this );
@@ -142,15 +153,49 @@ public class RepositoryPurgeController
{
try
{
- if ( !deleteAll && deleteReleasedSnapshots )
- {
- purgeReleasedSnapshotsExecutor.purge( path );
- }
- purgeExecutor.purge( path );
+ executor.purge( path );
}
catch ( ContinuumPurgeExecutorException e )
{
- log.error( String.format( "failure handling path '%s'", path ), e );
+ log.error( String.format( "handling failed %s: %s", path, e.getMessage() ), e );
}
}
+}
+
+class RepositoryPurgeExecutorFactoryImpl
+ implements RepositoryPurgeExecutorFactory
+{
+ RepositoryScanner scanner;
+
+ public RepositoryPurgeExecutorFactoryImpl( RepositoryScanner scanner )
+ {
+ this.scanner = scanner;
+ }
+
+ public ContinuumPurgeExecutor create( boolean deleteAll, int daysOld, int retentionCount,
+ boolean deleteReleasedSnapshots, RepositoryManagedContent repoContent )
+ {
+ if ( deleteAll )
+ {
+ return new CleanAllPurgeExecutor( ContinuumPurgeConstants.PURGE_REPOSITORY );
+ }
+
+ ContinuumPurgeExecutor executor;
+ if ( daysOld > 0 )
+ {
+ executor = new DaysOldRepositoryPurgeExecutor( repoContent, daysOld, retentionCount );
+ }
+ else
+ {
+ executor = new RetentionCountRepositoryPurgeExecutor( repoContent, retentionCount );
+ }
+
+ if ( deleteReleasedSnapshots )
+ {
+ ContinuumPurgeExecutor snapshots = new ReleasedSnapshotsRepositoryPurgeExecutor( repoContent );
+ executor = new MultiplexedPurgeExecutor( snapshots, executor );
+ }
+
+ return new ScanningPurgeExecutor( scanner, executor );
+ }
}
\ No newline at end of file