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.resolution; 20 21 import java.util.ArrayList; 22 import java.util.Collections; 23 import java.util.List; 24 25 import org.eclipse.aether.RequestTrace; 26 import org.eclipse.aether.artifact.Artifact; 27 import org.eclipse.aether.metadata.Metadata; 28 import org.eclipse.aether.repository.RemoteRepository; 29 30 /** 31 * A request to resolve a version range. 32 * 33 * @see org.eclipse.aether.RepositorySystem#resolveVersionRange(org.eclipse.aether.RepositorySystemSession, 34 * VersionRangeRequest) 35 */ 36 public final class VersionRangeRequest { 37 38 private Artifact artifact; 39 40 private List<RemoteRepository> repositories = Collections.emptyList(); 41 42 private Metadata.Nature nature = Metadata.Nature.RELEASE_OR_SNAPSHOT; 43 44 private String context = ""; 45 46 private RequestTrace trace; 47 48 /** 49 * Creates an uninitialized request. 50 */ 51 public VersionRangeRequest() { 52 // enables default constructor 53 } 54 55 /** 56 * Creates a request with the specified properties. 57 * 58 * @param artifact The artifact whose version range should be resolved, may be {@code null}. 59 * @param repositories The repositories to resolve the version from, may be {@code null}. 60 * @param context The context in which this request is made, may be {@code null}. 61 */ 62 public VersionRangeRequest(Artifact artifact, List<RemoteRepository> repositories, String context) { 63 setArtifact(artifact); 64 setRepositories(repositories); 65 setRequestContext(context); 66 } 67 68 /** 69 * Creates a request with the specified properties. 70 * 71 * @param artifact The artifact whose version range should be resolved, may be {@code null}. 72 * @param repositories The repositories to resolve the version from, may be {@code null}. 73 * @param nature The nature of metadata to use for resolving the version from, may be {@code null}. 74 * @param context The context in which this request is made, may be {@code null}. 75 * @since 2.0.11 76 */ 77 public VersionRangeRequest( 78 Artifact artifact, List<RemoteRepository> repositories, Metadata.Nature nature, String context) { 79 setArtifact(artifact); 80 setRepositories(repositories); 81 setNature(nature); 82 setRequestContext(context); 83 } 84 85 /** 86 * Gets the artifact whose version range shall be resolved. 87 * 88 * @return The artifact or {@code null} if not set. 89 */ 90 public Artifact getArtifact() { 91 return artifact; 92 } 93 94 /** 95 * Sets the artifact whose version range shall be resolved. 96 * 97 * @param artifact The artifact, may be {@code null}. 98 * @return This request for chaining, never {@code null}. 99 */ 100 public VersionRangeRequest setArtifact(Artifact artifact) { 101 this.artifact = artifact; 102 return this; 103 } 104 105 /** 106 * Gets the repositories to resolve the version range from. 107 * 108 * @return The repositories, never {@code null}. 109 */ 110 public List<RemoteRepository> getRepositories() { 111 return repositories; 112 } 113 114 /** 115 * Sets the repositories to resolve the version range from. 116 * 117 * @param repositories The repositories, may be {@code null}. 118 * @return This request for chaining, never {@code null}. 119 */ 120 public VersionRangeRequest setRepositories(List<RemoteRepository> repositories) { 121 if (repositories == null) { 122 this.repositories = Collections.emptyList(); 123 } else { 124 this.repositories = repositories; 125 } 126 return this; 127 } 128 129 /** 130 * Adds the specified repository for the resolution. 131 * 132 * @param repository The repository to add, may be {@code null}. 133 * @return This request for chaining, never {@code null}. 134 */ 135 public VersionRangeRequest addRepository(RemoteRepository repository) { 136 if (repository != null) { 137 if (this.repositories.isEmpty()) { 138 this.repositories = new ArrayList<>(); 139 } 140 this.repositories.add(repository); 141 } 142 return this; 143 } 144 145 /** 146 * The nature of metadata to use for resolving the version from, never {@code null}. 147 * 148 * @return The nature, never {@code null}. 149 * @since 2.0.11 150 */ 151 public Metadata.Nature getNature() { 152 return nature; 153 } 154 155 /** 156 * Sets the nature of metadata to use for resolving the version from 157 * 158 * @param nature The nature, may be {@code null}. 159 * @return This request for chaining, never {@code null}. 160 * @since 2.0.11 161 */ 162 public VersionRangeRequest setNature(Metadata.Nature nature) { 163 if (nature == null) { 164 this.nature = Metadata.Nature.RELEASE_OR_SNAPSHOT; 165 } else { 166 this.nature = nature; 167 } 168 return this; 169 } 170 171 /** 172 * Gets the context in which this request is made. 173 * 174 * @return The context, never {@code null}. 175 */ 176 public String getRequestContext() { 177 return context; 178 } 179 180 /** 181 * Sets the context in which this request is made. 182 * 183 * @param context The context, may be {@code null}. 184 * @return This request for chaining, never {@code null}. 185 */ 186 public VersionRangeRequest setRequestContext(String context) { 187 this.context = (context != null) ? context.intern() : ""; 188 return this; 189 } 190 191 /** 192 * Gets the trace information that describes the higher level request/operation in which this request is issued. 193 * 194 * @return The trace information about the higher level operation or {@code null} if none. 195 */ 196 public RequestTrace getTrace() { 197 return trace; 198 } 199 200 /** 201 * Sets the trace information that describes the higher level request/operation in which this request is issued. 202 * 203 * @param trace The trace information about the higher level operation, may be {@code null}. 204 * @return This request for chaining, never {@code null}. 205 */ 206 public VersionRangeRequest setTrace(RequestTrace trace) { 207 this.trace = trace; 208 return this; 209 } 210 211 @Override 212 public String toString() { 213 return getArtifact() + " < " + getRepositories(); 214 } 215 }