1 package org.apache.continuum.purge.task;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.continuum.model.repository.AbstractPurgeConfiguration;
23 import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
24 import org.apache.continuum.model.repository.DistributedDirectoryPurgeConfiguration;
25 import org.apache.continuum.model.repository.LocalRepository;
26 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
27 import org.apache.continuum.purge.PurgeConfigurationService;
28 import org.apache.continuum.purge.controller.PurgeController;
29 import org.apache.continuum.purge.executor.ContinuumPurgeExecutorException;
30 import org.apache.continuum.purge.repository.scanner.RepositoryScanner;
31 import org.codehaus.plexus.PlexusConstants;
32 import org.codehaus.plexus.PlexusContainer;
33 import org.codehaus.plexus.component.repository.exception.ComponentLookupException;
34 import org.codehaus.plexus.context.Context;
35 import org.codehaus.plexus.context.ContextException;
36 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Contextualizable;
37 import org.codehaus.plexus.taskqueue.Task;
38 import org.codehaus.plexus.taskqueue.execution.TaskExecutionException;
39 import org.codehaus.plexus.taskqueue.execution.TaskExecutor;
40
41
42
43
44 public class PurgeTaskExecutor
45 implements TaskExecutor, Contextualizable
46 {
47
48
49
50 private PurgeConfigurationService purgeConfigurationService;
51
52
53
54
55 private RepositoryScanner scanner;
56
57 private PlexusContainer container;
58
59 public void executeTask( Task task )
60 throws TaskExecutionException
61 {
62 PurgeTask purgeTask = (PurgeTask) task;
63
64 AbstractPurgeConfiguration purgeConfig = purgeConfigurationService.getPurgeConfiguration(
65 purgeTask.getPurgeConfigurationId() );
66
67 try
68 {
69 if ( purgeConfig != null && purgeConfig instanceof RepositoryPurgeConfiguration )
70 {
71 RepositoryPurgeConfiguration repoPurge = (RepositoryPurgeConfiguration) purgeConfig;
72
73 LocalRepository repository = repoPurge.getRepository();
74
75 if ( repository == null )
76 {
77 throw new TaskExecutionException(
78 "Error while executing purge repository task: no repository set" );
79 }
80
81 PurgeController purgeController = (PurgeController) container.lookup( PurgeController.ROLE,
82 "purge-repository" );
83
84 purgeController.initializeExecutors( repoPurge );
85
86 if ( repoPurge.isDeleteAll() )
87 {
88 purgeController.doPurge( repoPurge );
89 }
90 else
91 {
92 scanner.scan( repository, purgeController );
93 }
94 }
95 else if ( purgeConfig != null && purgeConfig instanceof DirectoryPurgeConfiguration )
96 {
97 DirectoryPurgeConfiguration dirPurge = (DirectoryPurgeConfiguration) purgeConfig;
98
99 PurgeController purgeController = (PurgeController) container.lookup( PurgeController.ROLE,
100 "purge-directory" );
101
102 purgeController.initializeExecutors( dirPurge );
103
104 purgeController.doPurge( dirPurge.getLocation() );
105 }
106 else if ( purgeConfig instanceof DistributedDirectoryPurgeConfiguration )
107 {
108 DistributedDirectoryPurgeConfiguration dirPurge = (DistributedDirectoryPurgeConfiguration) purgeConfig;
109
110 PurgeController purgeController = (PurgeController) container.lookup( PurgeController.ROLE,
111 "purge-distributed-directory" );
112
113 purgeController.initializeExecutors( dirPurge );
114
115 purgeController.doPurge( dirPurge );
116 }
117
118 }
119 catch ( ComponentLookupException e )
120 {
121 throw new TaskExecutionException( "Error while executing purge task", e );
122 }
123 catch ( ContinuumPurgeExecutorException e )
124 {
125 throw new TaskExecutionException( "Error while executing purge task", e );
126 }
127 }
128
129 public void contextualize( Context context )
130 throws ContextException
131 {
132 container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY );
133 }
134 }