Java tutorial
package org.apache.archiva.admin.repository; /* * 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 org.apache.archiva.admin.model.RepositoryAdminException; import org.apache.archiva.admin.model.RepositoryCommonValidator; import org.apache.archiva.admin.model.beans.AbstractRepository; import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.managed.ManagedRepositoryAdmin; import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.Configuration; import org.apache.archiva.redback.components.scheduler.CronExpressionValidator; import org.apache.commons.lang.StringUtils; import org.apache.commons.validator.GenericValidator; import org.apache.archiva.redback.components.registry.Registry; import org.springframework.stereotype.Service; import javax.inject.Inject; import javax.inject.Named; /** * apply basic repository validation : id and name. * Check if already exists. * * @author Olivier Lamy * @since 1.4-M1 */ @Service public class DefaultRepositoryCommonValidator implements RepositoryCommonValidator { @Inject private ArchivaConfiguration archivaConfiguration; @Inject @Named(value = "commons-configuration") private org.apache.archiva.redback.components.registry.Registry registry; /** * @param abstractRepository * @param update in update mode if yes already exists won't be check * @throws RepositoryAdminException */ @Override public void basicValidation(AbstractRepository abstractRepository, boolean update) throws RepositoryAdminException { Configuration config = archivaConfiguration.getConfiguration(); String repoId = abstractRepository.getId(); if (!update) { if (config.getManagedRepositoriesAsMap().containsKey(repoId)) { throw new RepositoryAdminException("Unable to add new repository with id [" + repoId + "], that id already exists as a managed repository."); } else if (config.getRepositoryGroupsAsMap().containsKey(repoId)) { throw new RepositoryAdminException("Unable to add new repository with id [" + repoId + "], that id already exists as a repository group."); } else if (config.getRemoteRepositoriesAsMap().containsKey(repoId)) { throw new RepositoryAdminException("Unable to add new repository with id [" + repoId + "], that id already exists as a remote repository."); } } if (StringUtils.isBlank(repoId)) { throw new RepositoryAdminException("Repository ID cannot be empty."); } if (!GenericValidator.matchRegexp(repoId, REPOSITORY_ID_VALID_EXPRESSION)) { throw new RepositoryAdminException( "Invalid repository ID. Identifier must only contain alphanumeric characters, underscores(_), dots(.), and dashes(-)."); } String name = abstractRepository.getName(); if (StringUtils.isBlank(name)) { throw new RepositoryAdminException("repository name cannot be empty"); } if (!GenericValidator.matchRegexp(name, REPOSITORY_NAME_VALID_EXPRESSION)) { throw new RepositoryAdminException( "Invalid repository name. Repository Name must only contain alphanumeric characters, white-spaces(' '), " + "forward-slashes(/), open-parenthesis('('), close-parenthesis(')'), underscores(_), dots(.), and dashes(-)."); } } /** * validate cronExpression and location format * * @param managedRepository * @since 1.4-M2 */ @Override public void validateManagedRepository(ManagedRepository managedRepository) throws RepositoryAdminException { String cronExpression = managedRepository.getCronExpression(); // FIXME : olamy can be empty to avoid scheduled scan ? if (StringUtils.isNotBlank(cronExpression)) { CronExpressionValidator validator = new CronExpressionValidator(); if (!validator.validate(cronExpression)) { throw new RepositoryAdminException("Invalid cron expression.", "cronExpression"); } } else { throw new RepositoryAdminException("Cron expression cannot be empty."); } String repoLocation = removeExpressions(managedRepository.getLocation()); if (!GenericValidator.matchRegexp(repoLocation, ManagedRepositoryAdmin.REPOSITORY_LOCATION_VALID_EXPRESSION)) { throw new RepositoryAdminException( "Invalid repository location. Directory must only contain alphanumeric characters, equals(=), question-marks(?), " + "exclamation-points(!), ampersands(&), forward-slashes(/), back-slashes(\\), underscores(_), dots(.), colons(:), tildes(~), and dashes(-).", "location"); } } /** * replace some interpolations ${appserver.base} with correct values * * @param directory * @return */ @Override public String removeExpressions(String directory) { String value = StringUtils.replace(directory, "${appserver.base}", getRegistry().getString("appserver.base", "${appserver.base}")); value = StringUtils.replace(value, "${appserver.home}", getRegistry().getString("appserver.home", "${appserver.home}")); return value; } public ArchivaConfiguration getArchivaConfiguration() { return archivaConfiguration; } public void setArchivaConfiguration(ArchivaConfiguration archivaConfiguration) { this.archivaConfiguration = archivaConfiguration; } public Registry getRegistry() { return registry; } public void setRegistry(org.apache.archiva.redback.components.registry.Registry registry) { this.registry = registry; } }