| package org.eclipse.aether.impl; |
| |
| /* |
| * 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. |
| */ |
| |
| 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 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 check. |
| * |
| * @return The policy to use for the check. |
| * @see org.eclipse.aether.repository.RepositoryPolicy |
| */ |
| public String getPolicy() |
| { |
| return policy; |
| } |
| |
| /** |
| * Sets the policy to use for the check. |
| * |
| * @param policy The policy to use for the 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; |
| } |
| |
| /** |
| * 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() + ": " + getFile() + " < " + getRepository(); |
| } |
| |
| } |