]> source.dussan.org Git - archiva.git/blob
a402515c3296cb41b8adbf1b1183be094eb07a0b
[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 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
36
37 import com.opensymphony.xwork.ActionContext;
38 import com.opensymphony.xwork.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.xwork.Action" role-hint="showArtifactAction"
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     /**
100      * Show the versioned project information tab. TODO: Change name to 'project'
101      */
102     public String artifact()
103         throws ObjectNotFoundException, ArchivaDatabaseException
104     {
105         try
106         {
107             this.model =
108                 repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
109             this.repositoryId =
110                 repoBrowsing.getRepositoryId( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
111         }
112         catch ( ObjectNotFoundException oe )
113         {
114             addActionError( "Unable to find project model for [" + groupId + ":" + artifactId + ":" + version + "]." );
115
116             return ERROR;
117         }
118
119         return SUCCESS;
120     }
121
122     /**
123      * Show the artifact information tab.
124      */
125     public String dependencies()
126         throws ObjectNotFoundException, ArchivaDatabaseException
127     {
128         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
129
130         this.dependencies = model.getDependencies();
131
132         return SUCCESS;
133     }
134
135     /**
136      * Show the mailing lists information tab.
137      */
138     public String mailingLists()
139         throws ObjectNotFoundException, ArchivaDatabaseException
140     {
141         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
142         this.mailingLists = model.getMailingLists();
143
144         return SUCCESS;
145     }
146
147     /**
148      * Show the reports tab.
149      */
150     public String reports()
151         throws ObjectNotFoundException, ArchivaDatabaseException
152     {
153         System.out.println( "#### In reports." );
154         // TODO: hook up reports on project - this.reports = artifactsDatabase.findArtifactResults( groupId, artifactId,
155         // version );
156         System.out.println( "#### Found " + reports.size() + " reports." );
157
158         return SUCCESS;
159     }
160
161     /**
162      * Show the dependees (other artifacts that depend on this project) tab.
163      */
164     public String dependees()
165         throws ObjectNotFoundException, ArchivaDatabaseException
166     {
167         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
168
169         this.dependees = repoBrowsing.getUsedBy( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
170
171         return SUCCESS;
172     }
173
174     /**
175      * Show the dependencies of this versioned project tab.
176      */
177     public String dependencyTree()
178         throws ObjectNotFoundException, ArchivaDatabaseException
179     {
180         this.model = repoBrowsing.selectVersion( getPrincipal(), getObservableRepos(), groupId, artifactId, version );
181
182         return SUCCESS;
183     }
184
185     private String getPrincipal()
186     {
187         return archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
188     }
189
190     private List<String> getObservableRepos()
191     {
192         try
193         {
194             return userRepositories.getObservableRepositoryIds( getPrincipal() );
195         }
196         catch ( PrincipalNotFoundException e )
197         {
198             getLogger().warn( e.getMessage(), e );
199         }
200         catch ( AccessDeniedException e )
201         {
202             getLogger().warn( e.getMessage(), e );
203             // TODO: pass this onto the screen.
204         }
205         catch ( ArchivaSecurityException e )
206         {
207             getLogger().warn( e.getMessage(), e );
208         }
209         return Collections.emptyList();
210     }
211
212     public void validate()
213     {
214         if ( StringUtils.isBlank( groupId ) )
215         {
216             addActionError( "You must specify a group ID to browse" );
217         }
218
219         if ( StringUtils.isBlank( artifactId ) )
220         {
221             addActionError( "You must specify a artifact ID to browse" );
222         }
223
224         if ( StringUtils.isBlank( version ) )
225         {
226             addActionError( "You must specify a version to browse" );
227         }
228     }
229
230     public ArchivaProjectModel getModel()
231     {
232         return model;
233     }
234
235     public String getGroupId()
236     {
237         return groupId;
238     }
239
240     public void setGroupId( String groupId )
241     {
242         this.groupId = groupId;
243     }
244
245     public String getArtifactId()
246     {
247         return artifactId;
248     }
249
250     public void setArtifactId( String artifactId )
251     {
252         this.artifactId = artifactId;
253     }
254
255     public String getVersion()
256     {
257         return version;
258     }
259
260     public void setVersion( String version )
261     {
262         this.version = version;
263     }
264
265     public List getReports()
266     {
267         return reports;
268     }
269
270     public List getMailingLists()
271     {
272         return mailingLists;
273     }
274
275     public List getDependencies()
276     {
277         return dependencies;
278     }
279
280     public List getDependees()
281     {
282         return dependees;
283     }
284
285     public String getRepositoryId()
286     {
287         return repositoryId;
288     }
289
290     public void setRepositoryId( String repositoryId )
291     {
292         this.repositoryId = repositoryId;
293     }
294
295 }