1. Introduction
   1.1. Project/Component Working Name: openInstaller JDK Selection

   1.2. Name of Document Author/Supplier: Gustave Loial

   1.3. Date of This Document: 07/31/07

   1.4. Name of Major Document Customer(s)/Consumer(s):
       1.4.1. The community this proposal comes from
         openInstaller (External)
         Message Queue 4.1 IFR (Internal)


   1.5. Email Aliases:
       1.5.1. Project alias: dev@openinstaller.java.net

       1.5.2. Project Lead: Gustave Loial <gustave.loial@sun.com>

       1.5.3. Interest List: dev@openinstaller.java.net

2. Project Summary

        This project is part of the openInstaller (formerly known as project
        Purple Haze) It does not modify any existing interface. It adds an
        interface to fulfill needs expressed by our users related to
        selecting JDK for use during install.

   2.1. Project Description:

       This project introduces a mechanism to select a JDK/JRE (a.k.a.
       a "Java Platform" for use by java-based products that have a dependency
       on JDK/JRE.  This project delivers a stock user interface and
       associated logic for detecting and allowing the user to select
       a JDK/JRE.

       The Java Platform selected by the user is unrelated to the Java
       Platform that is actually used to execute the install applicaiton.
       The one selected by the user is the one the product being installed
       will use at runtime of the product.

       Three main options are exposed on the user interface:
         - Use the Java Platform that is shipped with the distribution,
         - Use a JDK detected in expected locations,
         - Use a JDK previously installed but not detected by the module.

   2.2. Risks and Assumptions:
       The assumptions made here are broad enough to cover all situations:
       the user has the possibility to declare the path to a JDK had the
       module not detected it.  This approach greatly reduces the risks of
       unforeseen situations happening.

3. Context and Need Summary
   3.1. Problem Area:
       Some distributions do not want to change or introduce a new JDK
       on a system under installation. This modules allows the installer
       to reuse an already existent JDK for the product(s) being installed.

   3.2. Consumer/Requester:
       The Message Queue project has requested this functionality
       (WSARC/2006/536).

   3.3. Justification:
       The Message Queue distribution wants to minimize the modification on
       the system under installation and reuse as much as possible the
       already installed JDKs, as it is a widely-available technology with
       a large installed footprint.

   3.4. How will you know when you are done?:
       When it is possible to re-use an existing JDK during an installation
       based on openInstaller, or supply a bundled JDK.

4. Technical Description:
   4.1. Details:
       This project delivers a new stock UI page that is similar to the
       stock pages delivered in LSARC 2007/095 Purple Haze Component Framework.

       Prior to the rendition in a page, a detection algorithm will be run,
       looking in specific locations on the file system. This is a precaution
       avoiding a complete scan of the system and an effort to save time.
       This mechanism also searches system registeries such as the
       Windows Registry, for the presence of JDKs by looking in well-known
       locations.

       The candidate JDK discovered in the process are actually tested by
       running a basic  program that has two intents:
          1- verify that the JDK is operational
          2- identify the JDK in terms of version and vendor. That
          information is stored for the next phase of the process.

       The stock JDK Selection Page then conveys the following options
       to the user:
          a- install and use the JDK that ships with the rest of the
             distribution,
          b- pick a JDK from a subset of the detected JDKs,
          c- manually locate a JDK that is already present on the host by
             typing in a path to the JDK_HOME.

             Option a is selectable if the distribution actually contains a
             JDK. In which case the version and vendor are pulled directly
             from the JDK's dependency descriptor (see LSARC/2007/098)

       Option a is contingent on a given install application based on
       openInstaller delivering a a JDK.  If a product wishes to bundle
       a JDK, it must declare the name of the JDK using the
       following configuration parameters:

       JDK.Installation.JDK_PRODUCT_NAME - Name of the JDK product as declared
       in its dependency descriptor

       Option a is only enabled if the product actually contains a subproduct
       named the same as the value of the variable
       JDK.Installation.JDK_PRODUCT_NAME

       The product must also declare what the destination directory of the
       bundled JDK is using the JDK.Installation.JDK_HOME_BASEDIR variable,
       such that products that depend on knowing this location can reference
       it in their configuration schemas, and be passed this value during
       product configuration.

       Option b is contingent on the availability of JDKs that satisfy
       the version criterion.  In case some JDK were detected on the system
       and fulfill the version requirement, they are represented for the user
       to choose among them.

       The install developer can constrain the acceptable JDK versions which
       appear in the drop-down list of option b.  They can do so by declaring
       one or more acceptable version ranges using the
       JDKSelection.directory.JDK_VERSIONRANGE configuration parameter.
       The default value for this is "[1.5.0_12--INFINITY)" meaning
       1.5.0_12 or later (the exact syntax is specified in the syntax for
       version ranges described in 2007/095 Purple Haze Component Framework).

       Option c is always present and allows the user to enter a path to a
       JDK. This covers the cases where a JDK was previously installed in
       an unexpected location. No version comparison is made when the user\
       selects a JDK in this manner.

       If no JDKs are detected on the system, this option (b) is disabled.
       If no JDKs are detected on the system *and* no JDK is shipped along
       with the installer, the user is told as such and is forced to
       supply a path to an existing JDK.

   4.2. Bug/RFE Number(s):
       6537960: PH: The framework needs to detect whether a JDK is available
                on the system

   4.3. In Scope: No other area beyond the one described above.

   4.4. Out of Scope:

   4.5. Interfaces:

       Exported
       Interface                    Classification      Comments
       User Interface               Uncommitted
       JDKSelection configuration
         variable names and syntax  Uncommitted

       Imported
       Interface                    Classification         Comments
       Configuration Schema Format     Uncommitted         LSARC/2007/096
       Dependency Provider API         Uncommitted         LSARC/2007/098
       UI Template Schema              Uncommitted         LSARC/2007/099
       Java VM CLI[1]                  Standard
       Windows Registry CLI (reg.exe)  Unknown

       [1] Used to test a potential JDK to see if it really is a JDK/JRE.
           http://java.sun.com/j2se/1.5.0/docs/tooldocs/solaris/java.html

   4.6. Doc Impact: None

   4.7. Admin/Config Impact: None

   4.8. HA Impact: None

   4.9. I18N/L10N Impact: The error messages that can occur from this module
        are localized. There is no impact to localization beside the addition
        of the new messages

   4.10. Packaging & Delivery: N/A

   4.11. Security Impact: N/A

   4.12. Dependencies:

   LSARC 2007/096 Purple Haze: Configuration Framework
   LSARC 2007/098 Purple Haze: Dependency & Product Model
   LSARC 2007/099 Purple Haze: User Interface Framework


5. Reference Documents:

  http://blogs.sfbay.sun.com/PS72inst/
   - Example screenshots from MQ showing L10N Screen

6. Resources and Schedule:
   6.1. Projected Availability: Now

   6.2. Cost of Effort: feature design
       feature implementation
       tests
       documentation
       i18n
       -----------------------
       Total cost: 2 man-week
   6.3. ARC review type expected: FastTrack

7. Prototype Availability: Now



6. Resources and Schedule
    6.4. Steering Committee requested information
   	6.4.1. Consolidation C-team Name:
		unknown
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open