Class FileServer

  • All Implemented Interfaces:

    
    public class FileServer
    
                        

    This class provides thread-safe access to files, and to provide some simplifying assumptions about where to find files and how to name them. For instance, putting supporting files in the same directory as the saved test plan file allows users to refer to the file with just it's name - this FileServer class will find the file without a problem. Eventually, I want all in-test file access to be done through here, with the goal of packaging up entire test plans as a directory structure that can be sent via rmi to remote servers (currently, one must make sure the remote server has all support files in a relative-same location) and to package up test plans to execute on unknown boxes that only have Java installed.

    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
    • Field Summary

      Fields 
      Modifier and Type Field Description
      public volatile String scriptName
    • Constructor Summary

      Constructors 
      Constructor Description
    • Enum Constant Summary

      Enum Constants 
      Enum Constant Description
    • Method Summary

      Modifier and Type Method Description
      String getScriptName()
      void setScriptName(String scriptName)
      static FileServer getFileServer()
      synchronized void resetBase() Resets the current base to DEFAULT_BASE.
      synchronized void setBasedir(String basedir) Sets the current base directory for relative file names from the provided path.
      synchronized void setBaseForScript(File scriptPath) Sets the current base directory for relative file names from the provided script file.
      synchronized String getBaseDir()
      static String getDefaultBase()
      synchronized File getBaseDirRelative() Calculates the relative path from DEFAULT_BASE to the current base, which must be the same as or a child of the default.
      void reserveFile(String filename) Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.
      void reserveFile(String filename, String charsetName) Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.
      void reserveFile(String filename, String charsetName, String alias) Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.
      synchronized String reserveFile(String filename, String charsetName, String alias, boolean hasHeader) Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.
      String readLine(String filename) Get the next line of the named file, recycle by default.
      String readLine(String filename, boolean recycle) Get the next line of the named file, first line is name to false
      synchronized String readLine(String filename, boolean recycle, boolean ignoreFirstLine) Get the next line of the named file
      synchronized Array<String> getParsedLine(String alias, boolean recycle, boolean ignoreFirstLine, char delim)
      synchronized void write(String filename, String value)
      synchronized void closeFiles()
      synchronized void closeFile(String name)
      File getRandomFile(String basedir, Array<String> extensions) Method will get a random file in a base directory TODO hey, not sure this method belongs here.
      File getResolvedFile(String path) Get File instance for provided file path, resolve file location relative to base dir or script dir when needed
      static String resolveBaseRelativeName(String relativeName) Resolve a file name that may be relative to the base directory.
      synchronized void setBase(File jmxBase) Sets the current base directory for relative file names.
      • Methods inherited from class java.lang.Object

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

    • Method Detail

      • setScriptName

         void setScriptName(String scriptName)
        Parameters:
        scriptName - Script name
        Since:

        2.6

      • resetBase

         synchronized void resetBase()

        Resets the current base to DEFAULT_BASE.

      • setBasedir

         synchronized void setBasedir(String basedir)

        Sets the current base directory for relative file names from the provided path. If the path does not refer to an existing directory, then its parent is used. Normally the provided path is a file, so using the parent directory is appropriate.

        Parameters:
        basedir - the path to set, or null if the GUI is being cleared
      • setBaseForScript

         synchronized void setBaseForScript(File scriptPath)

        Sets the current base directory for relative file names from the provided script file. The parameter is assumed to be the path to a JMX file, so the base directory is derived from its parent.

        Parameters:
        scriptPath - the path of the script file; must be not be null
      • getBaseDirRelative

         synchronized File getBaseDirRelative()

        Calculates the relative path from DEFAULT_BASE to the current base, which must be the same as or a child of the default.

        Returns:

        the relative path, or "." if the path cannot be determined

      • reserveFile

         void reserveFile(String filename)

        Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.

        Parameters:
        filename - - relative (to base) or absolute file name (must not be null)
      • reserveFile

         void reserveFile(String filename, String charsetName)

        Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.

        Parameters:
        filename - - relative (to base) or absolute file name (must not be null)
        charsetName - - the character set encoding to use for the file (may be null)
      • reserveFile

         void reserveFile(String filename, String charsetName, String alias)

        Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.

        Parameters:
        filename - - relative (to base) or absolute file name (must not be null)
        charsetName - - the character set encoding to use for the file (may be null)
        alias - - the name to be used to access the object (must not be null)
      • reserveFile

         synchronized String reserveFile(String filename, String charsetName, String alias, boolean hasHeader)

        Creates an association between a filename and a File inputOutputObject, and stores it for later use - unless it is already stored.

        Parameters:
        filename - - relative (to base) or absolute file name (must not be null or empty)
        charsetName - - the character set encoding to use for the file (may be null)
        alias - - the name to be used to access the object (must not be null)
        hasHeader - true if the file has a header line describing the contents
        Returns:

        the header line; may be null

      • readLine

         String readLine(String filename)

        Get the next line of the named file, recycle by default.

        Parameters:
        filename - the filename or alias that was used to reserve the file
        Returns:

        String containing the next line in the file

      • readLine

         String readLine(String filename, boolean recycle)

        Get the next line of the named file, first line is name to false

        Parameters:
        filename - the filename or alias that was used to reserve the file
        recycle - - should file be restarted at EOF?
        Returns:

        String containing the next line in the file (null if EOF reached and not recycle)

      • readLine

         synchronized String readLine(String filename, boolean recycle, boolean ignoreFirstLine)

        Get the next line of the named file

        Parameters:
        filename - the filename or alias that was used to reserve the file
        recycle - - should file be restarted at EOF?
        ignoreFirstLine - - Ignore first line
        Returns:

        String containing the next line in the file (null if EOF reached and not recycle)

      • getParsedLine

         synchronized Array<String> getParsedLine(String alias, boolean recycle, boolean ignoreFirstLine, char delim)
        Parameters:
        alias - the file name or alias
        recycle - whether the file should be re-started on EOF
        ignoreFirstLine - whether the file contains a file header which will be ignored
        delim - the delimiter to use for parsing
        Returns:

        the parsed line, will be empty if the file is at EOF

      • closeFile

         synchronized void closeFile(String name)
        Parameters:
        name - the name or alias of the file to be closed
      • getRandomFile

         File getRandomFile(String basedir, Array<String> extensions)

        Method will get a random file in a base directory

        TODO hey, not sure this method belongs here. FileServer is for thread safe File access relative to current test's base directory.

        Parameters:
        basedir - name of the directory in which the files can be found
        extensions - array of allowed extensions, if null is given, any file be allowed
        Returns:

        a random File from the basedir that matches one of the extensions

      • getResolvedFile

         File getResolvedFile(String path)

        Get File instance for provided file path, resolve file location relative to base dir or script dir when needed

        Parameters:
        path - original path to file, maybe relative
        Returns:

        File instance

      • resolveBaseRelativeName

         static String resolveBaseRelativeName(String relativeName)

        Resolve a file name that may be relative to the base directory. If the name begins with the value of the JMeter property "jmeter.save.saveservice.base_prefix" - default "~/" - then the name is assumed to be relative to the basename.

        Parameters:
        relativeName - filename that should be checked for jmeter.save.saveservice.base_prefix
        Returns:

        the updated filename

      • setBase

         synchronized void setBase(File jmxBase)

        Sets the current base directory for relative file names.

        Parameters:
        jmxBase - the path of the script file base directory, cannot be null