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