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