cstamas commented on code in PR #196:
URL: https://github.com/apache/maven-resolver/pull/196#discussion_r979313017


##########
maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/synccontext/DefaultSyncContextFactory.java:
##########
@@ -66,24 +101,69 @@ public DefaultSyncContextFactory()
     @Override
     public void initService( final ServiceLocator locator )
     {
-        NamedLockFactorySelector selector = Objects.requireNonNull(
-            locator.getService( NamedLockFactorySelector.class ) );
-        this.namedLockFactoryAdapter = new NamedLockFactoryAdapter(
-            selector.getSelectedNameMapper(),
-            selector.getSelectedNamedLockFactory()
-        );
+        HashMap<String, NameMapper> mappers = new HashMap<>();
+        mappers.put( StaticNameMapper.NAME, new StaticNameMapper() );
+        mappers.put( GAVNameMapper.NAME, new GAVNameMapper() );
+        mappers.put( DiscriminatingNameMapper.NAME, new 
DiscriminatingNameMapper( new GAVNameMapper() ) );
+        mappers.put( FileGAVNameMapper.NAME, new FileGAVNameMapper() );
+        this.nameMappers = mappers;
+
+        HashMap<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.namedLockFactories = factories;
     }
 
     @Override
     public SyncContext newInstance( final RepositorySystemSession session, 
final boolean shared )
     {
         requireNonNull( session, "session cannot be null" );
-        return namedLockFactoryAdapter.newInstance( session, shared );
+        NamedLockFactoryAdapter adapter =
+                (NamedLockFactoryAdapter) session.getData().computeIfAbsent(
+                        ADAPTER_KEY,
+                        () -> createAdapter( session )
+                );
+        return adapter.newInstance( session, shared );
+    }
+
+    private NamedLockFactoryAdapter createAdapter( final 
RepositorySystemSession session )
+    {
+        String nameMapperName = ConfigUtils.getString( session, 
DEFAULT_NAME_MAPPER, NAME_MAPPER_KEY );
+        String namedLockFactoryName = ConfigUtils.getString( session, 
DEFAULT_FACTORY, FACTORY_KEY );
+        NameMapper nameMapper = nameMappers.get( nameMapperName );
+        if ( nameMapper == null )
+        {
+            throw new IllegalArgumentException( "Unknown NameMapper name: " + 
namedLockFactoryName
+                    + ", known ones: " + nameMappers.keySet() );
+        }
+        NamedLockFactory namedLockFactory = namedLockFactories.get( 
namedLockFactoryName );
+        if ( namedLockFactory == null )
+        {
+            throw new IllegalArgumentException( "Unknown NamedLockFactory 
name: " + namedLockFactoryName
+                    + ", known ones: " + namedLockFactories.keySet() );
+        }
+        NamedLockFactoryAdapter adapter = new NamedLockFactoryAdapter( 
nameMapper, namedLockFactory );
+        createdAdapters.add( adapter );
+        return adapter;
     }
 
     @PreDestroy
     public void shutdown()
     {
-        namedLockFactoryAdapter.shutdown();
+        LOGGER.debug( "Shutting down created adapters." );
+        createdAdapters.forEach( adapter ->
+                {
+                    try
+                    {
+                        adapter.shutdown();
+                    }
+                    catch ( Exception e )
+                    {
+                        LOGGER.warn( "Could not shutdown adapter", e );
+                    }

Review Comment:
   added toString with requested info...



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to