blob: 0b7672897d78e8ac584f32c49878f45e3702d7ec [file] [log] [blame]
package org.apache.maven.wagon;
/*
* 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 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;
import java.io.File;
import java.util.List;
/**
*
*/
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 );
}