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