]> source.dussan.org Git - archiva.git/blob
8c3dab8152ec30f1f970b8ed698a720584ef6d56
[archiva.git] /
1 package org.apache.maven.archiva.consumers.core;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  *  http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.commons.collections.CollectionUtils;
23 import org.apache.commons.lang.StringUtils;
24 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
25 import org.apache.maven.archiva.configuration.ConfigurationNames;
26 import org.apache.maven.archiva.configuration.FileTypes;
27 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
28 import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
29 import org.apache.maven.archiva.consumers.ConsumerException;
30 import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
31 import org.codehaus.plexus.registry.Registry;
32 import org.codehaus.plexus.registry.RegistryListener;
33 import org.springframework.context.annotation.Scope;
34 import org.springframework.stereotype.Service;
35
36 import javax.annotation.PostConstruct;
37 import javax.inject.Inject;
38 import java.io.File;
39 import java.util.ArrayList;
40 import java.util.Date;
41 import java.util.List;
42
43 /**
44  * AutoRemoveConsumer
45  *
46  * @version $Id$
47  */
48 @Service("knownRepositoryContentConsumer#auto-remove")
49 @Scope("prototype")
50 public class AutoRemoveConsumer
51     extends AbstractMonitoredConsumer
52     implements KnownRepositoryContentConsumer, RegistryListener
53 {
54     /**
55      * plexus.configuration default-value="auto-remove"
56      */
57     private String id = "auto-remove";
58
59     /**
60      * plexus.configuration default-value="Automatically Remove File from Filesystem."
61      */
62     private String description = "Automatically Remove File from Filesystem.";
63
64     /**
65      * plexus.requirement
66      */
67     @Inject
68     private ArchivaConfiguration configuration;
69
70     /**
71      * plexus.requirement
72      */
73     @Inject
74     private FileTypes filetypes;
75
76     private File repositoryDir;
77     
78     private List<String> includes = new ArrayList<String>();
79
80     public String getId()
81     {
82         return this.id;
83     }
84
85     public String getDescription()
86     {
87         return this.description;
88     }
89
90     public boolean isPermanent()
91     {
92         return false;
93     }
94
95     public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered )
96         throws ConsumerException
97     {
98         this.repositoryDir = new File( repository.getLocation() );
99     }
100
101     public void beginScan( ManagedRepositoryConfiguration repository, Date whenGathered, boolean executeOnEntireRepo )
102         throws ConsumerException
103     {
104         beginScan( repository, whenGathered );
105     }
106
107     public void completeScan()
108     {
109         /* do nothing */
110     }
111
112     public void completeScan( boolean executeOnEntireRepo )
113     {
114         completeScan();
115     }
116
117     public List<String> getExcludes()
118     {
119         return null;
120     }
121
122     public List<String> getIncludes()
123     {
124         return includes;
125     }
126
127     public void processFile( String path )
128         throws ConsumerException
129     {
130         File file = new File( this.repositoryDir, path );
131         if ( file.exists() )
132         {
133             triggerConsumerInfo( "(Auto) Removing File: " + file.getAbsolutePath() );
134             file.delete();
135         }
136     }
137
138     public void processFile( String path, boolean executeOnEntireRepo )
139         throws ConsumerException
140     {
141         processFile( path );    
142     }
143
144     public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
145     {                
146         if ( ConfigurationNames.isRepositoryScanning( propertyName ) )
147         {
148             initIncludes();
149         }
150     }
151
152     public void beforeConfigurationChange( Registry registry, String propertyName, Object propertyValue )
153     {
154         /* do nothing */
155     }
156
157     private void initIncludes()
158     {
159         includes.clear();
160
161         includes.addAll( filetypes.getFileTypePatterns( FileTypes.AUTO_REMOVE ) );
162     }
163
164     @PostConstruct
165     public void initialize()
166     {
167         configuration.addChangeListener( this );
168
169         initIncludes();
170     }
171 }