import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | ||||
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | ||||
import org.apache.archiva.consumers.RepositoryContentConsumer; | import org.apache.archiva.consumers.RepositoryContentConsumer; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.scanner.RepositoryScanStatistics; | import org.apache.archiva.repository.scanner.RepositoryScanStatistics; | ||||
import org.apache.archiva.repository.scanner.RepositoryScanner; | import org.apache.archiva.repository.scanner.RepositoryScanner; | ||||
import org.apache.archiva.repository.scanner.RepositoryScannerException; | import org.apache.archiva.repository.scanner.RepositoryScannerException; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.InputStream; | import java.io.InputStream; | ||||
import java.nio.file.Files; | |||||
import java.nio.file.Path; | |||||
import java.nio.file.Paths; | import java.nio.file.Paths; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | import java.util.Arrays; |
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.components.registry.Registry; | |||||
import org.apache.archiva.components.registry.RegistryException; | import org.apache.archiva.components.registry.RegistryException; | ||||
import org.apache.archiva.components.registry.RegistryListener; | import org.apache.archiva.components.registry.RegistryListener; | ||||
* @return | * @return | ||||
*/ | */ | ||||
public Path getDataDirectory(); | public Path getDataDirectory(); | ||||
/** | |||||
* Return the used configuration registry | |||||
* @return | |||||
*/ | |||||
Registry getRegistry( ); | |||||
} | } | ||||
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | ||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.event.EventHandler; | import org.apache.archiva.event.EventHandler; | ||||
import org.apache.archiva.event.EventType; | |||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.archiva.repository.EditableRemoteRepository; | import org.apache.archiva.repository.EditableRemoteRepository; | ||||
import org.apache.archiva.repository.RepositoryGroup; | import org.apache.archiva.repository.RepositoryGroup; |
import org.apache.archiva.metadata.repository.MetadataRepository; | import org.apache.archiva.metadata.repository.MetadataRepository; | ||||
import org.apache.archiva.metadata.repository.RepositorySessionFactory; | import org.apache.archiva.metadata.repository.RepositorySessionFactory; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.RepositoryException; | import org.apache.archiva.repository.RepositoryException; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.junit.Before; | import org.junit.Before; |
import org.apache.archiva.checksum.ChecksummedFile; | import org.apache.archiva.checksum.ChecksummedFile; | ||||
import org.apache.archiva.common.utils.PathUtil; | import org.apache.archiva.common.utils.PathUtil; | ||||
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.commons.io.FileUtils; | import org.apache.commons.io.FileUtils; | ||||
import org.assertj.core.api.Assertions; | import org.assertj.core.api.Assertions; |
import org.apache.archiva.metadata.repository.RepositorySession; | import org.apache.archiva.metadata.repository.RepositorySession; | ||||
import org.apache.archiva.metadata.repository.RepositorySessionFactory; | import org.apache.archiva.metadata.repository.RepositorySessionFactory; | ||||
import org.apache.archiva.repository.ManagedRepositoryContent; | import org.apache.archiva.repository.ManagedRepositoryContent; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | |||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | |||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.maven.metadata.storage.Maven2RepositoryPathTranslator; | import org.apache.archiva.repository.maven.metadata.storage.Maven2RepositoryPathTranslator; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.ReleaseScheme; | import org.apache.archiva.repository.ReleaseScheme; | ||||
import org.apache.archiva.repository.RepositoryContentProvider; | import org.apache.archiva.repository.RepositoryContentProvider; | ||||
import org.apache.archiva.metadata.audit.RepositoryListener; | import org.apache.archiva.metadata.audit.RepositoryListener; | ||||
import org.junit.runner.RunWith; | import org.junit.runner.RunWith; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import org.springframework.context.ApplicationContext; | import org.springframework.context.ApplicationContext; | ||||
import org.springframework.test.annotation.DirtiesContext; | |||||
import org.springframework.test.context.ContextConfiguration; | import org.springframework.test.context.ContextConfiguration; | ||||
import javax.inject.Inject; | import javax.inject.Inject; |
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | ||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.event.EventHandler; | import org.apache.archiva.event.EventHandler; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.archiva.repository.EditableRemoteRepository; | import org.apache.archiva.repository.EditableRemoteRepository; | ||||
import org.apache.archiva.repository.EditableRepositoryGroup; | import org.apache.archiva.repository.EditableRepositoryGroup; |
import org.apache.archiva.configuration.FileTypes; | import org.apache.archiva.configuration.FileTypes; | ||||
import org.apache.archiva.components.taskqueue.TaskQueueException; | import org.apache.archiva.components.taskqueue.TaskQueueException; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.ReleaseScheme; | import org.apache.archiva.repository.ReleaseScheme; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.scheduler.ArchivaTaskScheduler; | import org.apache.archiva.scheduler.ArchivaTaskScheduler; | ||||
import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask; | import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; |
import org.apache.archiva.redback.role.RoleManager; | import org.apache.archiva.redback.role.RoleManager; | ||||
import org.apache.archiva.redback.users.User; | import org.apache.archiva.redback.users.User; | ||||
import org.apache.archiva.redback.users.memory.SimpleUser; | import org.apache.archiva.redback.users.memory.SimpleUser; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.junit.Before; | import org.junit.Before; | ||||
import org.junit.BeforeClass; | |||||
import org.junit.runner.RunWith; | import org.junit.runner.RunWith; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; |
import org.apache.archiva.metadata.model.facets.AuditEvent; | import org.apache.archiva.metadata.model.facets.AuditEvent; | ||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.junit.Test; | import org.junit.Test; | ||||
import javax.inject.Inject; | import javax.inject.Inject; |
*/ | */ | ||||
import org.apache.archiva.configuration.Configuration; | import org.apache.archiva.configuration.Configuration; | ||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.validation.RepositoryChecker; | import org.apache.archiva.repository.validation.RepositoryChecker; | ||||
import org.apache.archiva.repository.validation.RepositoryValidator; | import org.apache.archiva.repository.validation.RepositoryValidator; | ||||
import org.apache.archiva.repository.validation.ValidationResponse; | |||||
import java.util.Collection; | import java.util.Collection; | ||||
import java.util.Map; | import java.util.Map; | ||||
*/ | */ | ||||
RepositoryValidator<R> getValidator( ); | RepositoryValidator<R> getValidator( ); | ||||
/** | |||||
* Validates the set attributes of the given repository instance and returns the validation result. | |||||
* The repository registry uses all available validators and applies their validateRepository method to the given | |||||
* repository. Validation results will be merged per field. | |||||
* | |||||
* @param repository the repository to validate against | |||||
* @return the result of the validation. | |||||
*/ | |||||
ValidationResponse<R> validateRepository( R repository); | |||||
/** | |||||
* Validates the set attributes of the given repository instance for a repository update and returns the validation result. | |||||
* The repository registry uses all available validators and applies their validateRepositoryForUpdate method to the given | |||||
* repository. Validation results will be merged per field. | |||||
* | |||||
* @param repository the repository to validate against | |||||
* @return the result of the validation. | |||||
*/ | |||||
ValidationResponse<R> validateRepositoryForUpdate( R repository); | |||||
/** | /** | ||||
* Returns <code>true</code>, if the repository is registered with the given id, otherwise <code>false</code> | * Returns <code>true</code>, if the repository is registered with the given id, otherwise <code>false</code> | ||||
* @param id the repository identifier | * @param id the repository identifier |
import org.apache.archiva.indexer.IndexUpdateFailedException; | import org.apache.archiva.indexer.IndexUpdateFailedException; | ||||
import org.apache.archiva.repository.metadata.MetadataReader; | import org.apache.archiva.repository.metadata.MetadataReader; | ||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.validation.ValidationError; | import org.apache.archiva.repository.validation.ValidationError; | ||||
import org.apache.archiva.repository.validation.ValidationResponse; | import org.apache.archiva.repository.validation.ValidationResponse; | ||||
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import java.util.ArrayList; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* @author Martin Stockhammer <martin_s@apache.org> | * @author Martin Stockhammer <martin_s@apache.org> | ||||
*/ | */ | ||||
public abstract class AbstractRepositoryValidator<R extends Repository> implements RepositoryValidator<R> | public abstract class AbstractRepositoryValidator<R extends Repository> implements RepositoryValidator<R> | ||||
{ | { | ||||
protected RepositoryRegistry repositoryRegistry; | protected RepositoryRegistry repositoryRegistry; | ||||
private final String category; | |||||
public AbstractRepositoryValidator( String category ) | |||||
{ | |||||
this.category = category; | |||||
} | |||||
@Override | @Override | ||||
public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) | public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) | ||||
this.repositoryRegistry = repositoryRegistry; | this.repositoryRegistry = repositoryRegistry; | ||||
} | } | ||||
protected String getCategory() { | |||||
return this.category; | |||||
} | |||||
protected Map<String, List<ValidationError>> appendError( Map<String, List<ValidationError>> errorMap, String attribute, String type, Object... parameter ) | |||||
{ | |||||
String errorKey = getCategory( ) + "." + attribute + "." + type; | |||||
Map<String, List<ValidationError>> result; | |||||
result = errorMap == null ? new HashMap<>( ) : errorMap; | |||||
ValidationError error = ValidationError.ofKey( errorKey, parameter ); | |||||
List<ValidationError> errList = result.computeIfAbsent( error.getAttribute( ), k -> new ArrayList<>( ) ); | |||||
errList.add( error ); | |||||
return result; | |||||
} | |||||
protected abstract ValidationResponse<R> apply( R repo, boolean update ); | protected abstract ValidationResponse<R> apply( R repo, boolean update ); | ||||
@Override | @Override |
package org.apache.archiva.repository; | |||||
package org.apache.archiva.repository.validation; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* or more contributor license agreements. See the NOTICE file | * or more contributor license agreements. See the NOTICE file | ||||
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.repository.Repository; | |||||
/** | /** | ||||
* @author Martin Stockhammer <martin_s@apache.org> | * @author Martin Stockhammer <martin_s@apache.org> | ||||
*/ | */ |
package org.apache.archiva.repository.validation; | |||||
/* | |||||
* 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.repository.Repository; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
public class CombinedValidationResponse<R extends Repository> implements CheckedResult<R, Map<String, List<ValidationError>>> | |||||
{ | |||||
private final Map<String, List<ValidationError>> errorMap = new HashMap<>( ); | |||||
private final R repository; | |||||
public CombinedValidationResponse( R repository ) | |||||
{ | |||||
this.repository = repository; | |||||
} | |||||
@Override | |||||
public R getRepository( ) | |||||
{ | |||||
return repository; | |||||
} | |||||
@Override | |||||
public boolean isValid( ) | |||||
{ | |||||
return errorMap.size()==0; | |||||
} | |||||
@Override | |||||
public Map<String, List<ValidationError>> getResult( ) | |||||
{ | |||||
return errorMap; | |||||
} | |||||
public void addErrors(String key, List<ValidationError> errorList) { | |||||
if ( StringUtils.isNotEmpty( key ) && errorList!=null && errorList.size()>0) { | |||||
this.errorMap.put( key, errorList ); | |||||
} | |||||
} | |||||
public void addErrors(Map<String, List<ValidationError>> errorMap) { | |||||
if (errorMap!=null) { | |||||
errorMap.entrySet( ).stream( ).forEach( e -> addErrors( e.getKey( ), e.getValue( ) ) ); | |||||
} | |||||
} | |||||
public void addResult(CheckedResult<R, Map<String, List<ValidationError>>> result) { | |||||
this.addErrors( result.getResult( ) ); | |||||
} | |||||
} |
package org.apache.archiva.repository.validation; | |||||
/* | |||||
* 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.repository.Repository; | |||||
import org.apache.archiva.repository.RepositoryRegistry; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
/** | |||||
* A combined validator cumulates the validation results of multiple validators | |||||
* | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
public class CombinedValidator<R extends Repository> | |||||
implements RepositoryValidator<R> { | |||||
private final List<RepositoryValidator<R>> validatorList; | |||||
private final Class<R> flavourClazz; | |||||
public CombinedValidator( Class<R> flavourClazz, List<RepositoryValidator<R>> validatorList ) | |||||
{ | |||||
if (flavourClazz==null) { | |||||
throw new IllegalArgumentException( "The flavour class may not be null" ); | |||||
} | |||||
this.flavourClazz = flavourClazz; | |||||
if (validatorList==null) { | |||||
throw new IllegalArgumentException( "The validator list may not be null" ); | |||||
} | |||||
this.validatorList = validatorList; | |||||
} | |||||
@Override | |||||
public CheckedResult<R, Map<String, List<ValidationError>>> apply( R r ) | |||||
{ | |||||
CombinedValidationResponse<R> response = new CombinedValidationResponse<>( r ); | |||||
validatorList.stream( ).forEach( | |||||
v -> response.addResult( v.apply( r ) ) | |||||
); | |||||
return response; | |||||
} | |||||
@Override | |||||
public CheckedResult<R, Map<String, List<ValidationError>>> applyForUpdate( R repo ) | |||||
{ | |||||
CombinedValidationResponse<R> response = new CombinedValidationResponse<>( repo ); | |||||
validatorList.stream( ).forEach( | |||||
v -> response.addResult( v.applyForUpdate( repo ) ) | |||||
); | |||||
return response; | |||||
} | |||||
@Override | |||||
public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) | |||||
{ | |||||
// Not used | |||||
} | |||||
@Override | |||||
public Class<R> getFlavour( ) | |||||
{ | |||||
return flavourClazz; | |||||
} | |||||
@Override | |||||
public boolean isFlavour( Class<?> clazz ) | |||||
{ | |||||
return flavourClazz.isAssignableFrom( clazz ); | |||||
} | |||||
} |
package org.apache.archiva.repository.validation; | |||||
/* | |||||
* 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.components.registry.Registry; | |||||
/** | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
public interface ErrorKeys | |||||
{ | |||||
String ISNULL = "isnull"; | |||||
String ISEMPTY = "empty"; | |||||
String EXISTS = "exists"; | |||||
String MANAGED_REPOSITORY_EXISTS = "managed_repo_exists"; | |||||
String REMOTE_REPOSITORY_EXISTS = "remote_repo_exists"; | |||||
String REPOSITORY_GROUP_EXISTS = "group_exists"; | |||||
String MAX_LENGTH_EXCEEDED = "max_length"; | |||||
String INVALID_CHARS = "invalid_chars"; | |||||
String BELOW_MIN = "min"; | |||||
String INVALID_SCHEDULING_EXPRESSION = "scheduling_exp_invalid"; | |||||
String INVALID_LOCATION = "location_invalid"; | |||||
} |
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import java.util.function.Function; | import java.util.function.Function; | ||||
import java.util.function.Predicate; | |||||
/** | /** | ||||
* @author Martin Stockhammer <martin_s@apache.org> | * @author Martin Stockhammer <martin_s@apache.org> |
public interface RepositoryValidator<R extends Repository> extends RepositoryChecker<R, Map<String, List<ValidationError>>>, Comparable<RepositoryValidator<R>> | public interface RepositoryValidator<R extends Repository> extends RepositoryChecker<R, Map<String, List<ValidationError>>>, Comparable<RepositoryValidator<R>> | ||||
{ | { | ||||
String REPOSITORY_ID_VALID_EXPRESSION = "^[a-zA-Z0-9._-]+$"; | |||||
String REPOSITORY_NAME_VALID_EXPRESSION = "^([a-zA-Z0-9.)/_(-]|\\s)+$"; | |||||
String REPOSITORY_LOCATION_VALID_EXPRESSION = "^[-a-zA-Z0-9._/~:?!&=\\\\]+$"; | |||||
int DEFAULT_PRIORITY=1000; | int DEFAULT_PRIORITY=1000; | ||||
/** | /** | ||||
Class<R> getFlavour(); | Class<R> getFlavour(); | ||||
boolean isFlavour(Class<?> clazz); | |||||
default boolean isFlavour(Class<?> clazz) { | |||||
return getFlavour( ).isAssignableFrom( clazz ); | |||||
} | |||||
@SuppressWarnings( "unchecked" ) | |||||
default <RR extends Repository> RepositoryValidator<RR> narrowTo( Class<RR> clazz ) { | |||||
if (isFlavour( clazz )) { | |||||
return (RepositoryValidator<RR>) this; | |||||
} else { | |||||
throw new IllegalArgumentException( "Could not narrow to " + clazz ); | |||||
} | |||||
} | |||||
} | } |
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.function.Function; | |||||
/** | /** | ||||
* A validation response gives information about the validation status for certain attributes. | * A validation response gives information about the validation status for certain attributes. |
<groupId>org.apache.archiva.components.registry</groupId> | <groupId>org.apache.archiva.components.registry</groupId> | ||||
<artifactId>archiva-components-spring-registry-api</artifactId> | <artifactId>archiva-components-spring-registry-api</artifactId> | ||||
</dependency> | </dependency> | ||||
<dependency> | |||||
<groupId>org.apache.archiva.components</groupId> | |||||
<artifactId>archiva-components-spring-quartz</artifactId> | |||||
</dependency> | |||||
<dependency> | <dependency> | ||||
<groupId>com.cronutils</groupId> | <groupId>com.cronutils</groupId> | ||||
<artifactId>cron-utils</artifactId> | <artifactId>cron-utils</artifactId> |
import org.apache.archiva.indexer.IndexCreationFailedException; | import org.apache.archiva.indexer.IndexCreationFailedException; | ||||
import org.apache.archiva.indexer.IndexManagerFactory; | import org.apache.archiva.indexer.IndexManagerFactory; | ||||
import org.apache.archiva.indexer.IndexUpdateFailedException; | import org.apache.archiva.indexer.IndexUpdateFailedException; | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.archiva.repository.EditableRemoteRepository; | import org.apache.archiva.repository.EditableRemoteRepository; | ||||
import org.apache.archiva.repository.EditableRepository; | import org.apache.archiva.repository.EditableRepository; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.UnsupportedRepositoryTypeException; | import org.apache.archiva.repository.UnsupportedRepositoryTypeException; | ||||
import org.apache.archiva.repository.base.validation.CommonGroupValidator; | |||||
import org.apache.archiva.repository.event.LifecycleEvent; | import org.apache.archiva.repository.event.LifecycleEvent; | ||||
import org.apache.archiva.repository.event.RepositoryEvent; | import org.apache.archiva.repository.event.RepositoryEvent; | ||||
import org.apache.archiva.repository.event.RepositoryIndexEvent; | import org.apache.archiva.repository.event.RepositoryIndexEvent; | ||||
import org.apache.archiva.repository.features.StagingRepositoryFeature; | import org.apache.archiva.repository.features.StagingRepositoryFeature; | ||||
import org.apache.archiva.repository.metadata.MetadataReader; | import org.apache.archiva.repository.metadata.MetadataReader; | ||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.repository.validation.RepositoryChecker; | |||||
import org.apache.archiva.repository.validation.RepositoryValidator; | import org.apache.archiva.repository.validation.RepositoryValidator; | ||||
import org.apache.archiva.repository.validation.ValidationError; | import org.apache.archiva.repository.validation.ValidationError; | ||||
import org.apache.archiva.repository.validation.ValidationResponse; | import org.apache.archiva.repository.validation.ValidationResponse; | ||||
} | } | ||||
protected Map<RepositoryType, RepositoryProvider> getRepositoryProviderMap( ) | |||||
public Map<RepositoryType, RepositoryProvider> getRepositoryProviderMap( ) | |||||
{ | { | ||||
Map<RepositoryType, RepositoryProvider> map = new HashMap<>( ); | Map<RepositoryType, RepositoryProvider> map = new HashMap<>( ); | ||||
if ( repositoryProviders != null ) | if ( repositoryProviders != null ) | ||||
return map; | return map; | ||||
} | } | ||||
protected RepositoryProvider getProvider( RepositoryType type ) throws RepositoryException | |||||
public RepositoryProvider getProvider( RepositoryType type ) throws RepositoryException | |||||
{ | { | ||||
return repositoryProviders.stream( ).filter( repositoryProvider -> repositoryProvider.provides( ).contains( type ) ).findFirst( ).orElseThrow( ( ) -> new RepositoryException( "Repository type cannot be handled: " + type ) ); | return repositoryProviders.stream( ).filter( repositoryProvider -> repositoryProvider.provides( ).contains( type ) ).findFirst( ).orElseThrow( ( ) -> new RepositoryException( "Repository type cannot be handled: " + type ) ); | ||||
} | } |
archivaConfiguration.save( configuration, "" ); | archivaConfiguration.save( configuration, "" ); | ||||
} | } | ||||
ReentrantReadWriteLock getLock() { | |||||
public ReentrantReadWriteLock getLock() { | |||||
return lock; | return lock; | ||||
} | } | ||||
} | } |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.group; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* "License"); you may not use this file except in compliance | * "License"); you may not use this file except in compliance | ||||
* with the License. You may obtain a copy of the License at | * with the License. You may obtain a copy of the License at | ||||
* | * | ||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* Unless required by applicable law or agreed to in writing, | * Unless required by applicable law or agreed to in writing, | ||||
* software distributed under the License is distributed on an | * software distributed under the License is distributed on an | ||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.RepositoryCapabilities; | import org.apache.archiva.repository.RepositoryCapabilities; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.AbstractRepository; | |||||
import org.apache.archiva.repository.storage.RepositoryStorage; | import org.apache.archiva.repository.storage.RepositoryStorage; | ||||
import org.apache.commons.collections4.map.ListOrderedMap; | import org.apache.commons.collections4.map.ListOrderedMap; | ||||
public class AbstractRepositoryGroup extends AbstractRepository implements EditableRepositoryGroup | public class AbstractRepositoryGroup extends AbstractRepository implements EditableRepositoryGroup | ||||
{ | { | ||||
private ListOrderedMap<String, ManagedRepository> repositories = new ListOrderedMap<>(); | |||||
private final ListOrderedMap<String, ManagedRepository> repositories = new ListOrderedMap<>(); | |||||
private int mergedIndexTTL; | private int mergedIndexTTL; | ||||
package org.apache.archiva.repository.base.validation; | |||||
package org.apache.archiva.repository.base.group; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* or more contributor license agreements. See the NOTICE file | * or more contributor license agreements. See the NOTICE file | ||||
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.repository.Repository; | |||||
import org.apache.archiva.repository.RepositoryGroup; | import org.apache.archiva.repository.RepositoryGroup; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.base.ConfigurationHandler; | import org.apache.archiva.repository.base.ConfigurationHandler; | ||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import java.util.ArrayList; | |||||
import java.util.HashMap; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.regex.Matcher; | import java.util.regex.Matcher; | ||||
import java.util.regex.Pattern; | import java.util.regex.Pattern; | ||||
import static org.apache.archiva.repository.validation.ErrorKeys.*; | |||||
/** | /** | ||||
* | * | ||||
* A validator for repository groups. All validation errors are prefixed with category 'repository_group'. | * A validator for repository groups. All validation errors are prefixed with category 'repository_group'. | ||||
* @author Martin Stockhammer <martin_s@apache.org> | * @author Martin Stockhammer <martin_s@apache.org> | ||||
*/ | */ | ||||
@Service( "repositoryValidator#common#group" ) | @Service( "repositoryValidator#common#group" ) | ||||
public class CommonGroupValidator extends AbstractRepositoryValidator<RepositoryGroup> implements RepositoryValidator<RepositoryGroup> | |||||
public class BasicRepositoryGroupValidator extends AbstractRepositoryValidator<RepositoryGroup> implements RepositoryValidator<RepositoryGroup> | |||||
{ | { | ||||
private static final Pattern REPO_GROUP_ID_PATTERN = Pattern.compile( "[A-Za-z0-9\\._\\-]+" ); | |||||
private static final String CATEGORY = "repository_group"; | |||||
private static final Pattern REPO_GROUP_ID_PATTERN = Pattern.compile( "[A-Za-z0-9._\\-]+" ); | |||||
private final ConfigurationHandler configurationHandler; | private final ConfigurationHandler configurationHandler; | ||||
private RepositoryRegistry repositoryRegistry; | private RepositoryRegistry repositoryRegistry; | ||||
public CommonGroupValidator( ConfigurationHandler configurationHandler ) | |||||
public BasicRepositoryGroupValidator( ConfigurationHandler configurationHandler ) | |||||
{ | { | ||||
super( CATEGORY ); | |||||
this.configurationHandler = configurationHandler; | this.configurationHandler = configurationHandler; | ||||
} | } | ||||
private Map<String, List<ValidationError>> appendError( Map<String, List<ValidationError>> errorMap, String errorKey, Object... parameter ) | |||||
{ | |||||
Map<String, List<ValidationError>> result; | |||||
result = errorMap == null ? new HashMap<>( ) : errorMap; | |||||
ValidationError error = ValidationError.ofKey( errorKey, parameter ); | |||||
List<ValidationError> errList = result.computeIfAbsent( error.getAttribute( ), k -> new ArrayList<ValidationError>( ) ); | |||||
errList.add( error ); | |||||
return result; | |||||
} | |||||
public ValidationResponse apply( RepositoryGroup repositoryGroup, boolean updateMode ) throws IllegalArgumentException | |||||
@Override | |||||
public ValidationResponse<RepositoryGroup> apply( RepositoryGroup repositoryGroup, boolean updateMode ) throws IllegalArgumentException | |||||
{ | { | ||||
final String repoGroupId = repositoryGroup.getId( ); | final String repoGroupId = repositoryGroup.getId( ); | ||||
Map<String, List<ValidationError>> errors = null; | Map<String, List<ValidationError>> errors = null; | ||||
if ( StringUtils.isBlank( repoGroupId ) ) | if ( StringUtils.isBlank( repoGroupId ) ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.empty" ); | |||||
errors = appendError( null, "id", ISEMPTY ); | |||||
} | } | ||||
if ( repoGroupId.length( ) > 100 ) | if ( repoGroupId.length( ) > 100 ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.max_length", repoGroupId, Integer.toString( 100 ) ); | |||||
errors = appendError( errors, "id", MAX_LENGTH_EXCEEDED, repoGroupId, Integer.toString( 100 ) ); | |||||
} | } | ||||
Matcher matcher = REPO_GROUP_ID_PATTERN.matcher( repoGroupId ); | Matcher matcher = REPO_GROUP_ID_PATTERN.matcher( repoGroupId ); | ||||
if ( !matcher.matches( ) ) | if ( !matcher.matches( ) ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.invalid_chars", "alphanumeric, '.', '-','_'" ); | |||||
errors = appendError( errors, "id", INVALID_CHARS, repoGroupId, new String[]{"alphanumeric, '.', '-','_'"} ); | |||||
} | } | ||||
if ( repositoryGroup.getMergedIndexTTL( ) <= 0 ) | if ( repositoryGroup.getMergedIndexTTL( ) <= 0 ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.merged_index_ttl.min", "0" ); | |||||
errors = appendError( errors, "merged_index_ttl",BELOW_MIN, "0" ); | |||||
} | } | ||||
{ | { | ||||
if ( repositoryRegistry.hasRepositoryGroup( repoGroupId ) ) | if ( repositoryRegistry.hasRepositoryGroup( repoGroupId ) ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.group_exists", repoGroupId ); | |||||
errors = appendError( errors, "id", REPOSITORY_GROUP_EXISTS, repoGroupId ); | |||||
} | } | ||||
else if ( repositoryRegistry.hasManagedRepository( repoGroupId ) ) | else if ( repositoryRegistry.hasManagedRepository( repoGroupId ) ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.managed_exists" ); | |||||
errors = appendError( errors, "id", MANAGED_REPOSITORY_EXISTS ); | |||||
} | } | ||||
else if ( repositoryRegistry.hasRemoteRepository( repoGroupId ) ) | else if ( repositoryRegistry.hasRemoteRepository( repoGroupId ) ) | ||||
{ | { | ||||
errors = appendError( errors, "repository_group.id.remote_exists" ); | |||||
errors = appendError( errors, "id", REMOTE_REPOSITORY_EXISTS ); | |||||
} | } | ||||
} | } | ||||
return new ValidationResponse(repositoryGroup, errors ); | |||||
return new ValidationResponse<>(repositoryGroup, errors ); | |||||
} | } | ||||
return RepositoryGroup.class; | return RepositoryGroup.class; | ||||
} | } | ||||
@Override | |||||
public boolean isFlavour( Class<?> clazz ) | |||||
{ | |||||
return RepositoryGroup.class.isAssignableFrom( clazz ); | |||||
} | |||||
} | } |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.group; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* or more contributor license agreements. See the NOTICE file | * or more contributor license agreements. See the NOTICE file | ||||
import org.apache.archiva.components.registry.RegistryException; | import org.apache.archiva.components.registry.RegistryException; | ||||
import org.apache.archiva.configuration.Configuration; | import org.apache.archiva.configuration.Configuration; | ||||
import org.apache.archiva.configuration.IndeterminateConfigurationException; | import org.apache.archiva.configuration.IndeterminateConfigurationException; | ||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; | |||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.indexer.merger.MergedRemoteIndexesScheduler; | import org.apache.archiva.indexer.merger.MergedRemoteIndexesScheduler; | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | |||||
import org.apache.archiva.repository.base.ConfigurationHandler; | |||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.EditableRepository; | import org.apache.archiva.repository.EditableRepository; | ||||
import org.apache.archiva.repository.EditableRepositoryGroup; | import org.apache.archiva.repository.EditableRepositoryGroup; | ||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.Repository; | |||||
import org.apache.archiva.repository.RepositoryException; | import org.apache.archiva.repository.RepositoryException; | ||||
import org.apache.archiva.repository.RepositoryGroup; | import org.apache.archiva.repository.RepositoryGroup; | ||||
import org.apache.archiva.repository.RepositoryHandler; | import org.apache.archiva.repository.RepositoryHandler; | ||||
import org.apache.archiva.repository.event.RepositoryEvent; | import org.apache.archiva.repository.event.RepositoryEvent; | ||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.repository.validation.CombinedValidator; | |||||
import org.apache.archiva.repository.validation.RepositoryChecker; | import org.apache.archiva.repository.validation.RepositoryChecker; | ||||
import org.apache.archiva.repository.validation.RepositoryValidator; | import org.apache.archiva.repository.validation.RepositoryValidator; | ||||
import org.apache.archiva.repository.validation.ValidationResponse; | |||||
import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; | ||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
public RepositoryGroupHandler( ArchivaRepositoryRegistry repositoryRegistry, | public RepositoryGroupHandler( ArchivaRepositoryRegistry repositoryRegistry, | ||||
ConfigurationHandler configurationHandler, | ConfigurationHandler configurationHandler, | ||||
@Named( "mergedRemoteIndexesScheduler#default" ) MergedRemoteIndexesScheduler mergedRemoteIndexesScheduler, | @Named( "mergedRemoteIndexesScheduler#default" ) MergedRemoteIndexesScheduler mergedRemoteIndexesScheduler, | ||||
@Named( "repositoryValidator#common#group") RepositoryValidator<RepositoryGroup> repositoryGroupValidator | |||||
List<RepositoryValidator<? extends Repository>> repositoryGroupValidatorList | |||||
) | ) | ||||
{ | { | ||||
this.configurationHandler = configurationHandler; | this.configurationHandler = configurationHandler; | ||||
this.mergedRemoteIndexesScheduler = mergedRemoteIndexesScheduler; | this.mergedRemoteIndexesScheduler = mergedRemoteIndexesScheduler; | ||||
this.repositoryRegistry = repositoryRegistry; | this.repositoryRegistry = repositoryRegistry; | ||||
this.validator = repositoryGroupValidator; | |||||
List<RepositoryValidator<RepositoryGroup>> validatorList = initValidators( repositoryGroupValidatorList ); | |||||
this.validator = new CombinedValidator<>( RepositoryGroup.class, validatorList ); | |||||
} | |||||
private List<RepositoryValidator<RepositoryGroup>> initValidators(List<RepositoryValidator<? extends Repository>> repositoryGroupValidatorList) { | |||||
if (repositoryGroupValidatorList!=null && repositoryGroupValidatorList.size()>0) { | |||||
return repositoryGroupValidatorList.stream( ).filter( | |||||
v -> v.isFlavour( RepositoryGroup.class ) | |||||
).map( v -> v.narrowTo( RepositoryGroup.class ) ).collect( Collectors.toList( ) ); | |||||
} else { | |||||
return Collections.emptyList( ); | |||||
} | |||||
} | } | ||||
@Override | @Override | ||||
return this.validator; | return this.validator; | ||||
} | } | ||||
@Override | |||||
public ValidationResponse<RepositoryGroup> validateRepository( RepositoryGroup repository ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ValidationResponse<RepositoryGroup> validateRepositoryForUpdate( RepositoryGroup repository ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | @Override | ||||
public boolean has( String id ) | public boolean has( String id ) | ||||
{ | { |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.managed; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* "License"); you may not use this file except in compliance | * "License"); you may not use this file except in compliance | ||||
* with the License. You may obtain a copy of the License at | * with the License. You may obtain a copy of the License at | ||||
* | * | ||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* Unless required by applicable law or agreed to in writing, | * Unless required by applicable law or agreed to in writing, | ||||
* software distributed under the License is distributed on an | * software distributed under the License is distributed on an | ||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
import org.apache.archiva.repository.ManagedRepositoryContent; | import org.apache.archiva.repository.ManagedRepositoryContent; | ||||
import org.apache.archiva.repository.ReleaseScheme; | import org.apache.archiva.repository.ReleaseScheme; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.AbstractRepository; | |||||
import org.apache.archiva.repository.storage.RepositoryStorage; | import org.apache.archiva.repository.storage.RepositoryStorage; | ||||
import java.util.Collections; | import java.util.Collections; |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.managed; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* "License"); you may not use this file except in compliance | * "License"); you may not use this file except in compliance | ||||
* with the License. You may obtain a copy of the License at | * with the License. You may obtain a copy of the License at | ||||
* | * | ||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* Unless required by applicable law or agreed to in writing, | * Unless required by applicable law or agreed to in writing, | ||||
* software distributed under the License is distributed on an | * software distributed under the License is distributed on an | ||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
import org.apache.archiva.repository.RepositoryRequestInfo; | import org.apache.archiva.repository.RepositoryRequestInfo; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.StandardCapabilities; | import org.apache.archiva.repository.StandardCapabilities; | ||||
import org.apache.archiva.repository.storage.StorageAsset; | |||||
import org.apache.archiva.repository.storage.fs.FilesystemStorage; | import org.apache.archiva.repository.storage.fs.FilesystemStorage; | ||||
import org.apache.archiva.repository.storage.RepositoryStorage; | import org.apache.archiva.repository.storage.RepositoryStorage; | ||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature; | import org.apache.archiva.repository.features.ArtifactCleanupFeature; |
package org.apache.archiva.repository.base.managed; | |||||
/* | |||||
* 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.components.registry.Registry; | |||||
import org.apache.archiva.repository.base.ConfigurationHandler; | |||||
import org.apache.archiva.repository.validation.AbstractRepositoryValidator; | |||||
import org.apache.archiva.repository.ManagedRepository; | |||||
import org.apache.archiva.repository.RepositoryRegistry; | |||||
import org.apache.archiva.repository.validation.RepositoryValidator; | |||||
import org.apache.archiva.repository.validation.ValidationError; | |||||
import org.apache.archiva.repository.validation.ValidationResponse; | |||||
import org.apache.commons.lang3.StringUtils; | |||||
import org.springframework.stereotype.Service; | |||||
import org.apache.archiva.components.scheduler.CronExpressionValidator; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.regex.Pattern; | |||||
import static org.apache.archiva.repository.validation.ErrorKeys.*; | |||||
/** | |||||
* Validator for managed repository data. | |||||
* | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
@Service( "repositoryValidator#common#managed" ) | |||||
public class BasicManagedRepositoryValidator extends AbstractRepositoryValidator<ManagedRepository> implements RepositoryValidator<ManagedRepository> | |||||
{ | |||||
RepositoryRegistry repositoryRegistry; | |||||
private static final String CATEGORY = "managed_repository"; | |||||
private static final Pattern REPOSITORY_ID_VALID_EXPRESSION_PATTERN = Pattern.compile( REPOSITORY_ID_VALID_EXPRESSION ); | |||||
private static final Pattern REPOSITORY_NAME_VALID_EXPRESSION_PATTERN = Pattern.compile( REPOSITORY_NAME_VALID_EXPRESSION ); | |||||
private static final Pattern REPOSITORY_LOCATION_VALID_EXPRESSION_PATTERN = Pattern.compile( REPOSITORY_LOCATION_VALID_EXPRESSION ); | |||||
private final ConfigurationHandler configurationHandler; | |||||
public BasicManagedRepositoryValidator( ConfigurationHandler configurationHandler) | |||||
{ | |||||
super( CATEGORY ); | |||||
this.configurationHandler = configurationHandler; | |||||
} | |||||
@Override | |||||
public ValidationResponse<ManagedRepository> apply( ManagedRepository managedRepository, boolean update ) | |||||
{ | |||||
Map<String, List<ValidationError>> errors = null; | |||||
if (managedRepository==null) { | |||||
errors = appendError( errors, "id", ISNULL ); | |||||
} | |||||
final String repoId = managedRepository.getId( ); | |||||
if ( StringUtils.isBlank( repoId ) ) { | |||||
errors = appendError( errors, "id", ISEMPTY ); | |||||
} | |||||
if (!update) | |||||
{ | |||||
if ( repositoryRegistry.hasManagedRepository( managedRepository.getId( ) ) ) | |||||
{ | |||||
errors = appendError( errors, "id", MANAGED_REPOSITORY_EXISTS, repoId ); | |||||
} | |||||
else if ( repositoryRegistry.hasRemoteRepository( repoId ) ) | |||||
{ | |||||
errors = appendError( errors, "id", REMOTE_REPOSITORY_EXISTS, repoId ); | |||||
} | |||||
else if ( repositoryRegistry.hasRepositoryGroup( repoId ) ) | |||||
{ | |||||
errors = appendError( errors, "id", REPOSITORY_GROUP_EXISTS, repoId ); | |||||
} | |||||
} | |||||
if ( !REPOSITORY_ID_VALID_EXPRESSION_PATTERN.matcher( repoId ).matches( ) ) | |||||
{ | |||||
errors = appendError( errors, "id", INVALID_CHARS, repoId, new String[]{"alphanumeric", "_", ".", "-"} ); | |||||
} | |||||
if ( StringUtils.isBlank( managedRepository.getName() ) ) | |||||
{ | |||||
errors = appendError( errors, "name", ISEMPTY ); | |||||
} | |||||
if ( !REPOSITORY_NAME_VALID_EXPRESSION_PATTERN.matcher( managedRepository.getName() ).matches( ) ) | |||||
{ | |||||
errors = appendError( errors, "name", INVALID_CHARS, managedRepository.getName( ), new String[]{"alphanumeric", "whitespace", "/", "(", ")", "_", ".", "-"} ); | |||||
} | |||||
String cronExpression = managedRepository.getSchedulingDefinition( ); | |||||
if ( StringUtils.isNotBlank( cronExpression ) ) | |||||
{ | |||||
CronExpressionValidator validator = new CronExpressionValidator( ); | |||||
if ( !validator.validate( cronExpression ) ) | |||||
{ | |||||
errors = appendError( errors, "scheduling_definition", INVALID_SCHEDULING_EXPRESSION, cronExpression ); | |||||
} | |||||
} | |||||
// Cron expression may be empty | |||||
String repoLocation = interpolateVars( managedRepository.getLocation( ).toString() ); | |||||
if ( !REPOSITORY_LOCATION_VALID_EXPRESSION_PATTERN.matcher( repoLocation ).matches() ) | |||||
{ | |||||
errors = appendError( errors, "location", INVALID_LOCATION, repoLocation, new String[]{"alphanumeric", "=", "?", "!", "&", "/", "\\", "_", ".", ":", "~", "-"} ); | |||||
} | |||||
return new ValidationResponse<>( managedRepository, errors ); | |||||
} | |||||
public String interpolateVars( String directory ) | |||||
{ | |||||
Registry registry = configurationHandler.getArchivaConfiguration( ).getRegistry( ); | |||||
String value = StringUtils.replace( directory, "${appserver.base}", | |||||
registry.getString( "appserver.base", "${appserver.base}" ) ); | |||||
value = StringUtils.replace( value, "${appserver.home}", | |||||
registry.getString( "appserver.home", "${appserver.home}" ) ); | |||||
return value; | |||||
} | |||||
@Override | |||||
public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) | |||||
{ | |||||
this.repositoryRegistry = repositoryRegistry; | |||||
} | |||||
@Override | |||||
public Class<ManagedRepository> getFlavour( ) | |||||
{ | |||||
return ManagedRepository.class; | |||||
} | |||||
} |
package org.apache.archiva.repository.base.managed; | |||||
/* | |||||
* 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.configuration.Configuration; | |||||
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; | |||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | |||||
import org.apache.archiva.repository.base.ConfigurationHandler; | |||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.ManagedRepository; | |||||
import org.apache.archiva.repository.RepositoryException; | |||||
import org.apache.archiva.repository.RepositoryHandler; | |||||
import org.apache.archiva.repository.RepositoryType; | |||||
import org.apache.archiva.repository.validation.RepositoryChecker; | |||||
import org.apache.archiva.repository.validation.RepositoryValidator; | |||||
import org.apache.archiva.repository.validation.ValidationResponse; | |||||
import javax.inject.Named; | |||||
import java.util.Collection; | |||||
import java.util.Map; | |||||
/** | |||||
* Handler implementation for managed repositories. | |||||
* | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
public class ManagedRepositoryHandler | |||||
implements RepositoryHandler<ManagedRepository, ManagedRepositoryConfiguration> | |||||
{ | |||||
public ManagedRepositoryHandler( ArchivaRepositoryRegistry repositoryRegistry, | |||||
ConfigurationHandler configurationHandler, | |||||
@Named( "repositoryValidator#common#managed") RepositoryValidator<ManagedRepository> managedRepositoryValidator ) | |||||
{ | |||||
} | |||||
@Override | |||||
public Map<String, ManagedRepository> newInstancesFromConfig( ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository newInstance( RepositoryType type, String id ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository newInstance( ManagedRepositoryConfiguration repositoryConfiguration ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository put( ManagedRepository repository ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository put( ManagedRepositoryConfiguration repositoryConfiguration ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository put( ManagedRepositoryConfiguration repositoryConfiguration, Configuration configuration ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public <D> CheckedResult<ManagedRepository, D> putWithCheck( ManagedRepositoryConfiguration repositoryConfiguration, RepositoryChecker<ManagedRepository, D> checker ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public void remove( String id ) throws RepositoryException | |||||
{ | |||||
} | |||||
@Override | |||||
public void remove( String id, Configuration configuration ) throws RepositoryException | |||||
{ | |||||
} | |||||
@Override | |||||
public ManagedRepository get( String id ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ManagedRepository clone( ManagedRepository repo ) throws RepositoryException | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public void updateReferences( ManagedRepository repo, ManagedRepositoryConfiguration repositoryConfiguration ) throws RepositoryException | |||||
{ | |||||
} | |||||
@Override | |||||
public Collection<ManagedRepository> getAll( ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public RepositoryValidator<ManagedRepository> getValidator( ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ValidationResponse<ManagedRepository> validateRepository( ManagedRepository repository ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public ValidationResponse<ManagedRepository> validateRepositoryForUpdate( ManagedRepository repository ) | |||||
{ | |||||
return null; | |||||
} | |||||
@Override | |||||
public boolean has( String id ) | |||||
{ | |||||
return false; | |||||
} | |||||
@Override | |||||
public void init( ) | |||||
{ | |||||
} | |||||
@Override | |||||
public void close( ) | |||||
{ | |||||
} | |||||
} |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.remote; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* "License"); you may not use this file except in compliance | * "License"); you may not use this file except in compliance | ||||
* with the License. You may obtain a copy of the License at | * with the License. You may obtain a copy of the License at | ||||
* | * | ||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* Unless required by applicable law or agreed to in writing, | * Unless required by applicable law or agreed to in writing, | ||||
* software distributed under the License is distributed on an | * software distributed under the License is distributed on an | ||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||
import org.apache.archiva.repository.RemoteRepositoryContent; | import org.apache.archiva.repository.RemoteRepositoryContent; | ||||
import org.apache.archiva.repository.RepositoryCredentials; | import org.apache.archiva.repository.RepositoryCredentials; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.AbstractRepository; | |||||
import org.apache.archiva.repository.storage.RepositoryStorage; | import org.apache.archiva.repository.storage.RepositoryStorage; | ||||
import java.net.URI; | import java.net.URI; |
package org.apache.archiva.repository.base; | |||||
package org.apache.archiva.repository.base.remote; | |||||
/* | /* | ||||
* Licensed to the Apache Software Foundation (ASF) under one | * Licensed to the Apache Software Foundation (ASF) under one | ||||
* "License"); you may not use this file except in compliance | * "License"); you may not use this file except in compliance | ||||
* with the License. You may obtain a copy of the License at | * with the License. You may obtain a copy of the License at | ||||
* | * | ||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* Unless required by applicable law or agreed to in writing, | * Unless required by applicable law or agreed to in writing, | ||||
* software distributed under the License is distributed on an | * software distributed under the License is distributed on an | ||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
import org.apache.archiva.repository.RepositoryException; | import org.apache.archiva.repository.RepositoryException; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.junit.jupiter.api.AfterAll; | import org.junit.jupiter.api.AfterAll; | ||||
import org.junit.jupiter.api.AfterEach; | import org.junit.jupiter.api.AfterEach; | ||||
import org.junit.jupiter.api.BeforeAll; | import org.junit.jupiter.api.BeforeAll; |
package org.apache.archiva.repository.base.group; | |||||
/* | |||||
* 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.junit.jupiter.api.Test; | |||||
/** | |||||
* @author Martin Stockhammer <martin_s@apache.org> | |||||
*/ | |||||
class BasicManagedRepositoryValidatorTest | |||||
{ | |||||
@Test | |||||
void apply( ) | |||||
{ | |||||
} | |||||
@Test | |||||
void applyForUpdate( ) | |||||
{ | |||||
} | |||||
@Test | |||||
void getFlavour( ) | |||||
{ | |||||
} | |||||
@Test | |||||
void isFlavour( ) | |||||
{ | |||||
} | |||||
} |
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.features.RemoteIndexFeature; | import org.apache.archiva.repository.features.RemoteIndexFeature; | ||||
import org.apache.archiva.repository.features.StagingRepositoryFeature; | import org.apache.archiva.repository.features.StagingRepositoryFeature; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.PasswordCredentials; | import org.apache.archiva.repository.base.PasswordCredentials; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import org.apache.archiva.configuration.ArchivaConfiguration; | import org.apache.archiva.configuration.ArchivaConfiguration; | ||||
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | ||||
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.RemoteRepository; | import org.apache.archiva.repository.RemoteRepository; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; |
import org.apache.archiva.common.filelock.FileLockManager; | import org.apache.archiva.common.filelock.FileLockManager; | ||||
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | import org.apache.archiva.consumers.InvalidRepositoryContentConsumer; | ||||
import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | import org.apache.archiva.consumers.KnownRepositoryContentConsumer; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.archiva.repository.EditableRemoteRepository; | import org.apache.archiva.repository.EditableRemoteRepository; | ||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; |
import org.apache.archiva.indexer.IndexCreationFailedException; | import org.apache.archiva.indexer.IndexCreationFailedException; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.features.RemoteIndexFeature; | import org.apache.archiva.repository.features.RemoteIndexFeature; | ||||
import org.apache.archiva.repository.maven.MavenManagedRepository; | import org.apache.archiva.repository.maven.MavenManagedRepository; |
import org.apache.archiva.proxy.ProxyRegistry; | import org.apache.archiva.proxy.ProxyRegistry; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import org.apache.archiva.repository.base.ConfigurationHandler; | |||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.apache.commons.lang3.SystemUtils; | import org.apache.commons.lang3.SystemUtils; |
import org.apache.archiva.indexer.search.SearchResultHit; | import org.apache.archiva.indexer.search.SearchResultHit; | ||||
import org.apache.archiva.indexer.search.SearchResults; | import org.apache.archiva.indexer.search.SearchResults; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.easymock.EasyMock; | import org.easymock.EasyMock; | ||||
import org.junit.After; | import org.junit.After; | ||||
import org.junit.Test; | import org.junit.Test; |
import org.apache.archiva.indexer.search.SearchResults; | import org.apache.archiva.indexer.search.SearchResults; | ||||
import org.apache.archiva.indexer.util.SearchUtil; | import org.apache.archiva.indexer.util.SearchUtil; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.junit.After; | import org.junit.After; | ||||
import org.junit.Test; | import org.junit.Test; | ||||
import org.junit.runner.RunWith; | import org.junit.runner.RunWith; | ||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.test.context.ContextConfiguration; | import org.springframework.test.context.ContextConfiguration; | ||||
import javax.inject.Inject; | import javax.inject.Inject; |
import org.apache.archiva.policies.*; | import org.apache.archiva.policies.*; | ||||
import org.apache.archiva.proxy.model.RepositoryProxyHandler; | import org.apache.archiva.proxy.model.RepositoryProxyHandler; | ||||
import org.apache.archiva.repository.*; | import org.apache.archiva.repository.*; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.apache.maven.wagon.Wagon; | import org.apache.maven.wagon.Wagon; |
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.ManagedRepositoryContent; | import org.apache.archiva.repository.ManagedRepositoryContent; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.content.Artifact; | import org.apache.archiva.repository.content.Artifact; | ||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; |
return getAppServerBaseDir().resolve("data"); | return getAppServerBaseDir().resolve("data"); | ||||
} | } | ||||
} | } | ||||
@Override | |||||
public Registry getRegistry( ) | |||||
{ | |||||
return null; | |||||
} | |||||
} | } |
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | import org.apache.archiva.configuration.RemoteRepositoryConfiguration; | ||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.event.EventHandler; | import org.apache.archiva.event.EventHandler; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.remote.BasicRemoteRepository; | |||||
import org.apache.archiva.repository.EditableManagedRepository; | import org.apache.archiva.repository.EditableManagedRepository; | ||||
import org.apache.archiva.repository.EditableRemoteRepository; | import org.apache.archiva.repository.EditableRemoteRepository; | ||||
import org.apache.archiva.repository.EditableRepositoryGroup; | import org.apache.archiva.repository.EditableRepositoryGroup; |
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.StandardCapabilities; | import org.apache.archiva.repository.StandardCapabilities; | ||||
import org.apache.archiva.repository.UnsupportedFeatureException; | import org.apache.archiva.repository.UnsupportedFeatureException; | ||||
import org.apache.archiva.repository.base.AbstractManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.AbstractManagedRepository; | |||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature; | import org.apache.archiva.repository.features.ArtifactCleanupFeature; | ||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.features.RepositoryFeature; | import org.apache.archiva.repository.features.RepositoryFeature; |
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.StandardCapabilities; | import org.apache.archiva.repository.StandardCapabilities; | ||||
import org.apache.archiva.repository.UnsupportedFeatureException; | import org.apache.archiva.repository.UnsupportedFeatureException; | ||||
import org.apache.archiva.repository.base.AbstractRemoteRepository; | |||||
import org.apache.archiva.repository.base.remote.AbstractRemoteRepository; | |||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.features.RemoteIndexFeature; | import org.apache.archiva.repository.features.RemoteIndexFeature; | ||||
import org.apache.archiva.repository.features.RepositoryFeature; | import org.apache.archiva.repository.features.RepositoryFeature; |
import org.apache.archiva.repository.RepositoryCapabilities; | import org.apache.archiva.repository.RepositoryCapabilities; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.StandardCapabilities; | import org.apache.archiva.repository.StandardCapabilities; | ||||
import org.apache.archiva.repository.base.AbstractRepositoryGroup; | |||||
import org.apache.archiva.repository.base.group.AbstractRepositoryGroup; | |||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.repository.storage.fs.FilesystemStorage; | import org.apache.archiva.repository.storage.fs.FilesystemStorage; | ||||
import org.slf4j.Logger; | import org.slf4j.Logger; |
import org.apache.archiva.repository.RepositoryProvider; | import org.apache.archiva.repository.RepositoryProvider; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.UnsupportedURIException; | import org.apache.archiva.repository.UnsupportedURIException; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.PasswordCredentials; | import org.apache.archiva.repository.base.PasswordCredentials; | ||||
import org.apache.archiva.repository.event.RepositoryEvent; | import org.apache.archiva.repository.event.RepositoryEvent; | ||||
import org.apache.archiva.repository.features.ArtifactCleanupFeature; | import org.apache.archiva.repository.features.ArtifactCleanupFeature; |
} | } | ||||
} | } | ||||
@Override | |||||
public Registry getRegistry( ) | |||||
{ | |||||
return null; | |||||
} | |||||
} | } |
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.components.registry.Registry; | |||||
import org.apache.archiva.components.registry.RegistryException; | import org.apache.archiva.components.registry.RegistryException; | ||||
import org.apache.archiva.components.registry.RegistryListener; | import org.apache.archiva.components.registry.RegistryListener; | ||||
import org.apache.archiva.configuration.ArchivaConfiguration; | import org.apache.archiva.configuration.ArchivaConfiguration; | ||||
} | } | ||||
} | } | ||||
@Override | |||||
public Registry getRegistry( ) | |||||
{ | |||||
return null; | |||||
} | |||||
} | } |
package org.apache.archiva.repository.maven.mock.configuration; | package org.apache.archiva.repository.maven.mock.configuration; | ||||
import org.apache.archiva.components.registry.Registry; | |||||
import org.apache.archiva.components.registry.RegistryException; | import org.apache.archiva.components.registry.RegistryException; | ||||
import org.apache.archiva.components.registry.RegistryListener; | import org.apache.archiva.components.registry.RegistryListener; | ||||
import org.apache.archiva.configuration.ArchivaConfiguration; | import org.apache.archiva.configuration.ArchivaConfiguration; | ||||
return getAppServerBaseDir().resolve("data"); | return getAppServerBaseDir().resolve("data"); | ||||
} | } | ||||
} | } | ||||
@Override | |||||
public Registry getRegistry( ) | |||||
{ | |||||
return null; | |||||
} | |||||
} | } |
import org.apache.archiva.indexer.ArchivaIndexingContext; | import org.apache.archiva.indexer.ArchivaIndexingContext; | ||||
import org.apache.archiva.indexer.UnsupportedBaseContextException; | import org.apache.archiva.indexer.UnsupportedBaseContextException; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.ReleaseScheme; | import org.apache.archiva.repository.ReleaseScheme; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.storage.StorageAsset; | import org.apache.archiva.repository.storage.StorageAsset; | ||||
import org.apache.archiva.repository.features.IndexCreationFeature; | import org.apache.archiva.repository.features.IndexCreationFeature; | ||||
import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask; | import org.apache.archiva.scheduler.indexing.ArtifactIndexingTask; |
import org.apache.archiva.components.taskqueue.execution.TaskExecutor; | import org.apache.archiva.components.taskqueue.execution.TaskExecutor; | ||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.scheduler.repository.model.RepositoryTask; | import org.apache.archiva.scheduler.repository.model.RepositoryTask; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.junit.After; | import org.junit.After; |
import org.apache.archiva.redback.users.User; | import org.apache.archiva.redback.users.User; | ||||
import org.apache.archiva.redback.users.UserManagerException; | import org.apache.archiva.redback.users.UserManagerException; | ||||
import org.apache.archiva.redback.users.UserNotFoundException; | import org.apache.archiva.redback.users.UserNotFoundException; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.content.BaseRepositoryContentLayout; | import org.apache.archiva.repository.content.BaseRepositoryContentLayout; | ||||
import org.apache.archiva.repository.content.ContentNotFoundException; | import org.apache.archiva.repository.content.ContentNotFoundException; | ||||
import org.apache.archiva.repository.content.LayoutException; | import org.apache.archiva.repository.content.LayoutException; |
* under the License. | * under the License. | ||||
*/ | */ | ||||
import org.apache.archiva.components.registry.RegistryException; | |||||
import org.apache.archiva.components.rest.model.PagedResult; | import org.apache.archiva.components.rest.model.PagedResult; | ||||
import org.apache.archiva.components.rest.util.QueryHelper; | import org.apache.archiva.components.rest.util.QueryHelper; | ||||
import org.apache.archiva.configuration.Configuration; | |||||
import org.apache.archiva.configuration.IndeterminateConfigurationException; | |||||
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.repository.CheckedResult; | |||||
import org.apache.archiva.repository.validation.CheckedResult; | |||||
import org.apache.archiva.repository.EditableRepositoryGroup; | import org.apache.archiva.repository.EditableRepositoryGroup; | ||||
import org.apache.archiva.repository.RepositoryException; | import org.apache.archiva.repository.RepositoryException; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.base.ConfigurationHandler; | import org.apache.archiva.repository.base.ConfigurationHandler; | ||||
import org.apache.archiva.repository.validation.ValidationError; | import org.apache.archiva.repository.validation.ValidationError; | ||||
import org.apache.archiva.repository.validation.ValidationResponse; | |||||
import org.apache.archiva.rest.api.model.v2.MergeConfiguration; | import org.apache.archiva.rest.api.model.v2.MergeConfiguration; | ||||
import org.apache.archiva.rest.api.model.v2.RepositoryGroup; | import org.apache.archiva.rest.api.model.v2.RepositoryGroup; | ||||
import org.apache.archiva.rest.api.services.v2.ArchivaRestServiceException; | import org.apache.archiva.rest.api.services.v2.ArchivaRestServiceException; |
import org.apache.archiva.metadata.repository.RepositorySession; | import org.apache.archiva.metadata.repository.RepositorySession; | ||||
import org.apache.archiva.metadata.repository.RepositorySessionFactory; | import org.apache.archiva.metadata.repository.RepositorySessionFactory; | ||||
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.Repository; | import org.apache.archiva.repository.Repository; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.storage.fs.FilesystemStorage; | import org.apache.archiva.repository.storage.fs.FilesystemStorage; |
import junit.framework.TestCase; | import junit.framework.TestCase; | ||||
import org.apache.archiva.common.filelock.DefaultFileLockManager; | import org.apache.archiva.common.filelock.DefaultFileLockManager; | ||||
import org.apache.archiva.configuration.ArchivaConfiguration; | import org.apache.archiva.configuration.ArchivaConfiguration; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.repository.storage.fs.FilesystemStorage; | import org.apache.archiva.repository.storage.fs.FilesystemStorage; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; |
import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; | ||||
import org.apache.archiva.repository.ManagedRepository; | import org.apache.archiva.repository.ManagedRepository; | ||||
import org.apache.archiva.repository.RepositoryType; | import org.apache.archiva.repository.RepositoryType; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.apache.archiva.webdav.httpunit.MkColMethodWebRequest; | import org.apache.archiva.webdav.httpunit.MkColMethodWebRequest; | ||||
import org.apache.commons.io.FileUtils; | import org.apache.commons.io.FileUtils; |
import org.apache.archiva.configuration.RepositoryGroupConfiguration; | import org.apache.archiva.configuration.RepositoryGroupConfiguration; | ||||
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; | import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; | ||||
import org.apache.archiva.repository.ManagedRepositoryContent; | import org.apache.archiva.repository.ManagedRepositoryContent; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.maven.content.MavenContentHelper; | import org.apache.archiva.repository.maven.content.MavenContentHelper; | ||||
import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider; | import org.apache.archiva.repository.maven.metadata.storage.ArtifactMappingProvider; | ||||
import org.apache.archiva.proxy.ProxyRegistry; | import org.apache.archiva.proxy.ProxyRegistry; |
import org.apache.archiva.redback.users.memory.SimpleUser; | import org.apache.archiva.redback.users.memory.SimpleUser; | ||||
import org.apache.archiva.repository.RepositoryRegistry; | import org.apache.archiva.repository.RepositoryRegistry; | ||||
import org.apache.archiva.metadata.audit.TestAuditListener; | import org.apache.archiva.metadata.audit.TestAuditListener; | ||||
import org.apache.archiva.repository.base.RepositoryGroupHandler; | |||||
import org.apache.archiva.repository.base.group.RepositoryGroupHandler; | |||||
import org.apache.archiva.security.ServletAuthenticator; | import org.apache.archiva.security.ServletAuthenticator; | ||||
import org.apache.archiva.security.common.ArchivaRoleConstants; | import org.apache.archiva.security.common.ArchivaRoleConstants; | ||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; |
import org.apache.archiva.metadata.repository.RepositorySession; | import org.apache.archiva.metadata.repository.RepositorySession; | ||||
import org.apache.archiva.metadata.repository.RepositorySessionFactory; | import org.apache.archiva.metadata.repository.RepositorySessionFactory; | ||||
import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; | import org.apache.archiva.metadata.repository.storage.RepositoryPathTranslator; | ||||
import org.apache.archiva.repository.base.BasicManagedRepository; | |||||
import org.apache.archiva.repository.base.managed.BasicManagedRepository; | |||||
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; | ||||
import org.junit.Before; | import org.junit.Before; | ||||
import org.junit.Test; | import org.junit.Test; |