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