]> source.dussan.org Git - archiva.git/blob
c849cc88e92fb7fda0783d03bfa07e6f27621824
[archiva.git] /
1 package org.apache.maven.archiva.consumers.database;
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.maven.archiva.consumers.AbstractMonitoredConsumer;
23 import org.apache.maven.archiva.consumers.ConsumerException;
24 import org.apache.maven.archiva.database.Constraint;
25 import org.apache.maven.archiva.database.RepositoryProblemDAO;
26 import org.apache.maven.archiva.database.constraints.RepositoryProblemByArtifactConstraint;
27 import org.apache.maven.archiva.database.updater.DatabaseCleanupConsumer;
28 import org.apache.maven.archiva.model.ArchivaArtifact;
29 import org.apache.maven.archiva.database.ArtifactDAO;
30 import org.apache.maven.archiva.database.ArchivaDatabaseException;
31 import org.apache.maven.archiva.model.RepositoryProblem;
32 import org.apache.maven.archiva.repository.ManagedRepositoryContent;
33 import org.apache.maven.archiva.repository.RepositoryContentFactory;
34 import org.apache.maven.archiva.repository.RepositoryException;
35
36 import java.util.List;
37 import java.io.File;
38
39 /**
40  * Consumer for cleaning up the database of artifacts that are no longer existing in the repository. 
41  *
42  *         <a href="mailto:oching@apache.org">Maria Odea Ching</a>
43  * @version $Id$
44  * 
45  * @plexus.component role="org.apache.maven.archiva.database.updater.DatabaseCleanupConsumer"
46  *                   role-hint="not-present-remove-db-artifact"
47  *                   instantiation-strategy="per-lookup"
48  */
49 public class DatabaseCleanupRemoveArtifactConsumer
50     extends AbstractMonitoredConsumer
51     implements DatabaseCleanupConsumer
52 {
53     /**
54      * @plexus.configuration default-value="not-present-remove-db-artifact"
55      */
56     private String id;
57
58     /**
59      * @plexus.configuration default-value="Remove artifact from database if not present on filesystem."
60      */
61     private String description;
62
63     /**
64      * @plexus.requirement role-hint="jdo"
65      */
66     private ArtifactDAO artifactDAO;
67
68     /**
69      * @plexus.requirement role-hint="jdo"
70      */
71     private RepositoryProblemDAO repositoryProblemDAO;
72
73     /**
74      * @plexus.requirement
75      */
76     private RepositoryContentFactory repositoryFactory;
77
78     public void beginScan()
79     {
80         // TODO Auto-generated method stub
81
82     }
83
84     public void completeScan()
85     {
86         // TODO Auto-generated method stub
87     }
88
89     public List<String> getIncludedTypes()
90     {   
91         return null;
92     }
93
94     public void processArchivaArtifact( ArchivaArtifact artifact )
95         throws ConsumerException
96     {
97         try
98         {
99             ManagedRepositoryContent repositoryContent =
100                 repositoryFactory.getManagedRepositoryContent( artifact.getModel().getRepositoryId() );
101
102             File file = new File( repositoryContent.getRepoRoot(), repositoryContent.toPath( artifact ) );
103
104             if( !file.exists() )
105             {                    
106                 artifactDAO.deleteArtifact( artifact );
107
108                 // Remove all repository problems related to this artifact
109                 Constraint artifactConstraint = new RepositoryProblemByArtifactConstraint( artifact );
110                 List<RepositoryProblem> repositoryProblems =
111                     repositoryProblemDAO.queryRepositoryProblems( artifactConstraint );
112
113                 if ( repositoryProblems != null )
114                 {
115                     for ( RepositoryProblem repositoryProblem : repositoryProblems )
116                     {
117                         repositoryProblemDAO.deleteRepositoryProblem( repositoryProblem );
118                     }
119                 }
120             }
121         }
122         catch ( RepositoryException re )
123         {
124             throw new ConsumerException( "Can't run database cleanup remove artifact consumer: " + 
125                                          re.getMessage() );
126         }
127         catch ( ArchivaDatabaseException e )
128         {
129             throw new ConsumerException( e.getMessage() );
130         }
131     }
132
133     public String getDescription()
134     {
135         return description;
136     }
137
138     public String getId()
139     {
140         return id;
141     }
142
143     public boolean isPermanent()
144     {
145         return false;
146     }
147
148     public void setArtifactDAO( ArtifactDAO artifactDAO)
149     {
150         this.artifactDAO = artifactDAO;
151     }
152
153     public void setRepositoryProblemDAO( RepositoryProblemDAO repositoryProblemDAO )
154     {
155         this.repositoryProblemDAO = repositoryProblemDAO;
156     }
157
158     public void setRepositoryFactory( RepositoryContentFactory repositoryFactory )
159     {
160         this.repositoryFactory = repositoryFactory;
161     }
162 }