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