]> source.dussan.org Git - archiva.git/blob
18facd580ac1b20b0d474b7477ede2c92b05df52
[archiva.git] /
1 package org.apache.maven.archiva.web.action;
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.Collections;
23 import java.util.List;
24
25 import com.opensymphony.xwork2.Validateable;
26 import org.apache.commons.lang.StringUtils;
27 import org.apache.maven.archiva.common.utils.VersionUtil;
28 import org.apache.maven.archiva.database.ArchivaDatabaseException;
29 import org.apache.maven.archiva.database.ObjectNotFoundException;
30 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
31 import org.apache.maven.archiva.model.ArchivaProjectModel;
32 import org.apache.maven.archiva.model.Dependency;
33 import org.apache.maven.archiva.model.MailingList;
34 import org.apache.maven.archiva.security.AccessDeniedException;
35 import org.apache.maven.archiva.security.ArchivaSecurityException;
36 import org.apache.maven.archiva.security.PrincipalNotFoundException;
37 import org.apache.maven.archiva.security.UserRepositories;
38
39 /**
40  * Browse the repository. 
41  * 
42  * TODO change name to ShowVersionedAction to conform to terminology.
43  * 
44  * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="showArtifactAction" instantiation-strategy="per-lookup"
45  */
46 public class ShowArtifactAction
47     extends PlexusActionSupport
48     implements Validateable
49 {
50     /* .\ Not Exposed \._____________________________________________ */
51
52     /**
53      * @plexus.requirement role-hint="default"
54      */
55     private RepositoryBrowsing repoBrowsing;
56
57     /**
58      * @plexus.requirement
59      */
60     private UserRepositories userRepositories;
61     
62     /* .\ Exposed Output Objects \.__________________________________ */
63
64     private String groupId;
65
66     private String artifactId;
67
68     private String version;
69
70     private String repositoryId;
71
72     /**
73      * The model of this versioned project.
74      */
75     private ArchivaProjectModel model;
76
77     /**
78      * The list of artifacts that depend on this versioned project.
79      */
80     private List<ArchivaProjectModel> dependees;
81
82     private List<MailingList> mailingLists;
83
84     private List<Dependency> dependencies;
85     
86     private List<String> snapshotVersions;
87
88     /**
89      * Show the versioned project information tab. TODO: Change name to 'project'
90      */
91     public String artifact()
92         throws ObjectNotFoundException, ArchivaDatabaseException
93     {
94         try
95         {
96             if( VersionUtil.isSnapshot( version ) )
97             {                
98                 this.model =
99                     repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
100                                 
101                 this.snapshotVersions =
102                     repoBrowsing.getOtherSnapshotVersions( getObservableRepos(), groupId, artifactId, version );
103                 if( this.snapshotVersions.contains( version ) )
104                 {
105                     this.snapshotVersions.remove( version );
106                 }
107             }
108             else
109             {
110                 this.model =
111                     repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
112             }
113             
114             this.repositoryId =
115                 repoBrowsing.getRepositoryId( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
116         }
117         catch ( ObjectNotFoundException e )
118         {
119             log.debug( e.getMessage(), e );
120             addActionError( e.getMessage() );
121             return ERROR;
122         }
123
124         return SUCCESS;
125     }
126
127     /**
128      * Show the artifact information tab.
129      */
130     public String dependencies()
131         throws ObjectNotFoundException, ArchivaDatabaseException
132     {
133         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
134
135         this.dependencies = model.getDependencies();
136
137         return SUCCESS;
138     }
139
140     /**
141      * Show the mailing lists information tab.
142      */
143     public String mailingLists()
144         throws ObjectNotFoundException, ArchivaDatabaseException
145     {
146         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
147         this.mailingLists = model.getMailingLists();
148
149         return SUCCESS;
150     }
151
152     /**
153      * Show the reports tab.
154      */
155     public String reports()
156         throws ObjectNotFoundException, ArchivaDatabaseException
157     {
158         // TODO: hook up reports on project - this.reports = artifactsDatabase.findArtifactResults( groupId, artifactId,
159         // version );
160
161         return SUCCESS;
162     }
163
164     /**
165      * Show the dependees (other artifacts that depend on this project) tab.
166      */
167     public String dependees()
168         throws ObjectNotFoundException, ArchivaDatabaseException
169     {
170         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
171
172         this.dependees = repoBrowsing.getUsedBy( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
173
174         return SUCCESS;
175     }
176
177     /**
178      * Show the dependencies of this versioned project tab.
179      */
180     public String dependencyTree()
181         throws ObjectNotFoundException, ArchivaDatabaseException
182     {
183         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
184
185         return SUCCESS;
186     }
187
188     private List<String> getObservableRepos()
189     {
190         try
191         {
192             return userRepositories.getObservableRepositoryIds( getPrincipal() );
193         }
194         catch ( PrincipalNotFoundException e )
195         {
196             log.warn( e.getMessage(), e );
197         }
198         catch ( AccessDeniedException e )
199         {
200             log.warn( e.getMessage(), e );
201             // TODO: pass this onto the screen.
202         }
203         catch ( ArchivaSecurityException e )
204         {
205             log.warn( e.getMessage(), e );
206         }
207         return Collections.emptyList();
208     }
209
210     @Override
211     public void validate()
212     {
213         if ( StringUtils.isBlank( groupId ) )
214         {
215             addActionError( "You must specify a group ID to browse" );
216         }
217
218         if ( StringUtils.isBlank( artifactId ) )
219         {
220             addActionError( "You must specify a artifact ID to browse" );
221         }
222
223         if ( StringUtils.isBlank( version ) )
224         {
225             addActionError( "You must specify a version to browse" );
226         }
227     }
228
229     public ArchivaProjectModel getModel()
230     {
231         return model;
232     }
233
234     public String getGroupId()
235     {
236         return groupId;
237     }
238
239     public void setGroupId( String groupId )
240     {
241         this.groupId = groupId;
242     }
243
244     public String getArtifactId()
245     {
246         return artifactId;
247     }
248
249     public void setArtifactId( String artifactId )
250     {
251         this.artifactId = artifactId;
252     }
253
254     public String getVersion()
255     {
256         return version;
257     }
258
259     public void setVersion( String version )
260     {
261         this.version = version;
262     }
263
264     public List<MailingList> getMailingLists()
265     {
266         return mailingLists;
267     }
268
269     public List<Dependency> getDependencies()
270     {
271         return dependencies;
272     }
273
274     public List<ArchivaProjectModel> getDependees()
275     {
276         return dependees;
277     }
278
279     public String getRepositoryId()
280     {
281         return repositoryId;
282     }
283
284     public void setRepositoryId( String repositoryId )
285     {
286         this.repositoryId = repositoryId;
287     }
288
289     public List<String> getSnapshotVersions()
290     {
291         return snapshotVersions;
292     }
293
294     public void setSnapshotVersions( List<String> snapshotVersions )
295     {
296         this.snapshotVersions = snapshotVersions;
297     }
298
299 }