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 import org.eclipse.aether.util.repository.RepositoryIdHelper;
39
40 import static java.util.Objects.requireNonNull;
41
42
43
44
45 class SimpleLocalRepositoryManager implements LocalRepositoryManager {
46
47 protected final LocalRepository repository;
48
49 protected final LocalPathComposer localPathComposer;
50
51 protected final RepositoryKeyFunction simpleRepositoryKeyFunction;
52
53 SimpleLocalRepositoryManager(Path basePath, String type, LocalPathComposer localPathComposer) {
54 requireNonNull(basePath, "base directory cannot be null");
55 repository = new LocalRepository(basePath.toAbsolutePath(), type);
56 this.localPathComposer = requireNonNull(localPathComposer);
57 this.simpleRepositoryKeyFunction =
58 RepositoryIdHelper.getRepositoryKeyFunction(RepositoryIdHelper.RepositoryKeyType.SIMPLE.name());
59 }
60
61 @Override
62 public LocalRepository getRepository() {
63 return repository;
64 }
65
66 @Override
67 public String getPathForLocalArtifact(Artifact artifact) {
68 requireNonNull(artifact, "artifact cannot be null");
69 return localPathComposer.getPathForArtifact(artifact, true);
70 }
71
72 @Override
73 public String getPathForRemoteArtifact(Artifact artifact, RemoteRepository repository, String context) {
74 requireNonNull(artifact, "artifact cannot be null");
75 requireNonNull(repository, "repository cannot be null");
76 return localPathComposer.getPathForArtifact(artifact, false);
77 }
78
79 @Override
80 public String getPathForLocalMetadata(Metadata metadata) {
81 requireNonNull(metadata, "metadata cannot be null");
82 return localPathComposer.getPathForMetadata(metadata, LocalRepository.ID);
83 }
84
85 @Override
86 public String getPathForRemoteMetadata(Metadata metadata, RemoteRepository repository, String context) {
87 requireNonNull(metadata, "metadata cannot be null");
88 requireNonNull(repository, "repository cannot be null");
89 return localPathComposer.getPathForMetadata(metadata, simpleRepositoryKeyFunction.apply(repository, context));
90 }
91
92 @Override
93 public LocalArtifactResult find(RepositorySystemSession session, LocalArtifactRequest request) {
94 requireNonNull(session, "session cannot be null");
95 requireNonNull(request, "request cannot be null");
96 Artifact artifact = request.getArtifact();
97 LocalArtifactResult result = new LocalArtifactResult(request);
98
99 Path filePath;
100
101
102 if (Objects.equals(artifact.getVersion(), artifact.getBaseVersion())) {
103 filePath = getAbsolutePathForLocalArtifact(artifact);
104 if (Files.isRegularFile(filePath)) {
105 result.setPath(filePath);
106 result.setAvailable(true);
107 }
108 }
109
110 if (!result.isAvailable()) {
111 for (RemoteRepository repository : request.getRepositories()) {
112 filePath = getAbsolutePathForRemoteArtifact(artifact, repository, request.getContext());
113 if (Files.isRegularFile(filePath)) {
114 result.setPath(filePath);
115 result.setAvailable(true);
116 break;
117 }
118 }
119 }
120
121 return result;
122 }
123
124 @Override
125 public void add(RepositorySystemSession session, LocalArtifactRegistration request) {
126 requireNonNull(session, "session cannot be null");
127 requireNonNull(request, "request cannot be null");
128
129 }
130
131 @Override
132 public LocalMetadataResult find(RepositorySystemSession session, LocalMetadataRequest request) {
133 requireNonNull(session, "session cannot be null");
134 requireNonNull(request, "request cannot be null");
135 LocalMetadataResult result = new LocalMetadataResult(request);
136
137 String path;
138
139 Metadata metadata = request.getMetadata();
140 String context = request.getContext();
141 RemoteRepository remote = request.getRepository();
142
143 if (remote != null) {
144 path = getPathForRemoteMetadata(metadata, remote, context);
145 } else {
146 path = getPathForLocalMetadata(metadata);
147 }
148
149 Path filePath = getRepository().getBasePath().resolve(path);
150 if (Files.isRegularFile(filePath)) {
151 result.setPath(filePath);
152 }
153
154 return result;
155 }
156
157 @Override
158 public void add(RepositorySystemSession session, LocalMetadataRegistration request) {
159 requireNonNull(session, "session cannot be null");
160 requireNonNull(request, "request cannot be null");
161
162 }
163
164 @Override
165 public String toString() {
166 return String.valueOf(getRepository());
167 }
168 }