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