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
+        );
     }
 }

Reply via email to