blob: b77d2bcc6bfdc9d3ac8b715347a235bc2d5dd3aa [file] [log] [blame]
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();
}
}