1 package org.eclipse.aether;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.Map;
25 import static java.util.Objects.requireNonNull;
26
27 import java.util.Collection;
28
29 import org.eclipse.aether.artifact.Artifact;
30 import org.eclipse.aether.artifact.ArtifactType;
31 import org.eclipse.aether.artifact.ArtifactTypeRegistry;
32 import org.eclipse.aether.collection.DependencyGraphTransformer;
33 import org.eclipse.aether.collection.DependencyManager;
34 import org.eclipse.aether.collection.DependencySelector;
35 import org.eclipse.aether.collection.DependencyTraverser;
36 import org.eclipse.aether.collection.VersionFilter;
37 import org.eclipse.aether.repository.Authentication;
38 import org.eclipse.aether.repository.AuthenticationSelector;
39 import org.eclipse.aether.repository.LocalRepository;
40 import org.eclipse.aether.repository.LocalRepositoryManager;
41 import org.eclipse.aether.repository.MirrorSelector;
42 import org.eclipse.aether.repository.Proxy;
43 import org.eclipse.aether.repository.ProxySelector;
44 import org.eclipse.aether.repository.RemoteRepository;
45 import org.eclipse.aether.repository.RepositoryPolicy;
46 import org.eclipse.aether.repository.WorkspaceReader;
47 import org.eclipse.aether.resolution.ArtifactDescriptorPolicy;
48 import org.eclipse.aether.resolution.ResolutionErrorPolicy;
49 import org.eclipse.aether.transfer.TransferListener;
50 import org.eclipse.aether.transform.FileTransformer;
51 import org.eclipse.aether.transform.FileTransformerManager;
52
53
54
55
56
57
58
59
60
61 public final class DefaultRepositorySystemSession
62 implements RepositorySystemSession
63 {
64
65 private boolean readOnly;
66
67 private boolean offline;
68
69 private boolean ignoreArtifactDescriptorRepositories;
70
71 private ResolutionErrorPolicy resolutionErrorPolicy;
72
73 private ArtifactDescriptorPolicy artifactDescriptorPolicy;
74
75 private String checksumPolicy;
76
77 private String updatePolicy;
78
79 private LocalRepositoryManager localRepositoryManager;
80
81 private FileTransformerManager fileTransformerManager;
82
83 private WorkspaceReader workspaceReader;
84
85 private RepositoryListener repositoryListener;
86
87 private TransferListener transferListener;
88
89 private Map<String, String> systemProperties;
90
91 private Map<String, String> systemPropertiesView;
92
93 private Map<String, String> userProperties;
94
95 private Map<String, String> userPropertiesView;
96
97 private Map<String, Object> configProperties;
98
99 private Map<String, Object> configPropertiesView;
100
101 private MirrorSelector mirrorSelector;
102
103 private ProxySelector proxySelector;
104
105 private AuthenticationSelector authenticationSelector;
106
107 private ArtifactTypeRegistry artifactTypeRegistry;
108
109 private DependencyTraverser dependencyTraverser;
110
111 private DependencyManager dependencyManager;
112
113 private DependencySelector dependencySelector;
114
115 private VersionFilter versionFilter;
116
117 private DependencyGraphTransformer dependencyGraphTransformer;
118
119 private SessionData data;
120
121 private RepositoryCache cache;
122
123
124
125
126
127
128 public DefaultRepositorySystemSession()
129 {
130 systemProperties = new HashMap<String, String>();
131 systemPropertiesView = Collections.unmodifiableMap( systemProperties );
132 userProperties = new HashMap<String, String>();
133 userPropertiesView = Collections.unmodifiableMap( userProperties );
134 configProperties = new HashMap<String, Object>();
135 configPropertiesView = Collections.unmodifiableMap( configProperties );
136 mirrorSelector = NullMirrorSelector.INSTANCE;
137 proxySelector = NullProxySelector.INSTANCE;
138 authenticationSelector = NullAuthenticationSelector.INSTANCE;
139 artifactTypeRegistry = NullArtifactTypeRegistry.INSTANCE;
140 fileTransformerManager = NullFileTransformerManager.INSTANCE;
141 data = new DefaultSessionData();
142 }
143
144
145
146
147
148
149
150
151
152 public DefaultRepositorySystemSession( RepositorySystemSession session )
153 {
154 requireNonNull( session, "repository system session cannot be null" );
155
156 setOffline( session.isOffline() );
157 setIgnoreArtifactDescriptorRepositories( session.isIgnoreArtifactDescriptorRepositories() );
158 setResolutionErrorPolicy( session.getResolutionErrorPolicy() );
159 setArtifactDescriptorPolicy( session.getArtifactDescriptorPolicy() );
160 setChecksumPolicy( session.getChecksumPolicy() );
161 setUpdatePolicy( session.getUpdatePolicy() );
162 setLocalRepositoryManager( session.getLocalRepositoryManager() );
163 setWorkspaceReader( session.getWorkspaceReader() );
164 setRepositoryListener( session.getRepositoryListener() );
165 setTransferListener( session.getTransferListener() );
166 setSystemProperties( session.getSystemProperties() );
167 setUserProperties( session.getUserProperties() );
168 setConfigProperties( session.getConfigProperties() );
169 setMirrorSelector( session.getMirrorSelector() );
170 setProxySelector( session.getProxySelector() );
171 setAuthenticationSelector( session.getAuthenticationSelector() );
172 setArtifactTypeRegistry( session.getArtifactTypeRegistry() );
173 setDependencyTraverser( session.getDependencyTraverser() );
174 setDependencyManager( session.getDependencyManager() );
175 setDependencySelector( session.getDependencySelector() );
176 setVersionFilter( session.getVersionFilter() );
177 setDependencyGraphTransformer( session.getDependencyGraphTransformer() );
178 setData( session.getData() );
179 setCache( session.getCache() );
180 }
181
182 public boolean isOffline()
183 {
184 return offline;
185 }
186
187
188
189
190
191
192
193
194 public DefaultRepositorySystemSession setOffline( boolean offline )
195 {
196 failIfReadOnly();
197 this.offline = offline;
198 return this;
199 }
200
201 public boolean isIgnoreArtifactDescriptorRepositories()
202 {
203 return ignoreArtifactDescriptorRepositories;
204 }
205
206
207
208
209
210
211
212
213
214 public DefaultRepositorySystemSession setIgnoreArtifactDescriptorRepositories( boolean ignoreArtifactDescriptorRepositories )
215 {
216 failIfReadOnly();
217 this.ignoreArtifactDescriptorRepositories = ignoreArtifactDescriptorRepositories;
218 return this;
219 }
220
221 public ResolutionErrorPolicy getResolutionErrorPolicy()
222 {
223 return resolutionErrorPolicy;
224 }
225
226
227
228
229
230
231
232
233 public DefaultRepositorySystemSession setResolutionErrorPolicy( ResolutionErrorPolicy resolutionErrorPolicy )
234 {
235 failIfReadOnly();
236 this.resolutionErrorPolicy = resolutionErrorPolicy;
237 return this;
238 }
239
240 public ArtifactDescriptorPolicy getArtifactDescriptorPolicy()
241 {
242 return artifactDescriptorPolicy;
243 }
244
245
246
247
248
249
250
251
252 public DefaultRepositorySystemSession setArtifactDescriptorPolicy( ArtifactDescriptorPolicy artifactDescriptorPolicy )
253 {
254 failIfReadOnly();
255 this.artifactDescriptorPolicy = artifactDescriptorPolicy;
256 return this;
257 }
258
259 public String getChecksumPolicy()
260 {
261 return checksumPolicy;
262 }
263
264
265
266
267
268
269
270
271
272
273
274 public DefaultRepositorySystemSession setChecksumPolicy( String checksumPolicy )
275 {
276 failIfReadOnly();
277 this.checksumPolicy = checksumPolicy;
278 return this;
279 }
280
281 public String getUpdatePolicy()
282 {
283 return updatePolicy;
284 }
285
286
287
288
289
290
291
292
293
294
295
296 public DefaultRepositorySystemSession setUpdatePolicy( String updatePolicy )
297 {
298 failIfReadOnly();
299 this.updatePolicy = updatePolicy;
300 return this;
301 }
302
303 public LocalRepository getLocalRepository()
304 {
305 LocalRepositoryManager lrm = getLocalRepositoryManager();
306 return ( lrm != null ) ? lrm.getRepository() : null;
307 }
308
309 public LocalRepositoryManager getLocalRepositoryManager()
310 {
311 return localRepositoryManager;
312 }
313
314
315
316
317
318
319
320
321 public DefaultRepositorySystemSession setLocalRepositoryManager( LocalRepositoryManager localRepositoryManager )
322 {
323 failIfReadOnly();
324 this.localRepositoryManager = localRepositoryManager;
325 return this;
326 }
327
328 @Override
329 public FileTransformerManager geFileTransformerManager()
330 {
331 return fileTransformerManager;
332 }
333
334 public DefaultRepositorySystemSession setFileTransformerManager( FileTransformerManager fileTransformerManager )
335 {
336 failIfReadOnly();
337 this.fileTransformerManager = fileTransformerManager;
338 if ( this.fileTransformerManager == null )
339 {
340 this.fileTransformerManager = NullFileTransformerManager.INSTANCE;
341 }
342 return this;
343 }
344
345 public WorkspaceReader getWorkspaceReader()
346 {
347 return workspaceReader;
348 }
349
350
351
352
353
354
355
356
357 public DefaultRepositorySystemSession setWorkspaceReader( WorkspaceReader workspaceReader )
358 {
359 failIfReadOnly();
360 this.workspaceReader = workspaceReader;
361 return this;
362 }
363
364 public RepositoryListener getRepositoryListener()
365 {
366 return repositoryListener;
367 }
368
369
370
371
372
373
374
375 public DefaultRepositorySystemSession setRepositoryListener( RepositoryListener repositoryListener )
376 {
377 failIfReadOnly();
378 this.repositoryListener = repositoryListener;
379 return this;
380 }
381
382 public TransferListener getTransferListener()
383 {
384 return transferListener;
385 }
386
387
388
389
390
391
392
393 public DefaultRepositorySystemSession setTransferListener( TransferListener transferListener )
394 {
395 failIfReadOnly();
396 this.transferListener = transferListener;
397 return this;
398 }
399
400 private <T> Map<String, T> copySafe( Map<?, ?> table, Class<T> valueType )
401 {
402 Map<String, T> map;
403 if ( table == null || table.isEmpty() )
404 {
405 map = new HashMap<String, T>();
406 }
407 else
408 {
409 map = new HashMap<String, T>( (int) ( table.size() / 0.75f ) + 1 );
410 for ( Map.Entry<?, ?> entry : table.entrySet() )
411 {
412 Object key = entry.getKey();
413 if ( key instanceof String )
414 {
415 Object value = entry.getValue();
416 if ( valueType.isInstance( value ) )
417 {
418 map.put( key.toString(), valueType.cast( value ) );
419 }
420 }
421 }
422 }
423 return map;
424 }
425
426 public Map<String, String> getSystemProperties()
427 {
428 return systemPropertiesView;
429 }
430
431
432
433
434
435
436
437
438
439
440
441 public DefaultRepositorySystemSession setSystemProperties( Map<?, ?> systemProperties )
442 {
443 failIfReadOnly();
444 this.systemProperties = copySafe( systemProperties, String.class );
445 systemPropertiesView = Collections.unmodifiableMap( this.systemProperties );
446 return this;
447 }
448
449
450
451
452
453
454
455
456 public DefaultRepositorySystemSession setSystemProperty( String key, String value )
457 {
458 failIfReadOnly();
459 if ( value != null )
460 {
461 systemProperties.put( key, value );
462 }
463 else
464 {
465 systemProperties.remove( key );
466 }
467 return this;
468 }
469
470 public Map<String, String> getUserProperties()
471 {
472 return userPropertiesView;
473 }
474
475
476
477
478
479
480
481
482
483
484
485
486 public DefaultRepositorySystemSession setUserProperties( Map<?, ?> userProperties )
487 {
488 failIfReadOnly();
489 this.userProperties = copySafe( userProperties, String.class );
490 userPropertiesView = Collections.unmodifiableMap( this.userProperties );
491 return this;
492 }
493
494
495
496
497
498
499
500
501 public DefaultRepositorySystemSession setUserProperty( String key, String value )
502 {
503 failIfReadOnly();
504 if ( value != null )
505 {
506 userProperties.put( key, value );
507 }
508 else
509 {
510 userProperties.remove( key );
511 }
512 return this;
513 }
514
515 public Map<String, Object> getConfigProperties()
516 {
517 return configPropertiesView;
518 }
519
520
521
522
523
524
525
526
527
528
529
530 public DefaultRepositorySystemSession setConfigProperties( Map<?, ?> configProperties )
531 {
532 failIfReadOnly();
533 this.configProperties = copySafe( configProperties, Object.class );
534 configPropertiesView = Collections.unmodifiableMap( this.configProperties );
535 return this;
536 }
537
538
539
540
541
542
543
544
545 public DefaultRepositorySystemSession setConfigProperty( String key, Object value )
546 {
547 failIfReadOnly();
548 if ( value != null )
549 {
550 configProperties.put( key, value );
551 }
552 else
553 {
554 configProperties.remove( key );
555 }
556 return this;
557 }
558
559 public MirrorSelector getMirrorSelector()
560 {
561 return mirrorSelector;
562 }
563
564
565
566
567
568
569
570
571
572 public DefaultRepositorySystemSession setMirrorSelector( MirrorSelector mirrorSelector )
573 {
574 failIfReadOnly();
575 this.mirrorSelector = mirrorSelector;
576 if ( this.mirrorSelector == null )
577 {
578 this.mirrorSelector = NullMirrorSelector.INSTANCE;
579 }
580 return this;
581 }
582
583 public ProxySelector getProxySelector()
584 {
585 return proxySelector;
586 }
587
588
589
590
591
592
593
594
595
596
597 public DefaultRepositorySystemSession setProxySelector( ProxySelector proxySelector )
598 {
599 failIfReadOnly();
600 this.proxySelector = proxySelector;
601 if ( this.proxySelector == null )
602 {
603 this.proxySelector = NullProxySelector.INSTANCE;
604 }
605 return this;
606 }
607
608 public AuthenticationSelector getAuthenticationSelector()
609 {
610 return authenticationSelector;
611 }
612
613
614
615
616
617
618
619
620
621
622 public DefaultRepositorySystemSession setAuthenticationSelector( AuthenticationSelector authenticationSelector )
623 {
624 failIfReadOnly();
625 this.authenticationSelector = authenticationSelector;
626 if ( this.authenticationSelector == null )
627 {
628 this.authenticationSelector = NullAuthenticationSelector.INSTANCE;
629 }
630 return this;
631 }
632
633 public ArtifactTypeRegistry getArtifactTypeRegistry()
634 {
635 return artifactTypeRegistry;
636 }
637
638
639
640
641
642
643
644 public DefaultRepositorySystemSession setArtifactTypeRegistry( ArtifactTypeRegistry artifactTypeRegistry )
645 {
646 failIfReadOnly();
647 this.artifactTypeRegistry = artifactTypeRegistry;
648 if ( this.artifactTypeRegistry == null )
649 {
650 this.artifactTypeRegistry = NullArtifactTypeRegistry.INSTANCE;
651 }
652 return this;
653 }
654
655 public DependencyTraverser getDependencyTraverser()
656 {
657 return dependencyTraverser;
658 }
659
660
661
662
663
664
665
666 public DefaultRepositorySystemSession setDependencyTraverser( DependencyTraverser dependencyTraverser )
667 {
668 failIfReadOnly();
669 this.dependencyTraverser = dependencyTraverser;
670 return this;
671 }
672
673 public DependencyManager getDependencyManager()
674 {
675 return dependencyManager;
676 }
677
678
679
680
681
682
683
684 public DefaultRepositorySystemSession setDependencyManager( DependencyManager dependencyManager )
685 {
686 failIfReadOnly();
687 this.dependencyManager = dependencyManager;
688 return this;
689 }
690
691 public DependencySelector getDependencySelector()
692 {
693 return dependencySelector;
694 }
695
696
697
698
699
700
701
702 public DefaultRepositorySystemSession setDependencySelector( DependencySelector dependencySelector )
703 {
704 failIfReadOnly();
705 this.dependencySelector = dependencySelector;
706 return this;
707 }
708
709 public VersionFilter getVersionFilter()
710 {
711 return versionFilter;
712 }
713
714
715
716
717
718
719
720
721 public DefaultRepositorySystemSession setVersionFilter( VersionFilter versionFilter )
722 {
723 failIfReadOnly();
724 this.versionFilter = versionFilter;
725 return this;
726 }
727
728 public DependencyGraphTransformer getDependencyGraphTransformer()
729 {
730 return dependencyGraphTransformer;
731 }
732
733
734
735
736
737
738
739
740 public DefaultRepositorySystemSession setDependencyGraphTransformer( DependencyGraphTransformer dependencyGraphTransformer )
741 {
742 failIfReadOnly();
743 this.dependencyGraphTransformer = dependencyGraphTransformer;
744 return this;
745 }
746
747 public SessionData getData()
748 {
749 return data;
750 }
751
752
753
754
755
756
757
758 public DefaultRepositorySystemSession setData( SessionData data )
759 {
760 failIfReadOnly();
761 this.data = data;
762 if ( this.data == null )
763 {
764 this.data = new DefaultSessionData();
765 }
766 return this;
767 }
768
769 public RepositoryCache getCache()
770 {
771 return cache;
772 }
773
774
775
776
777
778
779
780 public DefaultRepositorySystemSession setCache( RepositoryCache cache )
781 {
782 failIfReadOnly();
783 this.cache = cache;
784 return this;
785 }
786
787
788
789
790
791
792 public void setReadOnly()
793 {
794 readOnly = true;
795 }
796
797 private void failIfReadOnly()
798 {
799 if ( readOnly )
800 {
801 throw new IllegalStateException( "repository system session is read-only" );
802 }
803 }
804
805 static class NullProxySelector
806 implements ProxySelector
807 {
808
809 public static final ProxySelector INSTANCE = new NullProxySelector();
810
811 public Proxy getProxy( RemoteRepository repository )
812 {
813 return repository.getProxy();
814 }
815
816 }
817
818 static class NullMirrorSelector
819 implements MirrorSelector
820 {
821
822 public static final MirrorSelector INSTANCE = new NullMirrorSelector();
823
824 public RemoteRepository getMirror( RemoteRepository repository )
825 {
826 return null;
827 }
828
829 }
830
831 static class NullAuthenticationSelector
832 implements AuthenticationSelector
833 {
834
835 public static final AuthenticationSelector INSTANCE = new NullAuthenticationSelector();
836
837 public Authentication getAuthentication( RemoteRepository repository )
838 {
839 return repository.getAuthentication();
840 }
841
842 }
843
844 static final class NullArtifactTypeRegistry
845 implements ArtifactTypeRegistry
846 {
847
848 public static final ArtifactTypeRegistry INSTANCE = new NullArtifactTypeRegistry();
849
850 public ArtifactType get( String typeId )
851 {
852 return null;
853 }
854
855 }
856
857 static final class NullFileTransformerManager implements FileTransformerManager
858 {
859 public static final FileTransformerManager INSTANCE = new NullFileTransformerManager();
860
861 @Override
862 public Collection<FileTransformer> getTransformersForArtifact( Artifact artifact )
863 {
864 return Collections.emptyList();
865 }
866 }
867
868 }