Class FSUtilities


  • public class FSUtilities
    extends java.lang.Object
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.util.Comparator<GFile> GFILE_NAME_TYPE_COMPARATOR
      Sorts GFiles by type (directories segregated from files) and then by name, case-insensitive.
      static java.lang.String SEPARATOR  
      static java.lang.String SEPARATOR_CHARS  
    • Constructor Summary

      Constructors 
      Constructor Description
      FSUtilities()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static java.lang.String appendPath​(java.lang.String... paths)
      Concats path strings together, taking care to ensure that there is a correct path separator character between each part.
      static void displayException​(java.lang.Object originator, java.awt.Component parent, java.lang.String title, java.lang.String message, java.lang.Throwable throwable)
      Displays a filesystem related exception in the most user-friendly manner possible, even if we have to do some hacky things with helping the user with crypto problems.
      static java.lang.String escapeDecode​(java.lang.String s)
      Returns a decoded version of the input stream where "%nn" escape sequences are replaced with their actual characters, using UTF-8 decoding rules.
      static java.lang.String escapeEncode​(java.lang.String s)
      Returns a copy of the input string with FSRL problematic[1] characters escaped as "%nn" sequences, where nn are hexdigits specifying the numeric ascii value of that character.
      static java.lang.String getExtension​(java.lang.String path, int extLevel)
      Returns the "extension" of the filename part of the path string.
      static java.lang.String getFileMD5​(java.io.File f, TaskMonitor monitor)
      Calculate the MD5 of a file.
      static java.lang.String getFilesystemDescriptionFromClass​(java.lang.Class<?> clazz)
      Returns the description value of the FileSystemInfo annotation attached to the specified class.
      static int getFilesystemPriorityFromClass​(java.lang.Class<?> clazz)
      Returns the priority value of the FileSystemInfo annotation attached to the specified class.
      static java.lang.String getFilesystemTypeFromClass​(java.lang.Class<?> clazz)
      Returns the type value of the FileSystemInfo annotation attached to the specified class.
      static java.lang.String getSafeFilename​(java.lang.String untrustedFilename)
      Best-effort of sanitizing an untrusted string that will be used to create a file on the user's local filesystem.
      static java.lang.String getStreamMD5​(java.io.InputStream is, TaskMonitor monitor)
      Calculate the MD5 of a stream.
      static java.lang.String infoMapToString​(java.util.Map<java.lang.String,​java.lang.String> info)
      Converts a string -> string mapping into a "key: value" multi-line string.
      static boolean isSameFS​(java.util.List<FSRL> fsrls)
      Returns true if all the FSRLs in the specified list are from the filesystem.
      static java.util.List<GFile> listFileSystem​(GFileSystem fs, GFile dir, java.util.List<GFile> result, TaskMonitor taskMonitor)
      Returns a list of all files in a GFileSystem.
      static java.lang.String normalizeNativePath​(java.lang.String path)
      Returns a copy of the string path that has been fixed to have correct slashes and a correct leading root slash '/'.
      static FSUtilities.StreamCopyResult streamCopy​(java.io.InputStream is, java.io.OutputStream os, TaskMonitor monitor)
      Copies a stream and calculates the md5 at the same time.
      • Methods inherited from class java.lang.Object

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

      • GFILE_NAME_TYPE_COMPARATOR

        public static final java.util.Comparator<GFile> GFILE_NAME_TYPE_COMPARATOR
        Sorts GFiles by type (directories segregated from files) and then by name, case-insensitive.
    • Constructor Detail

      • FSUtilities

        public FSUtilities()
    • Method Detail

      • infoMapToString

        public static java.lang.String infoMapToString​(java.util.Map<java.lang.String,​java.lang.String> info)
        Converts a string -> string mapping into a "key: value" multi-line string.
        Parameters:
        info - map of string key to string value.
        Returns:
        Multi-line string "key: value" string.
      • getSafeFilename

        public static java.lang.String getSafeFilename​(java.lang.String untrustedFilename)
        Best-effort of sanitizing an untrusted string that will be used to create a file on the user's local filesystem.
        Parameters:
        untrustedFilename - filename string with possibly bad / hostile characters or sequences.
        Returns:
        sanitized filename
      • escapeEncode

        public static java.lang.String escapeEncode​(java.lang.String s)
        Returns a copy of the input string with FSRL problematic[1] characters escaped as "%nn" sequences, where nn are hexdigits specifying the numeric ascii value of that character.

        Characters that need more than a byte to encode will result in multiple "%nn" values that encode the necessary UTF8 codepoints.

        [1] - non-ascii / unprintable / FSRL portion separation characters.

        Parameters:
        s - string, or null.
        Returns:
        string with problematic characters escaped as "%nn" sequences, or null if parameter was null.
      • escapeDecode

        public static java.lang.String escapeDecode​(java.lang.String s)
                                             throws java.net.MalformedURLException
        Returns a decoded version of the input stream where "%nn" escape sequences are replaced with their actual characters, using UTF-8 decoding rules.

        Parameters:
        s - string with escape sequences in the form "%nn", or null.
        Returns:
        string with all escape sequences replaced with native characters, or null if original parameter was null.
        Throws:
        java.net.MalformedURLException - if bad escape sequence format.
      • listFileSystem

        public static java.util.List<GFile> listFileSystem​(GFileSystem fs,
                                                           GFile dir,
                                                           java.util.List<GFile> result,
                                                           TaskMonitor taskMonitor)
                                                    throws java.io.IOException,
                                                           CancelledException
        Returns a list of all files in a GFileSystem.
        Parameters:
        fs - GFileSystem to recursively query for all files.
        dir - the GFile directory to recurse into
        result - List of GFiles where the results are accumulated into, or null to allocate a new List, returned as the result.
        taskMonitor - TaskMonitor that will be checked for cancel.
        Returns:
        List of accumulated results
        Throws:
        java.io.IOException - if io error during listing of directories
        CancelledException - if user cancels
      • getFilesystemTypeFromClass

        public static java.lang.String getFilesystemTypeFromClass​(java.lang.Class<?> clazz)
        Returns the type value of the FileSystemInfo annotation attached to the specified class.
        Parameters:
        clazz - Class to query.
        Returns:
        File system type string.
      • getFilesystemDescriptionFromClass

        public static java.lang.String getFilesystemDescriptionFromClass​(java.lang.Class<?> clazz)
        Returns the description value of the FileSystemInfo annotation attached to the specified class.
        Parameters:
        clazz - Class to query.
        Returns:
        File system description string.
      • getFilesystemPriorityFromClass

        public static int getFilesystemPriorityFromClass​(java.lang.Class<?> clazz)
        Returns the priority value of the FileSystemInfo annotation attached to the specified class.
        Parameters:
        clazz - Class to query.
        Returns:
        File system priority integer.
      • isSameFS

        public static boolean isSameFS​(java.util.List<FSRL> fsrls)
        Returns true if all the FSRLs in the specified list are from the filesystem.
        Parameters:
        fsrls - List of FSRLs.
        Returns:
        boolean true if all are from same filesystem.
      • displayException

        public static void displayException​(java.lang.Object originator,
                                            java.awt.Component parent,
                                            java.lang.String title,
                                            java.lang.String message,
                                            java.lang.Throwable throwable)
        Displays a filesystem related exception in the most user-friendly manner possible, even if we have to do some hacky things with helping the user with crypto problems.

        Parameters:
        originator - a Logger instance, "this", or YourClass.class
        parent - a parent component used to center the dialog (or null if you don't have one)
        title - the title of the pop-up dialog (main subject of message)
        message - the details of the message
        throwable - the Throwable that describes the cause of the error
      • streamCopy

        public static FSUtilities.StreamCopyResult streamCopy​(java.io.InputStream is,
                                                              java.io.OutputStream os,
                                                              TaskMonitor monitor)
                                                       throws java.io.IOException,
                                                              CancelledException
        Copies a stream and calculates the md5 at the same time.

        Does not close the passed-in InputStream or OutputStream.

        Parameters:
        is - InputStream to copy. NOTE: not closed by this method.
        os - OutputStream to write to. NOTE: not closed by this method.
        Returns:
        FSUtilities.StreamCopyResult with md5 and bytes copied count, never null.
        Throws:
        java.io.IOException - if error
        CancelledException - if canceled
      • getStreamMD5

        public static java.lang.String getStreamMD5​(java.io.InputStream is,
                                                    TaskMonitor monitor)
                                             throws java.io.IOException,
                                                    CancelledException
        Calculate the MD5 of a stream.
        Parameters:
        is - InputStream to read
        monitor - TaskMonitor to watch for cancel
        Returns:
        md5 as a hex encoded string, never null.
        Throws:
        java.io.IOException - if error
        CancelledException - if cancelled
      • getFileMD5

        public static java.lang.String getFileMD5​(java.io.File f,
                                                  TaskMonitor monitor)
                                           throws java.io.IOException,
                                                  CancelledException
        Calculate the MD5 of a file.
        Parameters:
        f - File to read.
        monitor - TaskMonitor to watch for cancel
        Returns:
        md5 as a hex encoded string, never null.
        Throws:
        java.io.IOException - if error
        CancelledException - if cancelled
      • appendPath

        public static java.lang.String appendPath​(java.lang.String... paths)
        Concats path strings together, taking care to ensure that there is a correct path separator character between each part.

        Handles forward or back slashes as path separator characters in the input, but only adds forward slashes when separating the path strings that need a separator.

        Parameters:
        paths - vararg list of path strings, empty or null elements are ok and are skipped.
        Returns:
        null if all params null, "" empty string if all are empty, or "path_element[1]/path_element[2]/.../path_element[N]" otherwise.
      • getExtension

        public static java.lang.String getExtension​(java.lang.String path,
                                                    int extLevel)
        Returns the "extension" of the filename part of the path string.

        Ie. everything after the nth last '.' char in the filename, including that '.' character.

        Using: "path/filename.ext1.ext2"

        Gives:

        • extLevel 1: ".ext2"
        • extLevel 2: ".ext1.ext2"
        • extLevel 3: null
        Parameters:
        path - path/filename.ext string
        extLevel - number of ext levels; must be greater than 0
        Returns:
        ".ext1" for "path/filename.notext.ext1" level 1, ".ext1.ext2" for "path/filename.ext1.ext2" level 2, etc. or null if there was no dot character
        Throws:
        java.lang.IllegalArgumentException - if the given level is less than 1
      • normalizeNativePath

        public static java.lang.String normalizeNativePath​(java.lang.String path)
        Returns a copy of the string path that has been fixed to have correct slashes and a correct leading root slash '/'.
        Parameters:
        path - String forward or backslash path
        Returns:
        String path with all forward slashes and a leading root slash.