blob: 97124d8fd5e10a9384836df794207d90df36eb0b [file] [log] [blame]
package org.apache.maven.wagon;
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed 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.artifact.Artifact;
import org.apache.maven.wagon.events.SessionEvent;
import org.apache.maven.wagon.events.SessionEventSupport;
import org.apache.maven.wagon.events.SessionListener;
import org.apache.maven.wagon.events.TransferEvent;
import org.apache.maven.wagon.events.TransferEventSupport;
import org.apache.maven.wagon.events.TransferListener;
import org.apache.maven.wagon.repository.Repository;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
/**
* Implementation of common facilties for Wagon providers.
*
* @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
* @version $Id$
*/
public abstract class AbstractWagon
implements Wagon
{
private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;
protected Repository source;
protected SessionEventSupport sessionEventSupport = new SessionEventSupport();
protected TransferEventSupport transferEventSupport = new TransferEventSupport();
// ----------------------------------------------------------------------
// Repository
// ----------------------------------------------------------------------
public Repository getRepository()
{
return source;
}
// ----------------------------------------------------------------------
// Connection
// ----------------------------------------------------------------------
public void connect( Repository source )
throws Exception
{
if ( source == null )
{
throw new IllegalStateException( "The repository specified cannot be null." );
}
this.source = source;
fireSessionOpening();
openConnection();
fireSessionOpened();
}
public void disconnect()
throws Exception
{
fireSessionDisconnecting();
closeConnection();
fireSessionDisconnected();
}
// ----------------------------------------------------------------------
// Stream i/o
// ----------------------------------------------------------------------
protected void getTransfer( String resource, InputStream input, OutputStream output )
throws TransferFailedException
{
fireGetStarted( resource );
try
{
transfer( resource, input, output, TransferEvent.REQUEST_GET );
closeGetTransferStreams( input, output );
}
catch ( IOException e )
{
fireTransferError( resource, e );
String msg = "GET request of: " + resource + " from " + source.getName() + "failed";
throw new TransferFailedException( msg, e );
}
fireGetCompleted( resource );
}
protected void putTransfer( String resource, InputStream input, OutputStream output )
throws TransferFailedException
{
firePutStarted( resource );
try
{
transfer( resource, input, output, TransferEvent.REQUEST_PUT );
closePutTransferStreams( input, output );
}
catch ( IOException e )
{
fireTransferError( resource, e );
String msg = "PUT request for: " + resource + " to " + source.getName() + "failed";
throw new TransferFailedException( msg, e );
}
firePutCompleted( resource );
}
protected void transfer( String resource, InputStream input, OutputStream output, int requestType )
throws IOException
{
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n;
TransferEvent transferEvent = new TransferEvent( this, resource, TransferEvent.TRANSFER_PROGRESS, requestType );
while ( -1 != ( n = input.read( buffer ) ) )
{
// @todo probably new event should be created!!
transferEvent.setProgress( n );
transferEvent.setData( buffer, n );
output.write( buffer, 0, n );
fireTransferProgress( transferEvent );
}
}
protected void closeGetTransferStreams( InputStream is, OutputStream os )
{
closeTransferStreams( is, os );
}
protected void closePutTransferStreams( InputStream is, OutputStream os )
{
closeTransferStreams( is, os );
}
protected void closeTransferStreams( InputStream is, OutputStream os )
{
shutdownStream( is );
shutdownStream( os );
}
protected void shutdownStream( InputStream inputStream )
{
if ( inputStream != null )
{
try
{
inputStream.close();
}
catch ( Exception e )
{
}
}
}
protected void shutdownStream( OutputStream outputStream )
{
if ( outputStream != null )
{
try
{
outputStream.close();
}
catch ( Exception e )
{
}
}
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
protected String artifactUrl( Artifact artifact )
{
return source.artifactUrl( artifact );
}
protected String artifactPath( Artifact artifact )
{
return source.artifactPath( artifact );
}
protected String fullArtifactPath( Artifact artifact )
{
return source.fullArtifactPath( artifact );
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
protected void fireTransferProgress( TransferEvent transferEvent )
{
transferEventSupport.fireTransferProgress( transferEvent );
}
protected void fireGetCompleted( String resource )
{
long timestamp = System.currentTimeMillis();
TransferEvent transferEvent =
new TransferEvent( this, resource, TransferEvent.TRANSFER_COMPLETED, TransferEvent.REQUEST_GET );
transferEvent.setTimestamp( timestamp );
transferEventSupport.fireTransferCompleted( transferEvent );
}
protected void fireGetStarted( String resource )
{
long timestamp = System.currentTimeMillis();
TransferEvent transferEvent =
new TransferEvent( this, resource, TransferEvent.TRANSFER_STARTED, TransferEvent.REQUEST_GET );
transferEvent.setTimestamp( timestamp );
transferEventSupport.fireTransferStarted( transferEvent );
}
protected void firePutCompleted( String resource )
{
long timestamp = System.currentTimeMillis();
TransferEvent transferEvent =
new TransferEvent( this, resource, TransferEvent.TRANSFER_COMPLETED, TransferEvent.REQUEST_PUT );
transferEvent.setTimestamp( timestamp );
transferEventSupport.fireTransferCompleted( transferEvent );
}
protected void firePutStarted( String resource )
{
long timestamp = System.currentTimeMillis();
TransferEvent transferEvent =
new TransferEvent( this, resource, TransferEvent.TRANSFER_STARTED, TransferEvent.REQUEST_PUT );
transferEvent.setTimestamp( timestamp );
transferEventSupport.fireTransferStarted( transferEvent );
}
protected void fireSessionDisconnected()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_DISCONNECTED );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionDisconnected( sessionEvent );
}
protected void fireSessionDisconnecting()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_DISCONNECTING );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionDisconnecting( sessionEvent );
}
protected void fireSessionLoggedIn()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_LOGGED_IN );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionLoggedIn( sessionEvent );
}
protected void fireSessionLoggedOff()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_LOGGED_OFF );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionLoggedOff( sessionEvent );
}
protected void fireSessionOpened()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_OPENED );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionOpened( sessionEvent );
}
protected void fireSessionOpening()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_OPENING );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionOpening( sessionEvent );
}
protected void fireSessionConnectionRefused()
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_CONNECTION_REFUSED );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionConnectionRefused( sessionEvent );
}
protected void fireSessionError( Exception exception )
{
long timestamp = System.currentTimeMillis();
SessionEvent sessionEvent = new SessionEvent( this, exception );
sessionEvent.setTimestamp( timestamp );
sessionEventSupport.fireSessionError( sessionEvent );
}
protected void fireTransferDebug( String message )
{
transferEventSupport.fireDebug( message );
}
protected void fireSessionDebug( String message )
{
sessionEventSupport.fireDebug( message );
}
public boolean hasTransferListener( TransferListener listener )
{
return transferEventSupport.hasTransferListener( listener );
}
public void addTransferListener( TransferListener listener )
{
transferEventSupport.addTransferListener( listener );
}
public void removeTransferListener( TransferListener listener )
{
transferEventSupport.removeTransferListener( listener );
}
public void addSessionListener( SessionListener listener )
{
sessionEventSupport.addSessionListener( listener );
}
public boolean hasSessionListener( SessionListener listener )
{
return sessionEventSupport.hasSessionListener( listener );
}
public void removeSessionListener( SessionListener listener )
{
sessionEventSupport.removeSessionListener( listener );
}
protected void fireTransferError( String resource, Exception e )
{
TransferEvent transferEvent = new TransferEvent( this, resource, e );
transferEventSupport.fireTransferError( transferEvent );
}
public SessionEventSupport getSessionEventSupport()
{
return sessionEventSupport;
}
public void setSessionEventSupport( SessionEventSupport sessionEventSupport )
{
this.sessionEventSupport = sessionEventSupport;
}
public TransferEventSupport getTransferEventSupport()
{
return transferEventSupport;
}
public void setTransferEventSupport( TransferEventSupport transferEventSupport )
{
this.transferEventSupport = transferEventSupport;
}
}