1 package org.eclipse.aether.internal.impl;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.inject.Inject;
23 import javax.inject.Named;
24 import javax.inject.Singleton;
25
26 import org.eclipse.aether.RepositorySystemSession;
27 import org.eclipse.aether.repository.LocalRepository;
28 import org.eclipse.aether.repository.LocalRepositoryManager;
29 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
30 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
31 import org.eclipse.aether.spi.locator.Service;
32 import org.eclipse.aether.spi.locator.ServiceLocator;
33 import org.eclipse.aether.util.ConfigUtils;
34
35 import static java.util.Objects.requireNonNull;
36
37
38
39
40
41
42
43
44 @Singleton
45 @Named( "enhanced" )
46 public class EnhancedLocalRepositoryManagerFactory
47 implements LocalRepositoryManagerFactory, Service
48 {
49 private static final String CONFIG_PROP_TRACKING_FILENAME = "aether.enhancedLocalRepository.trackingFilename";
50
51 private static final String DEFAULT_TRACKING_FILENAME = "_remote.repositories";
52
53 private float priority = 10.0f;
54
55 private LocalPathComposer localPathComposer;
56
57 private TrackingFileManager trackingFileManager;
58
59 private LocalPathPrefixComposerFactory localPathPrefixComposerFactory;
60
61 public EnhancedLocalRepositoryManagerFactory()
62 {
63
64 }
65
66 @Inject
67 public EnhancedLocalRepositoryManagerFactory( final LocalPathComposer localPathComposer,
68 final TrackingFileManager trackingFileManager,
69 final LocalPathPrefixComposerFactory localPathPrefixComposerFactory )
70 {
71 this.localPathComposer = requireNonNull( localPathComposer );
72 this.trackingFileManager = requireNonNull( trackingFileManager );
73 this.localPathPrefixComposerFactory = requireNonNull( localPathPrefixComposerFactory );
74 }
75
76 @Override
77 public void initService( final ServiceLocator locator )
78 {
79 this.localPathComposer = requireNonNull( locator.getService( LocalPathComposer.class ) );
80 this.trackingFileManager = requireNonNull( locator.getService( TrackingFileManager.class ) );
81 this.localPathPrefixComposerFactory = new DefaultLocalPathPrefixComposerFactory();
82 }
83
84 @Override
85 public LocalRepositoryManager newInstance( RepositorySystemSession session, LocalRepository repository )
86 throws NoLocalRepositoryManagerException
87 {
88 requireNonNull( session, "session cannot be null" );
89 requireNonNull( repository, "repository cannot be null" );
90
91 String trackingFilename = ConfigUtils.getString( session, "", CONFIG_PROP_TRACKING_FILENAME );
92 if ( trackingFilename.isEmpty() || trackingFilename.contains( "/" ) || trackingFilename.contains( "\\" )
93 || trackingFilename.contains( ".." ) )
94 {
95 trackingFilename = DEFAULT_TRACKING_FILENAME;
96 }
97
98 if ( "".equals( repository.getContentType() ) || "default".equals( repository.getContentType() ) )
99 {
100 return new EnhancedLocalRepositoryManager(
101 repository.getBasedir(),
102 localPathComposer,
103 trackingFilename,
104 trackingFileManager,
105 localPathPrefixComposerFactory.createComposer( session )
106 );
107 }
108 else
109 {
110 throw new NoLocalRepositoryManagerException( repository );
111 }
112 }
113
114 @Override
115 public float getPriority()
116 {
117 return priority;
118 }
119
120
121
122
123
124
125
126 public EnhancedLocalRepositoryManagerFactory setPriority( float priority )
127 {
128 this.priority = priority;
129 return this;
130 }
131
132 }