org.apache.ivy.plugins.repository.vsftp
Class VsftpRepository

java.lang.Object
  extended by org.apache.ivy.plugins.repository.AbstractRepository
      extended by org.apache.ivy.plugins.repository.vsftp.VsftpRepository
All Implemented Interfaces:
Repository

public class VsftpRepository
extends AbstractRepository

Repository using SecureCRT vsftp command line program to access an sftp repository This is especially useful to leverage the gssapi authentication supported by SecureCRT. In caseswhere usual sftp is enough, prefer the 100% java solution of sftp repository. This requires SecureCRT to be in the PATH. Tested with SecureCRT 5.0.5


Constructor Summary
VsftpRepository()
           
 
Method Summary
 void disconnect()
           
protected  void ensureConnectionOpened()
           
 void get(java.lang.String source, java.io.File destination)
          Fetch a resource from the repository.
 java.lang.String getAuthentication()
           
protected  java.lang.String getConnectionCommand()
           
protected  java.util.regex.Pattern getExpectedDownloadMessage(java.lang.String source, java.io.File to)
           
protected  java.util.regex.Pattern getExpectedRemoveMessage(java.lang.String destination)
           
protected  java.util.regex.Pattern getExpectedUploadMessage(java.io.File source, java.lang.String to)
           
 java.lang.String getHost()
           
protected  Resource getInitResource(java.lang.String source)
           
 long getReadTimeout()
           
 Resource getResource(java.lang.String source)
          Return the resource associated with a specified identifier.
protected  java.lang.String getSingleCommand(java.lang.String command)
           
 java.lang.String getUsername()
           
 java.util.List list(java.lang.String parent)
          Return a listing of resources names
protected  Resource lslToResource(java.lang.String file, java.lang.String responseLine)
          Parses a ls -l line and transforms it in a resource
 void put(java.io.File source, java.lang.String destination, boolean overwrite)
           
protected  java.lang.String readResponse(boolean sendErrorAsResponse)
           
protected  java.lang.String readResponse(boolean sendErrorAsResponse, long timeout)
           
protected  java.lang.String sendCommand(java.lang.String command)
           
protected  java.lang.String sendCommand(java.lang.String command, boolean sendErrorAsResponse)
           
protected  java.lang.String sendCommand(java.lang.String command, boolean sendErrorAsResponse, boolean single)
           
protected  java.lang.String sendCommand(java.lang.String command, boolean sendErrorAsResponse, boolean single, long timeout)
           
protected  java.lang.String sendCommand(java.lang.String command, boolean sendErrorAsResponse, long timeout)
           
protected  void sendCommand(java.lang.String command, java.util.regex.Pattern expectedResponse)
           
protected  void sendCommand(java.lang.String command, java.util.regex.Pattern expectedResponse, long timeout)
          The behaviour of vsftp with some commands is to log the resulting message on the error stream, even if everything is ok.
 void setAuthentication(java.lang.String authentication)
           
 void setHost(java.lang.String host)
           
 void setReadTimeout(long readTimeout)
           
 void setReuseConnection(long time)
          Sets the reuse connection time.
 void setUsername(java.lang.String username)
           
 java.lang.String toString()
           
 
Methods inherited from class org.apache.ivy.plugins.repository.AbstractRepository
addTransferListener, fireTransferCompleted, fireTransferCompleted, fireTransferError, fireTransferError, fireTransferEvent, fireTransferInitiated, fireTransferProgress, fireTransferStarted, fireTransferStarted, getFileSeparator, getName, hasTransferListener, put, removeTransferListener, setName, standardize
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

VsftpRepository

public VsftpRepository()
Method Detail

getResource

public Resource getResource(java.lang.String source)
                     throws java.io.IOException
Description copied from interface: Repository
Return the resource associated with a specified identifier. If the resource does not exist, it should return a Resource with exists() returning false. An IOException should only be thrown when a real IO problem occurs, like the impossibility to connect to a server.

Parameters:
source - A string identifying the resource.
Returns:
The resource associated with the resource identifier.
Throws:
java.io.IOException - On error while trying to get resource.

getInitResource

protected Resource getInitResource(java.lang.String source)
                            throws java.io.IOException
Throws:
java.io.IOException

get

public void get(java.lang.String source,
                java.io.File destination)
         throws java.io.IOException
