blob: 5da7517584404541a2e55e7c9581f06b9ce7c6fb [file] [log] [blame]
/*
* 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.apache.maven.wagon;
import java.io.File;
import java.util.List;
import org.apache.maven.wagon.authentication.AuthenticationException;
import org.apache.maven.wagon.authentication.AuthenticationInfo;
import org.apache.maven.wagon.authorization.AuthorizationException;
import org.apache.maven.wagon.events.SessionListener;
import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.proxy.ProxyInfo;
import org.apache.maven.wagon.proxy.ProxyInfoProvider;
import org.apache.maven.wagon.repository.Repository;
/**
*
*/
public interface Wagon {
String ROLE = Wagon.class.getName();
/**
* default 60s approximately 1 minute
*/
int DEFAULT_CONNECTION_TIMEOUT = 60000;
/**
* default 1800s approximately 30 minutes
*
* @since 2.2
*/
int DEFAULT_READ_TIMEOUT = 1800000;
// ----------------------------------------------------------------------
// File/File handling
// ----------------------------------------------------------------------
/**
* Downloads specified resource from the repository to given file.
*
* @param resourceName
* @param destination
* @throws TransferFailedException
* @throws ResourceDoesNotExistException
* @throws AuthorizationException
*/
void get(String resourceName, File destination)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
/**
* Downloads specified resource from the repository
* if it was modified since specified date.
* The date is measured in milliseconds, between the current time and midnight, January 1, 1970 UTC
* and aligned to GMT timezone.
*
* @param resourceName
* @param destination
* @param timestamp
* @return <code>true</code> if newer resource has been downloaded, <code>false</code> if resource
* in the repository is older or has the same age.
* @throws TransferFailedException
* @throws ResourceDoesNotExistException
* @throws AuthorizationException
*/
boolean getIfNewer(String resourceName, File destination, long timestamp)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
/**
* Copy a file from local system to remote
*
* @param source the local file
* @param destination the remote destination
* @throws TransferFailedException
* @throws ResourceDoesNotExistException
* @throws AuthorizationException
*/
void put(File source, String destination)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
/**
* Copy a directory from local system to remote
*
* @param sourceDirectory the local directory
* @param destinationDirectory the remote destination
* @throws TransferFailedException
* @throws ResourceDoesNotExistException
* @throws AuthorizationException
*/
void putDirectory(File sourceDirectory, String destinationDirectory)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
/**
* Check if a remote resource exists
*
* @param resourceName
* @return whether the resource exists or not
* @throws TransferFailedException if there's an error trying to access the remote side
* @throws AuthorizationException if not authorized to verify the existence of the resource
*/
boolean resourceExists(String resourceName) throws TransferFailedException, AuthorizationException;
/**
* <p/>
* Returns a {@link List} of strings naming the files and directories in the directory denoted by
* this abstract pathname.
* </p>
* <p/>
* If this abstract pathname does not denote a directory, or does not exist, then this method throws
* {@link ResourceDoesNotExistException}.
* Otherwise a {@link List} of strings is returned, one for each file or directory in the directory.
* Names denoting the directory itself and the directory's parent directory are not included in
* the result. Each string is a file name rather than a complete path.
* </p>
* <p/>
* There is no guarantee that the name strings in the resulting list will appear in any specific
* order; they are not, in particular, guaranteed to appear in alphabetical order.
* </p>
*
* @param destinationDirectory directory to list contents of
* @return A {@link List} of strings naming the files and directories in the directory denoted by
* this abstract pathname. The {@link List} will be empty if the directory is empty.
* @throws TransferFailedException if there's an error trying to access the remote side
* @throws ResourceDoesNotExistException if destinationDirectory does not exist or is not a directory
* @throws AuthorizationException if not authorized to list the contents of the directory
*/
List<String> getFileList(String destinationDirectory)
throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException;
/**
* Flag indicating if this wagon supports directory copy operations.
*
* @return whether if this wagon supports directory operations
*/
boolean supportsDirectoryCopy();
Repository getRepository();
// ----------------------------------------------------------------------
// Connection/Disconnection
// ----------------------------------------------------------------------
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source) throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source, ProxyInfo proxyInfo) throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @param proxyInfoProvider the provider to obtain a network proxy to use to connect to the remote repository
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source, ProxyInfoProvider proxyInfoProvider)
throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @param authenticationInfo authentication credentials for connecting
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source, AuthenticationInfo authenticationInfo)
throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @param authenticationInfo authentication credentials for connecting
* @param proxyInfo the network proxy to use to connect to the remote repository
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfo proxyInfo)
throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @param source the repository to connect to
* @param authenticationInfo authentication credentials for connecting
* @param proxyInfoProvider the provider to obtain a network proxy to use to connect to the remote repository
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if the credentials for connecting are not sufficient
*/
void connect(Repository source, AuthenticationInfo authenticationInfo, ProxyInfoProvider proxyInfoProvider)
throws ConnectionException, AuthenticationException;
/**
* Initiate the connection to the repository.
*
* @throws ConnectionException if there is a problem connecting
* @throws org.apache.maven.wagon.authentication.AuthenticationException
* if ther credentials for connecting are not sufficient
* @todo delegate this to a truly internal connection method
* @deprecated connect using the {@link #connect(org.apache.maven.wagon.repository.Repository)} or related methods
* - this is an internal method
*/
void openConnection() throws ConnectionException, AuthenticationException;
/**
* Disconnect from the repository.
*
* @throws ConnectionException if there is a problem disconnecting
*/
void disconnect() throws ConnectionException;
/**
* Set the connection timeout limit in milliseconds
*/
void setTimeout(int timeoutValue);
/**
* Get the connection timeout limit in milliseconds
*/
int getTimeout();
/**
* Set the read timeout limit in milliseconds
* @since 2.2
*/
void setReadTimeout(int timeoutValue);
/**
* Get the read timeout limit in milliseconds
* @since 2.2
*/
int getReadTimeout();
// ----------------------------------------------------------------------
// Session listener
// ----------------------------------------------------------------------
void addSessionListener(SessionListener listener);
void removeSessionListener(SessionListener listener);
boolean hasSessionListener(SessionListener listener);
// ----------------------------------------------------------------------
// Transfer listener
// ----------------------------------------------------------------------
void addTransferListener(TransferListener listener);
void removeTransferListener(TransferListener listener);
boolean hasTransferListener(TransferListener listener);
boolean isInteractive();
void setInteractive(boolean interactive);
}