001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 */ 019package org.eclipse.aether.internal.test.util; 020 021import java.io.File; 022import java.io.IOException; 023import java.nio.file.Files; 024import java.nio.file.Path; 025import java.util.HashSet; 026import java.util.Set; 027 028import org.eclipse.aether.RepositorySystemSession; 029import org.eclipse.aether.artifact.Artifact; 030import org.eclipse.aether.metadata.Metadata; 031import org.eclipse.aether.repository.LocalArtifactRegistration; 032import org.eclipse.aether.repository.LocalArtifactRequest; 033import org.eclipse.aether.repository.LocalArtifactResult; 034import org.eclipse.aether.repository.LocalMetadataRegistration; 035import org.eclipse.aether.repository.LocalMetadataRequest; 036import org.eclipse.aether.repository.LocalMetadataResult; 037import org.eclipse.aether.repository.LocalRepository; 038import org.eclipse.aether.repository.LocalRepositoryManager; 039import org.eclipse.aether.repository.RemoteRepository; 040 041import static java.util.Objects.requireNonNull; 042 043/** 044 * A simplistic local repository manager that uses a temporary base directory. 045 */ 046public class TestLocalRepositoryManager implements LocalRepositoryManager { 047 048 private LocalRepository localRepository; 049 050 private final Set<Artifact> unavailableArtifacts = new HashSet<>(); 051 052 private final Set<Artifact> artifactRegistrations = new HashSet<>(); 053 054 private final Set<Metadata> metadataRegistrations = new HashSet<>(); 055 056 public TestLocalRepositoryManager() { 057 try { 058 Path tempDirectory = Files.createTempDirectory("test-local-repo"); 059 tempDirectory.toFile().deleteOnExit(); 060 localRepository = new LocalRepository(tempDirectory); 061 } catch (IOException e) { 062 throw new IllegalStateException(e); 063 } 064 } 065 066 public LocalRepository getRepository() { 067 return localRepository; 068 } 069 070 public String getPathForLocalArtifact(Artifact artifact) { 071 requireNonNull(artifact, "artifact cannot be null"); 072 073 String artifactId = artifact.getArtifactId(); 074 String groupId = artifact.getGroupId(); 075 String extension = artifact.getExtension(); 076 String version = artifact.getVersion(); 077 String classifier = artifact.getClassifier(); 078 079 return String.format( 080 "%s/%s/%s/%s-%s-%s%s.%s", 081 groupId, artifactId, version, groupId, artifactId, version, classifier, extension); 082 } 083 084 public String getPathForRemoteArtifact(Artifact artifact, RemoteRepository repository, String context) { 085 requireNonNull(artifact, "artifact cannot be null"); 086 requireNonNull(repository, "repository cannot be null"); 087 088 return getPathForLocalArtifact(artifact); 089 } 090 091 public String getPathForLocalMetadata(Metadata metadata) { 092 requireNonNull(metadata, "metadata cannot be null"); 093 094 String artifactId = metadata.getArtifactId(); 095 String groupId = metadata.getGroupId(); 096 String version = metadata.getVersion(); 097 return String.format("%s/%s/%s/%s-%s-%s.xml", groupId, artifactId, version, groupId, artifactId, version); 098 } 099 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}