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 org.eclipse.aether.RepositorySystem;
22 import org.eclipse.aether.RequestTrace;
23 import org.eclipse.aether.metadata.Metadata;
24 import org.eclipse.aether.repository.RemoteRepository;
25
26 /**
27 * A request to resolve metadata from either a remote repository or the local repository.
28 *
29 * @see RepositorySystem#resolveMetadata(org.eclipse.aether.RepositorySystemSession, java.util.Collection)
30 * @see Metadata#getFile()
31 */
32 public final class MetadataRequest {
33
34 private Metadata metadata;
35
36 private RemoteRepository repository;
37
38 private String context = "";
39
40 private boolean deleteLocalCopyIfMissing;
41
42 private boolean favorLocalRepository;
43
44 private RequestTrace trace;
45
46 /**
47 * Creates an uninitialized request.
48 */
49 public MetadataRequest() {
50 // enables default constructor
51 }
52
53 /**
54 * Creates a request to resolve the specified metadata from the local repository.
55 *
56 * @param metadata The metadata to resolve, may be {@code null}.
57 */
58 public MetadataRequest(Metadata metadata) {
59 setMetadata(metadata);
60 }
61
62 /**
63 * Creates a request with the specified properties.
64 *
65 * @param metadata The metadata to resolve, may be {@code null}.
66 * @param repository The repository to resolve the metadata from, may be {@code null} to resolve from the local
67 * repository.
68 * @param context The context in which this request is made, may be {@code null}.
69 */
70 public MetadataRequest(Metadata metadata, RemoteRepository repository, String context) {
71 setMetadata(metadata);
72 setRepository(repository);
73 setRequestContext(context);
74 }
75
76 /**
77 * Gets the metadata to resolve.
78 *
79 * @return The metadata or {@code null} if not set.
80 */
81 public Metadata getMetadata() {
82 return metadata;
83 }
84
85 /**
86 * Sets the metadata to resolve.
87 *
88 * @param metadata The metadata, may be {@code null}.
89 * @return This request for chaining, never {@code null}.
90 */
91 public MetadataRequest setMetadata(Metadata metadata) {
92 this.metadata = metadata;
93 return this;
94 }
95
96 /**
97 * Gets the repository from which the metadata should be resolved.
98 *
99 * @return The repository or {@code null} to resolve from the local repository.
100 */
101 public RemoteRepository getRepository() {
102 return repository;
103 }
104
105 /**
106 * Sets the repository from which the metadata should be resolved.
107 *
108 * @param repository The repository, may be {@code null} to resolve from the local repository.
109 * @return This request for chaining, never {@code null}.
110 */
111 public MetadataRequest setRepository(RemoteRepository repository) {
112 this.repository = repository;
113 return this;
114 }
115
116 /**
117 * Gets the context in which this request is made.
118 *
119 * @return The context, never {@code null}.
120 */
121 public String getRequestContext() {
122 return context;
123 }
124
125 /**
126 * Sets the context in which this request is made.
127 *
128 * @param context The context, may be {@code null}.
129 * @return This request for chaining, never {@code null}.
130 */
131 public MetadataRequest setRequestContext(String context) {
132 this.context = (context != null) ? context : "";
133 return this;
134 }
135
136 /**
137 * Indicates whether the locally cached copy of the metadata should be removed if the corresponding file does not
138 * exist (any more) in the remote repository.
139 *
140 * @return {@code true} if locally cached metadata should be deleted if no corresponding remote file exists,
141 * {@code false} to keep the local copy.
142 */
143 public boolean isDeleteLocalCopyIfMissing() {
144 return deleteLocalCopyIfMissing;
145 }
146
147 /**
148 * Controls whether the locally cached copy of the metadata should be removed if the corresponding file does not
149 * exist (any more) in the remote repository.
150 *
151 * @param deleteLocalCopyIfMissing {@code true} if locally cached metadata should be deleted if no corresponding
152 * remote file exists, {@code false} to keep the local copy.
153 * @return This request for chaining, never {@code null}.
154 */
155 public MetadataRequest setDeleteLocalCopyIfMissing(boolean deleteLocalCopyIfMissing) {
156 this.deleteLocalCopyIfMissing = deleteLocalCopyIfMissing;
157 return this;
158 }
159
160 /**
161 * Indicates whether the metadata resolution should be suppressed if the corresponding metadata of the local
162 * repository is up-to-date according to the update policy of the remote repository. In this case, the metadata
163 * resolution will even be suppressed if no local copy of the remote metadata exists yet.
164 *
165 * @return {@code true} to suppress resolution of remote metadata if the corresponding metadata of the local
166 * repository is up-to-date, {@code false} to resolve the remote metadata normally according to the update
167 * policy.
168 */
169 public boolean isFavorLocalRepository() {
170 return favorLocalRepository;
171 }
172
173 /**
174 * Controls resolution of remote metadata when already corresponding metadata of the local repository exists. In
175 * cases where the local repository's metadata is sufficient and going to be preferred, resolution of the remote
176 * metadata can be suppressed to avoid unnecessary network access.
177 *
178 * @param favorLocalRepository {@code true} to suppress resolution of remote metadata if the corresponding metadata
179 * of the local repository is up-to-date, {@code false} to resolve the remote metadata normally according
180 * to the update policy.
181 * @return This request for chaining, never {@code null}.
182 */
183 public MetadataRequest setFavorLocalRepository(boolean favorLocalRepository) {
184 this.favorLocalRepository = favorLocalRepository;
185 return this;
186 }
187
188 /**
189 * Gets the trace information that describes the higher level request/operation in which this request is issued.
190 *
191 * @return The trace information about the higher level operation or {@code null} if none.
192 */
193 public RequestTrace getTrace() {
194 return trace;
195 }
196
197 /**
198 * Sets the trace information that describes the higher level request/operation in which this request is issued.
199 *
200 * @param trace The trace information about the higher level operation, may be {@code null}.
201 * @return This request for chaining, never {@code null}.
202 */
203 public MetadataRequest setTrace(RequestTrace trace) {
204 this.trace = trace;
205 return this;
206 }
207
208 @Override
209 public String toString() {
210 return getMetadata() + " < " + getRepository();
211 }
212 }