]> source.dussan.org Git - archiva.git/blob
92b4c8c912ef1dfd928c93814b6f23719dcaa979
[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 com.opensymphony.xwork.ActionContext;
26 import org.apache.commons.collections.CollectionUtils;
27 import org.apache.commons.lang.StringUtils;
28 import org.apache.maven.archiva.database.browsing.BrowsingResults;
29 import org.apache.maven.archiva.database.browsing.RepositoryBrowsing;
30 import org.apache.maven.archiva.security.*;
31 import org.apache.maven.archiva.security.ArchivaXworkUser;
32 import org.codehaus.plexus.xwork.action.PlexusActionSupport;
33
34 /**
35  * Browse the repository.
36  *
37  * @todo cache browsing results.
38  * @todo implement repository selectors (all or specific repository)
39  * @todo implement security around browse (based on repository id at first)
40  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="browseAction"
41  */
42 public class BrowseAction
43     extends PlexusActionSupport
44 {
45     /**
46      * @plexus.requirement role-hint="default"
47      */
48     private RepositoryBrowsing repoBrowsing;
49     
50     /**
51      * @plexus.requirement
52      */
53     private UserRepositories userRepositories;
54     
55     /**
56      * @plexus.requirement
57      */
58     private ArchivaXworkUser archivaXworkUser;
59     
60     private BrowsingResults results;
61
62     private String groupId;
63
64     private String artifactId;
65     
66     private String repositoryId;
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 archivaXworkUser.getActivePrincipal( ActionContext.getContext().getSession() );
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     
179     public String getRepositoryId(){
180         
181         return repositoryId;
182     }
183     
184     public void setRepositoryId(String repositoryId){
185         
186         this.repositoryId = repositoryId;
187     }
188 }