1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.internal.impl;
20
21 import java.nio.file.Files;
22 import java.nio.file.Path;
23 import java.util.Objects;
24
25 import org.eclipse.aether.RepositorySystemSession;
26 import org.eclipse.aether.artifact.Artifact;
27 import org.eclipse.aether.metadata.Metadata;
28 import org.eclipse.aether.repository.LocalArtifactRegistration;
29 import org.eclipse.aether.repository.LocalArtifactRequest;
30 import org.eclipse.aether.repository.LocalArtifactResult;
31 import org.eclipse.aether.repository.LocalMetadataRegistration;
32 import org.eclipse.aether.repository.LocalMetadataRequest;
33 import org.eclipse.aether.repository.LocalMetadataResult;
34 import org.eclipse.aether.repository.LocalRepository;
35 import org.eclipse.aether.repository.LocalRepositoryManager;
36 import org.eclipse.aether.repository.RemoteRepository;
37 import org.eclipse.aether.repository.RepositoryKeyFunction;
38
39 import static java.util.Objects.requireNonNull;
40
41
42
43
44 class SimpleLocalRepositoryManager implements LocalRepositoryManager {
45
46 private final LocalRepository repository;
47
48 private final LocalPathComposer localPathComposer;
49
50 private final RepositoryKeyFunction repositoryKeyFunction;
51
52 SimpleLocalRepositoryManager(
53 Path basePath,
54 String type,
55 LocalPathComposer localPathComposer,
56 RepositoryKeyFunction repositoryKeyFunction) {
57 requireNonNull(basePath, "base directory cannot be null");
58 repository = new LocalRepository(basePath.toAbsolutePath(), type);
59 this.localPathComposer = requireNonNull(localPathComposer);
60 this.repositoryKeyFunction = requireNonNull(repositoryKeyFunction);
61 }
62
63 @Override
64 public LocalRepository getRepository() {
65 return repository;
66 }
67
68 @Override
69 public String getPathForLocalArtifact(Artifact artifact) {
70 requireNonNull(artifact, "artifact cannot be null");
71 return localPathComposer.getPathForArtifact(artifact, true);
72 }
73
74 @Override
75 public String getPathForRemoteArtifact(Artifact artifact, RemoteRepository repository, String context) {
76 requireNonNull(artifact, "artifact cannot be null");
77 requireNonNull(repository, "repository cannot be null");
78 return localPathComposer.getPathForArtifact(artifact, false);
79 }
80
81 @Override
82 public String getPathForLocalMetadata(Metadata metadata) {
83 requireNonNull(metadata, "metadata cannot be null");
84 return localPathComposer.getPathForMetadata(metadata, LocalRepository.ID);
85 }
86
87 @Override
88 public String getPathForRemoteMetadata(Metadata metadata, RemoteRepository repository, String context) {
89 requireNonNull(metadata, "metadata cannot be null");
90 requireNonNull(repository, "repository cannot be null");
91 return localPathComposer.getPathForMetadata(metadata, getRepositoryKey(repository, context));
92 }
93
94
95
96
97
98
99 protected String getRepositoryKey(RemoteRepository repository, String context) {
100 return repositoryKeyFunction.apply(repository, context);
101 }
102
103 @Override
104 public LocalArtifactResult find(RepositorySystemSession session, LocalArtifactRequest request) {
105 requireNonNull(session, "session cannot be null");
106 requireNonNull(request, "request cannot be null");
107 Artifact artifact = request.getArtifact();
108 LocalArtifactResult result = new LocalArtifactResult(request);
109
110 Path filePath;
111
112
113 if (Objects.equals(artifact.getVersion(), artifact.getBaseVersion())) {
114 filePath = getAbsolutePathForLocalArtifact(artifact);
115 if (Files.isRegularFile(filePath)) {
116 result.setPath(filePath);
117 result.setAvailable(true);
118 }
119 }
120
121 if (!result.isAvailable()) {
122 for (RemoteRepository repository : request.getRepositories()) {
123 filePath = getAbsolutePathForRemoteArtifact(artifact, repository, request.getContext());
124 if (Files.isRegularFile(filePath)) {
125 result.setPath(filePath);
126 result.setAvailable(true);
127 break;
128 }
129 }
130 }
131
132 return result;
133 }
134
135 @Override
136 public void add(RepositorySystemSession session, LocalArtifactRegistration request) {
137 requireNonNull(session, "session cannot be null");
138 requireNonNull(request, "request cannot be null");
139
140 }
141
142 @Override
143 public LocalMetadataResult find(RepositorySystemSession session, LocalMetadataRequest request) {
144 requireNonNull(session, "session cannot be null");
145 requireNonNull(request, "request cannot be null");
146 LocalMetadataResult result = new LocalMetadataResult(request);
147
148 String path;
149
150 Metadata metadata = request.getMetadata();
151 String context = request.getContext();
152 RemoteRepository remote = request.getRepository();
153
154 if (remote != null) {
155 path = getPathForRemoteMetadata(metadata, remote, context);
156 } else {
157 path = getPathForLocalMetadata(metadata);
158 }
159
160 Path filePath = getRepository().getBasePath().resolve(path);
161 if (Files.isRegularFile(filePath)) {
162 result.setPath(filePath);
163 }
164
165 return result;
166 }
167
168 @Override
169 public void add(RepositorySystemSession session, LocalMetadataRegistration request) {
170 requireNonNull(session, "session cannot be null");
171 requireNonNull(request, "request cannot be null");
172
173 }
174
175 @Override
176 public String toString() {
177 return String.valueOf(getRepository());
178 }
179 }