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