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