View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.eclipse.aether.internal.test.util;
20  
21  import java.io.File;
22  import java.io.IOException;
23  import java.nio.file.Files;
24  import java.nio.file.Path;
25  import java.util.HashSet;
26  import java.util.Set;
27  
28  import org.eclipse.aether.RepositorySystemSession;
29  import org.eclipse.aether.artifact.Artifact;
30  import org.eclipse.aether.metadata.Metadata;
31  import org.eclipse.aether.repository.LocalArtifactRegistration;
32  import org.eclipse.aether.repository.LocalArtifactRequest;
33  import org.eclipse.aether.repository.LocalArtifactResult;
34  import org.eclipse.aether.repository.LocalMetadataRegistration;
35  import org.eclipse.aether.repository.LocalMetadataRequest;
36  import org.eclipse.aether.repository.LocalMetadataResult;
37  import org.eclipse.aether.repository.LocalRepository;
38  import org.eclipse.aether.repository.LocalRepositoryManager;
39  import org.eclipse.aether.repository.RemoteRepository;
40  
41  import static java.util.Objects.requireNonNull;
42  
43  /**
44   * A simplistic local repository manager that uses a temporary base directory.
45   */
46  public class TestLocalRepositoryManager implements LocalRepositoryManager {
47  
48      private LocalRepository localRepository;
49  
50      private final Set<Artifact> unavailableArtifacts = new HashSet<>();
51  
52      private final Set<Artifact> artifactRegistrations = new HashSet<>();
53  
54      private final Set<Metadata> metadataRegistrations = new HashSet<>();
55  
56      public TestLocalRepositoryManager() {
57          try {
58              Path tempDirectory = Files.createTempDirectory("test-local-repo");
59              tempDirectory.toFile().deleteOnExit();
60              localRepository = new LocalRepository(tempDirectory);
61          } catch (IOException e) {
62              throw new IllegalStateException(e);
63          }
64      }
65  
66      public LocalRepository getRepository() {
67          return localRepository;
68      }
69  
70      public String getPathForLocalArtifact(Artifact artifact) {
71          requireNonNull(artifact, "artifact cannot be null");
72  
73          String artifactId = artifact.getArtifactId();
74          String groupId = artifact.getGroupId();
75          String extension = artifact.getExtension();
76          String version = artifact.getVersion();
77          String classifier = artifact.getClassifier();
78  
79          return String.format(
80                  "%s/%s/%s/%s-%s-%s%s.%s",
81                  groupId, artifactId, version, groupId, artifactId, version, classifier, extension);
82      }
83  
84      public String getPathForRemoteArtifact(Artifact artifact, RemoteRepository repository, String context) {
85          requireNonNull(artifact, "artifact cannot be null");
86          requireNonNull(repository, "repository cannot be null");
87  
88          return getPathForLocalArtifact(artifact);
89      }
90  
91      public String getPathForLocalMetadata(Metadata metadata) {
92          requireNonNull(metadata, "metadata cannot be null");
93  
94          String artifactId = metadata.getArtifactId();
95          String groupId = metadata.getGroupId();
96          String version = metadata.getVersion();
97          return String.format("%s/%s/%s/%s-%s-%s.xml", groupId, artifactId, version, groupId, artifactId, version);
98      }
99  
100     public String getPathForRemoteMetadata(Metadata metadata, RemoteRepository repository, String context) {
101         requireNonNull(metadata, "metadata cannot be null");
102         requireNonNull(repository, "repository cannot be null");
103 
104         return getPathForLocalMetadata(metadata);
105     }
106 
107     public LocalArtifactResult find(RepositorySystemSession session, LocalArtifactRequest request) {
108         requireNonNull(session, "session cannot be null");
109         requireNonNull(request, "request cannot be null");
110 
111         Artifact artifact = request.getArtifact();
112 
113         LocalArtifactResult result = new LocalArtifactResult(request);
114         File file = new File(localRepository.getBasedir(), getPathForLocalArtifact(artifact));
115         result.setFile(file.isFile() ? file : null);
116         result.setAvailable(file.isFile() && !unavailableArtifacts.contains(artifact));
117 
118         return result;
119     }
120 
121     public void add(RepositorySystemSession session, LocalArtifactRegistration request) {
122         requireNonNull(session, "session cannot be null");
123         requireNonNull(request, "request cannot be null");
124 
125         artifactRegistrations.add(request.getArtifact());
126     }
127 
128     public LocalMetadataResult find(RepositorySystemSession session, LocalMetadataRequest request) {
129         requireNonNull(session, "session cannot be null");
130         requireNonNull(request, "request cannot be null");
131 
132         Metadata metadata = request.getMetadata();
133 
134         LocalMetadataResult result = new LocalMetadataResult(request);
135         File file = new File(localRepository.getBasedir(), getPathForLocalMetadata(metadata));
136         result.setFile(file.isFile() ? file : null);
137 
138         return result;
139     }
140 
141     public void add(RepositorySystemSession session, LocalMetadataRegistration request) {
142         requireNonNull(session, "session cannot be null");
143         requireNonNull(request, "request cannot be null");
144 
145         metadataRegistrations.add(request.getMetadata());
146     }
147 
148     public Set<Artifact> getArtifactRegistration() {
149         return artifactRegistrations;
150     }
151 
152     public Set<Metadata> getMetadataRegistration() {
153         return metadataRegistrations;
154     }
155 
156     public void setArtifactAvailability(Artifact artifact, boolean available) {
157         if (available) {
158             unavailableArtifacts.remove(artifact);
159         } else {
160             unavailableArtifacts.add(artifact);
161         }
162     }
163 }