Class InstallationController

java.lang.Object
org.apache.uima.pear.tools.InstallationController

public class InstallationController extends Object
The InstallationController class allows installing PEAR files that contain UIMA compliant components.
Note: current version works both in Windows and Linux.
This class may be used in the following ways:
  • As a standalone Java application -
    java -DUIMA_HOME=%UIMA_HOME% org.apache.uima.pear.tools.InstallationController {-local pear_file | component_id} [-root] [installation_directory]
    where the -local pear_file option allows to install local PEAR file in the local file system (without using SITH services);
    the component_id is the ID of the component to be installed using SITH services;
    the -root option enables component installation directly in the specified installation directory, as opposed to installing component in a component_id subdirectory of the specified installation directory;
    the installation_directory is the directory where the new component will be installed - if the -root option is specified, the component is installed in this directory, otherwise it is installed in a component_id subdirectory of this directory; by default - current working directory.
  • As a Java object -
    in this case, the caller is expected to set the UIMA_HOME variable, using the setUimaHomePath() method, immediately after creating a new instance of the InstallationController class.
    Installation is performed by using the installComponent() method.
    Installation verification is performed by using the verifyComponent() method.
    Error messages can be retrieved by using the getInstallationMsg() and getVerificationMsg() methods.
    Note 1: Starting from version 0.6, the InstallationController class utilizes intra-process message routing (see MessageRouter). Applications need to call the terminate() method on each instance of the InstallationController class after all their operations are completed.
    The application can get output and error messages, printed by the InstallationController, by adding standard channel listeners (see the addMsgListener() method). By default, the output and error messages are printed to the standard console streams. Alternatively, the application can use the InstallationController constructor that accepts a custom message listener. In this case, the output and error messages will not be printed to the standard console streams.
    Note 2: Starting from version 1.4, the InstallationController class defines the InstallationController.PackageSelector interface and allows to plug-in custom package selectors for manually or automatically selecting root directories of installed PEAR packages, as well as PEAR package files that need to be installed.
    Note 2: Starting from version 1.5, the InstallationController class defines the InstallationController.InstallationMonitor interface and allows to plug-in custom installation monitors for reporting component installation status and location of installed components.
