]> source.dussan.org Git - archiva.git/blob
2bc0422314906274cd69d5e0c0131d6e3dae998e
[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 org.apache.commons.collections.CollectionUtils;
23 import org.apache.commons.lang.StringUtils;
24 import org.apache.maven.archiva.database.browsing.BrowsingResults;
25 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
26 import org.apache.maven.archiva.security.AccessDeniedException;
27 import org.apache.maven.archiva.security.ArchivaSecurityException;
28 import org.apache.maven.archiva.security.ArchivaUser;
29 import org.apache.maven.archiva.security.PrincipalNotFoundException;
30 import org.apache.maven.archiva.security.UserRepositories;
31 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
32
33 import java.util.Collections;
34 import java.util.List;
35
36 /**
37  * Browse the repository.
38  *
39  * @todo cache browsing results.
40  * @todo implement repository selectors (all or specific repository)
41  * @todo implement security around browse (based on repository id at first)
42  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="browseAction"
43  */
44 public class BrowseAction
45     extends PlexusActionSupport
46 {
47     /**
48      * @plexus.requirement role-hint="default"
49      */
50     private RepositoryBrowsing repoBrowsing;
51     
52     /**
53      * @plexus.requirement
54      */
55     private UserRepositories userRepositories;
56     
57     /**
58      * @plexus.requirement role-hint="xwork"
59      */
60     private ArchivaUser archivaUser;
61
62     private BrowsingResults results;
63
64     private String groupId;
65
66     private String artifactId;
67
68     public String browse()
69     {
70         List<String> selectedRepos = getObservableRepos();
71         if ( CollectionUtils.isEmpty( selectedRepos ) )
72         {
73             return GlobalResults.ACCESS_TO_NO_REPOS;
74         }
75
76         this.results = repoBrowsing.getRoot( getPrincipal(), selectedRepos );
77         return SUCCESS;
78     }
79
80     public String browseGroup()
81     {
82         if ( StringUtils.isEmpty( groupId ) )
83         {
84             // TODO: i18n
85             addActionError( "You must specify a group ID to browse" );
86             return ERROR;
87         }
88
89         List<String> selectedRepos = getObservableRepos();
90         if ( CollectionUtils.isEmpty( selectedRepos ) )
91         {
92             return GlobalResults.ACCESS_TO_NO_REPOS;
93         }
94
95         
96         this.results = repoBrowsing.selectGroupId( getPrincipal(), selectedRepos, groupId );
97         return SUCCESS;
98     }
99
100     public String browseArtifact()
101     {
102         if ( StringUtils.isEmpty( groupId ) )
103         {
104             // TODO: i18n
105             addActionError( "You must specify a group ID to browse" );
106             return ERROR;
107         }
108
109         if ( StringUtils.isEmpty( artifactId ) )
110         {
111             // TODO: i18n
112             addActionError( "You must specify a artifact ID to browse" );
113             return ERROR;
114         }
115
116         List<String> selectedRepos = getObservableRepos();
117         if ( CollectionUtils.isEmpty( selectedRepos ) )
118         {
119             return GlobalResults.ACCESS_TO_NO_REPOS;
120         }
121
122         
123         this.results = repoBrowsing.selectArtifactId( getPrincipal(), selectedRepos, groupId, artifactId );
124         return SUCCESS;
125     }
126     
127     private String getPrincipal()
128     {
129         return archivaUser.getActivePrincipal();
130     }
131     
132     private List<String> getObservableRepos()
133     {
134         try
135         {
136             return userRepositories.getObservableRepositoryIds( getPrincipal() );
137         }
138         catch ( PrincipalNotFoundException e )
139         {
140             getLogger().warn( e.getMessage(), e );
141         }
142         catch ( AccessDeniedException e )
143         {
144             getLogger().warn( e.getMessage(), e );
145             // TODO: pass this onto the screen.
146         }
147         catch ( ArchivaSecurityException e )
148         {
149             getLogger().warn( e.getMessage(), e );
150         }
151         return Collections.emptyList();
152     }
153
154     public String getGroupId()
155     {
156         return groupId;
157     }
158
159     public void setGroupId( String groupId )
160     {
161         this.groupId = groupId;
162     }
163
164     public String getArtifactId()
165     {
166         return artifactId;
167     }
168
169     public void setArtifactId( String artifactId )
170     {
171         this.artifactId = artifactId;
172     }
173
174     public BrowsingResults getResults()
175     {
176         return results;
177     }
178 }