Description copied from interface: Repository
Fetch a resource from the repository.

Parameters:
source - A string identifying the resource to be fetched.
destination - Where to place the fetched resource.
Throws:
java.io.IOException - On retrieval failure.

list

public java.util.List list(java.lang.String parent)
                    throws java.io.IOException
Description copied from interface: Repository
Return a listing of resources names

Parameters:
parent - The parent directory from which to generate the listing.
Returns:
A listing of the parent directory's file content, as a List of String.
Throws:
java.io.IOException - On listing failure.

put

public void put(java.io.File source,
                java.lang.String destination,
                boolean overwrite)
         throws java.io.IOException
Overrides:
put in class AbstractRepository
Throws:
java.io.IOException

sendCommand

protected java.lang.String sendCommand(java.lang.String command)
                                throws java.io.IOException
Throws:
java.io.IOException

sendCommand

protected void sendCommand(java.lang.String command,
                           java.util.regex.Pattern expectedResponse)
                    throws java.io.IOException
Throws:
java.io.IOException

sendCommand

protected void sendCommand(java.lang.String command,
                           java.util.regex.Pattern expectedResponse,
                           long timeout)
                    throws java.io.IOException
The behaviour of vsftp with some commands is to log the resulting message on the error stream, even if everything is ok. So it's quite difficult if there was an error or not. Hence we compare the response with the expected message and deal with it. The problem is that this is very specific to the version of vsftp used for the test, That's why expected messages are obtained using overridable protected methods.

Throws:
java.io.IOException

sendCommand

protected java.lang.String sendCommand(java.lang.String command,
                                       boolean sendErrorAsResponse)
                                throws java.io.IOException
Throws:
java.io.IOException

sendCommand

protected java.lang.String sendCommand(java.lang.String command,
                                       boolean sendErrorAsResponse,
                                       boolean single)
                                throws java.io.IOException
Throws:
java.io.IOException

sendCommand

protected java.lang.String sendCommand(java.lang.String command,
                                       boolean sendErrorAsResponse,
                                       long timeout)
                                throws java.io.IOException
Throws:
java.io.IOException

sendCommand

protected java.lang.String sendCommand(java.lang.String command,
                                       boolean sendErrorAsResponse,
                                       boolean single,
                                       long timeout)
                                throws java.io.IOException
Throws:
java.io.IOException

readResponse

protected java.lang.String readResponse(boolean sendErrorAsResponse)
                                 throws java.io.IOException
Throws:
java.io.IOException

readResponse

protected java.lang.String readResponse(boolean sendErrorAsResponse,
                                        long timeout)
                                 throws java.io.IOException
Throws:
java.io.IOException

ensureConnectionOpened

protected void ensureConnectionOpened()
                               throws java.io.IOException
Throws:
java.io.IOException

disconnect

public void disconnect()

lslToResource

protected Resource lslToResource(java.lang.String file,
                                 java.lang.String responseLine)
Parses a ls -l line and transforms it in a resource

Parameters:
file -
responseLine -
Returns:

getSingleCommand

protected java.lang.String getSingleCommand(java.lang.String command)

getConnectionCommand

protected java.lang.String getConnectionCommand()

getExpectedDownloadMessage

protected java.util.regex.Pattern getExpectedDownloadMessage(java.lang.String source,
                                                             java.io.File to)

getExpectedRemoveMessage

protected java.util.regex.Pattern getExpectedRemoveMessage(java.lang.String destination)

getExpectedUploadMessage

protected java.util.regex.Pattern getExpectedUploadMessage(java.io.File source,
                                                           java.lang.String to)

getAuthentication

public java.lang.String getAuthentication()

setAuthentication

public void setAuthentication(java.lang.String authentication)

getHost

public java.lang.String getHost()

setHost

public void setHost(java.lang.String host)

getUsername

public java.lang.String getUsername()

setUsername

public void setUsername(java.lang.String username)

toString

public java.lang.String toString()
Overrides:
toString in class AbstractRepository

setReuseConnection

public void setReuseConnection(long time)
Sets the reuse connection time. The same connection will be reused if the time here does not last between two commands. O indicates that the connection should never be reused

Parameters:
time -

getReadTimeout

public long getReadTimeout()

setReadTimeout

public void setReadTimeout(long readTimeout)