View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.supplier;
20  
21  import java.util.ArrayList;
22  import java.util.HashMap;
23  import java.util.LinkedHashMap;
24  import java.util.List;
25  import java.util.Map;
26  import java.util.concurrent.atomic.AtomicBoolean;
27  import java.util.function.Supplier;
28  
29  import org.apache.maven.model.building.DefaultModelBuilderFactory;
30  import org.apache.maven.model.building.ModelBuilder;
31  import org.apache.maven.repository.internal.DefaultArtifactDescriptorReader;
32  import org.apache.maven.repository.internal.DefaultModelCacheFactory;
33  import org.apache.maven.repository.internal.DefaultVersionRangeResolver;
34  import org.apache.maven.repository.internal.DefaultVersionResolver;
35  import org.apache.maven.repository.internal.MavenArtifactRelocationSource;
36  import org.apache.maven.repository.internal.ModelCacheFactory;
37  import org.apache.maven.repository.internal.PluginsMetadataGeneratorFactory;
38  import org.apache.maven.repository.internal.SnapshotMetadataGeneratorFactory;
39  import org.apache.maven.repository.internal.VersionsMetadataGeneratorFactory;
40  import org.apache.maven.repository.internal.relocation.DistributionManagementArtifactRelocationSource;
41  import org.apache.maven.repository.internal.relocation.UserPropertiesArtifactRelocationSource;
42  import org.eclipse.aether.RepositoryListener;
43  import org.eclipse.aether.RepositorySystem;
44  import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
45  import org.eclipse.aether.impl.ArtifactDescriptorReader;
46  import org.eclipse.aether.impl.ArtifactResolver;
47  import org.eclipse.aether.impl.DependencyCollector;
48  import org.eclipse.aether.impl.Deployer;
49  import org.eclipse.aether.impl.Installer;
50  import org.eclipse.aether.impl.LocalRepositoryProvider;
51  import org.eclipse.aether.impl.MetadataGeneratorFactory;
52  import org.eclipse.aether.impl.MetadataResolver;
53  import org.eclipse.aether.impl.OfflineController;
54  import org.eclipse.aether.impl.RemoteRepositoryFilterManager;
55  import org.eclipse.aether.impl.RemoteRepositoryManager;
56  import org.eclipse.aether.impl.RepositoryConnectorProvider;
57  import org.eclipse.aether.impl.RepositoryEventDispatcher;
58  import org.eclipse.aether.impl.RepositorySystemLifecycle;
59  import org.eclipse.aether.impl.RepositorySystemValidator;
60  import org.eclipse.aether.impl.UpdateCheckManager;
61  import org.eclipse.aether.impl.UpdatePolicyAnalyzer;
62  import org.eclipse.aether.impl.VersionRangeResolver;
63  import org.eclipse.aether.impl.VersionResolver;
64  import org.eclipse.aether.internal.impl.DefaultArtifactPredicateFactory;
65  import org.eclipse.aether.internal.impl.DefaultArtifactResolver;
66  import org.eclipse.aether.internal.impl.DefaultChecksumPolicyProvider;
67  import org.eclipse.aether.internal.impl.DefaultChecksumProcessor;
68  import org.eclipse.aether.internal.impl.DefaultDeployer;
69  import org.eclipse.aether.internal.impl.DefaultInstaller;
70  import org.eclipse.aether.internal.impl.DefaultLocalPathComposer;
71  import org.eclipse.aether.internal.impl.DefaultLocalPathPrefixComposerFactory;
72  import org.eclipse.aether.internal.impl.DefaultLocalRepositoryProvider;
73  import org.eclipse.aether.internal.impl.DefaultMetadataResolver;
74  import org.eclipse.aether.internal.impl.DefaultOfflineController;
75  import org.eclipse.aether.internal.impl.DefaultPathProcessor;
76  import org.eclipse.aether.internal.impl.DefaultRemoteRepositoryManager;
77  import org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider;
78  import org.eclipse.aether.internal.impl.DefaultRepositoryEventDispatcher;
79  import org.eclipse.aether.internal.impl.DefaultRepositoryLayoutProvider;
80  import org.eclipse.aether.internal.impl.DefaultRepositorySystem;
81  import org.eclipse.aether.internal.impl.DefaultRepositorySystemLifecycle;
82  import org.eclipse.aether.internal.impl.DefaultRepositorySystemValidator;
83  import org.eclipse.aether.internal.impl.DefaultTrackingFileManager;
84  import org.eclipse.aether.internal.impl.DefaultTransporterProvider;
85  import org.eclipse.aether.internal.impl.DefaultUpdateCheckManager;
86  import org.eclipse.aether.internal.impl.DefaultUpdatePolicyAnalyzer;
87  import org.eclipse.aether.internal.impl.EnhancedLocalRepositoryManagerFactory;
88  import org.eclipse.aether.internal.impl.LocalPathComposer;
89  import org.eclipse.aether.internal.impl.LocalPathPrefixComposerFactory;
90  import org.eclipse.aether.internal.impl.Maven2RepositoryLayoutFactory;
91  import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
92  import org.eclipse.aether.internal.impl.TrackingFileManager;
93  import org.eclipse.aether.internal.impl.checksum.DefaultChecksumAlgorithmFactorySelector;
94  import org.eclipse.aether.internal.impl.checksum.Md5ChecksumAlgorithmFactory;
95  import org.eclipse.aether.internal.impl.checksum.Sha1ChecksumAlgorithmFactory;
96  import org.eclipse.aether.internal.impl.checksum.Sha256ChecksumAlgorithmFactory;
97  import org.eclipse.aether.internal.impl.checksum.Sha512ChecksumAlgorithmFactory;
98  import org.eclipse.aether.internal.impl.checksum.SparseDirectoryTrustedChecksumsSource;
99  import org.eclipse.aether.internal.impl.checksum.SummaryFileTrustedChecksumsSource;
100 import org.eclipse.aether.internal.impl.checksum.TrustedToProvidedChecksumsSourceAdapter;
101 import org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector;
102 import org.eclipse.aether.internal.impl.collect.DependencyCollectorDelegate;
103 import org.eclipse.aether.internal.impl.collect.bf.BfDependencyCollector;
104 import org.eclipse.aether.internal.impl.collect.df.DfDependencyCollector;
105 import org.eclipse.aether.internal.impl.filter.DefaultRemoteRepositoryFilterManager;
106 import org.eclipse.aether.internal.impl.filter.FilteringPipelineRepositoryConnectorFactory;
107 import org.eclipse.aether.internal.impl.filter.GroupIdRemoteRepositoryFilterSource;
108 import org.eclipse.aether.internal.impl.filter.PrefixesRemoteRepositoryFilterSource;
109 import org.eclipse.aether.internal.impl.offline.OfflinePipelineRepositoryConnectorFactory;
110 import org.eclipse.aether.internal.impl.resolution.TrustedChecksumsArtifactResolverPostProcessor;
111 import org.eclipse.aether.internal.impl.synccontext.DefaultSyncContextFactory;
112 import org.eclipse.aether.internal.impl.synccontext.named.NameMapper;
113 import org.eclipse.aether.internal.impl.synccontext.named.NameMappers;
114 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactory;
115 import org.eclipse.aether.internal.impl.synccontext.named.NamedLockFactoryAdapterFactoryImpl;
116 import org.eclipse.aether.internal.impl.transport.http.DefaultChecksumExtractor;
117 import org.eclipse.aether.internal.impl.transport.http.Nx2ChecksumExtractor;
118 import org.eclipse.aether.internal.impl.transport.http.XChecksumExtractor;
119 import org.eclipse.aether.named.NamedLockFactory;
120 import org.eclipse.aether.named.providers.FileLockNamedLockFactory;
121 import org.eclipse.aether.named.providers.LocalReadWriteLockNamedLockFactory;
122 import org.eclipse.aether.named.providers.LocalSemaphoreNamedLockFactory;
123 import org.eclipse.aether.named.providers.NoopNamedLockFactory;
124 import org.eclipse.aether.spi.artifact.ArtifactPredicateFactory;
125 import org.eclipse.aether.spi.artifact.decorator.ArtifactDecoratorFactory;
126 import org.eclipse.aether.spi.artifact.generator.ArtifactGeneratorFactory;
127 import org.eclipse.aether.spi.artifact.transformer.ArtifactTransformer;
128 import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource;
129 import org.eclipse.aether.spi.checksums.TrustedChecksumsSource;
130 import org.eclipse.aether.spi.connector.PipelineRepositoryConnectorFactory;
131 import org.eclipse.aether.spi.connector.RepositoryConnectorFactory;
132 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
133 import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactorySelector;
134 import org.eclipse.aether.spi.connector.checksum.ChecksumPolicyProvider;
135 import org.eclipse.aether.spi.connector.filter.RemoteRepositoryFilterSource;
136 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutFactory;
137 import org.eclipse.aether.spi.connector.layout.RepositoryLayoutProvider;
138 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
139 import org.eclipse.aether.spi.connector.transport.TransporterProvider;
140 import org.eclipse.aether.spi.connector.transport.http.ChecksumExtractor;
141 import org.eclipse.aether.spi.connector.transport.http.ChecksumExtractorStrategy;
142 import org.eclipse.aether.spi.io.ChecksumProcessor;
143 import org.eclipse.aether.spi.io.PathProcessor;
144 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
145 import org.eclipse.aether.spi.resolution.ArtifactResolverPostProcessor;
146 import org.eclipse.aether.spi.synccontext.SyncContextFactory;
147 import org.eclipse.aether.spi.validator.ValidatorFactory;
148 import org.eclipse.aether.transport.apache.ApacheTransporterFactory;
149 import org.eclipse.aether.transport.file.FileTransporterFactory;
150 import org.eclipse.aether.util.version.GenericVersionScheme;
151 import org.eclipse.aether.version.VersionScheme;
152 
153 /**
154  * A simple memorizing {@link Supplier} of {@link RepositorySystem} instance, that on first call
155  * supplies lazily constructed instance, and on each subsequent call same instance. Hence, this instance should be
156  * thrown away immediately once repository system was created and there is no need for more instances. If new
157  * repository system instance needed, new instance of this class must be created. For proper shut down of returned
158  * repository system instance(s) use {@link RepositorySystem#shutdown()} method on supplied instance(s).
159  * <p>
160  * Since Resolver 2.0 this class offers access to various components via public getters, and allows even partial object
161  * graph construction.
162  * <p>
163  * Extend this class {@code createXXX()} methods and override to customize, if needed. The contract of this class makes
164  * sure that these (potentially overridden) methods are invoked only once, and instance created by those methods are
165  * memorized and kept as long as supplier instance is kept open.
166  * <p>
167  * This class is not thread safe and must be used from one thread only, while the constructed {@link RepositorySystem}
168  * is thread safe.
169  * <p>
170  * Important: Given the instance of supplier memorizes the supplier {@link RepositorySystem} instance it supplies,
171  * their lifecycle is shared as well: once supplied repository system is shut-down, this instance becomes closed as
172  * well. Any subsequent {@code getXXX} method invocation attempt will fail with {@link IllegalStateException}.
173  *
174  * @since 2.0.0
175  */
176 public class RepositorySystemSupplier implements Supplier<RepositorySystem> {
177     private final AtomicBoolean closed = new AtomicBoolean(false);
178 
179     public RepositorySystemSupplier() {}
180 
181     private void checkClosed() {
182         if (closed.get()) {
183             throw new IllegalStateException("Supplier is closed");
184         }
185     }
186 
187     private PathProcessor pathProcessor;
188 
189     public final PathProcessor getPathProcessor() {
190         checkClosed();
191         if (pathProcessor == null) {
192             pathProcessor = createPathProcessor();
193         }
194         return pathProcessor;
195     }
196 
197     protected PathProcessor createPathProcessor() {
198         return new DefaultPathProcessor();
199     }
200 
201     private ChecksumProcessor checksumProcessor;
202 
203     public final ChecksumProcessor getChecksumProcessor() {
204         checkClosed();
205         if (checksumProcessor == null) {
206             checksumProcessor = createChecksumProcessor();
207         }
208         return checksumProcessor;
209     }
210 
211     protected ChecksumProcessor createChecksumProcessor() {
212         return new DefaultChecksumProcessor(getPathProcessor());
213     }
214 
215     private TrackingFileManager trackingFileManager;
216 
217     public final TrackingFileManager getTrackingFileManager() {
218         checkClosed();
219         if (trackingFileManager == null) {
220             trackingFileManager = createTrackingFileManager();
221         }
222         return trackingFileManager;
223     }
224 
225     protected TrackingFileManager createTrackingFileManager() {
226         return new DefaultTrackingFileManager();
227     }
228 
229     private LocalPathComposer localPathComposer;
230 
231     public final LocalPathComposer getLocalPathComposer() {
232         checkClosed();
233         if (localPathComposer == null) {
234             localPathComposer = createLocalPathComposer();
235         }
236         return localPathComposer;
237     }
238 
239     protected LocalPathComposer createLocalPathComposer() {
240         return new DefaultLocalPathComposer();
241     }
242 
243     private LocalPathPrefixComposerFactory localPathPrefixComposerFactory;
244 
245     public final LocalPathPrefixComposerFactory getLocalPathPrefixComposerFactory() {
246         checkClosed();
247         if (localPathPrefixComposerFactory == null) {
248             localPathPrefixComposerFactory = createLocalPathPrefixComposerFactory();
249         }
250         return localPathPrefixComposerFactory;
251     }
252 
253     protected LocalPathPrefixComposerFactory createLocalPathPrefixComposerFactory() {
254         return new DefaultLocalPathPrefixComposerFactory();
255     }
256 
257     private RepositorySystemLifecycle repositorySystemLifecycle;
258 
259     public final RepositorySystemLifecycle getRepositorySystemLifecycle() {
260         checkClosed();
261         if (repositorySystemLifecycle == null) {
262             repositorySystemLifecycle = createRepositorySystemLifecycle();
263             repositorySystemLifecycle.addOnSystemEndedHandler(() -> closed.set(true));
264         }
265         return repositorySystemLifecycle;
266     }
267 
268     protected RepositorySystemLifecycle createRepositorySystemLifecycle() {
269         return new DefaultRepositorySystemLifecycle();
270     }
271 
272     private OfflineController offlineController;
273 
274     public final OfflineController getOfflineController() {
275         checkClosed();
276         if (offlineController == null) {
277             offlineController = createOfflineController();
278         }
279         return offlineController;
280     }
281 
282     protected OfflineController createOfflineController() {
283         return new DefaultOfflineController();
284     }
285 
286     private UpdatePolicyAnalyzer updatePolicyAnalyzer;
287 
288     public final UpdatePolicyAnalyzer getUpdatePolicyAnalyzer() {
289         checkClosed();
290         if (updatePolicyAnalyzer == null) {
291             updatePolicyAnalyzer = createUpdatePolicyAnalyzer();
292         }
293         return updatePolicyAnalyzer;
294     }
295 
296     protected UpdatePolicyAnalyzer createUpdatePolicyAnalyzer() {
297         return new DefaultUpdatePolicyAnalyzer();
298     }
299 
300     private ChecksumPolicyProvider checksumPolicyProvider;
301 
302     public final ChecksumPolicyProvider getChecksumPolicyProvider() {
303         checkClosed();
304         if (checksumPolicyProvider == null) {
305             checksumPolicyProvider = createChecksumPolicyProvider();
306         }
307         return checksumPolicyProvider;
308     }
309 
310     protected ChecksumPolicyProvider createChecksumPolicyProvider() {
311         return new DefaultChecksumPolicyProvider();
312     }
313 
314     private UpdateCheckManager updateCheckManager;
315 
316     public final UpdateCheckManager getUpdateCheckManager() {
317         checkClosed();
318         if (updateCheckManager == null) {
319             updateCheckManager = createUpdateCheckManager();
320         }
321         return updateCheckManager;
322     }
323 
324     protected UpdateCheckManager createUpdateCheckManager() {
325         return new DefaultUpdateCheckManager(getTrackingFileManager(), getUpdatePolicyAnalyzer(), getPathProcessor());
326     }
327 
328     private Map<String, NamedLockFactory> namedLockFactories;
329 
330     public final Map<String, NamedLockFactory> getNamedLockFactories() {
331         checkClosed();
332         if (namedLockFactories == null) {
333             namedLockFactories = createNamedLockFactories();
334         }
335         return namedLockFactories;
336     }
337 
338     protected Map<String, NamedLockFactory> createNamedLockFactories() {
339         HashMap<String, NamedLockFactory> result = new HashMap<>();
340         result.put(NoopNamedLockFactory.NAME, new NoopNamedLockFactory());
341         result.put(LocalReadWriteLockNamedLockFactory.NAME, new LocalReadWriteLockNamedLockFactory());
342         result.put(LocalSemaphoreNamedLockFactory.NAME, new LocalSemaphoreNamedLockFactory());
343         result.put(FileLockNamedLockFactory.NAME, new FileLockNamedLockFactory());
344         return result;
345     }
346 
347     private Map<String, NameMapper> nameMappers;
348 
349     public final Map<String, NameMapper> getNameMappers() {
350         checkClosed();
351         if (nameMappers == null) {
352             nameMappers = createNameMappers();
353         }
354         return nameMappers;
355     }
356 
357     protected Map<String, NameMapper> createNameMappers() {
358         HashMap<String, NameMapper> result = new HashMap<>();
359         result.put(NameMappers.STATIC_NAME, NameMappers.staticNameMapper());
360         result.put(NameMappers.GAV_NAME, NameMappers.gavNameMapper());
361         result.put(NameMappers.DISCRIMINATING_NAME, NameMappers.discriminatingNameMapper());
362         result.put(NameMappers.FILE_GAV_NAME, NameMappers.fileGavNameMapper());
363         result.put(NameMappers.FILE_HGAV_NAME, NameMappers.fileHashingGavNameMapper());
364         return result;
365     }
366 
367     private NamedLockFactoryAdapterFactory namedLockFactoryAdapterFactory;
368 
369     public final NamedLockFactoryAdapterFactory getNamedLockFactoryAdapterFactory() {
370         checkClosed();
371         if (namedLockFactoryAdapterFactory == null) {
372             namedLockFactoryAdapterFactory = createNamedLockFactoryAdapterFactory();
373         }
374         return namedLockFactoryAdapterFactory;
375     }
376 
377     protected NamedLockFactoryAdapterFactory createNamedLockFactoryAdapterFactory() {
378         return new NamedLockFactoryAdapterFactoryImpl(
379                 getNamedLockFactories(), getNameMappers(), getRepositorySystemLifecycle());
380     }
381 
382     private SyncContextFactory syncContextFactory;
383 
384     public final SyncContextFactory getSyncContextFactory() {
385         checkClosed();
386         if (syncContextFactory == null) {
387             syncContextFactory = createSyncContextFactory();
388         }
389         return syncContextFactory;
390     }
391 
392     protected SyncContextFactory createSyncContextFactory() {
393         return new DefaultSyncContextFactory(getNamedLockFactoryAdapterFactory());
394     }
395 
396     private Map<String, ChecksumAlgorithmFactory> checksumAlgorithmFactories;
397 
398     public final Map<String, ChecksumAlgorithmFactory> getChecksumAlgorithmFactories() {
399         checkClosed();
400         if (checksumAlgorithmFactories == null) {
401             checksumAlgorithmFactories = createChecksumAlgorithmFactories();
402         }
403         return checksumAlgorithmFactories;
404     }
405 
406     protected Map<String, ChecksumAlgorithmFactory> createChecksumAlgorithmFactories() {
407         HashMap<String, ChecksumAlgorithmFactory> result = new HashMap<>();
408         result.put(Sha512ChecksumAlgorithmFactory.NAME, new Sha512ChecksumAlgorithmFactory());
409         result.put(Sha256ChecksumAlgorithmFactory.NAME, new Sha256ChecksumAlgorithmFactory());
410         result.put(Sha1ChecksumAlgorithmFactory.NAME, new Sha1ChecksumAlgorithmFactory());
411         result.put(Md5ChecksumAlgorithmFactory.NAME, new Md5ChecksumAlgorithmFactory());
412         return result;
413     }
414 
415     private ChecksumAlgorithmFactorySelector checksumAlgorithmFactorySelector;
416 
417     public final ChecksumAlgorithmFactorySelector getChecksumAlgorithmFactorySelector() {
418         checkClosed();
419         if (checksumAlgorithmFactorySelector == null) {
420             checksumAlgorithmFactorySelector = createChecksumAlgorithmFactorySelector();
421         }
422         return checksumAlgorithmFactorySelector;
423     }
424 
425     protected ChecksumAlgorithmFactorySelector createChecksumAlgorithmFactorySelector() {
426         return new DefaultChecksumAlgorithmFactorySelector(getChecksumAlgorithmFactories());
427     }
428 
429     private ArtifactPredicateFactory artifactPredicateFactory;
430 
431     public final ArtifactPredicateFactory getArtifactPredicateFactory() {
432         checkClosed();
433         if (artifactPredicateFactory == null) {
434             artifactPredicateFactory = createArtifactPredicateFactory();
435         }
436         return artifactPredicateFactory;
437     }
438 
439     protected ArtifactPredicateFactory createArtifactPredicateFactory() {
440         return new DefaultArtifactPredicateFactory(getChecksumAlgorithmFactorySelector());
441     }
442 
443     private Map<String, RepositoryLayoutFactory> repositoryLayoutFactories;
444 
445     public final Map<String, RepositoryLayoutFactory> getRepositoryLayoutFactories() {
446         checkClosed();
447         if (repositoryLayoutFactories == null) {
448             repositoryLayoutFactories = createRepositoryLayoutFactories();
449         }
450         return repositoryLayoutFactories;
451     }
452 
453     protected Map<String, RepositoryLayoutFactory> createRepositoryLayoutFactories() {
454         HashMap<String, RepositoryLayoutFactory> result = new HashMap<>();
455         result.put(
456                 Maven2RepositoryLayoutFactory.NAME,
457                 new Maven2RepositoryLayoutFactory(
458                         getChecksumAlgorithmFactorySelector(), getArtifactPredicateFactory()));
459         return result;
460     }
461 
462     private RepositoryLayoutProvider repositoryLayoutProvider;
463 
464     public final RepositoryLayoutProvider getRepositoryLayoutProvider() {
465         checkClosed();
466         if (repositoryLayoutProvider == null) {
467             repositoryLayoutProvider = createRepositoryLayoutProvider();
468         }
469         return repositoryLayoutProvider;
470     }
471 
472     protected RepositoryLayoutProvider createRepositoryLayoutProvider() {
473         return new DefaultRepositoryLayoutProvider(getRepositoryLayoutFactories());
474     }
475 
476     private LocalRepositoryProvider localRepositoryProvider;
477 
478     public final LocalRepositoryProvider getLocalRepositoryProvider() {
479         checkClosed();
480         if (localRepositoryProvider == null) {
481             localRepositoryProvider = createLocalRepositoryProvider();
482         }
483         return localRepositoryProvider;
484     }
485 
486     protected LocalRepositoryProvider createLocalRepositoryProvider() {
487         LocalPathComposer localPathComposer = getLocalPathComposer();
488         HashMap<String, LocalRepositoryManagerFactory> localRepositoryProviders = new HashMap<>(2);
489         localRepositoryProviders.put(
490                 SimpleLocalRepositoryManagerFactory.NAME, new SimpleLocalRepositoryManagerFactory(localPathComposer));
491         localRepositoryProviders.put(
492                 EnhancedLocalRepositoryManagerFactory.NAME,
493                 new EnhancedLocalRepositoryManagerFactory(
494                         localPathComposer, getTrackingFileManager(), getLocalPathPrefixComposerFactory()));
495         return new DefaultLocalRepositoryProvider(localRepositoryProviders);
496     }
497 
498     private RemoteRepositoryManager remoteRepositoryManager;
499 
500     public final RemoteRepositoryManager getRemoteRepositoryManager() {
501         checkClosed();
502         if (remoteRepositoryManager == null) {
503             remoteRepositoryManager = createRemoteRepositoryManager();
504         }
505         return remoteRepositoryManager;
506     }
507 
508     protected RemoteRepositoryManager createRemoteRepositoryManager() {
509         return new DefaultRemoteRepositoryManager(getUpdatePolicyAnalyzer(), getChecksumPolicyProvider());
510     }
511 
512     private Map<String, RemoteRepositoryFilterSource> remoteRepositoryFilterSources;
513 
514     public final Map<String, RemoteRepositoryFilterSource> getRemoteRepositoryFilterSources() {
515         checkClosed();
516         if (remoteRepositoryFilterSources == null) {
517             remoteRepositoryFilterSources = createRemoteRepositoryFilterSources();
518         }
519         return remoteRepositoryFilterSources;
520     }
521 
522     protected Map<String, RemoteRepositoryFilterSource> createRemoteRepositoryFilterSources() {
523         HashMap<String, RemoteRepositoryFilterSource> result = new HashMap<>();
524         result.put(
525                 GroupIdRemoteRepositoryFilterSource.NAME,
526                 new GroupIdRemoteRepositoryFilterSource(getRepositorySystemLifecycle(), getPathProcessor()));
527         result.put(
528                 PrefixesRemoteRepositoryFilterSource.NAME,
529                 new PrefixesRemoteRepositoryFilterSource(
530                         this::getMetadataResolver, this::getRemoteRepositoryManager, getRepositoryLayoutProvider()));
531         return result;
532     }
533 
534     private RemoteRepositoryFilterManager remoteRepositoryFilterManager;
535 
536     public final RemoteRepositoryFilterManager getRemoteRepositoryFilterManager() {
537         checkClosed();
538         if (remoteRepositoryFilterManager == null) {
539             remoteRepositoryFilterManager = createRemoteRepositoryFilterManager();
540         }
541         return remoteRepositoryFilterManager;
542     }
543 
544     protected RemoteRepositoryFilterManager createRemoteRepositoryFilterManager() {
545         return new DefaultRemoteRepositoryFilterManager(getRemoteRepositoryFilterSources());
546     }
547 
548     private Map<String, RepositoryListener> repositoryListeners;
549 
550     public final Map<String, RepositoryListener> getRepositoryListeners() {
551         checkClosed();
552         if (repositoryListeners == null) {
553             repositoryListeners = createRepositoryListeners();
554         }
555         return repositoryListeners;
556     }
557 
558     protected Map<String, RepositoryListener> createRepositoryListeners() {
559         return new HashMap<>();
560     }
561 
562     private RepositoryEventDispatcher repositoryEventDispatcher;
563 
564     public final RepositoryEventDispatcher getRepositoryEventDispatcher() {
565         checkClosed();
566         if (repositoryEventDispatcher == null) {
567             repositoryEventDispatcher = createRepositoryEventDispatcher();
568         }
569         return repositoryEventDispatcher;
570     }
571 
572     protected RepositoryEventDispatcher createRepositoryEventDispatcher() {
573         return new DefaultRepositoryEventDispatcher(getRepositoryListeners());
574     }
575 
576     private Map<String, TrustedChecksumsSource> trustedChecksumsSources;
577 
578     public final Map<String, TrustedChecksumsSource> getTrustedChecksumsSources() {
579         checkClosed();
580         if (trustedChecksumsSources == null) {
581             trustedChecksumsSources = createTrustedChecksumsSources();
582         }
583         return trustedChecksumsSources;
584     }
585 
586     protected Map<String, TrustedChecksumsSource> createTrustedChecksumsSources() {
587         HashMap<String, TrustedChecksumsSource> result = new HashMap<>();
588         result.put(
589                 SparseDirectoryTrustedChecksumsSource.NAME,
590                 new SparseDirectoryTrustedChecksumsSource(getChecksumProcessor(), getLocalPathComposer()));
591         result.put(
592                 SummaryFileTrustedChecksumsSource.NAME,
593                 new SummaryFileTrustedChecksumsSource(
594                         getLocalPathComposer(), getRepositorySystemLifecycle(), getPathProcessor()));
595         return result;
596     }
597 
598     private Map<String, ProvidedChecksumsSource> providedChecksumsSources;
599 
600     public final Map<String, ProvidedChecksumsSource> getProvidedChecksumsSources() {
601         checkClosed();
602         if (providedChecksumsSources == null) {
603             providedChecksumsSources = createProvidedChecksumsSources();
604         }
605         return providedChecksumsSources;
606     }
607 
608     protected Map<String, ProvidedChecksumsSource> createProvidedChecksumsSources() {
609         HashMap<String, ProvidedChecksumsSource> result = new HashMap<>();
610         result.put(
611                 TrustedToProvidedChecksumsSourceAdapter.NAME,
612                 new TrustedToProvidedChecksumsSourceAdapter(getTrustedChecksumsSources()));
613         return result;
614     }
615 
616     private Map<String, ChecksumExtractorStrategy> checksumExtractorStrategies;
617 
618     public final Map<String, ChecksumExtractorStrategy> getChecksumExtractorStrategies() {
619         checkClosed();
620         if (checksumExtractorStrategies == null) {
621             checksumExtractorStrategies = createChecksumExtractorStrategies();
622         }
623         return checksumExtractorStrategies;
624     }
625 
626     protected Map<String, ChecksumExtractorStrategy> createChecksumExtractorStrategies() {
627         HashMap<String, ChecksumExtractorStrategy> result = new HashMap<>();
628         result.put(XChecksumExtractor.NAME, new XChecksumExtractor());
629         result.put(Nx2ChecksumExtractor.NAME, new Nx2ChecksumExtractor());
630         return result;
631     }
632 
633     private ChecksumExtractor checksumExtractor;
634 
635     public final ChecksumExtractor getChecksumExtractor() {
636         checkClosed();
637         if (checksumExtractor == null) {
638             checksumExtractor = createChecksumExtractor();
639         }
640         return checksumExtractor;
641     }
642 
643     protected ChecksumExtractor createChecksumExtractor() {
644         return new DefaultChecksumExtractor(getChecksumExtractorStrategies());
645     }
646 
647     private Map<String, TransporterFactory> transporterFactories;
648 
649     public final Map<String, TransporterFactory> getTransporterFactories() {
650         checkClosed();
651         if (transporterFactories == null) {
652             transporterFactories = createTransporterFactories();
653         }
654         return transporterFactories;
655     }
656 
657     protected Map<String, TransporterFactory> createTransporterFactories() {
658         HashMap<String, TransporterFactory> result = new HashMap<>();
659         result.put(FileTransporterFactory.NAME, new FileTransporterFactory());
660         result.put(
661                 ApacheTransporterFactory.NAME,
662                 new ApacheTransporterFactory(getChecksumExtractor(), getPathProcessor()));
663         return result;
664     }
665 
666     private TransporterProvider transporterProvider;
667 
668     public final TransporterProvider getTransporterProvider() {
669         checkClosed();
670         if (transporterProvider == null) {
671             transporterProvider = createTransporterProvider();
672         }
673         return transporterProvider;
674     }
675 
676     protected TransporterProvider createTransporterProvider() {
677         return new DefaultTransporterProvider(getTransporterFactories());
678     }
679 
680     private BasicRepositoryConnectorFactory basicRepositoryConnectorFactory;
681 
682     public final BasicRepositoryConnectorFactory getBasicRepositoryConnectorFactory() {
683         checkClosed();
684         if (basicRepositoryConnectorFactory == null) {
685             basicRepositoryConnectorFactory = createBasicRepositoryConnectorFactory();
686         }
687         return basicRepositoryConnectorFactory;
688     }
689 
690     protected BasicRepositoryConnectorFactory createBasicRepositoryConnectorFactory() {
691         return new BasicRepositoryConnectorFactory(
692                 getTransporterProvider(),
693                 getRepositoryLayoutProvider(),
694                 getChecksumPolicyProvider(),
695                 getPathProcessor(),
696                 getChecksumProcessor(),
697                 getProvidedChecksumsSources());
698     }
699 
700     private Map<String, RepositoryConnectorFactory> repositoryConnectorFactories;
701 
702     public final Map<String, RepositoryConnectorFactory> getRepositoryConnectorFactories() {
703         checkClosed();
704         if (repositoryConnectorFactories == null) {
705             repositoryConnectorFactories = createRepositoryConnectorFactories();
706         }
707         return repositoryConnectorFactories;
708     }
709 
710     protected Map<String, RepositoryConnectorFactory> createRepositoryConnectorFactories() {
711         HashMap<String, RepositoryConnectorFactory> result = new HashMap<>();
712         result.put(BasicRepositoryConnectorFactory.NAME, getBasicRepositoryConnectorFactory());
713         return result;
714     }
715 
716     private Map<String, PipelineRepositoryConnectorFactory> pipelineRepositoryConnectorFactories;
717 
718     public final Map<String, PipelineRepositoryConnectorFactory> getPipelineRepositoryConnectorFactories() {
719         checkClosed();
720         if (pipelineRepositoryConnectorFactories == null) {
721             pipelineRepositoryConnectorFactories = createPipelineRepositoryConnectorFactories();
722         }
723         return pipelineRepositoryConnectorFactories;
724     }
725 
726     protected Map<String, PipelineRepositoryConnectorFactory> createPipelineRepositoryConnectorFactories() {
727         HashMap<String, PipelineRepositoryConnectorFactory> result = new HashMap<>();
728         result.put(
729                 FilteringPipelineRepositoryConnectorFactory.NAME,
730                 new FilteringPipelineRepositoryConnectorFactory(getRemoteRepositoryFilterManager()));
731         result.put(
732                 OfflinePipelineRepositoryConnectorFactory.NAME,
733                 new OfflinePipelineRepositoryConnectorFactory(getOfflineController()));
734         return result;
735     }
736 
737     private RepositoryConnectorProvider repositoryConnectorProvider;
738 
739     public final RepositoryConnectorProvider getRepositoryConnectorProvider() {
740         checkClosed();
741         if (repositoryConnectorProvider == null) {
742             repositoryConnectorProvider = createRepositoryConnectorProvider();
743         }
744         return repositoryConnectorProvider;
745     }
746 
747     protected RepositoryConnectorProvider createRepositoryConnectorProvider() {
748         return new DefaultRepositoryConnectorProvider(
749                 getRepositoryConnectorFactories(), getPipelineRepositoryConnectorFactories());
750     }
751 
752     private Installer installer;
753 
754     public final Installer getInstaller() {
755         checkClosed();
756         if (installer == null) {
757             installer = createInstaller();
758         }
759         return installer;
760     }
761 
762     protected Installer createInstaller() {
763         return new DefaultInstaller(
764                 getPathProcessor(),
765                 getRepositoryEventDispatcher(),
766                 getArtifactGeneratorFactories(),
767                 getMetadataGeneratorFactories(),
768                 getArtifactTransformers(),
769                 getSyncContextFactory());
770     }
771 
772     private Deployer deployer;
773 
774     public final Deployer getDeployer() {
775         checkClosed();
776         if (deployer == null) {
777             deployer = createDeployer();
778         }
779         return deployer;
780     }
781 
782     protected Deployer createDeployer() {
783         return new DefaultDeployer(
784                 getPathProcessor(),
785                 getRepositoryEventDispatcher(),
786                 getRepositoryConnectorProvider(),
787                 getRemoteRepositoryManager(),
788                 getUpdateCheckManager(),
789                 getArtifactGeneratorFactories(),
790                 getMetadataGeneratorFactories(),
791                 getArtifactTransformers(),
792                 getSyncContextFactory(),
793                 getOfflineController());
794     }
795 
796     private Map<String, DependencyCollectorDelegate> dependencyCollectorDelegates;
797 
798     public final Map<String, DependencyCollectorDelegate> getDependencyCollectorDelegates() {
799         checkClosed();
800         if (dependencyCollectorDelegates == null) {
801             dependencyCollectorDelegates = createDependencyCollectorDelegates();
802         }
803         return dependencyCollectorDelegates;
804     }
805 
806     protected Map<String, DependencyCollectorDelegate> createDependencyCollectorDelegates() {
807         RemoteRepositoryManager remoteRepositoryManager = getRemoteRepositoryManager();
808         ArtifactDescriptorReader artifactDescriptorReader = getArtifactDescriptorReader();
809         VersionRangeResolver versionRangeResolver = getVersionRangeResolver();
810         HashMap<String, DependencyCollectorDelegate> result = new HashMap<>();
811         result.put(
812                 DfDependencyCollector.NAME,
813                 new DfDependencyCollector(
814                         remoteRepositoryManager,
815                         artifactDescriptorReader,
816                         versionRangeResolver,
817                         getArtifactDecoratorFactories()));
818         result.put(
819                 BfDependencyCollector.NAME,
820                 new BfDependencyCollector(
821                         remoteRepositoryManager,
822                         artifactDescriptorReader,
823                         versionRangeResolver,
824                         getArtifactDecoratorFactories()));
825         return result;
826     }
827 
828     private DependencyCollector dependencyCollector;
829 
830     public final DependencyCollector getDependencyCollector() {
831         checkClosed();
832         if (dependencyCollector == null) {
833             dependencyCollector = createDependencyCollector();
834         }
835         return dependencyCollector;
836     }
837 
838     protected DependencyCollector createDependencyCollector() {
839         return new DefaultDependencyCollector(getDependencyCollectorDelegates());
840     }
841 
842     private Map<String, ArtifactResolverPostProcessor> artifactResolverPostProcessors;
843 
844     public final Map<String, ArtifactResolverPostProcessor> getArtifactResolverPostProcessors() {
845         checkClosed();
846         if (artifactResolverPostProcessors == null) {
847             artifactResolverPostProcessors = createArtifactResolverPostProcessors();
848         }
849         return artifactResolverPostProcessors;
850     }
851 
852     protected Map<String, ArtifactResolverPostProcessor> createArtifactResolverPostProcessors() {
853         HashMap<String, ArtifactResolverPostProcessor> result = new HashMap<>();
854         result.put(
855                 TrustedChecksumsArtifactResolverPostProcessor.NAME,
856                 new TrustedChecksumsArtifactResolverPostProcessor(
857                         getChecksumAlgorithmFactorySelector(), getTrustedChecksumsSources()));
858         return result;
859     }
860 
861     private ArtifactResolver artifactResolver;
862 
863     public final ArtifactResolver getArtifactResolver() {
864         checkClosed();
865         if (artifactResolver == null) {
866             artifactResolver = createArtifactResolver();
867         }
868         return artifactResolver;
869     }
870 
871     protected ArtifactResolver createArtifactResolver() {
872         return new DefaultArtifactResolver(
873                 getPathProcessor(),
874                 getRepositoryEventDispatcher(),
875                 getVersionResolver(),
876                 getUpdateCheckManager(),
877                 getRepositoryConnectorProvider(),
878                 getRemoteRepositoryManager(),
879                 getSyncContextFactory(),
880                 getOfflineController(),
881                 getArtifactResolverPostProcessors(),
882                 getRemoteRepositoryFilterManager());
883     }
884 
885     private MetadataResolver metadataResolver;
886 
887     public final MetadataResolver getMetadataResolver() {
888         checkClosed();
889         if (metadataResolver == null) {
890             metadataResolver = createMetadataResolver();
891         }
892         return metadataResolver;
893     }
894 
895     protected MetadataResolver createMetadataResolver() {
896         return new DefaultMetadataResolver(
897                 getRepositoryEventDispatcher(),
898                 getUpdateCheckManager(),
899                 getRepositoryConnectorProvider(),
900                 getRemoteRepositoryManager(),
901                 getSyncContextFactory(),
902                 getOfflineController(),
903                 getRemoteRepositoryFilterManager(),
904                 getPathProcessor());
905     }
906 
907     private VersionScheme versionScheme;
908 
909     public final VersionScheme getVersionScheme() {
910         checkClosed();
911         if (versionScheme == null) {
912             versionScheme = createVersionScheme();
913         }
914         return versionScheme;
915     }
916 
917     protected VersionScheme createVersionScheme() {
918         return new GenericVersionScheme();
919     }
920 
921     private Map<String, ArtifactGeneratorFactory> artifactGeneratorFactories;
922 
923     public final Map<String, ArtifactGeneratorFactory> getArtifactGeneratorFactories() {
924         checkClosed();
925         if (artifactGeneratorFactories == null) {
926             artifactGeneratorFactories = createArtifactGeneratorFactories();
927         }
928         return artifactGeneratorFactories;
929     }
930 
931     protected Map<String, ArtifactGeneratorFactory> createArtifactGeneratorFactories() {
932         // by default none, this is extension point
933         return new HashMap<>();
934     }
935 
936     private Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories;
937 
938     public final Map<String, ArtifactDecoratorFactory> getArtifactDecoratorFactories() {
939         checkClosed();
940         if (artifactDecoratorFactories == null) {
941             artifactDecoratorFactories = createArtifactDecoratorFactories();
942         }
943         return artifactDecoratorFactories;
944     }
945 
946     protected Map<String, ArtifactDecoratorFactory> createArtifactDecoratorFactories() {
947         // by default none, this is extension point
948         return new HashMap<>();
949     }
950 
951     // Maven provided
952 
953     private Map<String, ArtifactTransformer> artifactTransformers;
954 
955     public final Map<String, ArtifactTransformer> getArtifactTransformers() {
956         checkClosed();
957         if (artifactTransformers == null) {
958             artifactTransformers = createArtifactTransformers();
959         }
960         return artifactTransformers;
961     }
962 
963     protected Map<String, ArtifactTransformer> createArtifactTransformers() {
964         return new HashMap<>();
965     }
966 
967     private Map<String, MetadataGeneratorFactory> metadataGeneratorFactories;
968 
969     public final Map<String, MetadataGeneratorFactory> getMetadataGeneratorFactories() {
970         checkClosed();
971         if (metadataGeneratorFactories == null) {
972             metadataGeneratorFactories = createMetadataGeneratorFactories();
973         }
974         return metadataGeneratorFactories;
975     }
976 
977     protected Map<String, MetadataGeneratorFactory> createMetadataGeneratorFactories() {
978         // from maven-resolver-provider
979         HashMap<String, MetadataGeneratorFactory> result = new HashMap<>();
980         result.put(PluginsMetadataGeneratorFactory.NAME, new PluginsMetadataGeneratorFactory());
981         result.put(VersionsMetadataGeneratorFactory.NAME, new VersionsMetadataGeneratorFactory());
982         result.put(SnapshotMetadataGeneratorFactory.NAME, new SnapshotMetadataGeneratorFactory());
983         return result;
984     }
985 
986     private LinkedHashMap<String, MavenArtifactRelocationSource> artifactRelocationSources;
987 
988     public final LinkedHashMap<String, MavenArtifactRelocationSource> getMavenArtifactRelocationSources() {
989         checkClosed();
990         if (artifactRelocationSources == null) {
991             artifactRelocationSources = createMavenArtifactRelocationSources();
992         }
993         return artifactRelocationSources;
994     }
995 
996     protected LinkedHashMap<String, MavenArtifactRelocationSource> createMavenArtifactRelocationSources() {
997         // from maven-resolver-provider
998         LinkedHashMap<String, MavenArtifactRelocationSource> result = new LinkedHashMap<>();
999         result.put(UserPropertiesArtifactRelocationSource.NAME, new UserPropertiesArtifactRelocationSource());
1000         result.put(
1001                 DistributionManagementArtifactRelocationSource.NAME,
1002                 new DistributionManagementArtifactRelocationSource());
1003         return result;
1004     }
1005 
1006     private ArtifactDescriptorReader artifactDescriptorReader;
1007 
1008     public final ArtifactDescriptorReader getArtifactDescriptorReader() {
1009         checkClosed();
1010         if (artifactDescriptorReader == null) {
1011             artifactDescriptorReader = createArtifactDescriptorReader();
1012         }
1013         return artifactDescriptorReader;
1014     }
1015 
1016     protected ArtifactDescriptorReader createArtifactDescriptorReader() {
1017         // from maven-resolver-provider
1018         return new DefaultArtifactDescriptorReader(
1019                 getRemoteRepositoryManager(),
1020                 getVersionResolver(),
1021                 getVersionRangeResolver(),
1022                 getArtifactResolver(),
1023                 getModelBuilder(),
1024                 getRepositoryEventDispatcher(),
1025                 getModelCacheFactory(),
1026                 getMavenArtifactRelocationSources());
1027     }
1028 
1029     private VersionResolver versionResolver;
1030 
1031     public final VersionResolver getVersionResolver() {
1032         checkClosed();
1033         if (versionResolver == null) {
1034             versionResolver = createVersionResolver();
1035         }
1036         return versionResolver;
1037     }
1038 
1039     protected VersionResolver createVersionResolver() {
1040         // from maven-resolver-provider
1041         return new DefaultVersionResolver(
1042                 getMetadataResolver(), getSyncContextFactory(), getRepositoryEventDispatcher());
1043     }
1044 
1045     private VersionRangeResolver versionRangeResolver;
1046 
1047     public final VersionRangeResolver getVersionRangeResolver() {
1048         checkClosed();
1049         if (versionRangeResolver == null) {
1050             versionRangeResolver = createVersionRangeResolver();
1051         }
1052         return versionRangeResolver;
1053     }
1054 
1055     protected VersionRangeResolver createVersionRangeResolver() {
1056         // from maven-resolver-provider
1057         return new DefaultVersionRangeResolver(
1058                 getMetadataResolver(), getSyncContextFactory(), getRepositoryEventDispatcher(), getVersionScheme());
1059     }
1060 
1061     private ModelBuilder modelBuilder;
1062 
1063     public final ModelBuilder getModelBuilder() {
1064         checkClosed();
1065         if (modelBuilder == null) {
1066             modelBuilder = createModelBuilder();
1067         }
1068         return modelBuilder;
1069     }
1070 
1071     protected ModelBuilder createModelBuilder() {
1072         // from maven-model-builder
1073         return new DefaultModelBuilderFactory().newInstance();
1074     }
1075 
1076     private ModelCacheFactory modelCacheFactory;
1077 
1078     public final ModelCacheFactory getModelCacheFactory() {
1079         checkClosed();
1080         if (modelCacheFactory == null) {
1081             modelCacheFactory = createModelCacheFactory();
1082         }
1083         return modelCacheFactory;
1084     }
1085 
1086     protected ModelCacheFactory createModelCacheFactory() {
1087         // from maven-resolver-provider
1088         return new DefaultModelCacheFactory();
1089     }
1090 
1091     private List<ValidatorFactory> validatorFactories;
1092 
1093     public final List<ValidatorFactory> getValidatorFactories() {
1094         checkClosed();
1095         if (validatorFactories == null) {
1096             validatorFactories = createValidatorFactories();
1097         }
1098         return validatorFactories;
1099     }
1100 
1101     protected List<ValidatorFactory> createValidatorFactories() {
1102         return new ArrayList<>();
1103     }
1104 
1105     private RepositorySystemValidator repositorySystemValidator;
1106 
1107     public final RepositorySystemValidator getRepositorySystemValidator() {
1108         checkClosed();
1109         if (repositorySystemValidator == null) {
1110             repositorySystemValidator = createRepositorySystemValidator();
1111         }
1112         return repositorySystemValidator;
1113     }
1114 
1115     protected RepositorySystemValidator createRepositorySystemValidator() {
1116         return new DefaultRepositorySystemValidator(getValidatorFactories());
1117     }
1118 
1119     private RepositorySystem repositorySystem;
1120 
1121     public final RepositorySystem getRepositorySystem() {
1122         checkClosed();
1123         if (repositorySystem == null) {
1124             repositorySystem = createRepositorySystem();
1125         }
1126         return repositorySystem;
1127     }
1128 
1129     protected RepositorySystem createRepositorySystem() {
1130         return new DefaultRepositorySystem(
1131                 getVersionResolver(),
1132                 getVersionRangeResolver(),
1133                 getArtifactResolver(),
1134                 getMetadataResolver(),
1135                 getArtifactDescriptorReader(),
1136                 getDependencyCollector(),
1137                 getInstaller(),
1138                 getDeployer(),
1139                 getLocalRepositoryProvider(),
1140                 getSyncContextFactory(),
1141                 getRemoteRepositoryManager(),
1142                 getRepositorySystemLifecycle(),
1143                 getArtifactDecoratorFactories(),
1144                 getRepositorySystemValidator());
1145     }
1146 
1147     @Override
1148     public RepositorySystem get() {
1149         return getRepositorySystem();
1150     }
1151 }