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