]> source.dussan.org Git - archiva.git/blob
f4ccae8560ca9d68316d1c9cb421e5390f16b8e6
[archiva.git] /
1 package org.apache.maven.archiva.database.updater;
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 java.util.Date;
23 import java.util.Iterator;
24 import java.util.List;
25
26 import org.apache.commons.collections.CollectionUtils;
27 import org.apache.commons.collections.IteratorUtils;
28 import org.apache.commons.collections.Predicate;
29 import org.apache.commons.collections.functors.NotPredicate;
30 import org.apache.maven.archiva.consumers.ArchivaArtifactConsumer;
31 import org.apache.maven.archiva.database.ArchivaDAO;
32 import org.apache.maven.archiva.database.ArchivaDatabaseException;
33 import org.apache.maven.archiva.database.constraints.ArtifactsProcessedConstraint;
34 import org.apache.maven.archiva.model.ArchivaArtifact;
35 import org.apache.maven.archiva.model.functors.UnprocessedArtifactPredicate;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 /**
40  * JdoDatabaseUpdater
41  *
42  * @version $Id$
43  * 
44  * @plexus.component role="org.apache.maven.archiva.database.updater.DatabaseUpdater" 
45  *   role-hint="jdo" 
46  */
47 public class JdoDatabaseUpdater
48     implements DatabaseUpdater
49 {
50     private Logger log = LoggerFactory.getLogger( JdoDatabaseUpdater.class );
51     
52     /**
53      * @plexus.requirement role-hint="jdo"
54      */
55     private ArchivaDAO dao;
56
57     /**
58      * @plexus.requirement
59      */
60     private DatabaseConsumers dbConsumers;
61
62     private ProcessArchivaArtifactClosure processArtifactClosure = new ProcessArchivaArtifactClosure();
63
64     public void update()
65         throws ArchivaDatabaseException
66     {
67         updateAllUnprocessed();
68         updateAllProcessed();
69     }
70
71     public void updateAllUnprocessed()
72         throws ArchivaDatabaseException
73     {
74         List unprocessedArtifacts = dao.getArtifactDAO().queryArtifacts( new ArtifactsProcessedConstraint( false ) );
75
76         beginConsumerLifecycle( dbConsumers.getSelectedUnprocessedConsumers() );
77
78         try
79         {
80             // Process each consumer.
81             Predicate predicate = UnprocessedArtifactPredicate.getInstance();
82
83             Iterator it = IteratorUtils.filteredIterator( unprocessedArtifacts.iterator(), predicate );
84             while ( it.hasNext() )
85             {
86                 ArchivaArtifact artifact = (ArchivaArtifact) it.next();
87                 updateUnprocessed( artifact );
88             }
89         }
90         finally
91         {
92             endConsumerLifecycle( dbConsumers.getSelectedUnprocessedConsumers() );
93         }
94     }
95
96     public void updateAllProcessed()
97         throws ArchivaDatabaseException
98     {
99         List processedArtifacts = dao.getArtifactDAO().queryArtifacts( new ArtifactsProcessedConstraint( true ) );
100
101         beginConsumerLifecycle( dbConsumers.getSelectedCleanupConsumers() );
102
103         try
104         {
105             // Process each consumer.
106             Predicate predicate = NotPredicate.getInstance( UnprocessedArtifactPredicate.getInstance() );
107
108             Iterator it = IteratorUtils.filteredIterator( processedArtifacts.iterator(), predicate );
109             while ( it.hasNext() )
110             {
111                 ArchivaArtifact artifact = (ArchivaArtifact) it.next();
112                 updateProcessed( artifact );
113             }
114         }
115         finally
116         {
117             endConsumerLifecycle( dbConsumers.getSelectedCleanupConsumers() );
118         }
119     }
120
121     private void endConsumerLifecycle( List consumers )
122     {
123         Iterator it = consumers.iterator();
124         while ( it.hasNext() )
125         {
126             ArchivaArtifactConsumer consumer = (ArchivaArtifactConsumer) it.next();
127             consumer.completeScan();
128         }
129     }
130
131     private void beginConsumerLifecycle( List consumers )
132     {
133         Iterator it = consumers.iterator();
134         while ( it.hasNext() )
135         {
136             ArchivaArtifactConsumer consumer = (ArchivaArtifactConsumer) it.next();
137             consumer.beginScan();
138         }
139     }
140
141     public void updateUnprocessed( ArchivaArtifact artifact )
142         throws ArchivaDatabaseException
143     {
144         List consumers = dbConsumers.getSelectedUnprocessedConsumers();
145
146         if ( CollectionUtils.isEmpty( consumers ) )
147         {
148             log.warn( "There are no selected consumers for unprocessed artifacts." );
149             return;
150         }
151         
152         this.processArtifactClosure.setArtifact( artifact );
153         CollectionUtils.forAllDo( consumers, this.processArtifactClosure );
154
155         artifact.getModel().setWhenProcessed( new Date() );
156         dao.getArtifactDAO().saveArtifact( artifact );
157     }
158
159     public void updateProcessed( ArchivaArtifact artifact )
160         throws ArchivaDatabaseException
161     {
162         List consumers = dbConsumers.getSelectedCleanupConsumers();
163
164         if ( CollectionUtils.isEmpty( consumers ) )
165         {
166             log.warn( "There are no selected consumers for artifact cleanup." );
167             return;
168         }
169         
170         this.processArtifactClosure.setArtifact( artifact );
171         CollectionUtils.forAllDo( consumers, this.processArtifactClosure );
172     }
173 }