Class SftpHelper


  • public final class SftpHelper
    extends java.lang.Object
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.util.Map<java.lang.Integer,​java.lang.String> DEFAULT_SUBSTATUS_MESSAGE  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private SftpHelper()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static int attributesToPermissions​(boolean isReg, boolean isDir, boolean isLnk, java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
      Converts a file / folder's attributes into a mask
      static java.nio.file.attribute.AclEntry buildAclEntry​(int aclType, int aclFlag, int aclMask, java.lang.String aclWho)  
      static java.nio.file.attribute.AclEntryType decodeAclEntryType​(int aclType)  
      static java.util.Set<java.nio.file.attribute.AclEntryFlag> decodeAclFlags​(int aclFlag)  
      static java.util.Set<java.nio.file.attribute.AclEntryPermission> decodeAclMask​(int aclMask)  
      static java.util.List<java.nio.file.attribute.AclEntry> decodeACLs​(Buffer buffer, int version)  
      static int encodeAclEntryType​(java.nio.file.attribute.AclEntryType type)
      Returns the equivalent SFTP value for the ACL type
      static long encodeAclFlags​(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)  
      static long encodeAclMask​(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)  
      static <B extends Buffer>
      B
      encodeACLs​(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)  
      static int fileTypeToPermission​(int type)
      Converts a file type into a POSIX permission mask value
      static boolean getBool​(java.lang.Boolean bool)  
      static java.lang.Boolean getEndOfFileIndicatorValue​(Buffer buffer, int version)
      Retrieves the end-of-file indicator for SSH_FXP_DATA responses, provided the version is at least 6, and the buffer has enough available data
      static java.lang.Boolean getEndOfListIndicatorValue​(Buffer buffer, int version)
      Retrieves the end-of-list indicator for SSH_FXP_NAME responses, provided the version is at least 6, and the buffer has enough available data
      static java.lang.String getLongName​(java.lang.String shortName, java.util.Map<java.lang.String,​?> attributes)
      Creates an "ls -l" compatible long name string
      static java.lang.Boolean indicateEndOfNamesList​(Buffer buffer, int version, PropertyResolver resolver)
      Appends the end-of-list=TRUE indicator for SSH_FXP_NAME responses, provided the version is at least 6 and the feature is enabled
      static java.lang.Boolean indicateEndOfNamesList​(Buffer buffer, int version, PropertyResolver resolver, boolean indicatorValue)
      Appends the end-of-list indicator for SSH_FXP_NAME responses, provided the version is at least 6, the feature is enabled and the indicator value is not null
      static java.util.Set<java.nio.file.attribute.PosixFilePermission> permissionsToAttributes​(int perms)
      Translates a mask of permissions into its enumeration values equivalents
      static int permissionsToFileType​(int perms)
      Converts a POSIX permissions mask to a file type value
      static java.util.List<java.nio.file.attribute.AclEntry> readACLs​(Buffer buffer, int version)  
      static java.util.NavigableMap<java.lang.String,​java.lang.Object> readAttrs​(Buffer buffer, int version)  
      static java.util.NavigableMap<java.lang.String,​byte[]> readExtensions​(Buffer buffer)  
      static java.nio.file.attribute.FileTime readTime​(Buffer buffer, int version, int flags)
      Decodes a FileTime value from a buffer
      static java.lang.String resolveStatusMessage​(int subStatus)  
      static int resolveSubstatus​(java.lang.Throwable t)
      Returns the most adequate sub-status for the provided exception
      static java.util.NavigableMap<java.lang.String,​byte[]> toBinaryExtensions​(java.util.Map<java.lang.String,​java.lang.String> extensions)  
      static java.util.NavigableMap<java.lang.String,​java.lang.String> toStringExtensions​(java.util.Map<java.lang.String,​?> extensions)  
      static <B extends Buffer>
      B
      writeAclEntry​(B buffer, java.nio.file.attribute.AclEntry acl)  
      static <B extends Buffer>
      B
      writeACLs​(B buffer, int version, java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)  
      static <B extends Buffer>
      B
      writeAttributes​(B buffer, SftpClient.Attributes attributes, int sftpVersion)  
      static <B extends Buffer>
      B
      writeAttrs​(B buffer, int version, java.util.Map<java.lang.String,​?> attributes)
      Writes a file / folder's attributes to a buffer
      static <B extends Buffer>
      B
      writeAttrsV3​(B buffer, int version, java.util.Map<java.lang.String,​?> attributes)
      Writes the retrieved file / directory attributes in V3 format
      static <B extends Buffer>
      B
      writeAttrsV4​(B buffer, int version, java.util.Map<java.lang.String,​?> attributes)
      Writes the retrieved file / directory attributes in V4+ format
      static <B extends Buffer>
      B
      writeExtensions​(B buffer, java.util.Map<?,​?> extensions)  
      static <B extends Buffer>
      B
      writeTime​(B buffer, int version, int flags, java.nio.file.attribute.FileTime time)
      Encodes a FileTime value into a buffer
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • DEFAULT_SUBSTATUS_MESSAGE

        public static final java.util.Map<java.lang.Integer,​java.lang.String> DEFAULT_SUBSTATUS_MESSAGE
    • Constructor Detail

      • SftpHelper

        private SftpHelper()
    • Method Detail

      • getEndOfFileIndicatorValue

        public static java.lang.Boolean getEndOfFileIndicatorValue​(Buffer buffer,
                                                                   int version)
        Retrieves the end-of-file indicator for SSH_FXP_DATA responses, provided the version is at least 6, and the buffer has enough available data
        Parameters:
        buffer - The Buffer to retrieve the data from
        version - The SFTP version being used
        Returns:
        The indicator value - null if none retrieved
        See Also:
        SFTP v6 - section 9.3
      • getEndOfListIndicatorValue

        public static java.lang.Boolean getEndOfListIndicatorValue​(Buffer buffer,
                                                                   int version)
        Retrieves the end-of-list indicator for SSH_FXP_NAME responses, provided the version is at least 6, and the buffer has enough available data
        Parameters:
        buffer - The Buffer to retrieve the data from
        version - The SFTP version being used
        Returns:
        The indicator value - null if none retrieved
        See Also:
        SFTP v6 - section 9.4, indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
      • indicateEndOfNamesList

        public static java.lang.Boolean indicateEndOfNamesList​(Buffer buffer,
                                                               int version,
                                                               PropertyResolver resolver)
        Appends the end-of-list=TRUE indicator for SSH_FXP_NAME responses, provided the version is at least 6 and the feature is enabled
        Parameters:
        buffer - The Buffer to append the indicator
        version - The SFTP version being used
        resolver - The PropertyResolver to query whether to enable the feature
        Returns:
        The actual indicator value used - null if none appended
        See Also:
        indicateEndOfNamesList(Buffer, int, PropertyResolver, boolean)
      • indicateEndOfNamesList

        public static java.lang.Boolean indicateEndOfNamesList​(Buffer buffer,
                                                               int version,
                                                               PropertyResolver resolver,
                                                               boolean indicatorValue)
        Appends the end-of-list indicator for SSH_FXP_NAME responses, provided the version is at least 6, the feature is enabled and the indicator value is not null
        Parameters:
        buffer - The Buffer to append the indicator
        version - The SFTP version being used
        resolver - The PropertyResolver to query whether to enable the feature
        indicatorValue - The indicator value - null means don't append the indicator
        Returns:
        The actual indicator value used - null if none appended
        See Also:
        SFTP v6 - section 9.4, SftpModuleProperties.APPEND_END_OF_LIST_INDICATOR
      • writeAttrs

        public static <B extends Buffer> B writeAttrs​(B buffer,
                                                      int version,
                                                      java.util.Map<java.lang.String,​?> attributes)
        Writes a file / folder's attributes to a buffer
        Type Parameters:
        B - Type of Buffer being updated
        Parameters:
        buffer - The target buffer instance
        version - The output encoding version
        attributes - The Map of attributes
        Returns:
        The updated buffer
        See Also:
        writeAttrsV3(Buffer, int, Map), writeAttrsV4(Buffer, int, Map)
      • writeAttrsV3

        public static <B extends Buffer> B writeAttrsV3​(B buffer,
                                                        int version,
                                                        java.util.Map<java.lang.String,​?> attributes)
        Writes the retrieved file / directory attributes in V3 format
        Type Parameters:
        B - Type of Buffer being updated
        Parameters:
        buffer - The target buffer instance
        version - The actual version - must be SftpConstants.SFTP_V3
        attributes - The Map of attributes
        Returns:
        The updated buffer
      • writeAttrsV4

        public static <B extends Buffer> B writeAttrsV4​(B buffer,
                                                        int version,
                                                        java.util.Map<java.lang.String,​?> attributes)
        Writes the retrieved file / directory attributes in V4+ format
        Type Parameters:
        B - Type of Buffer being updated
        Parameters:
        buffer - The target buffer instance
        version - The actual version - must be at least SftpConstants.SFTP_V4
        attributes - The Map of attributes
        Returns:
        The updated buffer
      • writeAttributes

        public static <B extends Buffer> B writeAttributes​(B buffer,
                                                           SftpClient.Attributes attributes,
                                                           int sftpVersion)
      • getBool

        public static boolean getBool​(java.lang.Boolean bool)
        Parameters:
        bool - The Boolean value
        Returns:
        true it the argument is non-null and its Boolean.booleanValue() is true
      • attributesToPermissions

        public static int attributesToPermissions​(boolean isReg,
                                                  boolean isDir,
                                                  boolean isLnk,
                                                  java.util.Collection<java.nio.file.attribute.PosixFilePermission> perms)
        Converts a file / folder's attributes into a mask
        Parameters:
        isReg - true if this is a normal file
        isDir - true if this is a directory
        isLnk - true if this is a symbolic link
        perms - The file / folder's access PosixFilePermissions
        Returns:
        A mask encoding the file / folder's attributes
      • permissionsToFileType

        public static int permissionsToFileType​(int perms)
        Converts a POSIX permissions mask to a file type value
        Parameters:
        perms - The POSIX permissions mask
        Returns:
        The file type - see SSH_FILEXFER_TYPE_xxx values
      • fileTypeToPermission

        public static int fileTypeToPermission​(int type)
        Converts a file type into a POSIX permission mask value
        Parameters:
        type - File type - see SSH_FILEXFER_TYPE_xxx values
        Returns:
        The matching POSIX permission mask value
      • permissionsToAttributes

        public static java.util.Set<java.nio.file.attribute.PosixFilePermission> permissionsToAttributes​(int perms)
        Translates a mask of permissions into its enumeration values equivalents
        Parameters:
        perms - The permissions mask
        Returns:
        A Set of the equivalent PosixFilePermissions
      • resolveSubstatus

        public static int resolveSubstatus​(java.lang.Throwable t)
        Returns the most adequate sub-status for the provided exception
        Parameters:
        t - The thrown Throwable
        Returns:
        The matching sub-status
      • resolveStatusMessage

        public static java.lang.String resolveStatusMessage​(int subStatus)
      • readAttrs

        public static java.util.NavigableMap<java.lang.String,​java.lang.Object> readAttrs​(Buffer buffer,
                                                                                                int version)
      • readExtensions

        public static java.util.NavigableMap<java.lang.String,​byte[]> readExtensions​(Buffer buffer)
      • writeExtensions

        public static <B extends Buffer> B writeExtensions​(B buffer,
                                                           java.util.Map<?,​?> extensions)
      • toStringExtensions

        public static java.util.NavigableMap<java.lang.String,​java.lang.String> toStringExtensions​(java.util.Map<java.lang.String,​?> extensions)
      • toBinaryExtensions

        public static java.util.NavigableMap<java.lang.String,​byte[]> toBinaryExtensions​(java.util.Map<java.lang.String,​java.lang.String> extensions)
      • readACLs

        public static java.util.List<java.nio.file.attribute.AclEntry> readACLs​(Buffer buffer,
                                                                                int version)
      • decodeACLs

        public static java.util.List<java.nio.file.attribute.AclEntry> decodeACLs​(Buffer buffer,
                                                                                  int version)
      • buildAclEntry

        public static java.nio.file.attribute.AclEntry buildAclEntry​(int aclType,
                                                                     int aclFlag,
                                                                     int aclMask,
                                                                     java.lang.String aclWho)
      • decodeAclEntryType

        public static java.nio.file.attribute.AclEntryType decodeAclEntryType​(int aclType)
        Parameters:
        aclType - The ACE4_ACCESS_xxx_ACE_TYPE value
        Returns:
        The matching AclEntryType or null if unknown value
      • decodeAclFlags

        public static java.util.Set<java.nio.file.attribute.AclEntryFlag> decodeAclFlags​(int aclFlag)
      • decodeAclMask

        public static java.util.Set<java.nio.file.attribute.AclEntryPermission> decodeAclMask​(int aclMask)
      • writeACLs

        public static <B extends Buffer> B writeACLs​(B buffer,
                                                     int version,
                                                     java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
      • encodeACLs

        public static <B extends Buffer> B encodeACLs​(B buffer,
                                                      int version,
                                                      java.util.Collection<? extends java.nio.file.attribute.AclEntry> acl)
      • writeAclEntry

        public static <B extends Buffer> B writeAclEntry​(B buffer,
                                                         java.nio.file.attribute.AclEntry acl)
      • encodeAclEntryType

        public static int encodeAclEntryType​(java.nio.file.attribute.AclEntryType type)
        Returns the equivalent SFTP value for the ACL type
        Parameters:
        type - The AclEntryType
        Returns:
        The equivalent ACE_SYSTEM_xxx_TYPE or negative if null or unknown type
      • encodeAclFlags

        public static long encodeAclFlags​(java.util.Collection<java.nio.file.attribute.AclEntryFlag> flags)
      • encodeAclMask

        public static long encodeAclMask​(java.util.Collection<java.nio.file.attribute.AclEntryPermission> mask)
      • writeTime

        public static <B extends Buffer> B writeTime​(B buffer,
                                                     int version,
                                                     int flags,
                                                     java.nio.file.attribute.FileTime time)
        Encodes a FileTime value into a buffer
        Type Parameters:
        B - Type of Buffer being updated
        Parameters:
        buffer - The target buffer instance
        version - The encoding version
        flags - The encoding flags
        time - The value to encode
        Returns:
        The updated buffer
      • readTime

        public static java.nio.file.attribute.FileTime readTime​(Buffer buffer,
                                                                int version,
                                                                int flags)
        Decodes a FileTime value from a buffer
        Parameters:
        buffer - The source Buffer
        version - The encoding version
        flags - The encoding flags
        Returns:
        The decoded value
      • getLongName

        public static java.lang.String getLongName​(java.lang.String shortName,
                                                   java.util.Map<java.lang.String,​?> attributes)
        Creates an "ls -l" compatible long name string
        Parameters:
        shortName - The short file name - can also be "." or ".."
        attributes - The file's attributes - e.g., size, owner, permissions, etc.
        Returns:
        A String representing the "long" file name as per SFTP version 3 - section 7