Class SshRepository

    • Field Detail

      • ARGUMENT_PLACEHOLDER

        private static final java.lang.String ARGUMENT_PLACEHOLDER
        See Also:
        Constant Field Values
      • fileSeparator

        private char fileSeparator
      • listCommand

        private java.lang.String listCommand
      • existCommand

        private java.lang.String existCommand
      • createDirCommand

        private java.lang.String createDirCommand
      • publishPermissions

        private java.lang.String publishPermissions
    • Constructor Detail

      • SshRepository

        public SshRepository()
    • Method Detail

      • getResource

        public Resource getResource​(java.lang.String source)
        create a new resource with lazy initializing
        Parameters:
        source - String
        Returns:
        Resource
      • resolveResource

        public SshResource resolveResource​(java.lang.String source)
        Fetch the needed file information for a given file (size, last modification time) and report it back in a SshResource
        Parameters:
        source - ssh uri for the file to get info for
        Returns:
        SshResource filled with the needed information
        See Also:
        Repository.getResource(java.lang.String)
      • readSessionOutput

        private void readSessionOutput​(com.jcraft.jsch.ChannelExec channel,
                                       java.lang.StringBuilder strStdout,
                                       java.lang.StringBuilder strStderr)
                                throws java.io.IOException
        Reads out the output of a ssh session exec
        Parameters:
        channel - Channel to read from
        strStdout - StringBuilder that receives Session Stdout output
        strStderr - StringBuilder that receives Session Stderr output
        Throws:
        java.io.IOException - in case of trouble with the network
      • list

        public java.util.List<java.lang.String> 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
        Throws:
        java.io.IOException - On listing failure.
      • getExecChannel

        private com.jcraft.jsch.ChannelExec getExecChannel​(com.jcraft.jsch.Session session)
                                                    throws java.io.IOException
        Parameters:
        session - Session
        Returns:
        ChannelExec
        Throws:
        java.io.IOException
      • replaceArgument

        private java.lang.String replaceArgument​(java.lang.String command,
                                                 java.lang.String argument)
        Replace the argument placeholder with argument or append the argument if no placeholder is present
        Parameters:
        command - with argument placeholder or not
        argument - ditto
        Returns:
        replaced full command
      • 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
      • makePath

        private void makePath​(java.lang.String path,
                              com.jcraft.jsch.Session session)
                       throws java.io.IOException
        Tries to create a directory path on the target system
        Parameters:
        path - to create
        session - to use
        Throws:
        java.io.IOException
      • checkExistence

        private boolean checkExistence​(java.lang.String filePath,
                                       com.jcraft.jsch.Session session)
                                throws java.io.IOException
        check for existence of file or dir on target system
        Parameters:
        filePath - to the object to check
        session - to use
        Returns:
        true: object exists, false otherwise
        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.
      • setListCommand

        public void setListCommand​(java.lang.String cmd)
        sets the list command to use for a directory listing listing must be only the filename and each filename on a separate line
        Parameters:
        cmd - to use. default is "ls -1"
      • getListCommand

        public java.lang.String getListCommand()
        Returns:
        the list command to use
      • getCreateDirCommand

        public java.lang.String getCreateDirCommand()
        Returns:
        the createDirCommand
      • setCreateDirCommand

        public void setCreateDirCommand​(java.lang.String createDirCommand)
        Parameters:
        createDirCommand - the createDirCommand to set
      • getExistCommand

        public java.lang.String getExistCommand()
        Returns:
        the existCommand
      • setExistCommand

        public void setExistCommand​(java.lang.String existCommand)
        Parameters:
        existCommand - the existCommand to set
      • setFileSeparator

        public void setFileSeparator​(char fileSeparator)
        The file separator is the separator to use on the target system On a unix system it is '/', but I don't know, how this is solved on different ssh implementations. Using the default might be fine
        Parameters:
        fileSeparator - The fileSeparator to use. default '/'
      • setPublishPermissions

        public void setPublishPermissions​(java.lang.String permissions)
        A four digit string (e.g., 0644, see "man chmod", "man open") specifying the permissions of the published files.
        Parameters:
        permissions - String
      • getRepositoryScheme

        protected java.lang.String getRepositoryScheme()
        return ssh as scheme use the Resolver type name here? would be nice if it would be static, so we could use SshResolver.getTypeName()
        Specified by:
        getRepositoryScheme in class AbstractSshBasedRepository
        Returns:
        String
      • openStream

        public java.io.InputStream openStream​(SshResource resource)
                                       throws java.io.IOException
        Not really streaming...need to implement a proper streaming approach?
        Parameters:
        resource - to stream
        Returns:
        InputStream of the resource data
        Throws:
        java.io.IOException - if something goes wrong