1 package org.eclipse.aether.internal.impl.synccontext;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.inject.Inject;
23 import javax.inject.Named;
24 import javax.inject.Singleton;
25
26 import org.eclipse.aether.RepositorySystemSession;
27 import org.eclipse.aether.SyncContext;
28 import org.eclipse.aether.impl.RepositorySystemLifecycle;
29 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapter;
30 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactorySelector;
31 import org.eclipse.aether.internal.impl.synccontext.named.ParameterizedNamedLockFactorySelector;
32 import org.eclipse.aether.spi.locator.Service;
33 import org.eclipse.aether.spi.locator.ServiceLocator;
34 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
35
36 import static java.util.Objects.requireNonNull;
37
38
39
40
41 @Singleton
42 @Named
43 public final class DefaultSyncContextFactory
44 implements SyncContextFactory, Service
45 {
46 private NamedLockFactoryAdapter namedLockFactoryAdapter;
47
48
49
50
51 @Inject
52 public DefaultSyncContextFactory( final RepositorySystemLifecycle repositorySystemLifecycle,
53 final NamedLockFactorySelector selector )
54 {
55 repositorySystemLifecycle.addOnSystemEndedHandler( this::shutDownAdapter );
56 this.namedLockFactoryAdapter =
57 new NamedLockFactoryAdapter( selector.getSelectedNameMapper(), selector.getSelectedNamedLockFactory() );
58 }
59
60
61
62
63
64
65 @Deprecated
66 public DefaultSyncContextFactory()
67 {
68
69 }
70
71 @Override
72 public void initService( final ServiceLocator locator )
73 {
74 locator.getService( RepositorySystemLifecycle.class ).addOnSystemEndedHandler( this::shutDownAdapter );
75 NamedLockFactorySelector selector = new ParameterizedNamedLockFactorySelector();
76 this.namedLockFactoryAdapter =
77 new NamedLockFactoryAdapter( selector.getSelectedNameMapper(), selector.getSelectedNamedLockFactory() );
78 }
79
80 @Override
81 public SyncContext newInstance( final RepositorySystemSession session, final boolean shared )
82 {
83 requireNonNull( session, "session cannot be null" );
84 return namedLockFactoryAdapter.newInstance( session, shared );
85 }
86
87 private void shutDownAdapter()
88 {
89 if ( namedLockFactoryAdapter != null )
90 {
91 namedLockFactoryAdapter.shutdown();
92 }
93 }
94 }