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