forked from apache/maven-resolver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUpdateCheck.java
287 lines (252 loc) · 9.17 KB
/
UpdateCheck.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.eclipse.aether.impl;
import java.io.File;
import org.eclipse.aether.RepositoryException;
import org.eclipse.aether.repository.RemoteRepository;
/**
* A request to check if an update of an artifact/metadata from a remote repository is needed.
*
* @param <T>
* @param <E>
* @see UpdateCheckManager
* @provisional This type is provisional and can be changed, moved or removed without prior notice.
*/
public final class UpdateCheck<T, E extends RepositoryException> {
private long localLastUpdated;
private T item;
private File file;
private boolean fileValid = true;
private String policy;
private String metadataPolicy;
private RemoteRepository repository;
private RemoteRepository authoritativeRepository;
private boolean required;
private E exception;
/**
* Creates an uninitialized update check request.
*/
public UpdateCheck() {}
/**
* Gets the last-modified timestamp of the corresponding item produced by a local installation. If non-zero, a
* remote update will be surpressed if the local item is up-to-date, even if the remote item has not been cached
* locally.
*
* @return The last-modified timestamp of the corresponding item produced by a local installation or {@code 0} to
* ignore any local item.
*/
public long getLocalLastUpdated() {
return localLastUpdated;
}
/**
* Sets the last-modified timestamp of the corresponding item produced by a local installation. If non-zero, a
* remote update will be surpressed if the local item is up-to-date, even if the remote item has not been cached
* locally.
*
* @param localLastUpdated The last-modified timestamp of the corresponding item produced by a local installation or
* {@code 0} to ignore any local item.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setLocalLastUpdated(long localLastUpdated) {
this.localLastUpdated = localLastUpdated;
return this;
}
/**
* Gets the item of the check.
*
* @return The item of the check, never {@code null}.
*/
public T getItem() {
return item;
}
/**
* Sets the item of the check.
*
* @param item The item of the check, must not be {@code null}.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setItem(T item) {
this.item = item;
return this;
}
/**
* Returns the local file of the item.
*
* @return The local file of the item.
*/
public File getFile() {
return file;
}
/**
* Sets the local file of the item.
*
* @param file The file of the item, never {@code null} .
* @return This object for chaining.
*/
public UpdateCheck<T, E> setFile(File file) {
this.file = file;
return this;
}
/**
* Indicates whether the local file given by {@link #getFile()}, if existent, should be considered valid or not. An
* invalid file is equivalent to a physically missing file.
*
* @return {@code true} if the file should be considered valid if existent, {@code false} if the file should be
* treated as if it was missing.
*/
public boolean isFileValid() {
return fileValid;
}
/**
* Controls whether the local file given by {@link #getFile()}, if existent, should be considered valid or not. An
* invalid file is equivalent to a physically missing file.
*
* @param fileValid {@code true} if the file should be considered valid if existent, {@code false} if the file
* should be treated as if it was missing.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setFileValid(boolean fileValid) {
this.fileValid = fileValid;
return this;
}
/**
* Gets the policy to use for the data check.
*
* @return The policy to use for the data check.
* @see org.eclipse.aether.repository.RepositoryPolicy
*/
public String getPolicy() {
return policy;
}
/**
* Gets the policy to use for the metadata check.
*
* @return The policy to use for the metadata check.
* @see org.eclipse.aether.repository.RepositoryPolicy
* @since TBD
*/
public String getMetadataPolicy() {
return metadataPolicy;
}
/**
* Sets the policy to use for the check.
*
* @param policy The policy to use for the data check, may be {@code null}.
* @return This object for chaining.
* @see org.eclipse.aether.repository.RepositoryPolicy
*/
public UpdateCheck<T, E> setPolicy(String policy) {
this.policy = policy;
return this;
}
/**
* Sets the policy to use for the check.
*
* @param metadataPolicy The policy to use for the metadata check, may be {@code null}.
* @return This object for chaining.
* @see org.eclipse.aether.repository.RepositoryPolicy
* @since TBD
*/
public UpdateCheck<T, E> setMetadataPolicy(String metadataPolicy) {
this.metadataPolicy = metadataPolicy;
return this;
}
/**
* Gets the repository from which a potential update/download will performed.
*
* @return The repository to use for the check.
*/
public RemoteRepository getRepository() {
return repository;
}
/**
* Sets the repository from which a potential update/download will performed.
*
* @param repository The repository to use for the check, must not be {@code null}.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setRepository(RemoteRepository repository) {
this.repository = repository;
return this;
}
/**
* Gets the repository which ultimately hosts the metadata to update. This will be different from the repository
* given by {@link #getRepository()} in case the latter denotes a repository manager.
*
* @return The actual repository hosting the authoritative copy of the metadata to update, never {@code null} for a
* metadata update check.
*/
public RemoteRepository getAuthoritativeRepository() {
return authoritativeRepository != null ? authoritativeRepository : repository;
}
/**
* Sets the repository which ultimately hosts the metadata to update. This will be different from the repository
* given by {@link #getRepository()} in case the latter denotes a repository manager.
*
* @param authoritativeRepository The actual repository hosting the authoritative copy of the metadata to update,
* must not be {@code null} for a metadata update check.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setAuthoritativeRepository(RemoteRepository authoritativeRepository) {
this.authoritativeRepository = authoritativeRepository;
return this;
}
/**
* Gets the result of a check, denoting whether the remote repository should be checked for updates.
*
* @return The result of a check.
*/
public boolean isRequired() {
return required;
}
/**
* Sets the result of an update check.
*
* @param required The result of an update check. In case of {@code false} and the local file given by
* {@link #getFile()} does actually not exist, {@link #setException(RepositoryException)} should be used
* to provide the previous/cached failure that explains the absence of the file.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setRequired(boolean required) {
this.required = required;
return this;
}
/**
* Gets the exception that occurred during the update check.
*
* @return The occurred exception or {@code null} if the update check was successful.
*/
public E getException() {
return exception;
}
/**
* Sets the exception for this update check.
*
* @param exception The exception for this update check, may be {@code null} if the check was successful.
* @return This object for chaining.
*/
public UpdateCheck<T, E> setException(E exception) {
this.exception = exception;
return this;
}
@Override
public String toString() {
return getPolicy() + "/" + getMetadataPolicy() + ": " + getFile() + " < " + getRepository();
}
}