org.apache.uima.pear.tools

## 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:
    `InstallationDescriptor`, `InstallationProcessor`, `InstallationTester`, `MessageRouter`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `InstallationController.InstallationMonitor` The `InstallationMonitor` interface defines methods required for notifying of component installation status and location of the installed PEAR packages.
    `static interface` | `InstallationController.PackageSelector` The `PackageSelector` interface defines methods required for manually or automatically selecting installed PEAR package root directories and PEAR package files.
    `static class` | `InstallationController.TestStatus` The `TestStatus` class encapsulates attributes related to the results of the 'serviceability' verification test.

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static String` | `CLASSPATH_VAR`
    `protected static String` | `INSTALL_IN_ROOT_OPT`
    `static String` | `INSTALLATION_COMPLETED`
    `static String` | `INSTALLATION_FAILED`
    `static String` | `INSTALLATION_IN_PROGRESS`
    `protected static String` | `INSTALLATION_TESTER_APP`
    `protected static String` | `JAR_FILE_EXT`
    `protected static String` | `LOCAL_OPT`
    `static String` | `PACKAGE_BIN_DIR`
    `static String` | `PACKAGE_CONF_DIR`
    `static String` | `PACKAGE_CONFIG_FILE`
    `static String` | `PACKAGE_DATA_DIR`
    `static String` | `PACKAGE_DESC_DIR`
    `static String` | `PACKAGE_DOC_DIR`
    `static String` | `PACKAGE_LIB_DIR`
    `static String` | `PACKAGE_METADATA_DIR`
    `static String` | `PACKAGE_RESOURCES_DIR`
    `static String` | `PACKAGE_SOURCES_DIR`
    `protected static String` | `PATH_VAR`
    `static String` | `PEAR_DESC_FILE_POSTFIX`
    `static String` | `SET_ENV_FILE`
    `protected static String` | `UIMA_HOME_ENV`
    `protected static String` | `UIMA_LIB_DIR`
    `static String` | `VERIFICATION_CANCELLED`
    `static String` | `VERIFICATION_COMPLETED`
    `static String` | `VERIFICATION_FAILED`
    `static String` | `VERIFICATION_IN_PROGRESS`
    `protected static String` | `VINCI_LIB_DIR`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `` | `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.
    `` | `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.
    `` | `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.
    `` | `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.
    `` | `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.
    `` | `InstallationController(String componentId, String rootDirPath)` Constructs an instance of the `InstallationController` class for a given component and a given installation root directory.
    `` | `InstallationController(String componentId, String rootDirPath, boolean installInRootDir)` Constructs an instance of the `InstallationController` class for a given component and a given installation root directory.
    `` | `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.
    `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.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected static StringBuffer` | `addListOfJarFiles(File libDir, StringBuffer listBuffer)` Appends a list of JAR files in a given lib directory, separated with the OS dependent separator (';' or ':'), to a given initial `StringBuffer` object.
    `void` | `addMsgListener(MessageRouter.StdChannelListener listener)` Adds a given object, implementing the `MessageRouter.StdChannelListener` interface to the list of standard channel listeners.
    `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).
    `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.
    `String` | `buildComponentClassPath()` Builds `CLASSPATH` for the installed component, including `CLASSPATH` for all separate delegate components that are utilized by the main installed component, if any.
    `static String` | `buildComponentClassPath(String compRootDirPath, InstallationDescriptor insdObject, boolean addLibDir)` Creates a string that should be added to the CLASSPATH for a given installed component associated with a given installation descriptor object.
    `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.
    `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.
    `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.
    `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.
    `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.
    `static Properties` | `buildTableOfEnvVars(InstallationDescriptor insdObject)` Creates a `Properties` table that contains (name, value) pairs of environment variables settings for a given installation descriptor object.
    `static String` | `buildUIMAClassPath(String uimaHomeEnv)` Creates a string that should be added to the CLASSPATH environment variable for UIMA framework.
    `static boolean` | `deleteInstalledFiles(String componentId, File parentDir, boolean includeDelegates)` Deletes all installed files for a given component in a given parent directory.
    `static String` | `extractFilesFromPEARFile(String pearFileLocation, String fileExt, File targetDir, boolean cleanTarget)` Extracts files with a given extension from a given PEAR file into a given target directory.
    `protected static String` | `extractFilesFromPEARFile(String pearFileLocation, String fileExt, File targetDir, InstallationController controller, boolean cleanTarget)` Internal implementatiton of the `extractFilesFromPEARFile` method, which allows sending messages to the OUT and ERR queues.
    `static String` | `extractPEARFile(String pearFileLocation, File installationDir, boolean cleanTarget)` Extracts all files of a given component from a given PEAR file into a given target directory.
    `protected static String` | `extractPEARFile(String pearFileLocation, File installationDir, InstallationController controller, boolean cleanTarget)` Internal implementation of the `extractPEARFile` method, which allows sending messages to the OUT and ERR queues.
    `protected void` | `finalize()` Overrides standard `finalize` method.
    `protected void` | `generatePackageConfigFile()` Generates/updates the PEAR configuration file setting the main component root directory, as well as root directories of all related delegate components.
    `protected static void` | `generatePearSpecifier(String mainComponentRootPath, String mainComponentId)` generates the pearSpecifier to run the installed pear component.
    `protected void` | `generateSetEnvFile()` Generates the file (batch file for Windows) containing specific environment variables that should be used to run the component.
    `protected static Hashtable<String,InstallationDescriptor>` | `getDelegateInstallationDescriptors(Hashtable<String,String> installationTable)` Creates a `Hashtable` that contains (compId, InsD) pairs for all separate delegate components specified in a given installation table.
    `protected PrintWriter` | `getErrMsgWriter()`
    `static String` | `getHostIpAddress()`
    `String` | `getInstallationMsg()`
    `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.
    `protected PrintWriter` | `getOutMsgWriter()`
    `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.
    `String` | `getVerificationMsg()`
    `InstallationDescriptor` | `installComponent()` Performs installation of the specified component in the specified target directory, including all delegate components (if exist).
    `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).
    `protected void` | `installDelegateComponents()` Performs installation of all separate delegate components for the specified main component.
    `protected void` | `installDelegateComponentsDescriptors()` Performs installation of XML descriptors for all separate delegate components of the specified main component.
    `static void` | `main(String[] args)` Starts the application.
    `void` | `removeMsgListener(MessageRouter.StdChannelListener listener)` Removes a given `MessageRouter.StdChannelListener` object from the list of standard channel listeners.
    `void` | `saveInstallationDescriptorFile()` Saves modified installation descriptor file.
    `protected void` | `setInstallationError(Exception error)` Prints the stack trace of a given `Exception` object as the installation error message.
    `void` | `setInstallationMonitor(InstallationController.InstallationMonitor monitor)` Plugs-in a given implementation of the `InstallationMonitor` interface.
    `static void` | `setLocalMode(boolean inLocalMode)` Switches between the 'local' and 'DB' modes, depending on a given `boolean` flag.
    `void` | `setPackageSelector(InstallationController.PackageSelector selector)` Plugs-in a given implementation of the `PackageSelector` interface.
    `void` | `setUimaHomePath(String uimaHomePath)` Sets a given UIMA local home directory path.
    `protected void` | `setVerificationError(Exception error)` Prints the stack trace of a given `Exception` object as the verification error message.
    `void` | `terminate()` Terminates the `MessageRouter` thread.
    `boolean` | `verifyComponent()` Verifies installations of the main component, and sets appropriate component status in the SITH DB.
    `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.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### INSTALLATION_IN_PROGRESS

          public static final String INSTALLATION_IN_PROGRESS

      See Also:
        Constant Field Values

    - #### INSTALLATION_FAILED

          public static final String INSTALLATION_FAILED

      See Also:
        Constant Field Values

    - #### INSTALLATION_COMPLETED

          public static final String INSTALLATION_COMPLETED

      See Also:
        Constant Field Values

    - #### VERIFICATION_IN_PROGRESS

          public static final String VERIFICATION_IN_PROGRESS

      See Also:
        Constant Field Values

    - #### VERIFICATION_FAILED

          public static final String VERIFICATION_FAILED

      See Also:
        Constant Field Values

    - #### VERIFICATION_COMPLETED

          public static final String VERIFICATION_COMPLETED

      See Also:
        Constant Field Values

    - #### VERIFICATION_CANCELLED

          public static final String VERIFICATION_CANCELLED

      See Also:
        Constant Field Values

    - #### INSTALLATION_TESTER_APP

          protected static final String INSTALLATION_TESTER_APP

      See Also:
        Constant Field Values

    - #### PACKAGE_CONFIG_FILE

          public static final String PACKAGE_CONFIG_FILE

      See Also:
        Constant Field Values

    - #### PACKAGE_METADATA_DIR

          public static final String PACKAGE_METADATA_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_BIN_DIR

          public static final String PACKAGE_BIN_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_CONF_DIR

          public static final String PACKAGE_CONF_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_DATA_DIR

          public static final String PACKAGE_DATA_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_DESC_DIR

          public static final String PACKAGE_DESC_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_DOC_DIR

          public static final String PACKAGE_DOC_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_LIB_DIR

          public static final String PACKAGE_LIB_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_RESOURCES_DIR

          public static final String PACKAGE_RESOURCES_DIR

      See Also:
        Constant Field Values

    - #### PACKAGE_SOURCES_DIR

          public static final String PACKAGE_SOURCES_DIR

      See Also:
        Constant Field Values

    - #### SET_ENV_FILE

          public static final String SET_ENV_FILE

      See Also:
        Constant Field Values

    - #### PEAR_DESC_FILE_POSTFIX

          public static final String PEAR_DESC_FILE_POSTFIX

      See Also:
        Constant Field Values

    - #### UIMA_HOME_ENV

          protected static final String UIMA_HOME_ENV

      See Also:
        Constant Field Values

    - #### UIMA_LIB_DIR

          protected static final String UIMA_LIB_DIR

      See Also:
        Constant Field Values

    - #### VINCI_LIB_DIR

          protected static final String VINCI_LIB_DIR

      See Also:
        Constant Field Values

    - #### JAR_FILE_EXT

          protected static final String JAR_FILE_EXT

      See Also:
        Constant Field Values

    - #### CLASSPATH_VAR

          public static final String CLASSPATH_VAR

      See Also:
        Constant Field Values

    - #### PATH_VAR

          protected static final String PATH_VAR

      See Also:
        Constant Field Values

    - #### LOCAL_OPT

          protected static final String LOCAL_OPT

      See Also:
        Constant Field Values

    - #### INSTALL_IN_ROOT_OPT

          protected static final String INSTALL_IN_ROOT_OPT

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### 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 Detail

    - #### 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.

Copyright © 2006–2018 The Apache Software Foundation. All rights reserved.