This project has retired. For details please refer to its
Attic page.
RepositoryPurgeConsumer xref
1 package org.apache.archiva.consumers.core.repository;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.archiva.configuration.ArchivaConfiguration;
23 import org.apache.archiva.configuration.ConfigurationNames;
24 import org.apache.archiva.configuration.FileTypes;
25 import org.apache.archiva.consumers.AbstractMonitoredConsumer;
26 import org.apache.archiva.consumers.ConsumerException;
27 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
28 import org.apache.archiva.metadata.repository.RepositorySession;
29 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
30 import org.apache.archiva.components.registry.Registry;
31 import org.apache.archiva.components.registry.RegistryListener;
32 import org.apache.archiva.repository.ManagedRepository;
33 import org.apache.archiva.repository.ManagedRepositoryContent;
34 import org.apache.archiva.repository.RepositoryContentFactory;
35 import org.apache.archiva.repository.RepositoryRegistry;
36 import org.apache.archiva.metadata.audit.RepositoryListener;
37 import org.apache.archiva.repository.features.ArtifactCleanupFeature;
38 import org.apache.archiva.repository.metadata.base.MetadataTools;
39 import org.springframework.beans.factory.annotation.Autowired;
40 import org.springframework.context.annotation.Scope;
41 import org.springframework.stereotype.Service;
42
43 import javax.annotation.PostConstruct;
44 import javax.inject.Inject;
45 import javax.inject.Named;
46 import java.util.ArrayList;
47 import java.util.Collections;
48 import java.util.Date;
49 import java.util.List;
50
51
52
53
54
55 @Service( "knownRepositoryContentConsumer#repository-purge" )
56 @Scope( "prototype" )
57 public class RepositoryPurgeConsumer
58 extends AbstractMonitoredConsumer
59 implements KnownRepositoryContentConsumer, RegistryListener
60 {
61
62
63
64 private String id = "repository-purge";
65
66
67
68
69 private String description = "Purge repository of old snapshots";
70
71 @Inject
72 @Named( value = "archivaConfiguration#default" )
73 private ArchivaConfiguration configuration;
74
75 @Inject
76 private RepositoryRegistry repositoryRegistry;
77
78 @Inject
79 @Named( value = "repositoryContentFactory#default" )
80 private RepositoryContentFactory repositoryContentFactory;
81
82 @Inject
83 private MetadataTools metadataTools;
84
85 @Inject
86 @Named( value = "fileTypes" )
87 private FileTypes filetypes;
88
89 private List<String> includes = new ArrayList<>( );
90
91 private RepositoryPurge repoPurge;
92
93 private RepositoryPurge cleanUp;
94
95 private boolean deleteReleasedSnapshots;
96
97
98
99
100 @Inject
101 @Autowired( required = false )
102 private List<RepositoryListener> listeners = Collections.emptyList( );
103
104 @Inject
105 private RepositorySessionFactory repositorySessionFactory;
106
107 private RepositorySession repositorySession;
108
109 @Override
110 public String getId( )
111 {
112 return this.id;
113 }
114
115 @Override
116 public String getDescription( )
117 {
118 return this.description;
119 }
120
121 @Override
122 public List<String> getExcludes( )
123 {
124 return getDefaultArtifactExclusions( );
125 }
126
127 @Override
128 public List<String> getIncludes( )
129 {
130 return this.includes;
131 }
132
133 @Override
134 public void beginScan( ManagedRepository repository, Date whenGathered )
135 throws ConsumerException
136 {
137 ManagedRepositoryContent repositoryContent;
138 repositoryContent = repository.getContent();
139
140 try
141 {
142 repositorySession = repositorySessionFactory.createSession( );
143 }
144 catch ( org.apache.archiva.metadata.repository.MetadataRepositoryException e )
145 {
146 throw new ConsumerException( "Could not create session: " + e.getMessage( ), e );
147 }
148
149 if (repository.supportsFeature( ArtifactCleanupFeature.class ))
150 {
151 ArtifactCleanupFeature acf = repository.getFeature( ArtifactCleanupFeature.class ).get();
152 int retentionPeriodInDays = acf.getRetentionPeriod( ).getDays( );
153 int retentionCount = acf.getRetentionCount();
154 if ( retentionPeriodInDays != 0 )
155 {
156 repoPurge = new DaysOldRepositoryPurge( repositoryContent, retentionPeriodInDays,
157 retentionCount, repositorySession, listeners );
158 }
159 else
160 {
161 repoPurge =
162 new RetentionCountRepositoryPurge( repositoryContent, retentionCount, repositorySession,
163 listeners );
164 }
165 deleteReleasedSnapshots = acf.isDeleteReleasedSnapshots( );
166 } else {
167 throw new ConsumerException( "The repository does not support the ArtifactCleanup feature "+repository.getId() );
168 }
169
170
171 cleanUp = new CleanupReleasedSnapshotsRepositoryPurge( repositoryContent, metadataTools, repositoryRegistry,
172 repositorySession, listeners );
173
174 }
175
176 @Override
177 public void beginScan( ManagedRepository repository, Date whenGathered, boolean executeOnEntireRepo )
178 throws ConsumerException
179 {
180 beginScan( repository, whenGathered );
181 }
182
183 @Override
184 public void processFile( String path )
185 throws ConsumerException
186 {
187 try
188 {
189 if ( deleteReleasedSnapshots )
190 {
191 cleanUp.process( path );
192 }
193 repoPurge.process( path );
194 }
195 catch ( RepositoryPurgeException rpe )
196 {
197 throw new ConsumerException( rpe.getMessage( ), rpe );
198 }
199 }
200
201 @Override
202 public void processFile( String path, boolean executeOnEntireRepo )
203 throws Exception
204 {
205 processFile( path );
206 }
207
208 @Override
209 public void completeScan( )
210 {
211 repositorySession.close( );
212 }
213
214 @Override
215 public void completeScan( boolean executeOnEntireRepo )
216 {
217 completeScan( );
218 }
219
220 @Override
221 public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
222 {
223 if ( ConfigurationNames.isRepositoryScanning( propertyName ) )
224 {
225 initIncludes( );
226 }
227 }
228
229 @Override
230 public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
231 {
232
233 }
234
235 private void initIncludes( )
236 {
237 includes = new ArrayList<>( filetypes.getFileTypePatterns( FileTypes.ARTIFACTS ) );
238 }
239
240 @PostConstruct
241 public void initialize( )
242 {
243 configuration.addChangeListener( this );
244
245 initIncludes( );
246 }
247
248 @Override
249 public boolean isProcessUnmodified( )
250 {
251
252 return true;
253 }
254
255 public ArchivaConfiguration getConfiguration( )
256 {
257 return configuration;
258 }
259
260 public void setConfiguration( ArchivaConfiguration configuration )
261 {
262 this.configuration = configuration;
263 }
264
265 public RepositoryContentFactory getRepositoryContentFactory( )
266 {
267 return repositoryContentFactory;
268 }
269
270 public void setRepositoryContentFactory( RepositoryContentFactory repositoryContentFactory )
271 {
272 this.repositoryContentFactory = repositoryContentFactory;
273 }
274
275 public MetadataTools getMetadataTools( )
276 {
277 return metadataTools;
278 }
279
280 public void setMetadataTools( MetadataTools metadataTools )
281 {
282 this.metadataTools = metadataTools;
283 }
284
285 public FileTypes getFiletypes( )
286 {
287 return filetypes;
288 }
289
290 public void setFiletypes( FileTypes filetypes )
291 {
292 this.filetypes = filetypes;
293 }
294
295 public RepositoryPurge getRepoPurge( )
296 {
297 return repoPurge;
298 }
299
300 public void setRepoPurge( RepositoryPurge repoPurge )
301 {
302 this.repoPurge = repoPurge;
303 }
304
305 public RepositoryPurge getCleanUp( )
306 {
307 return cleanUp;
308 }
309
310 public void setCleanUp( RepositoryPurge cleanUp )
311 {
312 this.cleanUp = cleanUp;
313 }
314
315 public boolean isDeleteReleasedSnapshots( )
316 {
317 return deleteReleasedSnapshots;
318 }
319
320 public void setDeleteReleasedSnapshots( boolean deleteReleasedSnapshots )
321 {
322 this.deleteReleasedSnapshots = deleteReleasedSnapshots;
323 }
324
325 public RepositorySessionFactory getRepositorySessionFactory( )
326 {
327 return repositorySessionFactory;
328 }
329
330 public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory )
331 {
332 this.repositorySessionFactory = repositorySessionFactory;
333 }
334
335 }