1 package org.apache.continuum.purge;
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.buildmanager.BuildsManager;
23 import org.apache.continuum.dao.ProjectDao;
24 import org.apache.continuum.model.repository.DirectoryPurgeConfiguration;
25 import org.apache.continuum.model.repository.LocalRepository;
26 import org.apache.continuum.model.repository.RepositoryPurgeConfiguration;
27 import org.apache.continuum.purge.task.PurgeTask;
28 import org.apache.continuum.taskqueue.manager.TaskQueueManager;
29 import org.apache.continuum.taskqueue.manager.TaskQueueManagerException;
30 import org.apache.maven.continuum.build.settings.DefaultSchedulesActivator;
31 import org.apache.maven.continuum.build.settings.SchedulesActivationException;
32 import org.apache.maven.continuum.build.settings.SchedulesActivator;
33 import org.apache.maven.continuum.model.project.Schedule;
34 import org.codehaus.plexus.taskqueue.TaskQueueException;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 import java.util.List;
39
40
41
42
43
44
45
46
47
48 public class DefaultContinuumPurgeManager
49 implements ContinuumPurgeManager
50 {
51 private static final Logger log = LoggerFactory.getLogger( DefaultContinuumPurgeManager.class );
52
53
54
55
56 private SchedulesActivator schedulesActivator;
57
58
59
60
61 private PurgeConfigurationService purgeConfigurationService;
62
63
64
65
66 private TaskQueueManager taskQueueManager;
67
68
69
70
71 private BuildsManager parallelBuildsManager;
72
73 public void purge( Schedule schedule )
74 throws ContinuumPurgeManagerException
75 {
76 List<RepositoryPurgeConfiguration> repoPurgeList = null;
77 List<DirectoryPurgeConfiguration> dirPurgeList = null;
78
79 repoPurgeList = purgeConfigurationService.getEnableRepositoryPurgeConfigurationsBySchedule( schedule.getId() );
80 dirPurgeList = purgeConfigurationService.getEnableDirectoryPurgeConfigurationsBySchedule( schedule.getId() );
81
82 if ( repoPurgeList != null && repoPurgeList.size() > 0 )
83 {
84 for ( RepositoryPurgeConfiguration repoPurge : repoPurgeList )
85 {
86 purgeRepository( repoPurge );
87 }
88 }
89
90 if ( dirPurgeList != null && dirPurgeList.size() > 0 )
91 {
92 for ( DirectoryPurgeConfiguration dirPurge : dirPurgeList )
93 {
94 purgeDirectory( dirPurge );
95 }
96 }
97
98 if ( ( repoPurgeList == null || repoPurgeList.isEmpty() ) && ( dirPurgeList == null || dirPurgeList.isEmpty() ) )
99 {
100
101 try
102 {
103 schedulesActivator.unactivateOrphanPurgeSchedule( schedule );
104 }
105 catch ( SchedulesActivationException e )
106 {
107 log.debug( String.format( "Can't unactivate orphan schedule '%s' for purgeConfiguration",
108 schedule.getName() ) );
109 }
110 }
111 }
112
113 public void purgeRepository( RepositoryPurgeConfiguration repoPurge )
114 throws ContinuumPurgeManagerException
115 {
116 try
117 {
118 LocalRepository repository = repoPurge.getRepository();
119
120
121 if ( !taskQueueManager.isRepositoryInUse( repository.getId() ) &&
122 !taskQueueManager.isInPurgeQueue( repoPurge.getId() ) )
123 {
124 taskQueueManager.getPurgeQueue().put( new PurgeTask( repoPurge.getId() ) );
125 }
126 }
127 catch ( TaskQueueException e )
128 {
129 throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e );
130 }
131 catch ( TaskQueueManagerException e )
132 {
133 throw new ContinuumPurgeManagerException( e.getMessage(), e );
134 }
135 }
136
137 public void purgeDirectory( DirectoryPurgeConfiguration dirPurge )
138 throws ContinuumPurgeManagerException
139 {
140 try
141 {
142 if ( "releases".equals( dirPurge.getDirectoryType() ) )
143 {
144
145 if ( !taskQueueManager.releaseInProgress() &&
146 !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) )
147 {
148 taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) );
149 }
150 }
151 else if ( "buildOutput".equals( dirPurge.getDirectoryType() ) )
152 {
153
154 if ( !parallelBuildsManager.isBuildInProgress() &&
155 !taskQueueManager.isInPurgeQueue( dirPurge.getId() ) )
156 {
157 taskQueueManager.getPurgeQueue().put( new PurgeTask( dirPurge.getId() ) );
158 }
159 }
160
161 }
162 catch ( TaskQueueException e )
163 {
164 throw new ContinuumPurgeManagerException( "Error while enqueuing repository", e );
165 }
166 catch ( TaskQueueManagerException e )
167 {
168 throw new ContinuumPurgeManagerException( e.getMessage(), e );
169 }
170 }
171
172 }