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