| package org.apache.maven.archiva.web.action.admin.repositories; |
| |
| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| import java.util.List; |
| import java.util.Map; |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| import javax.servlet.http.HttpServletRequest; |
| |
| import org.apache.struts2.interceptor.ServletRequestAware; |
| import com.opensymphony.xwork2.Preparable; |
| |
| import org.apache.commons.lang.StringUtils; |
| import org.apache.maven.archiva.configuration.Configuration; |
| import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration; |
| import org.apache.maven.archiva.configuration.RepositoryGroupConfiguration; |
| import org.apache.maven.archiva.web.util.ContextUtils; |
| |
| /** |
| * RepositoryGroupsAction |
| * |
| * @author |
| * @version |
| * @plexus.component role="com.opensymphony.xwork2.Action" role-hint="repositoryGroupsAction" |
| */ |
| public class RepositoryGroupsAction |
| extends AbstractRepositoriesAdminAction |
| implements ServletRequestAware, Preparable |
| { |
| private RepositoryGroupConfiguration repositoryGroup; |
| |
| private Map<String, RepositoryGroupConfiguration> repositoryGroups; |
| |
| private Map<String, ManagedRepositoryConfiguration> managedRepositories; |
| |
| private Map<String, List<String>> groupToRepositoryMap; |
| |
| private String repoGroupId; |
| |
| private String repoId; |
| |
| /** |
| * Used to construct the repository WebDAV URL in the repository action. |
| */ |
| private String baseUrl; |
| |
| private static final Pattern REPO_GROUP_ID_PATTERN = Pattern.compile( "[A-Za-z0-9\\._\\-]+" ); |
| |
| public void setServletRequest( HttpServletRequest request ) |
| { |
| this.baseUrl = ContextUtils.getBaseURL( request, "repository" ); |
| } |
| |
| public void prepare() |
| { |
| Configuration config = archivaConfiguration.getConfiguration(); |
| |
| repositoryGroup = new RepositoryGroupConfiguration(); |
| repositoryGroups = config.getRepositoryGroupsAsMap(); |
| managedRepositories = config.getManagedRepositoriesAsMap(); |
| groupToRepositoryMap = config.getGroupToRepositoryMap(); |
| } |
| |
| public String addRepositoryGroup() |
| { |
| Configuration configuration = archivaConfiguration.getConfiguration(); |
| |
| String repoGroupId = repositoryGroup.getId(); |
| |
| if( repoGroupId == null || "".equals( repoGroupId.trim() ) ) |
| { |
| addActionError( "Identifier field is required." ); |
| return ERROR; |
| } |
| |
| if( repoGroupId.length() > 100 ) |
| { |
| addActionError( "Identifier [" + repoGroupId + "] is over the maximum limit of 100 characters" ); |
| return ERROR; |
| } |
| |
| Matcher matcher = REPO_GROUP_ID_PATTERN.matcher( repoGroupId ); |
| if( !matcher.matches() ) |
| { |
| addActionError( "Invalid character(s) found in identifier. Only the following characters are allowed: alphanumeric, '.', '-' and '_'" ); |
| return ERROR; |
| } |
| |
| if ( StringUtils.isBlank( repoGroupId ) ) |
| { |
| addActionError( "You must enter a repository group id." ); |
| return ERROR; |
| } |
| |
| if ( configuration.getRepositoryGroupsAsMap().containsKey( repoGroupId ) ) |
| { |
| addActionError( "Unable to add new repository group with id [" + repoGroupId |
| + "], that id already exists as a repository group." ); |
| return ERROR; |
| } |
| else if ( configuration.getManagedRepositoriesAsMap().containsKey( repoGroupId ) ) |
| { |
| addActionError( "Unable to add new repository group with id [" + repoGroupId |
| + "], that id already exists as a managed repository." ); |
| return ERROR; |
| } |
| else if ( configuration.getRemoteRepositoriesAsMap().containsKey( repoGroupId ) ) |
| { |
| addActionError( "Unable to add new repository group with id [" + repoGroupId |
| + "], that id already exists as a remote repository." ); |
| return ERROR; |
| } |
| |
| configuration.addRepositoryGroup( repositoryGroup ); |
| return saveConfiguration( configuration ); |
| } |
| |
| public String addRepositoryToGroup() |
| { |
| Configuration config = archivaConfiguration.getConfiguration(); |
| RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId ); |
| |
| validateRepository(); |
| |
| if ( hasErrors() ) |
| { |
| return ERROR; |
| } |
| |
| if ( group.getRepositories().contains( repoId ) ) |
| { |
| addActionError( "Repository with id [" + repoId + "] is already in the group" ); |
| return ERROR; |
| } |
| |
| // remove the old repository group configuration |
| config.removeRepositoryGroup( group ); |
| |
| // save repository group configuration |
| group.addRepository( repoId ); |
| config.addRepositoryGroup( group ); |
| |
| return saveConfiguration( config ); |
| } |
| |
| public String removeRepositoryFromGroup() |
| { |
| Configuration config = archivaConfiguration.getConfiguration(); |
| RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId ); |
| |
| validateRepository(); |
| |
| if( hasErrors() ) |
| { |
| return ERROR; |
| } |
| |
| if ( !group.getRepositories().contains( repoId ) ) |
| { |
| addActionError( "No repository with id[" + repoId + "] found in the group" ); |
| return ERROR; |
| } |
| |
| // remove the old repository group configuration |
| config.removeRepositoryGroup( group ); |
| |
| // save repository group configuration |
| group.removeRepository( repoId ); |
| config.addRepositoryGroup( group ); |
| |
| return saveConfiguration( config ); |
| } |
| |
| public void validateRepository() |
| { |
| Configuration config = archivaConfiguration.getConfiguration(); |
| RepositoryGroupConfiguration group = config.findRepositoryGroupById( repoGroupId ); |
| ManagedRepositoryConfiguration repo = config.findManagedRepositoryById( repoId ); |
| |
| if ( group == null ) |
| { |
| addActionError( "A repository group with that id does not exist." ); |
| } |
| |
| if ( repo == null ) |
| { |
| addActionError( "A repository with that id does not exist." ); |
| } |
| } |
| |
| public RepositoryGroupConfiguration getRepositoryGroup() |
| { |
| return repositoryGroup; |
| } |
| |
| public void setRepositoryGroup( RepositoryGroupConfiguration repositoryGroup ) |
| { |
| this.repositoryGroup = repositoryGroup; |
| } |
| |
| public Map<String, RepositoryGroupConfiguration> getRepositoryGroups() |
| { |
| return repositoryGroups; |
| } |
| |
| public void setRepositoryGroups( Map<String, RepositoryGroupConfiguration> repositoryGroups ) |
| { |
| this.repositoryGroups = repositoryGroups; |
| } |
| |
| public Map<String, ManagedRepositoryConfiguration> getManagedRepositories() |
| { |
| return managedRepositories; |
| } |
| |
| public Map<String, List<String>> getGroupToRepositoryMap() |
| { |
| return this.groupToRepositoryMap; |
| } |
| |
| public String getRepoGroupId() |
| { |
| return repoGroupId; |
| } |
| |
| public void setRepoGroupId( String repoGroupId ) |
| { |
| this.repoGroupId = repoGroupId; |
| } |
| |
| public String getRepoId() |
| { |
| return repoId; |
| } |
| |
| public void setRepoId( String repoId ) |
| { |
| this.repoId = repoId; |
| } |
| |
| public String getBaseUrl() |
| { |
| return baseUrl; |
| } |
| } |