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()));
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(getLocalPathComposer(), getRepositorySystemLifecycle()));
594         return result;
595     }
596 
597     private Map<String, ProvidedChecksumsSource> providedChecksumsSources;
598 
599     public final Map<String, ProvidedChecksumsSource> getProvidedChecksumsSources() {
600         checkClosed();
601         if (providedChecksumsSources == null) {
602             providedChecksumsSources = createProvidedChecksumsSources();
603         }
604         return providedChecksumsSources;
605     }
606 
607     protected Map<String, ProvidedChecksumsSource> createProvidedChecksumsSources() {
608         HashMap<String, ProvidedChecksumsSource> result = new HashMap<>();
609         result.put(
610                 TrustedToProvidedChecksumsSourceAdapter.NAME,
611                 new TrustedToProvidedChecksumsSourceAdapter(getTrustedChecksumsSources()));
612         return result;
613     }
614 
615     private Map<String, ChecksumExtractorStrategy> checksumExtractorStrategies;
616 
617     public final Map<String, ChecksumExtractorStrategy> getChecksumExtractorStrategies() {
618         checkClosed();
619         if (checksumExtractorStrategies == null) {
620             checksumExtractorStrategies = createChecksumExtractorStrategies();
621         }
622         return checksumExtractorStrategies;
623     }
624 
625     protected Map<String, ChecksumExtractorStrategy> createChecksumExtractorStrategies() {
626         HashMap<String, ChecksumExtractorStrategy> result = new HashMap<>();
627         result.put(XChecksumExtractor.NAME, new XChecksumExtractor());
628         result.put(Nx2ChecksumExtractor.NAME, new Nx2ChecksumExtractor());
629         return result;
630     }
631 
632     private ChecksumExtractor checksumExtractor;
633 
634     public final ChecksumExtractor getChecksumExtractor() {
635         checkClosed();
636         if (checksumExtractor == null) {
637             checksumExtractor = createChecksumExtractor();
638         }
639         return checksumExtractor;
640     }
641 
642     protected ChecksumExtractor createChecksumExtractor() {
643         return new DefaultChecksumExtractor(getChecksumExtractorStrategies());
644     }
645 
646     private Map<String, TransporterFactory> transporterFactories;
647 
648     public final Map<String, TransporterFactory> getTransporterFactories() {
649         checkClosed();
650         if (transporterFactories == null) {
651             transporterFactories = createTransporterFactories();
652         }
653         return transporterFactories;
654     }
655 
656     protected Map<String, TransporterFactory> createTransporterFactories() {
657         HashMap<String, TransporterFactory> result = new HashMap<>();
658         result.put(FileTransporterFactory.NAME, new FileTransporterFactory());
659         result.put(
660                 ApacheTransporterFactory.NAME,
661                 new ApacheTransporterFactory(getChecksumExtractor(), getPathProcessor()));
662         return result;
663     }
664 
665     private TransporterProvider transporterProvider;
666 
667     public final TransporterProvider getTransporterProvider() {
668         checkClosed();
669         if (transporterProvider == null) {
670             transporterProvider = createTransporterProvider();
671         }
672         return transporterProvider;
673     }
674 
675     protected TransporterProvider createTransporterProvider() {
676         return new DefaultTransporterProvider(getTransporterFactories());
677     }
678 
679     private BasicRepositoryConnectorFactory basicRepositoryConnectorFactory;
680 
681     public final BasicRepositoryConnectorFactory getBasicRepositoryConnectorFactory() {
682         checkClosed();
683         if (basicRepositoryConnectorFactory == null) {
684             basicRepositoryConnectorFactory = createBasicRepositoryConnectorFactory();
685         }
686         return basicRepositoryConnectorFactory;
687     }
688 
689     protected BasicRepositoryConnectorFactory createBasicRepositoryConnectorFactory() {
690         return new BasicRepositoryConnectorFactory(
691                 getTransporterProvider(),
692                 getRepositoryLayoutProvider(),
693                 getChecksumPolicyProvider(),
694                 getChecksumProcessor(),
695                 getProvidedChecksumsSources());
696     }
697 
698     private Map<String, RepositoryConnectorFactory> repositoryConnectorFactories;
699 
700     public final Map<String, RepositoryConnectorFactory> getRepositoryConnectorFactories() {
701         checkClosed();
702         if (repositoryConnectorFactories == null) {
703             repositoryConnectorFactories = createRepositoryConnectorFactories();
704         }
705         return repositoryConnectorFactories;
706     }
707 
708     protected Map<String, RepositoryConnectorFactory> createRepositoryConnectorFactories() {
709         HashMap<String, RepositoryConnectorFactory> result = new HashMap<>();
710         result.put(BasicRepositoryConnectorFactory.NAME, getBasicRepositoryConnectorFactory());
711         return result;
712     }
713 
714     private Map<String, PipelineRepositoryConnectorFactory> pipelineRepositoryConnectorFactories;
715 
716     public final Map<String, PipelineRepositoryConnectorFactory> getPipelineRepositoryConnectorFactories() {
717         checkClosed();
718         if (pipelineRepositoryConnectorFactories == null) {
719             pipelineRepositoryConnectorFactories = createPipelineRepositoryConnectorFactories();
720         }
721         return pipelineRepositoryConnectorFactories;
722     }
723 
724     protected Map<String, PipelineRepositoryConnectorFactory> createPipelineRepositoryConnectorFactories() {
725         HashMap<String, PipelineRepositoryConnectorFactory> result = new HashMap<>();
726         result.put(
727                 FilteringPipelineRepositoryConnectorFactory.NAME,
728                 new FilteringPipelineRepositoryConnectorFactory(getRemoteRepositoryFilterManager()));
729         result.put(
730                 OfflinePipelineRepositoryConnectorFactory.NAME,
731                 new OfflinePipelineRepositoryConnectorFactory(getOfflineController()));
732         return result;
733     }
734 
735     private RepositoryConnectorProvider repositoryConnectorProvider;
736 
737     public final RepositoryConnectorProvider getRepositoryConnectorProvider() {
738         checkClosed();
739         if (repositoryConnectorProvider == null) {
740             repositoryConnectorProvider = createRepositoryConnectorProvider();
741         }
742         return repositoryConnectorProvider;
743     }
744 
745     protected RepositoryConnectorProvider createRepositoryConnectorProvider() {
746         return new DefaultRepositoryConnectorProvider(
747                 getRepositoryConnectorFactories(), getPipelineRepositoryConnectorFactories());
748     }
749 
750     private Installer installer;
751 
752     public final Installer getInstaller() {
753         checkClosed();
754         if (installer == null) {
755             installer = createInstaller();
756         }
757         return installer;
758     }
759 
760     protected Installer createInstaller() {
761         return new DefaultInstaller(
762                 getPathProcessor(),
763                 getRepositoryEventDispatcher(),
764                 getArtifactGeneratorFactories(),
765                 getMetadataGeneratorFactories(),
766                 getArtifactTransformers(),
767                 getSyncContextFactory());
768     }
769 
770     private Deployer deployer;
771 
772     public final Deployer getDeployer() {
773         checkClosed();
774         if (deployer == null) {
775             deployer = createDeployer();
776         }
777         return deployer;
778     }
779 
780     protected Deployer createDeployer() {
781         return new DefaultDeployer(
782                 getPathProcessor(),
783                 getRepositoryEventDispatcher(),
784                 getRepositoryConnectorProvider(),
785                 getRemoteRepositoryManager(),
786                 getUpdateCheckManager(),
787                 getArtifactGeneratorFactories(),
788                 getMetadataGeneratorFactories(),
789                 getArtifactTransformers(),
790                 getSyncContextFactory(),
791                 getOfflineController());
792     }
793 
794     private Map<String, DependencyCollectorDelegate> dependencyCollectorDelegates;
795 
796     public final Map<String, DependencyCollectorDelegate> getDependencyCollectorDelegates() {
797         checkClosed();
798         if (dependencyCollectorDelegates == null) {
799             dependencyCollectorDelegates = createDependencyCollectorDelegates();
800         }
801         return dependencyCollectorDelegates;
802     }
803 
804     protected Map<String, DependencyCollectorDelegate> createDependencyCollectorDelegates() {
805         RemoteRepositoryManager remoteRepositoryManager = getRemoteRepositoryManager();
806         ArtifactDescriptorReader artifactDescriptorReader = getArtifactDescriptorReader();
807         VersionRangeResolver versionRangeResolver = getVersionRangeResolver();
808         HashMap<String, DependencyCollectorDelegate> result = new HashMap<>();
809         result.put(
810                 DfDependencyCollector.NAME,
811                 new DfDependencyCollector(
812                         remoteRepositoryManager,
813                         artifactDescriptorReader,
814                         versionRangeResolver,
815                         getArtifactDecoratorFactories()));
816         result.put(
817                 BfDependencyCollector.NAME,
818                 new BfDependencyCollector(
819                         remoteRepositoryManager,
820                         artifactDescriptorReader,
821                         versionRangeResolver,
822                         getArtifactDecoratorFactories()));
823         return result;
824     }
825 
826     private DependencyCollector dependencyCollector;
827 
828     public final DependencyCollector getDependencyCollector() {
829         checkClosed();
830         if (dependencyCollector == null) {
831             dependencyCollector = createDependencyCollector();
832         }
833         return dependencyCollector;
834     }
835 
836     protected DependencyCollector createDependencyCollector() {
837         return new DefaultDependencyCollector(getDependencyCollectorDelegates());
838     }
839 
840     private Map<String, ArtifactResolverPostProcessor> artifactResolverPostProcessors;
841 
842     public final Map<String, ArtifactResolverPostProcessor> getArtifactResolverPostProcessors() {
843         checkClosed();
844         if (artifactResolverPostProcessors == null) {
845             artifactResolverPostProcessors = createArtifactResolverPostProcessors();
846         }
847         return artifactResolverPostProcessors;
848     }
849 
850     protected Map<String, ArtifactResolverPostProcessor> createArtifactResolverPostProcessors() {
851         HashMap<String, ArtifactResolverPostProcessor> result = new HashMap<>();
852         result.put(
853                 TrustedChecksumsArtifactResolverPostProcessor.NAME,
854                 new TrustedChecksumsArtifactResolverPostProcessor(
855                         getChecksumAlgorithmFactorySelector(), getTrustedChecksumsSources()));
856         return result;
857     }
858 
859     private ArtifactResolver artifactResolver;
860 
861     public final ArtifactResolver getArtifactResolver() {
862         checkClosed();
863         if (artifactResolver == null) {
864             artifactResolver = createArtifactResolver();
865         }
866         return artifactResolver;
867     }
868 
869     protected ArtifactResolver createArtifactResolver() {
870         return new DefaultArtifactResolver(
871                 getPathProcessor(),
872                 getRepositoryEventDispatcher(),
873                 getVersionResolver(),
874                 getUpdateCheckManager(),
875                 getRepositoryConnectorProvider(),
876                 getRemoteRepositoryManager(),
877                 getSyncContextFactory(),
878                 getOfflineController(),
879                 getArtifactResolverPostProcessors(),
880                 getRemoteRepositoryFilterManager());
881     }
882 
883     private MetadataResolver metadataResolver;
884 
885     public final MetadataResolver getMetadataResolver() {
886         checkClosed();
887         if (metadataResolver == null) {
888             metadataResolver = createMetadataResolver();
889         }
890         return metadataResolver;
891     }
892 
893     protected MetadataResolver createMetadataResolver() {
894         return new DefaultMetadataResolver(
895                 getRepositoryEventDispatcher(),
896                 getUpdateCheckManager(),
897                 getRepositoryConnectorProvider(),
898                 getRemoteRepositoryManager(),
899                 getSyncContextFactory(),
900                 getOfflineController(),
901                 getRemoteRepositoryFilterManager(),
902                 getPathProcessor());
903     }
904 
905     private VersionScheme versionScheme;
906 
907     public final VersionScheme getVersionScheme() {
908         checkClosed();
909         if (versionScheme == null) {
910             versionScheme = createVersionScheme();
911         }
912         return versionScheme;
913     }
914 
915     protected VersionScheme createVersionScheme() {
916         return new GenericVersionScheme();
917     }
918 
919     private Map<String, ArtifactGeneratorFactory> artifactGeneratorFactories;
920 
921     public final Map<String, ArtifactGeneratorFactory> getArtifactGeneratorFactories() {
922         checkClosed();
923         if (artifactGeneratorFactories == null) {
924             artifactGeneratorFactories = createArtifactGeneratorFactories();
925         }
926         return artifactGeneratorFactories;
927     }
928 
929     protected Map<String, ArtifactGeneratorFactory> createArtifactGeneratorFactories() {
930         // by default none, this is extension point
931         return new HashMap<>();
932     }
933 
934     private Map<String, ArtifactDecoratorFactory> artifactDecoratorFactories;
935 
936     public final Map<String, ArtifactDecoratorFactory> getArtifactDecoratorFactories() {
937         checkClosed();
938         if (artifactDecoratorFactories == null) {
939             artifactDecoratorFactories = createArtifactDecoratorFactories();
940         }
941         return artifactDecoratorFactories;
942     }
943 
944     protected Map<String, ArtifactDecoratorFactory> createArtifactDecoratorFactories() {
945         // by default none, this is extension point
946         return new HashMap<>();
947     }
948 
949     // Maven provided
950 
951     private Map<String, ArtifactTransformer> artifactTransformers;
952 
953     public final Map<String, ArtifactTransformer> getArtifactTransformers() {
954         checkClosed();
955         if (artifactTransformers == null) {
956             artifactTransformers = createArtifactTransformers();
957         }
958         return artifactTransformers;
959     }
960 
961     protected Map<String, ArtifactTransformer> createArtifactTransformers() {
962         return new HashMap<>();
963     }
964 
965     private Map<String, MetadataGeneratorFactory> metadataGeneratorFactories;
966 
967     public final Map<String, MetadataGeneratorFactory> getMetadataGeneratorFactories() {
968         checkClosed();
969         if (metadataGeneratorFactories == null) {
970             metadataGeneratorFactories = createMetadataGeneratorFactories();
971         }
972         return metadataGeneratorFactories;
973     }
974 
975     protected Map<String, MetadataGeneratorFactory> createMetadataGeneratorFactories() {
976         // from maven-resolver-provider
977         HashMap<String, MetadataGeneratorFactory> result = new HashMap<>();
978         result.put(PluginsMetadataGeneratorFactory.NAME, new PluginsMetadataGeneratorFactory());
979         result.put(VersionsMetadataGeneratorFactory.NAME, new VersionsMetadataGeneratorFactory());
980         result.put(SnapshotMetadataGeneratorFactory.NAME, new SnapshotMetadataGeneratorFactory());
981         return result;
982     }
983 
984     private LinkedHashMap<String, MavenArtifactRelocationSource> artifactRelocationSources;
985 
986     public final LinkedHashMap<String, MavenArtifactRelocationSource> getMavenArtifactRelocationSources() {
987         checkClosed();
988         if (artifactRelocationSources == null) {
989             artifactRelocationSources = createMavenArtifactRelocationSources();
990         }
991         return artifactRelocationSources;
992     }
993 
994     protected LinkedHashMap<String, MavenArtifactRelocationSource> createMavenArtifactRelocationSources() {
995         // from maven-resolver-provider
996         LinkedHashMap<String, MavenArtifactRelocationSource> result = new LinkedHashMap<>();
997         result.put(UserPropertiesArtifactRelocationSource.NAME, new UserPropertiesArtifactRelocationSource());
998         result.put(
999                 DistributionManagementArtifactRelocationSource.NAME,
1000                 new DistributionManagementArtifactRelocationSource());
1001         return result;
1002     }
1003 
1004     private ArtifactDescriptorReader artifactDescriptorReader;
1005 
1006     public final ArtifactDescriptorReader getArtifactDescriptorReader() {
1007         checkClosed();
1008         if (artifactDescriptorReader == null) {
1009             artifactDescriptorReader = createArtifactDescriptorReader();
1010         }
1011         return artifactDescriptorReader;
1012     }
1013 
1014     protected ArtifactDescriptorReader createArtifactDescriptorReader() {
1015         // from maven-resolver-provider
1016         return new DefaultArtifactDescriptorReader(
1017                 getRemoteRepositoryManager(),
1018                 getVersionResolver(),
1019                 getVersionRangeResolver(),
1020                 getArtifactResolver(),
1021                 getModelBuilder(),
1022                 getRepositoryEventDispatcher(),
1023                 getModelCacheFactory(),
1024                 getMavenArtifactRelocationSources());
1025     }
1026 
1027     private VersionResolver versionResolver;
1028 
1029     public final VersionResolver getVersionResolver() {
1030         checkClosed();
1031         if (versionResolver == null) {
1032             versionResolver = createVersionResolver();
1033         }
1034         return versionResolver;
1035     }
1036 
1037     protected VersionResolver createVersionResolver() {
1038         // from maven-resolver-provider
1039         return new DefaultVersionResolver(
1040                 getMetadataResolver(), getSyncContextFactory(), getRepositoryEventDispatcher());
1041     }
1042 
1043     private VersionRangeResolver versionRangeResolver;
1044 
1045     public final VersionRangeResolver getVersionRangeResolver() {
1046         checkClosed();
1047         if (versionRangeResolver == null) {
1048             versionRangeResolver = createVersionRangeResolver();
1049         }
1050         return versionRangeResolver;
1051     }
1052 
1053     protected VersionRangeResolver createVersionRangeResolver() {
1054         // from maven-resolver-provider
1055         return new DefaultVersionRangeResolver(
1056                 getMetadataResolver(), getSyncContextFactory(), getRepositoryEventDispatcher(), getVersionScheme());
1057     }
1058 
1059     private ModelBuilder modelBuilder;
1060 
1061     public final ModelBuilder getModelBuilder() {
1062         checkClosed();
1063         if (modelBuilder == null) {
1064             modelBuilder = createModelBuilder();
1065         }
1066         return modelBuilder;
1067     }
1068 
1069     protected ModelBuilder createModelBuilder() {
1070         // from maven-model-builder
1071         return new DefaultModelBuilderFactory().newInstance();
1072     }
1073 
1074     private ModelCacheFactory modelCacheFactory;
1075 
1076     public final ModelCacheFactory getModelCacheFactory() {
1077         checkClosed();
1078         if (modelCacheFactory == null) {
1079             modelCacheFactory = createModelCacheFactory();
1080         }
1081         return modelCacheFactory;
1082     }
1083 
1084     protected ModelCacheFactory createModelCacheFactory() {
1085         // from maven-resolver-provider
1086         return new DefaultModelCacheFactory();
1087     }
1088 
1089     private List<ValidatorFactory> validatorFactories;
1090 
1091     public final List<ValidatorFactory> getValidatorFactories() {
1092         checkClosed();
1093         if (validatorFactories == null) {
1094             validatorFactories = createValidatorFactories();
1095         }
1096         return validatorFactories;
1097     }
1098 
1099     protected List<ValidatorFactory> createValidatorFactories() {
1100         return new ArrayList<>();
1101     }
1102 
1103     private RepositorySystemValidator repositorySystemValidator;
1104 
1105     public final RepositorySystemValidator getRepositorySystemValidator() {
1106         checkClosed();
1107         if (repositorySystemValidator == null) {
1108             repositorySystemValidator = createRepositorySystemValidator();
1109         }
1110         return repositorySystemValidator;
1111     }
1112 
1113     protected RepositorySystemValidator createRepositorySystemValidator() {
1114         return new DefaultRepositorySystemValidator(getValidatorFactories());
1115     }
1116 
1117     private RepositorySystem repositorySystem;
1118 
1119     public final RepositorySystem getRepositorySystem() {
1120         checkClosed();
1121         if (repositorySystem == null) {
1122             repositorySystem = createRepositorySystem();
1123         }
1124         return repositorySystem;
1125     }
1126 
1127     protected RepositorySystem createRepositorySystem() {
1128         return new DefaultRepositorySystem(
1129                 getVersionResolver(),
1130                 getVersionRangeResolver(),
1131                 getArtifactResolver(),
1132                 getMetadataResolver(),
1133                 getArtifactDescriptorReader(),
1134                 getDependencyCollector(),
1135                 getInstaller(),
1136                 getDeployer(),
1137                 getLocalRepositoryProvider(),
1138                 getSyncContextFactory(),
1139                 getRemoteRepositoryManager(),
1140                 getRepositorySystemLifecycle(),
1141                 getArtifactDecoratorFactories(),
1142                 getRepositorySystemValidator());
1143     }
1144 
1145     @Override
1146     public RepositorySystem get() {
1147         return getRepositorySystem();
1148     }
1149 }