]> source.dussan.org Git - archiva.git/blob
285edcbdcf7abc1992fc4c205bf63399749ad899
[archiva.git] /
1 package org.apache.archiva.rss.processor;
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 com.sun.syndication.feed.synd.SyndFeed;
23 import com.sun.syndication.io.FeedException;
24 import org.apache.archiva.metadata.model.ArtifactMetadata;
25 import org.apache.archiva.metadata.repository.MetadataRepository;
26 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
27 import org.apache.archiva.metadata.repository.MetadataResolutionException;
28 import org.apache.archiva.rss.RssFeedEntry;
29 import org.apache.archiva.rss.RssFeedGenerator;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32 import org.springframework.stereotype.Service;
33
34 import javax.inject.Inject;
35 import java.util.ArrayList;
36 import java.util.Collection;
37 import java.util.Date;
38 import java.util.List;
39 import java.util.Map;
40
41 /**
42  * Retrieve and process new versions of an artifact from the database and
43  * generate a rss feed. The versions will be grouped by the date when the artifact
44  * was gathered. Each group will appear as one entry in the feed.
45  *
46  */
47 @Service("rssFeedProcessor#new-versions")
48 public class NewVersionsOfArtifactRssFeedProcessor
49     extends AbstractArtifactsRssFeedProcessor
50 {
51     private Logger log = LoggerFactory.getLogger( NewVersionsOfArtifactRssFeedProcessor.class );
52
53     private static final String title = "New Versions of Artifact ";
54
55     private static final String desc = "These are the new versions of artifact ";
56
57     /**
58      * plexus.requirement
59      */
60     @Inject
61     private RssFeedGenerator generator;
62
63     /**
64      * Process all versions of the artifact which had a rss feed request.
65      */
66     public SyndFeed process( Map<String, String> reqParams, MetadataRepository metadataRepository )
67         throws FeedException
68     {
69         String groupId = reqParams.get( RssFeedProcessor.KEY_GROUP_ID );
70         String artifactId = reqParams.get( RssFeedProcessor.KEY_ARTIFACT_ID );
71
72         if ( groupId != null && artifactId != null )
73         {
74             return processNewVersionsOfArtifact( groupId, artifactId, metadataRepository );
75         }
76
77         return null;
78     }
79
80     private SyndFeed processNewVersionsOfArtifact( String groupId, String artifactId,
81                                                    MetadataRepository metadataRepository )
82         throws FeedException
83     {
84         List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>();
85         try
86         {
87             for ( String repoId : metadataRepository.getRepositories() )
88             {
89                 Collection<String> versions = metadataRepository.getProjectVersions( repoId, groupId, artifactId );
90                 for ( String version : versions )
91                 {
92                     artifacts.addAll( metadataRepository.getArtifacts( repoId, groupId, artifactId, version ) );
93                 }
94             }
95         }
96         catch ( MetadataRepositoryException e )
97         {
98             throw new FeedException( "Unable to construct feed, metadata could not be retrieved: " + e.getMessage(),
99                                      e );
100         }
101         catch ( MetadataResolutionException e )
102         {
103             throw new FeedException( "Unable to construct feed, metadata could not be retrieved: " + e.getMessage(),
104                                      e );
105         }
106
107         long tmp = 0;
108         RssFeedEntry entry = null;
109         List<RssFeedEntry> entries = new ArrayList<RssFeedEntry>();
110         String description = "";
111         int idx = 0;
112         for ( ArtifactMetadata artifact : artifacts )
113         {
114             long whenGathered = artifact.getWhenGathered().getTime();
115
116             if ( tmp != whenGathered )
117             {
118                 if ( entry != null )
119                 {
120                     entry.setDescription( description );
121                     entries.add( entry );
122                     entry = null;
123                 }
124
125                 entry = new RssFeedEntry(
126                     this.getTitle() + "\'" + groupId + ":" + artifactId + "\'" + " as of " + new Date( whenGathered ) );
127                 entry.setPublishedDate( artifact.getWhenGathered() );
128                 description =
129                     this.getDescription() + "\'" + groupId + ":" + artifactId + "\'" + ": \n" + artifact.getId() +
130                         " | ";
131             }
132             else
133             {
134                 description = description + artifact.getId() + " | ";
135             }
136
137             if ( idx == ( artifacts.size() - 1 ) )
138             {
139                 entry.setDescription( description );
140                 entries.add( entry );
141             }
142
143             tmp = whenGathered;
144             idx++;
145         }
146
147         String key = groupId + ":" + artifactId;
148
149         return generator.generateFeed( getTitle() + "\'" + key + "\'",
150                                        "New versions of artifact " + "\'" + key + "\' found during repository scan.",
151                                        entries );
152     }
153
154     public String getTitle()
155     {
156         return title;
157     }
158
159     public String getDescription()
160     {
161         return desc;
162     }
163
164     public RssFeedGenerator getGenerator()
165     {
166         return generator;
167     }
168
169     public void setGenerator( RssFeedGenerator generator )
170     {
171         this.generator = generator;
172     }
173 }