]> source.dussan.org Git - archiva.git/blob
4cdafcc6bbba7aba755dfea9fd1e7fd280a45dfb
[archiva.git] /
1 package org.apache.maven.archiva.web.action.admin.repositories;
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.ArrayList;
23 import java.util.List;
24 import java.util.Map;
25 import javax.servlet.http.HttpServletRequest;
26
27 import com.opensymphony.webwork.interceptor.ServletRequestAware;
28 import com.opensymphony.xwork.Preparable;
29
30 import org.apache.commons.lang.StringUtils;
31 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
32 import org.apache.maven.archiva.configuration.Configuration;
33 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
34 import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration;
35 import org.apache.maven.archiva.security.ArchivaRoleConstants;
36 import org.apache.maven.archiva.web.util.ContextUtils;
37
38 /**
39  * RepositoryGroupsAction
40  * 
41  * @author
42  * @version
43  * @plexus.component role="com.opensymphony.xwork.Action" role-hint="repositoryGroupsAction"
44  */
45 public class RepositoryGroupsAction
46     extends AbstractRepositoriesAdminAction
47     implements ServletRequestAware, Preparable
48 {
49     private RepositoryGroupConfiguration repositoryGroup;
50
51     private Map<String, RepositoryGroupConfiguration> repositoryGroups;
52
53     private Map<String, ManagedRepositoryConfiguration> managedRepositories;
54
55     private Map<String, List<String>> groupToRepositoryMap;
56
57     private String repoGroupId;
58     
59     private String repoId;
60
61     /**
62      * Used to construct the repository WebDAV URL in the repository action.
63      */
64     private String baseUrl;
65     
66     public void setServletRequest( HttpServletRequest request )
67     {
68         this.baseUrl = ContextUtils.getBaseURL( request, "repository" );
69     }
70
71     public void prepare()
72     {
73         Configuration config = archivaConfiguration.getConfiguration();
74         
75         repositoryGroup = new RepositoryGroupConfiguration();
76         repositoryGroups = config.getRepositoryGroupsAsMap();
77         managedRepositories = config.getManagedRepositoriesAsMap();
78         groupToRepositoryMap = config.getGroupToRepositoryMap();
79     }
80     
81     public String addRepositoryGroup()
82     {
83         Configuration configuration = archivaConfiguration.getConfiguration();
84
85         String repoGroupId = repositoryGroup.getId();
86         
87         if ( StringUtils.isBlank( repoGroupId ) )
88         {
89                 addActionError( "You must enter a repository group id." );
90                 return ERROR;
91         }
92         
93         if ( configuration.getRepositoryGroupsAsMap().containsKey( repoGroupId ) )
94         {
95             addActionError( "Unable to add new repository group with id [" + repoGroupId
96                     + "], that id already exists as a repository group." );
97             return ERROR;
98         }
99         else if ( configuration.getManagedRepositoriesAsMap().containsKey( repoGroupId ) )
100         {
101             addActionError( "Unable to add new repository group with id [" + repoGroupId
102                     + "], that id already exists as a managed repository." );
103             return ERROR;
104         }
105         else if ( configuration.getRemoteRepositoriesAsMap().containsKey( repoGroupId ) )
106         {
107             addActionError( "Unable to add new repository group with id [" + repoGroupId
108                     + "], that id already exists as a remote repository." );
109             return ERROR;
110         }
111         
112         if( repoGroupId.length() > 100 )
113         {
114             addActionError( "Identifier [" + repoGroupId + "] is over the maximum limit of 100 characters" );
115             return ERROR;
116         }
117             
118         configuration.addRepositoryGroup( repositoryGroup );
119         return saveConfiguration( configuration );
120     }
121     
122     public String addRepositoryToGroup()
123     {
124         Configuration config = archivaConfiguration.getConfiguration();
125         RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId );
126         
127         validateRepository();
128         
129         if ( hasErrors() )
130         {
131             return ERROR;
132         }
133
134         if ( group.getRepositories().contains( repoId ) )
135         {
136             addActionError( "Repository with id [" + repoId + "] is already in the group" );
137             return ERROR;
138         }
139
140         // remove the old repository group configuration
141         config.removeRepositoryGroup( group );
142         
143         // save repository group configuration
144         group.addRepository( repoId );
145         config.addRepositoryGroup( group );
146         
147         return saveConfiguration( config );
148     }
149     
150     public String removeRepositoryFromGroup()
151     {
152         Configuration config = archivaConfiguration.getConfiguration();
153         RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId );
154         
155         validateRepository();
156         
157         if( hasErrors() )
158         {
159             return ERROR;
160         }
161         
162         if ( !group.getRepositories().contains( repoId ) )
163         {
164             addActionError( "No repository with id[" + repoId + "] found in the group" );
165             return ERROR;
166         }
167         
168         // remove the old repository group configuration
169         config.removeRepositoryGroup( group );
170         
171         // save repository group configuration
172         group.removeRepository( repoId );
173         config.addRepositoryGroup( group );
174         
175         return saveConfiguration( config );
176     }
177     
178     public void validateRepository()
179     {
180         Configuration config = archivaConfiguration.getConfiguration();
181         RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId );
182         ManagedRepositoryConfiguration repo = config.findManagedRepositoryById( repoId );
183         
184         if ( group == null )
185         {
186             addActionError( "A repository group with that id does not exist." );
187         }
188         
189         if ( repo == null )
190         {
191             addActionError( "A repository with that id does not exist." );
192         }
193     }
194     
195     public RepositoryGroupConfiguration getRepositoryGroup()
196     {
197         return repositoryGroup;
198     }
199     
200     public void setRepositoryGroup( RepositoryGroupConfiguration repositoryGroup )
201     {
202         this.repositoryGroup = repositoryGroup;
203     }
204     
205     public Map<String, RepositoryGroupConfiguration> getRepositoryGroups()
206     {
207         return repositoryGroups;
208     }
209     
210     public void setRepositoryGroups( Map<String, RepositoryGroupConfiguration> repositoryGroups )
211     {
212         this.repositoryGroups = repositoryGroups;
213     }
214     
215     public Map<String, ManagedRepositoryConfiguration> getManagedRepositories()
216     {
217         return managedRepositories;
218     }
219     
220     public Map<String, List<String>> getGroupToRepositoryMap()
221     {
222         return this.groupToRepositoryMap;
223     }
224     
225     public String getRepoGroupId()
226     {
227         return repoGroupId;
228     }
229     
230     public void setRepoGroupId( String repoGroupId )
231     {
232         this.repoGroupId = repoGroupId;
233     }
234     
235     public String getRepoId()
236     {
237         return repoId;
238     }
239     
240     public void setRepoId( String repoId )
241     {
242         this.repoId = repoId;
243     }
244     
245     public String getBaseUrl()
246     {
247         return baseUrl;
248     }
249 }