See Also:
  • Field Details

  • Constructor Details

    • InstallationController

      public InstallationController(String componentId, String rootDirPath)
      Constructs an instance of the InstallationController class for a given component and a given installation root directory. By default, the InstallationController creates a component_id subdirectory for the component code and resources. By default, the InstallationController class sends all stdout and stderr messages to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      rootDirPath - The given installation root directory path.
    • InstallationController

      public InstallationController(String componentId, String rootDirPath, boolean installInRootDir)
      Constructs an instance of the InstallationController class for a given component and a given installation root directory. If the installInRootDir flag is true, the component will be installed in the given root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. By default, the InstallationController class sends all stdout and stderr messages to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      rootDirPath - The given installation root directory path.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory. Note: the installation directory will be cleaned before the PEAR file is installed to it.
    • InstallationController

      public InstallationController(String componentId, String rootDirPath, boolean installInRootDir, MessageRouter.StdChannelListener msgListener)
      Constructs an instance of the InstallationController class for a given component and a given installation root directory. If the installInRootDir flag is true, the component will be installed in the given root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. If a given custom message listener is not null, the InstallationController instance will sends all stdout and stderr messages to the given message listener, otherwise these messages are sent to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      rootDirPath - The given installation root directory path.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory. Note: the installation directory will be cleaned before the PEAR file is installed to it.
      msgListener - The given custom message listener or null.
    • InstallationController

      protected InstallationController(String componentId, String rootDirPath, boolean installInRootDir, MessageRouter msgRouter, MessageRouter.StdChannelListener msgListener, boolean cleanInstallDir)
      Internal constructor that creates an instance of the InstallationController class for a given component and a given installation root directory. If the installInRootDir flag is true, the component will be installed in the given root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. If a given custom MessageRouter is not null, the new InstallationController instance will use the given message router, otherwise it will create a new message router object. If a given custom message listener is not null, the InstallationController instance will send all stdout and stderr messages to the given message listener, otherwise these messages are sent to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      rootDirPath - The given installation root directory.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory.
      msgRouter - The given custom MessageRouter object or null.
      msgListener - The given custom message listener object or null.
      cleanInstallDir - If true, the target installation directory will be cleaned before the PEAR file is installed.
    • InstallationController

      public InstallationController(String componentId, File localPearFile, File rootDir)
      Constructor for the 'local' mode, which specifies component ID, local PEAR file and a local root directory where the component will be installed. By default, the InstallationController creates a component_id subdirectory for the component code and resources. By default, the InstallationController class sends all stdout and stderr messages to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      localPearFile - The given local PEAR file.
      rootDir - The given local root directory for installation.
    • InstallationController

      public InstallationController(String componentId, File localPearFile, File rootDir, boolean installInRootDir, boolean cleanInstallDir)
      Constructor for the 'local' mode, which specifies component ID, local PEAR file and a local root directory where the component will be installed. If the installInRootDir flag is true, the component code and resources will be installed in the specified root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. By default, the InstallationController class sends all stdout and stderr messages to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      localPearFile - The given local PEAR file.
      rootDir - The given local root directory for installation.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory.
      cleanInstallDir - If true, the target installation directory will be cleaned before the PEAR file is installed.
    • InstallationController

      public InstallationController(String componentId, File localPearFile, File rootDir, boolean installInRootDir)
      Constructor for the 'local' mode, which specifies component ID, local PEAR file and a local root directory where the component will be installed. If the installInRootDir flag is true, the component code and resources will be installed in the specified root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. By default, the InstallationController class sends all stdout and stderr messages to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      localPearFile - The given local PEAR file.
      rootDir - The given local root directory for installation.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory. Note: the installation directory will be cleaned before the PEAR file is installed to it.
    • InstallationController

      public InstallationController(String componentId, File localPearFile, File rootDir, boolean installInRootDir, MessageRouter.StdChannelListener msgListener)
      Constructor for the 'local' mode, which specifies component ID, local PEAR file and a local root directory where the component will be installed. If the installInRootDir flag is true, the component code and resources will be installed in the specified root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. If the custom message listener is not null, the InstallationController class sends all stdout and stderr messages to this message listener, otherwise these messages are sent to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      localPearFile - The given local PEAR file.
      rootDir - The given local root directory for installation.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory.
      msgListener - The given custom message listener or null.
    • InstallationController

      public InstallationController(String componentId, File localPearFile, File rootDir, boolean installInRootDir, MessageRouter.StdChannelListener msgListener, boolean cleanInstallDir)
      Constructor for the 'local' mode, which specifies component ID, local PEAR file and a local root directory where the component will be installed. If the installInRootDir flag is true, the component code and resources will be installed in the specified root directory, otherwise the InstallationController will create a component_id subdirectory for the component code and resources. If the custom message listener is not null, the InstallationController class sends all stdout and stderr messages to this message listener, otherwise these messages are sent to the default message listener, which prints them to the standard console streams.
      Parameters:
      componentId - The given component ID.
      localPearFile - The given local PEAR file.
      rootDir - The given local root directory for installation.
      installInRootDir - If true, the component will be installed in the given root directory, otherwise it will be installed in the component_id subdirectory of the root directory.
      msgListener - The given custom message listener or null.
      cleanInstallDir - If true, the target installation directory will be cleaned before the PEAR file is installed.
  • Method Details

    • addListOfJarFiles

      protected static StringBuffer addListOfJarFiles(File libDir, StringBuffer listBuffer) throws IOException
      Appends a list of JAR files in a given lib directory, separated with the OS dependent separator (';' or ':'), to a given initial StringBuffer object. If null StringBuffer object is specified, creates new StringBuffer object.
      Parameters:
      libDir - The given lib directory.
      listBuffer - The initial StringBuffer object.
      Returns:
      The list of JAR files in the given lib directory, appended to the given StringBuffer.
      Throws:
      IOException - If any I/O exception occurred.
    • addToSystemEnvTable

      protected static boolean addToSystemEnvTable(Properties sysEnvTable, String localKey, String localValue)
      Adds a given local environment variable to appropriate system environment variable (before the system value). The case of the local environment variable key is ignored.
      Parameters:
      sysEnvTable - The table of system environment variables.
      localKey - The given local environment variable key.
      localValue - The given local environment variable value.
      Returns:
      true if the local value was really added, false otherwise.
    • buildArrayOfNetworkParams

      public static String[] buildArrayOfNetworkParams(InstallationDescriptor insdObject)
      Creates a string array that contains network parameters (in the JVM '-Dname=value' format) specified in a given installation descriptor object.
      Parameters:
      insdObject - The given installation descriptor object.
      Returns:
      The string array of network parameters in the JVM format.
    • buildComponentClassPath

      public static String buildComponentClassPath(String compRootDirPath, InstallationDescriptor insdObject, boolean addLibDir) throws IOException
      Creates a string that should be added to the CLASSPATH for a given installed component associated with a given installation descriptor object.
      Parameters:
      compRootDirPath - The given root directory of the installed component.
      insdObject - The given installation descriptor object.
      addLibDir - Whether we should add jars from the libdir or not (true at packaging time, false at runtime).
      Returns:
      The string that should be added to the CLASSPATH for the given component.
      Throws:
      IOException - If any I/O exception occurred.
    • buildComponentPath

      public static String buildComponentPath(String compRootDirPath, InstallationDescriptor insdObject)
      Creates a string that should be added to the SPATH for a given installed component associated with a given installation descriptor object.
      Parameters:
      compRootDirPath - The given root directory of the installed component.
      insdObject - The given installation descriptor object.
      Returns:
      The string that should be added to the SPATH for the given component.
    • buildListOfEnvVars

      public static String buildListOfEnvVars(InstallationDescriptor insdObject)
      Creates a string that contains the list of environment variables settings (in the JVM '-Dname=value' format) included in a given installation descriptor object.
      Parameters:
      insdObject - The given installation descriptor object.
      Returns:
      The string of environment variables settings in the JVM format.
    • buildListOfNetworkParams

      public static String buildListOfNetworkParams(InstallationDescriptor insdObject)
      Creates a string that contains network parameters (in the JVM '-Dname=value' format) specified in a given installation descriptor object.
      Parameters:
      insdObject - The given installation descriptor object.
      Returns:
      The string of network parameters in the JVM format.
    • buildTableOfEnvVars

      public static Properties buildTableOfEnvVars(InstallationDescriptor insdObject)
      Creates a Properties table that contains (name, value) pairs of environment variables settings for a given installation descriptor object.
      Parameters:
      insdObject - The given installation descriptor object.
      Returns:
      The Properties table that contains environment variables settings for the given installation descriptor object.
    • buildUIMAClassPath

      public static String buildUIMAClassPath(String uimaHomeEnv)
      Creates a string that should be added to the CLASSPATH environment variable for UIMA framework.
      Parameters:
      uimaHomeEnv - The location of UIMA framework (UIMA_HOME environment variable value).
      Returns:
      The CLASSPATH string for UIMA framework.
    • deleteInstalledFiles

      public static boolean deleteInstalledFiles(String componentId, File parentDir, boolean includeDelegates) throws IOException
      Deletes all installed files for a given component in a given parent directory. If the includeDelegates flag is true, deletes also all files installed in a given parent directory for separate delegate components, specified in the main installation descriptor.
      Parameters:
      componentId - The given main component ID.
      parentDir - The given parent directory of the main component root directory.
      includeDelegates - Indicates whether files of the specified separate delegate components should be deleted.
      Returns:
      true, if the deletion operation completed successfully, false otherwise.
      Throws:
      IOException - if any I/O exception occurred.
    • extractFilesFromPEARFile

      public static String extractFilesFromPEARFile(String pearFileLocation, String fileExt, File targetDir, boolean cleanTarget) throws IOException
      Extracts files with a given extension from a given PEAR file into a given target directory. If the given filename extension is null, extracts all the files from a given PEAR file. Returns the path to the new component root directory.
      Parameters:
      pearFileLocation - The given PEAR file location.
      fileExt - The given filename extension.
      targetDir - The given target directory.
      cleanTarget - If true, the target directory is cleaned before the PEAR file is installed to it.
      Returns:
      The path to the new component root directory.
      Throws:
      IOException - if any I/O exception occurred.
    • extractFilesFromPEARFile

      protected static String extractFilesFromPEARFile(String pearFileLocation, String fileExt, File targetDir, InstallationController controller, boolean cleanTarget) throws IOException
      Internal implementatiton of the extractFilesFromPEARFile method, which allows sending messages to the OUT and ERR queues.
      Parameters:
      pearFileLocation - The given PEAR file location.
      fileExt - The given filename extension.
      targetDir - The given target directory.
      controller - The instance of the InstallationController class that provides OUT and ERR
      cleanTarget - If true, the target directory is cleaned before the PEAR file is installed to it. message routing, or null.
      Returns:
      The path to the new component root directory.
      Throws:
      IOException - if any I/O exception occurred.
    • extractPEARFile

      public static String extractPEARFile(String pearFileLocation, File installationDir, boolean cleanTarget) throws IOException
      Extracts all files of a given component from a given PEAR file into a given target directory. Returns the path to the new component root directory.
      Parameters:
      pearFileLocation - The given PEAR file location.
      installationDir - The given target directory.
      cleanTarget - If true, the target directory is cleaned before the PEAR file is installed to it.
      Returns:
      The path to the new component root directory.
      Throws:
      IOException - if any I/O exception occurred.
    • extractPEARFile

      protected static String extractPEARFile(String pearFileLocation, File installationDir, InstallationController controller, boolean cleanTarget) throws IOException
      Internal implementation of the extractPEARFile method, which allows sending messages to the OUT and ERR queues.
      Parameters:
      pearFileLocation - The given PEAR file location.
      installationDir - The given target directory.
      controller - The instance of the InstallationController class that provides OUT and ERR message routing, or null.
      cleanTarget - If true, the target directory is cleaned before the PEAR file is installed to it.
      Returns:
      The path to the new component root directory.
      Throws:
      IOException - if any I/O exception occurred.
    • getDelegateInstallationDescriptors

      protected static Hashtable<String,InstallationDescriptor> getDelegateInstallationDescriptors(Hashtable<String,String> installationTable) throws IOException
      Creates a Hashtable that contains (compId, InsD) pairs for all separate delegate components specified in a given installation table.
      Parameters:
      installationTable - The given installation table that specifies (compId, rootDirPath) pairs for all separate delegate components.
      Returns:
      The Hashtable that contains (compId, InsD) pairs for all separate delegate components specified in the given installation table.
      Throws:
      IOException - If an I/O exception occurred while loading the installation descriptor files.
    • getHostIpAddress

      public static String getHostIpAddress()
      Returns:
      The local host IP address.
    • getInstalledComponentRootPath

      protected static String getInstalledComponentRootPath(String componentId, InstallationController.PackageSelector pkgSelector)
      Retrieves the root directory path of a given component, installed in the local file system, by using a given PackageSelector input. If the given PackageSelector is null, the default PackageSelector implementation is used.
      Parameters:
      componentId - The given installed component ID.
      pkgSelector - The instance of the PackageSelector class that allows selecting root directory of the installed component in the local file system.
      Returns:
      The root directory path of the given component in the local file system, or null, if the component is not installed.
    • getPEARFileLocation

      protected static String getPEARFileLocation(String componentId, InstallationController.PackageSelector pkgSelector)
      Gets the PEAR file location (file path or URL) for a given component by using SITH DB a given PackageSelector input. If the given PackageSelector is null, the default PackageSelector implementation is used.
      Parameters:
      componentId - The given component ID.
      pkgSelector - The instance of the PackageSelector class that allows selecting location of the given component PEAR file in the local file system, or in the network.
      Returns:
      The location of the PEAR file for the given component, or null, if the PEAR file was not found.
    • main

      public static void main(String[] args)
      Starts the application. This application expects the following JVM run-time settings:
      • -DUIMA_HOME=<local_uima_root_dir>
      Parameters:
      args - {-local pear_file | main_component_id} [-default] [installation_dir]
    • setLocalMode

      public static void setLocalMode(boolean inLocalMode)
      Switches between the 'local' and 'DB' modes, depending on a given boolean flag.
      Parameters:
      inLocalMode - if true the utility operates in the 'local' mode, otherwise it operates in the 'DB' mode.
    • verifyComponentInstallation

      public static InstallationController.TestStatus verifyComponentInstallation(PackageBrowser pkgBrowser)
      Runs the installation test for a given installed pear component, and returns the TestStatus object with the test results.
      Parameters:
      pkgBrowser - The given package browser object of the installed pear package.
      Returns:
      The TestStatus object that contains the return code and possible error message of the test.
    • addMsgListener

      public void addMsgListener(MessageRouter.StdChannelListener listener)
      Adds a given object, implementing the MessageRouter.StdChannelListener interface to the list of standard channel listeners.
      Parameters:
      listener - The given MessageRouter.StdChannelListener object to be added to the list.
    • buildComponentClassPath

      public String buildComponentClassPath() throws IOException
      Builds CLASSPATH for the installed component, including CLASSPATH for all separate delegate components that are utilized by the main installed component, if any.
      Returns:
      The CLASSPATH for the installed component, or null, if the component has not been installed.
      Throws:
      IOException - If any I/O exception occurred.
    • buildComponentPath

      public String buildComponentPath()
      Builds PATH for the installed component, including PATH for all separate delegate components that are utilized by the main installed component, if any.
      Returns:
      The PATH for the installed component, or null, if the component has not been installed.
    • buildTableOfEnvVars

      public Properties buildTableOfEnvVars()
      Builds Properties table of required environment variables for the installed component, including environment variables for all separate delegate components that are utilized by the main installed component, if any.
      Returns:
      Properties table of required environment variables for the installed component, or null, if the component has not been installed.
    • finalize

      protected void finalize()
      Overrides standard finalize method.
      Overrides:
      finalize in class Object
    • installComponent

      public InstallationDescriptor installComponent()
      Performs installation of the specified component in the specified target directory, including all delegate components (if exist). If the installation completed successfully, returns the InstallationDescriptor object for the installed component. If the installation failed, returns null, and sets the installation error message that can be retrieved using the getInstallationMsg() method.
      Returns:
      The InstallationDescriptor object for the installed component, if the installation succeeded, null otherwise.
    • installComponentDescriptors

      public InstallationDescriptor installComponentDescriptors()
      Performs installation of XML descriptors of the specified component in the specified target directory, including XML descriptors of all the delegate components (if exist). If the installation completed successfully, returns the InstallationDescriptor object for the partially installed component. If the installation failed, returns null, and sets the installation error message that can be retrieved using the getInstallationMsg() method.
      Returns:
      The InstallationDescriptor object for the partially installed component, if the installation succeeded, null otherwise.
    • installDelegateComponents

      protected void installDelegateComponents()
      Performs installation of all separate delegate components for the specified main component.
    • installDelegateComponentsDescriptors

      protected void installDelegateComponentsDescriptors()
      Performs installation of XML descriptors for all separate delegate components of the specified main component.
    • generatePearSpecifier

      protected static void generatePearSpecifier(String mainComponentRootPath, String mainComponentId) throws IOException, SAXException
      generates the pearSpecifier to run the installed pear component. The descriptor that is created has the filename <componentID>_pear.xml and is created in the main component root directory. If the file already exist, it will be overridden.
      Parameters:
      mainComponentRootPath - main component root path where the pear was installed to
      mainComponentId - main component ID of the installed pear file
      Throws:
      IOException - if IO Exception
      SAXException - if SAX Exception
    • generateSetEnvFile

      protected void generateSetEnvFile() throws IOException
      Generates the file (batch file for Windows) containing specific environment variables that should be used to run the component.
      Throws:
      IOException - if any I/O exception occurred.
    • generatePackageConfigFile

      protected void generatePackageConfigFile() throws IOException
      Generates/updates the PEAR configuration file setting the main component root directory, as well as root directories of all related delegate components.
      Throws:
      IOException - if any I/O exception occurred.
    • getErrMsgWriter

      protected PrintWriter getErrMsgWriter()
      Returns:
      Error message writer for intraprocess messaging.
    • getInstallationMsg

      public String getInstallationMsg()
      Returns:
      The installation message (error message).
    • getOutMsgWriter

      protected PrintWriter getOutMsgWriter()
      Returns:
      Output message writer for intraprocess messaging.
    • getVerificationMsg

      public String getVerificationMsg()
      Returns:
      The verification message (error message).
    • removeMsgListener

      public void removeMsgListener(MessageRouter.StdChannelListener listener)
      Removes a given MessageRouter.StdChannelListener object from the list of standard channel listeners.
      Parameters:
      listener - The given MessageRouter.StdChannelListener object to be removed from the list.
    • saveInstallationDescriptorFile

      public void saveInstallationDescriptorFile() throws IOException
      Saves modified installation descriptor file.
      Throws:
      IOException - if any I/O exception occurred.
    • setInstallationError

      protected void setInstallationError(Exception error)
      Prints the stack trace of a given Exception object as the installation error message.
      Parameters:
      error - The given Exception object.
    • setInstallationMonitor

      public void setInstallationMonitor(InstallationController.InstallationMonitor monitor)
      Plugs-in a given implementation of the InstallationMonitor interface.
      Parameters:
      monitor - The given implementation of the InstallationMonitor interface.
    • setPackageSelector

      public void setPackageSelector(InstallationController.PackageSelector selector)
      Plugs-in a given implementation of the PackageSelector interface.
      Parameters:
      selector - The given implementation of the PackageSelector interface.
    • setVerificationError

      protected void setVerificationError(Exception error)
      Prints the stack trace of a given Exception object as the verification error message.
      Parameters:
      error - The given Exception object.
    • setUimaHomePath

      public void setUimaHomePath(String uimaHomePath)
      Sets a given UIMA local home directory path.
      Parameters:
      uimaHomePath - The given UIMA local home directory path.
    • terminate

      public void terminate()
      Terminates the MessageRouter thread. This method should be called after all the processing is finished.
    • verifyComponent

      public boolean verifyComponent()
      Verifies installations of the main component, and sets appropriate component status in the SITH DB.
      Returns:
      true if the verification completed successfully, false otherwise.