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 java.io.File;
23
24 import static java.util.Objects.requireNonNull;
25
26 import java.util.Objects;
27 import java.util.SortedSet;
28 import java.util.TreeSet;
29
30 import org.eclipse.aether.RepositorySystemSession;
31 import org.eclipse.aether.artifact.Artifact;
32 import org.eclipse.aether.metadata.Metadata;
33 import org.eclipse.aether.repository.LocalArtifactRegistration;
34 import org.eclipse.aether.repository.LocalArtifactRequest;
35 import org.eclipse.aether.repository.LocalArtifactResult;
36 import org.eclipse.aether.repository.LocalMetadataRegistration;
37 import org.eclipse.aether.repository.LocalMetadataRequest;
38 import org.eclipse.aether.repository.LocalMetadataResult;
39 import org.eclipse.aether.repository.LocalRepository;
40 import org.eclipse.aether.repository.LocalRepositoryManager;
41 import org.eclipse.aether.repository.RemoteRepository;
42 import org.eclipse.aether.util.StringDigestUtil;
43
44
45
46
47 class SimpleLocalRepositoryManager
48 implements LocalRepositoryManager
49 {
50
51 private final LocalRepository repository;
52
53 private final LocalPathComposer localPathComposer;
54
55 SimpleLocalRepositoryManager( File basedir, String type, LocalPathComposer localPathComposer )
56 {
57 requireNonNull( basedir, "base directory cannot be null" );
58 repository = new LocalRepository( basedir.getAbsoluteFile(), type );
59 this.localPathComposer = requireNonNull( localPathComposer );
60 }
61
62 @Override
63 public LocalRepository getRepository()
64 {
65 return repository;
66 }
67
68 @Override
69 public String getPathForLocalArtifact( Artifact artifact )
70 {
71 requireNonNull( artifact, "artifact cannot be null" );
72 return localPathComposer.getPathForArtifact( artifact, true );
73 }
74
75 @Override
76 public String getPathForRemoteArtifact( Artifact artifact, RemoteRepository repository, String context )
77 {
78 requireNonNull( artifact, "artifact cannot be null" );
79 requireNonNull( repository, "repository cannot be null" );
80 return localPathComposer.getPathForArtifact( artifact, false );
81 }
82
83 @Override
84 public String getPathForLocalMetadata( Metadata metadata )
85 {
86 requireNonNull( metadata, "metadata cannot be null" );
87 return localPathComposer.getPathForMetadata( metadata, "local" );
88 }
89
90 @Override
91 public String getPathForRemoteMetadata( Metadata metadata, RemoteRepository repository, String context )
92 {
93 requireNonNull( metadata, "metadata cannot be null" );
94 requireNonNull( repository, "repository cannot be null" );
95 return localPathComposer.getPathForMetadata( metadata, getRepositoryKey( repository, context ) );
96 }
97
98
99
100
101
102
103 protected String getRepositoryKey( RemoteRepository repository, String context )
104 {
105 String key;
106
107 if ( repository.isRepositoryManager() )
108 {
109
110
111 StringBuilder buffer = new StringBuilder( 128 );
112
113 buffer.append( repository.getId() );
114
115 buffer.append( '-' );
116
117 SortedSet<String> subKeys = new TreeSet<>();
118 for ( RemoteRepository mirroredRepo : repository.getMirroredRepositories() )
119 {
120 subKeys.add( mirroredRepo.getId() );
121 }
122
123 StringDigestUtil sha1 = StringDigestUtil.sha1();
124 sha1.update( context );
125 for ( String subKey : subKeys )
126 {
127 sha1.update( subKey );
128 }
129 buffer.append( sha1.digest() );
130
131 key = buffer.toString();
132 }
133 else
134 {
135
136
137 key = repository.getId();
138 }
139
140 return key;
141 }
142
143 @Override
144 public LocalArtifactResult find( RepositorySystemSession session, LocalArtifactRequest request )
145 {
146 requireNonNull( session, "session cannot be null" );
147 requireNonNull( request, "request cannot be null" );
148 Artifact artifact = request.getArtifact();
149 LocalArtifactResult result = new LocalArtifactResult( request );
150
151 String path;
152 File file;
153
154
155 if ( Objects.equals( artifact.getVersion(), artifact.getBaseVersion() ) )
156 {
157 path = getPathForLocalArtifact( artifact );
158 file = new File( getRepository().getBasedir(), path );
159 if ( file.isFile() )
160 {
161 result.setFile( file );
162 result.setAvailable( true );
163 }
164 }
165
166 if ( !result.isAvailable() )
167 {
168 for ( RemoteRepository repository : request.getRepositories() )
169 {
170 path = getPathForRemoteArtifact( artifact, repository, request.getContext() );
171 file = new File( getRepository().getBasedir(), path );
172 if ( file.isFile() )
173 {
174 result.setFile( file );
175 result.setAvailable( true );
176 break;
177 }
178 }
179
180 }
181
182 return result;
183 }
184
185 @Override
186 public void add( RepositorySystemSession session, LocalArtifactRegistration request )
187 {
188 requireNonNull( session, "session cannot be null" );
189 requireNonNull( request, "request cannot be null" );
190
191 }
192
193 @Override
194 public LocalMetadataResult find( RepositorySystemSession session, LocalMetadataRequest request )
195 {
196 requireNonNull( session, "session cannot be null" );
197 requireNonNull( request, "request cannot be null" );
198 LocalMetadataResult result = new LocalMetadataResult( request );
199
200 String path;
201
202 Metadata metadata = request.getMetadata();
203 String context = request.getContext();
204 RemoteRepository remote = request.getRepository();
205
206 if ( remote != null )
207 {
208 path = getPathForRemoteMetadata( metadata, remote, context );
209 }
210 else
211 {
212 path = getPathForLocalMetadata( metadata );
213 }
214
215 File file = new File( getRepository().getBasedir(), path );
216 if ( file.isFile() )
217 {
218 result.setFile( file );
219 }
220
221 return result;
222 }
223
224 @Override
225 public void add( RepositorySystemSession session, LocalMetadataRegistration request )
226 {
227 requireNonNull( session, "session cannot be null" );
228 requireNonNull( request, "request cannot be null" );
229
230 }
231
232 @Override
233 public String toString()
234 {
235 return String.valueOf( getRepository() );
236 }
237 }