This is an automated email from the ASF dual-hosted git repository. cstamas pushed a commit to branch refactor-selector in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
commit c0819c8ebc4ea75f112f8fd7c41f1bc199d64f78 Author: Tamas Cservenak <[email protected]> AuthorDate: Sun Dec 12 22:44:34 2021 +0100 Refactor selector To make it extensible and main logic reusable. Provide "simple" implementation to cover resolver use case (both, SL and sisu). --- ...r.java => NamedLockFactorySelectorSupport.java} | 82 +++++---------- .../named/SimpleNamedLockFactorySelector.java | 115 ++++++--------------- 2 files changed, 56 insertions(+), 141 deletions(-) diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactorySelectorSupport.java similarity index 59% copy from maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java copy to maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactorySelectorSupport.java index 8c96173..cc9d307 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/NamedLockFactorySelectorSupport.java @@ -20,23 +20,17 @@ package org.eclipse.aether.internal.impl.synccontext.named; */ import org.eclipse.aether.named.NamedLockFactory; -import org.eclipse.aether.named.providers.FileLockNamedLockFactory; import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory; -import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory; -import org.eclipse.aether.named.providers.NoopNamedLockFactory; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Singleton; -import java.util.HashMap; import java.util.Map; /** - * Simple selector implementation that uses Java system properties and sane default values. + * Selector implementation support class: by extending this class one may override defaults, or provide completely + * alternative way of configuration. This implementation uses Java System properties to select factory and name mapper. + * + * @since TBD */ -@Singleton -@Named -public final class SimpleNamedLockFactorySelector +public abstract class NamedLockFactorySelectorSupport implements NamedLockFactorySelector { public static final String FACTORY_KEY = "aether.syncContext.named.factory"; @@ -47,71 +41,49 @@ public final class SimpleNamedLockFactorySelector private final NameMapper nameMapper; - /** - * Constructor used with DI, where factories are injected and selected based on key. - */ - @Inject - public SimpleNamedLockFactorySelector( final Map<String, NamedLockFactory> factories, - final Map<String, NameMapper> nameMappers ) + public NamedLockFactorySelectorSupport( final Map<String, NamedLockFactory> factories, + final String defaultFactoryName, + final Map<String, NameMapper> nameMappers, + final String defaultNameMapperName ) { - this.namedLockFactory = selectNamedLockFactory( factories, getFactoryName() ); - this.nameMapper = selectNameMapper( nameMappers, getNameMapperName() ); + this.namedLockFactory = selectNamedLockFactory( factories, getFactoryName( defaultFactoryName ) ); + this.nameMapper = selectNameMapper( nameMappers, getNameMapperName( defaultNameMapperName ) ); } /** - * Returns selected factory name (or sane default) using System property value of {@link #FACTORY_KEY} and defaults - * to {@link LocalReadWriteLockNamedLockFactory#NAME}. - */ - private String getFactoryName() - { - return System.getProperty( FACTORY_KEY, LocalReadWriteLockNamedLockFactory.NAME ); - } - - /** - * Returns selected name mapper name (or sane default) using System property value of {@link #NAME_MAPPER_KEY} and - * defaults to {@link GAVNameMapper#NAME}. + * Returns the selected {@link NamedLockFactory}, never null. */ - private String getNameMapperName() + @Override + public NamedLockFactory getSelectedNamedLockFactory() { - return System.getProperty( NAME_MAPPER_KEY, GAVNameMapper.NAME ); + return namedLockFactory; } /** - * Default constructor for ServiceLocator. + * Returns the selected {@link NameMapper}, never null. */ - public SimpleNamedLockFactorySelector() + @Override + public NameMapper getSelectedNameMapper() { - Map<String, NamedLockFactory> factories = new HashMap<>(); - factories.put( NoopNamedLockFactory.NAME, new NoopNamedLockFactory() ); - factories.put( LocalReadWriteLockNamedLockFactory.NAME, new LocalReadWriteLockNamedLockFactory() ); - factories.put( LocalSemaphoreNamedLockFactory.NAME, new LocalSemaphoreNamedLockFactory() ); - factories.put( FileLockNamedLockFactory.NAME, new FileLockNamedLockFactory() ); - this.namedLockFactory = selectNamedLockFactory( factories, getFactoryName() ); - - Map<String, NameMapper> nameMappers = new HashMap<>(); - nameMappers.put( StaticNameMapper.NAME, new StaticNameMapper() ); - nameMappers.put( GAVNameMapper.NAME, new GAVNameMapper() ); - nameMappers.put( DiscriminatingNameMapper.NAME, new DiscriminatingNameMapper( new GAVNameMapper() ) ); - nameMappers.put( FileGAVNameMapper.NAME, new FileGAVNameMapper() ); - this.nameMapper = selectNameMapper( nameMappers, getNameMapperName() ); + return nameMapper; } /** - * Returns the selected {@link NamedLockFactory}, never null. + * Returns selected factory name (or sane default) using System property value of {@link #FACTORY_KEY} and defaults + * to {@link LocalReadWriteLockNamedLockFactory#NAME}. */ - @Override - public NamedLockFactory getSelectedNamedLockFactory() + protected String getFactoryName( final String defaultFactoryName ) { - return namedLockFactory; + return System.getProperty( FACTORY_KEY, defaultFactoryName ); } /** - * Returns the selected {@link NameMapper}, never null. + * Returns selected name mapper name (or sane default) using System property value of {@link #NAME_MAPPER_KEY} and + * defaults to {@link GAVNameMapper#NAME}. */ - @Override - public NameMapper getSelectedNameMapper() + protected String getNameMapperName( final String defaultNameMapperName ) { - return nameMapper; + return System.getProperty( NAME_MAPPER_KEY, defaultNameMapperName ); } private NamedLockFactory selectNamedLockFactory( final Map<String, NamedLockFactory> factories, diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java index 8c96173..1b1508f 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/named/SimpleNamedLockFactorySelector.java @@ -32,48 +32,33 @@ import java.util.HashMap; import java.util.Map; /** - * Simple selector implementation that uses Java system properties and sane default values. + * Simple selector implementation that uses {@link LocalReadWriteLockNamedLockFactory} and {@link GAVNameMapper} as + * default name lock factory and name mapper. + * + * @since TBD */ @Singleton @Named public final class SimpleNamedLockFactorySelector - implements NamedLockFactorySelector + extends NamedLockFactorySelectorSupport { - public static final String FACTORY_KEY = "aether.syncContext.named.factory"; - - public static final String NAME_MAPPER_KEY = "aether.syncContext.named.nameMapper"; - - private final NamedLockFactory namedLockFactory; - - private final NameMapper nameMapper; - - /** - * Constructor used with DI, where factories are injected and selected based on key. - */ - @Inject - public SimpleNamedLockFactorySelector( final Map<String, NamedLockFactory> factories, - final Map<String, NameMapper> nameMappers ) - { - this.namedLockFactory = selectNamedLockFactory( factories, getFactoryName() ); - this.nameMapper = selectNameMapper( nameMappers, getNameMapperName() ); - } + private static final Map<String, NamedLockFactory> FACTORIES; - /** - * Returns selected factory name (or sane default) using System property value of {@link #FACTORY_KEY} and defaults - * to {@link LocalReadWriteLockNamedLockFactory#NAME}. - */ - private String getFactoryName() - { - return System.getProperty( FACTORY_KEY, LocalReadWriteLockNamedLockFactory.NAME ); - } + private static final Map<String, NameMapper> NAME_MAPPERS; - /** - * Returns selected name mapper name (or sane default) using System property value of {@link #NAME_MAPPER_KEY} and - * defaults to {@link GAVNameMapper#NAME}. - */ - private String getNameMapperName() + static { - return System.getProperty( NAME_MAPPER_KEY, GAVNameMapper.NAME ); + FACTORIES = new HashMap<>(); + FACTORIES.put( NoopNamedLockFactory.NAME, new NoopNamedLockFactory() ); + FACTORIES.put( LocalReadWriteLockNamedLockFactory.NAME, new LocalReadWriteLockNamedLockFactory() ); + FACTORIES.put( LocalSemaphoreNamedLockFactory.NAME, new LocalSemaphoreNamedLockFactory() ); + FACTORIES.put( FileLockNamedLockFactory.NAME, new FileLockNamedLockFactory() ); + + NAME_MAPPERS = new HashMap<>(); + NAME_MAPPERS.put( StaticNameMapper.NAME, new StaticNameMapper() ); + NAME_MAPPERS.put( GAVNameMapper.NAME, new GAVNameMapper() ); + NAME_MAPPERS.put( DiscriminatingNameMapper.NAME, new DiscriminatingNameMapper( new GAVNameMapper() ) ); + NAME_MAPPERS.put( FileGAVNameMapper.NAME, new FileGAVNameMapper() ); } /** @@ -81,60 +66,18 @@ public final class SimpleNamedLockFactorySelector */ public SimpleNamedLockFactorySelector() { - Map<String, NamedLockFactory> factories = new HashMap<>(); - factories.put( NoopNamedLockFactory.NAME, new NoopNamedLockFactory() ); - factories.put( LocalReadWriteLockNamedLockFactory.NAME, new LocalReadWriteLockNamedLockFactory() ); - factories.put( LocalSemaphoreNamedLockFactory.NAME, new LocalSemaphoreNamedLockFactory() ); - factories.put( FileLockNamedLockFactory.NAME, new FileLockNamedLockFactory() ); - this.namedLockFactory = selectNamedLockFactory( factories, getFactoryName() ); - - Map<String, NameMapper> nameMappers = new HashMap<>(); - nameMappers.put( StaticNameMapper.NAME, new StaticNameMapper() ); - nameMappers.put( GAVNameMapper.NAME, new GAVNameMapper() ); - nameMappers.put( DiscriminatingNameMapper.NAME, new DiscriminatingNameMapper( new GAVNameMapper() ) ); - nameMappers.put( FileGAVNameMapper.NAME, new FileGAVNameMapper() ); - this.nameMapper = selectNameMapper( nameMappers, getNameMapperName() ); + this( FACTORIES, NAME_MAPPERS ); } - /** - * Returns the selected {@link NamedLockFactory}, never null. - */ - @Override - public NamedLockFactory getSelectedNamedLockFactory() - { - return namedLockFactory; - } - - /** - * Returns the selected {@link NameMapper}, never null. - */ - @Override - public NameMapper getSelectedNameMapper() - { - return nameMapper; - } - - private NamedLockFactory selectNamedLockFactory( final Map<String, NamedLockFactory> factories, - final String factoryName ) - { - NamedLockFactory factory = factories.get( factoryName ); - if ( factory == null ) - { - throw new IllegalArgumentException( "Unknown NamedLockFactory name: " + factoryName - + ", known ones: " + factories.keySet() ); - } - return factory; - } - - private NameMapper selectNameMapper( final Map<String, NameMapper> nameMappers, - final String mapperName ) + @Inject + public SimpleNamedLockFactorySelector( final Map<String, NamedLockFactory> factories, + final Map<String, NameMapper> nameMappers ) { - NameMapper nameMapper = nameMappers.get( mapperName ); - if ( nameMapper == null ) - { - throw new IllegalArgumentException( "Unknown NameMapper name: " + mapperName - + ", known ones: " + nameMappers.keySet() ); - } - return nameMapper; + super( + factories, + LocalReadWriteLockNamedLockFactory.NAME, + nameMappers, + GAVNameMapper.NAME + ); } }
