]> source.dussan.org Git - archiva.git/blob
56fd71aa013e1d19bc347d742513f4a6892d586b
[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.database.ArchivaDatabaseException;
27 import org.apache.maven.archiva.database.ObjectNotFoundException;
28 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
29 import org.apache.maven.archiva.model.ArchivaProjectModel;
30 import org.apache.maven.archiva.security.AccessDeniedException;
31 import org.apache.maven.archiva.security.ArchivaSecurityException;
32 import org.apache.maven.archiva.security.PrincipalNotFoundException;
33 import org.apache.maven.archiva.security.UserRepositories;
34 import org.apache.maven.archiva.security.ArchivaXworkUser;
35
36 import com.opensymphony.xwork2.ActionContext;
37 import com.opensymphony.xwork2.Validateable;
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"
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     /**
63      * @plexus.requirement
64      */
65     private ArchivaXworkUser archivaXworkUser;
66
67     /* .\ Input Parameters \.________________________________________ */
68
69     private String groupId;
70
71     private String artifactId;
72
73     private String version;
74
75     private String repositoryId;
76
77     /* .\ Exposed Output Objects \.__________________________________ */
78
79     /**
80      * The model of this versioned project.
81      */
82     private ArchivaProjectModel model;
83
84     /**
85      * The list of artifacts that depend on this versioned project.
86      */
87     private List dependees;
88
89     /**
90      * The reports associated with this versioned project.
91      */
92     private List reports;
93
94     private List mailingLists;
95
96     private List dependencies;
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             this.model =
107                 repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
108             this.repositoryId =
109                 repoBrowsing.getRepositoryId( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
110         }
111         catch ( ObjectNotFoundException oe )
112         {
113             addActionError( "Unable to find project model for [" + groupId + ":" + artifactId + ":" + version + "]." );
114
115             return ERROR;
116         }
117
118         return SUCCESS;
119     }
120
121     /**
122      * Show the artifact information tab.
123      */
124     public String dependencies()
125         throws ObjectNotFoundException, ArchivaDatabaseException
126     {
127         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
128
129         this.dependencies = model.getDependencies();
130
131         return SUCCESS;
132     }
133
134     /**
135      * Show the mailing lists information tab.
136      */
137     public String mailingLists()
138         throws ObjectNotFoundException, ArchivaDatabaseException
139     {
140         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
141         this.mailingLists = model.getMailingLists();
142
143         return SUCCESS;
144     }
145
146     /**
147      * Show the reports tab.
148      */
149     public String reports()
150         throws ObjectNotFoundException, ArchivaDatabaseException
151     {
152         System.out.println( "#### In reports." );
153         // TODO: hook up reports on project - this.reports = artifactsDatabase.findArtifactResults( groupId, artifactId,
154         // version );
155         System.out.println( "#### Found " + reports.size() + " reports." );
156
157         return SUCCESS;
158     }
159
160     /**
161      * Show the dependees (other artifacts that depend on this project) tab.
162      */
163     public String dependees()
164         throws ObjectNotFoundException, ArchivaDatabaseException
165     {
166         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
167
168         this.dependees = repoBrowsing.getUsedBy( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
169
170         return SUCCESS;
171     }
172
173     /**
174      * Show the dependencies of this versioned project tab.
175      */
176     public String dependencyTree()
177         throws ObjectNotFoundException, ArchivaDatabaseException
178     {
179         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
180
181         return SUCCESS;
182     }
183
184     private String getPrincipal()
185     {
186         return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
187     }
188
189     private List<String> getObservableRepos()
190     {
191         try
192         {
193             return userRepositories.getObservableRepositoryIds( getPrincipal() );
194         }
195         catch ( PrincipalNotFoundException e )
196         {
197             getLogger().warn( e.getMessage(), e );
198         }
199         catch ( AccessDeniedException e )
200         {
201             getLogger().warn( e.getMessage(), e );
202             // TODO: pass this onto the screen.
203         }
204         catch ( ArchivaSecurityException e )
205         {
206             getLogger().warn( e.getMessage(), e );
207         }
208         return Collections.emptyList();
209     }
210
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 getReports()
265     {
266         return reports;
267     }
268
269     public List getMailingLists()
270     {
271         return mailingLists;
272     }
273
274     public List getDependencies()
275     {
276         return dependencies;
277     }
278
279     public List getDependees()
280     {
281         return dependees;
282     }
283
284     public String getRepositoryId()
285     {
286         return repositoryId;
287     }
288
289     public void setRepositoryId( String repositoryId )
290     {
291         this.repositoryId = repositoryId;
292     }
293
294 }