blob: 5a3a4736d82c07d74f5f79ad1064e714c89691d4 [file] [log] [blame]
package org.apache.archiva.repository.mock;
/*
* 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.ManagedRepositoryConfiguration;
import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
import org.apache.archiva.configuration.RepositoryGroupConfiguration;
import org.apache.archiva.event.EventHandler;
import org.apache.archiva.repository.*;
import org.apache.archiva.event.Event;
import org.apache.archiva.repository.base.group.BasicRepositoryGroup;
import org.apache.archiva.repository.event.RepositoryEvent;
import org.apache.archiva.repository.features.ArtifactCleanupFeature;
import org.apache.archiva.repository.features.IndexCreationFeature;
import org.apache.archiva.repository.features.RemoteIndexFeature;
import org.apache.archiva.repository.features.StagingRepositoryFeature;
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.springframework.stereotype.Service;
import java.io.IOException;
import java.net.URI;
import java.nio.file.Paths;
import java.time.Duration;
import java.time.Period;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
/**
* Just a simple mock class for the repository provider
*/
@Service("mockRepositoryProvider")
public class RepositoryProviderMock implements RepositoryProvider
{
private static final Set<RepositoryType> TYPES = new HashSet<>( );
static
{
TYPES.add( RepositoryType.MAVEN );
TYPES.add( RepositoryType.NPM );
}
@Override
public Set<RepositoryType> provides( )
{
return TYPES;
}
@Override
public EditableManagedRepository createManagedInstance( String id, String name ) throws IOException {
return BasicManagedRepository.newFilesystemInstance(id, name, Paths.get("target/repositories").resolve(id));
}
@Override
public EditableRemoteRepository createRemoteInstance( String id, String name )
{
try {
return BasicRemoteRepository.newFilesystemInstance( id, name , Paths.get("target/remotes"));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public EditableRepositoryGroup createRepositoryGroup(String id, String name) {
try
{
return BasicRepositoryGroup.newFilesystemInstance( id, name, Paths.get( "target/groups" ) );
}
catch ( IOException e )
{
throw new RuntimeException( );
}
}
@Override
public ManagedRepository createManagedInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException {
BasicManagedRepository managedRepository = null;
try {
managedRepository = BasicManagedRepository.newFilesystemInstance(configuration.getId(), configuration.getName(), Paths.get("target/repositories").resolve(configuration.getId()));
} catch (IOException e) {
throw new RepositoryException(e);
}
updateManagedInstance( managedRepository, configuration );
return managedRepository;
}
@Override
public void updateManagedInstance( EditableManagedRepository managedRepository, ManagedRepositoryConfiguration configuration ) throws RepositoryException
{
try
{
managedRepository.setName( managedRepository.getPrimaryLocale(), configuration.getName( ) );
managedRepository.setLocation( new URI( configuration.getLocation( )==null ?"" : configuration.getLocation() ) );
managedRepository.setBaseUri( new URI( "" ) );
managedRepository.setBlocksRedeployment( configuration.isBlockRedeployments( ) );
managedRepository.setDescription( managedRepository.getPrimaryLocale(), configuration.getDescription( ) );
managedRepository.setLayout( configuration.getLayout( ) );
managedRepository.setScanned( configuration.isScanned( ) );
managedRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
if (configuration.isReleases()) {
managedRepository.addActiveReleaseScheme( ReleaseScheme.RELEASE );
}
if (configuration.isSnapshots()) {
managedRepository.addActiveReleaseScheme( ReleaseScheme.SNAPSHOT );
}
ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
acf.setRetentionPeriod( Period.ofDays( configuration.getRetentionPeriod( ) ) );
acf.setDeleteReleasedSnapshots( configuration.isDeleteReleasedSnapshots( ) );
acf.setRetentionCount( configuration.getRetentionCount( ) );
IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
icf.setIndexPath( new URI( configuration.getIndexDir( ) ) );
icf.setSkipPackedIndexCreation( configuration.isSkipPackedIndexCreation( ) );
StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
srf.setStageRepoNeeded( configuration.isStageRepoNeeded( ) );
}
catch ( Exception e )
{
throw new RepositoryException( "Error", e );
}
}
@Override
public ManagedRepository createStagingInstance( ManagedRepositoryConfiguration configuration ) throws RepositoryException {
String id = configuration.getId( ) + StagingRepositoryFeature.STAGING_REPO_POSTFIX;
BasicManagedRepository managedRepository = null;
try {
managedRepository = BasicManagedRepository.newFilesystemInstance(id, configuration.getName(), Paths.get("target/repositories").resolve(id));
} catch (IOException e) {
throw new RepositoryException(e);
}
updateManagedInstance( managedRepository, configuration );
managedRepository.getFeature(StagingRepositoryFeature.class).get().setStageRepoNeeded(false);
return managedRepository;
}
@Override
public RemoteRepository createRemoteInstance( RemoteRepositoryConfiguration configuration ) throws RepositoryException
{
BasicRemoteRepository remoteRepository = null;
try {
remoteRepository = BasicRemoteRepository.newFilesystemInstance( configuration.getId( ), configuration.getName( ), Paths.get("target/remotes") );
} catch (IOException e) {
throw new RepositoryException(e);
}
updateRemoteInstance( remoteRepository, configuration );
return remoteRepository;
}
@SuppressWarnings( "unchecked" )
@Override
public void updateRemoteInstance( EditableRemoteRepository remoteRepository, RemoteRepositoryConfiguration configuration ) throws RepositoryException
{
try
{
remoteRepository.setName( remoteRepository.getPrimaryLocale(), configuration.getName( ) );
remoteRepository.setBaseUri( new URI( "" ) );
remoteRepository.setDescription( remoteRepository.getPrimaryLocale(), configuration.getDescription( ) );
remoteRepository.setLayout( configuration.getLayout( ) );
remoteRepository.setSchedulingDefinition( configuration.getRefreshCronExpression( ) );
remoteRepository.setCheckPath( configuration.getCheckPath( ) );
remoteRepository.setExtraHeaders( configuration.getExtraHeaders( ) );
remoteRepository.setExtraParameters( configuration.getExtraParameters( ) );
remoteRepository.setTimeout( Duration.ofSeconds( configuration.getTimeout( ) ) );
char[] pwd = configuration.getPassword()==null ? "".toCharArray() : configuration.getPassword().toCharArray();
remoteRepository.setCredentials( new PasswordCredentials( configuration.getUsername( ), pwd ) );
remoteRepository.setLocation( new URI( configuration.getUrl( )==null ? "" : configuration.getUrl() ) );
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
rif.setDownloadRemoteIndexOnStartup( configuration.isDownloadRemoteIndexOnStartup( ) );
rif.setDownloadRemoteIndex( configuration.isDownloadRemoteIndex( ) );
rif.setIndexUri( new URI( configuration.getIndexDir( ) ) );
rif.setDownloadTimeout( Duration.ofSeconds( configuration.getRemoteDownloadTimeout( ) ) );
rif.setProxyId( configuration.getRemoteDownloadNetworkProxyId( ) );
}
catch ( Exception e )
{
throw new RepositoryException( "Error", e );
}
}
@Override
public RepositoryGroup createRepositoryGroup(RepositoryGroupConfiguration configuration) throws RepositoryException {
EditableRepositoryGroup group = createRepositoryGroup( configuration.getId( ), configuration.getName( ) );
updateGroupInstance( group, configuration );
return group;
}
private void updateGroupInstance( EditableRepositoryGroup group, RepositoryGroupConfiguration configuration )
{
group.setMergedIndexTTL( configuration.getMergedIndexTtl() );
group.setSchedulingDefinition( configuration.getCronExpression() );
}
@Override
public void updateRepositoryGroupInstance(EditableRepositoryGroup repositoryGroup, RepositoryGroupConfiguration configuration) throws RepositoryException {
}
@Override
public ManagedRepositoryConfiguration getManagedConfiguration( ManagedRepository managedRepository ) throws RepositoryException
{
ManagedRepositoryConfiguration configuration = new ManagedRepositoryConfiguration( );
configuration.setId( managedRepository.getId( ) );
configuration.setName(managedRepository.getName());
configuration.setLocation( managedRepository.getLocation( ) == null ? "" : managedRepository.getLocation().toString( ) );
configuration.setBlockRedeployments( managedRepository.blocksRedeployments( ) );
configuration.setDescription( managedRepository.getDescription( ) );
configuration.setLayout( managedRepository.getLayout( ) );
configuration.setScanned( managedRepository.isScanned( ) );
configuration.setRefreshCronExpression( managedRepository.getSchedulingDefinition( ) );
configuration.setReleases( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) );
configuration.setSnapshots( managedRepository.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) );
ArtifactCleanupFeature acf = managedRepository.getFeature( ArtifactCleanupFeature.class ).get( );
configuration.setRetentionPeriod( acf.getRetentionPeriod( ).getDays( ) );
configuration.setDeleteReleasedSnapshots( acf.isDeleteReleasedSnapshots( ) );
configuration.setRetentionCount( acf.getRetentionCount( ) );
IndexCreationFeature icf = managedRepository.getFeature( IndexCreationFeature.class ).get( );
configuration.setSkipPackedIndexCreation( icf.isSkipPackedIndexCreation( ) );
configuration.setIndexDir( icf.getIndexPath( ) == null ? "" : icf.getIndexPath().toString( ) );
StagingRepositoryFeature srf = managedRepository.getFeature( StagingRepositoryFeature.class ).get( );
configuration.setStageRepoNeeded( srf.isStageRepoNeeded( ) );
return configuration;
}
@Override
public RepositoryGroupConfiguration getRepositoryGroupConfiguration(RepositoryGroup repositoryGroup) throws RepositoryException {
RepositoryGroupConfiguration cfg = new RepositoryGroupConfiguration();
cfg.setId(repositoryGroup.getId());
cfg.setName(repositoryGroup.getName());
if (repositoryGroup.supportsFeature( IndexCreationFeature.class ))
{
IndexCreationFeature indexCreationFeature = repositoryGroup.getFeature( IndexCreationFeature.class ).get();
cfg.setMergedIndexPath( indexCreationFeature.getIndexPath().toString() );
}
cfg.setMergedIndexTtl(repositoryGroup.getMergedIndexTTL());
cfg.setRepositories(repositoryGroup.getRepositories().stream().map( Repository::getId ).collect( Collectors.toList()));
cfg.setCronExpression(repositoryGroup.getSchedulingDefinition());
return cfg;
}
@Override
public void addRepositoryEventHandler( EventHandler<? super RepositoryEvent> eventHandler )
{
// do nothing
}
@Override
public RemoteRepositoryConfiguration getRemoteConfiguration( RemoteRepository remoteRepository ) throws RepositoryException
{
RemoteRepositoryConfiguration configuration = new RemoteRepositoryConfiguration( );
configuration.setId( remoteRepository.getId( ) );
configuration.setName( remoteRepository.getName( ) );
configuration.setDescription( remoteRepository.getDescription( ) );
configuration.setLayout( remoteRepository.getLayout( ) );
configuration.setRefreshCronExpression( remoteRepository.getSchedulingDefinition( ) );
configuration.setCheckPath( remoteRepository.getCheckPath( ) );
configuration.setExtraHeaders( remoteRepository.getExtraHeaders( ) );
configuration.setExtraParameters( remoteRepository.getExtraParameters( ) );
configuration.setTimeout( (int) remoteRepository.getTimeout( ).getSeconds( ) );
RepositoryCredentials creds = remoteRepository.getLoginCredentials( );
if (creds!=null)
{
PasswordCredentials pwdCreds = (PasswordCredentials) creds;
configuration.setUsername( pwdCreds.getUsername( ) );
configuration.setPassword( new String( pwdCreds.getPassword( ) ) );
}
configuration.setUrl( remoteRepository.getLocation( ) == null ? "" : remoteRepository.getLocation().toString( ) );
RemoteIndexFeature rif = remoteRepository.getFeature( RemoteIndexFeature.class ).get( );
configuration.setDownloadRemoteIndex( rif.isDownloadRemoteIndex( ) );
configuration.setDownloadRemoteIndexOnStartup( rif.isDownloadRemoteIndexOnStartup( ) );
configuration.setIndexDir( rif.getIndexUri( )==null ? "" : rif.getIndexUri().toString( ) );
configuration.setRemoteDownloadNetworkProxyId( rif.getProxyId( ) );
return configuration;
}
@Override
public void handle(Event event) {
}
}