#!/bin/sh
# *************************************************************
#
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#
# *************************************************************

jarfilename="JavaSetup.jar"
tempdir=/var/tmp/install_$$
java_runtime="java"
java_runtime_set="no"
java_runtime_found="no"
java_runtime_sufficient="no"
java_versions_supported="1.4 1.5 1.6"
rpm2cpio_found="no"
rpm_found="no"
is_64bit_arch="no"
arch64string="x86_64"
arch64string2="64-bit"
sunjavahotspot="HotSpot"
errortext=""
errorcode=""

start_java()
{
    umask 022

    echo "Using $java_runtime"
    echo `$java_runtime -version`
    echo "Running installer"

    # looking for environment variables

    home=""
    if [ "x" != "x$HOME" ]; then
        home=-DHOME=$HOME
    fi

    log_module_states=""
    if [ "x" != "x$LOG_MODULE_STATES" ]; then
        log_module_states=-DLOG_MODULE_STATES=$LOG_MODULE_STATES
    fi

    getuid_path=""
    if [ "x" != "x$GETUID_PATH" ]; then
        getuid_path=-DGETUID_PATH=$GETUID_PATH
    fi

    if [ "x" != "x$jrefile" ]; then
        jrecopy=-DJRE_FILE=$jrefile
    fi

    # run the installer class file
    echo $java_runtime $home $log_module_states $getuid_path $jrecopy -jar $jarfilename
    $java_runtime $home $log_module_states $getuid_path $jrecopy -jar $jarfilename
}

cleanup()
{
    if [ "x$tempdir" != "x" -a -d "$tempdir" ]; then
        rm -rf $tempdir
    fi
}

do_exit()
{
    exitstring=$errortext
    if [ "x" != "x$errorcode" ]; then
        exitstring="$exitstring (exit code $errorcode)"
    fi

    # simply echo the exitstring or open a xterm
    # -> dependent from tty

    if tty ; then
        echo $exitstring
    else
        mkdir $tempdir

        # creating error file
        errorfile=$tempdir/error

        cat > $errorfile << EOF
echo "$exitstring"
echo "Press return to continue ..."
read a
EOF

        chmod 755 $errorfile

        # searching for xterm in path
        xtermname="xterm"
        xtermfound="no";
        for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
            if [ -x "$i/$xtermname" -a ! -d "$i/$xtermname" ]; then
                xtermname="$i/$xtermname"
                xtermfound="yes"
                break
            fi
        done

        if [ $xtermfound = "no" -a "`uname -s`" = "SunOS" ]; then
            if [ -x /usr/openwin/bin/xterm ]; then
                xtermname=/usr/openwin/bin/xterm
                xtermfound="yes"
            fi
        fi

        if [ $xtermfound = "yes" ]; then
            $xtermname -e $errorfile
        fi
    fi

    cleanup

    exit $errorcode
}

set_jre_for_uninstall()
{
    # if "uninstalldata" exists, this is not required
    if [ ! -d "uninstalldata" ]; then
        packagepath="RPMS"
        jrefile=`find $packagepath -type f -name "jre*.rpm" -print`
        jrefile=`basename $jrefile`
        if [ -z "$jrefile" ]; then
            jrefile="notfound"
        fi

        # check existence of jre rpm
        if [ ! -f $packagepath/$jrefile ]; then
            errortext="Error: Java Runtime Environment (JRE) not found in directory: $packagepath"
            errorcode="4"
            do_exit
        fi
    fi
}

install_linux_rpm()
{
    # Linux requires usage of rpm2cpio to install JRE with user privileges
    # 1. --relocate /usr/java=/var/tmp does not work, because not all files are
    #    relocatable. Some are always installed into /etc
    # 2. --root only works with root privileges. With user privileges only the
    #    database is shifted, but not the files.

    # On Linux currently rpm2cpio is required (and rpm anyhow)

    find_rpm2cpio()

    if [ ! "$rpm2cpio_found" = "yes" ]; then
        errortext="Error: Did not find rpm2cpio. rpm2cpio is currently required for installations on Linux."
        errorcode="11"
        do_exit
    fi

    find_rpm()

    if [ ! "$rpm_found" = "yes" ]; then
        errortext="Error: Did not find rpm. rpm is currently required for installations on Linux."
        errorcode="12"
        do_exit
    fi

    # jrefile=jre-6-linux-i586.rpm
    # javahome=usr/java/jre1.6.0

    packagepath="RPMS"

    # using "uninstalldata" for uninstallation
    if [ -d "uninstalldata" ]; then
        packagepath="uninstalldata/jre"
    fi

    jrefile=`find $packagepath -type f -name "jre*.rpm" -print`
    jrefile=`basename $jrefile`
    if [ -z "$jrefile" ]; then
        jrefile="notfound"
    fi

    # check existence of jre rpm
    if [ ! -f $packagepath/$jrefile ]; then
        errortext="Error: Java Runtime Environment (JRE) not found in directory: $packagepath"
        errorcode="4"
        do_exit
    fi

    PACKED_JARS="lib/rt.jar lib/jsse.jar lib/charsets.jar  lib/ext/localedata.jar lib/plugin.jar lib/javaws.jar lib/deploy.jar"

    mkdir $tempdir

    trap 'rm -rf $tempdir; exit 1' HUP INT QUIT TERM

    tempjrefile=$tempdir/$jrefile
    cp $packagepath/$jrefile $tempjrefile

    if [ ! -f "$tempjrefile" ]; then
        errortext="Error: Failed to copy Java Runtime Environment (JRE) temporarily."
        errorcode="5"
        do_exit
    fi

    # check if copy was successful
    if [ -x /usr/bin/sum ]; then

        echo "Checksumming..."

        sumA=`/usr/bin/sum $packagepath/$jrefile`
        index=1
        for s in $sumA; do
            case $index in
                1)
                    sumA1=$s;
                    index=2;
                    ;;
                2)
                    sumA2=$s;
                    index=3;
                    ;;
            esac
        done

        sumB=`/usr/bin/sum $tempjrefile`
        index=1
        for s in $sumB; do
            case $index in
                1)
                    sumB1=$s;
                    index=2;
                    ;;
                2)
                    sumB2=$s;
                    index=3;
                    ;;
            esac
        done

        # echo "Checksum 1: A1: $sumA1 B1: $sumB1"
        # echo "Checksum 2: A2: $sumA2 B2: $sumB2"

        if [ $sumA1 -ne $sumB1 ] || [ $sumA2 -ne $sumB2 ]; then
            errortext="Error: Failed to install Java Runtime Environment (JRE) temporarily."
            errorcode="6"
            do_exit
        fi
    else
        echo "Can't find /usr/bin/sum to do checksum. Continuing anyway."
    fi

    # start to install jre
    echo "Extracting ..."
    olddir=`pwd`
    cd "$tempdir"
    rpm2cpio $tempjrefile | cpio -i --make-directories
    rm -f $tempjrefile # we do not need it anymore, so conserve discspace

    javahomeparent=usr/java
    javahomedir=`find $javahomeparent -maxdepth 1 -type d -name "jre*" -print`
    javahomedir=`basename $javahomedir`
    if [ -z "$javahomedir" ]; then
        javahomedir="notfound"
    fi

    javahome=$javahomeparent/$javahomedir

    if [ ! -d ${javahome} ]; then
        errortext="Error: Failed to extract the Java Runtime Environment (JRE) files."
        errorcode="7"
        do_exit
    fi

    UNPACK_EXE=$javahome/bin/unpack200
    if [ -f $UNPACK_EXE ]; then
        chmod +x $UNPACK_EXE
        packerror=""
        for i in $PACKED_JARS; do
            if [ -f $javahome/`dirname $i`/`basename $i .jar`.pack ]; then
                # printf "Creating %s\n" $javahome/$i
                $UNPACK_EXE $javahome/`dirname $i`/`basename $i .jar`.pack $javahome/$i
                if [ $? -ne 0 ] || [ ! -f $javahome/$i ]; then
                    printf "ERROR: Failed to unpack JAR file:\n\n\t%s\n\n" $i
                    printf "Installation failed. Please refer to the Troubleshooting Section of\n"
                    printf "the Installation Instructions on the download page.\n"
                    packerror="1"
                    break
                fi

                # remove the old pack file
                rm -f $javahome/`dirname $i`/`basename $i .jar`.pack
            fi
        done
        if [  "$packerror" = "1" ]; then
            if [ -d $javahome ]; then
                /bin/rm -rf $javahome
            fi

            errortext="Error: Failed to extract the Java Runtime Environment (JRE) files."
            errorcode="8"
            do_exit
        fi
    fi

    PREFS_LOCATION="`echo \"${javahome}\" | sed -e 's/^jdk.*/&\/jre/'`/.systemPrefs"

    if [ ! -d "${PREFS_LOCATION}" ]; then
        mkdir -m 755 "${PREFS_LOCATION}"
    fi
    if [ ! -f "${PREFS_LOCATION}/.system.lock" ]; then
        touch "${PREFS_LOCATION}/.system.lock"
        chmod 644 "${PREFS_LOCATION}/.system.lock"
    fi
    if [ ! -f "${PREFS_LOCATION}/.systemRootModFile" ]; then
        touch "${PREFS_LOCATION}/.systemRootModFile"
        chmod 644 "${PREFS_LOCATION}/.systemRootModFile"
    fi

    if [ x$ARCH = "x32" ] && [ -f "$javahome/bin/java" ]; then
        "$javahome/bin/java" -client -Xshare:dump > /dev/null 2>&1
    fi

    java_runtime=$tempdir/$javahome/bin/java

    # Make symbolic links to all TrueType font files installed in the system
    # to avoid garbles for Japanese, Korean or Chinese
    language=`printenv LANG | cut -c 1-3`
    if [ x$language = "xja_" -o x$language = "xko_" -o x$language = "xzh_" ]; then
	    font_fallback_dir=$javahome/lib/fonts/fallback
	    echo "Making symbolic links to TrueType font files into $font_fallback_dir."
	    mkdir -p $font_fallback_dir
	    ttf_files=`locate "*.ttf" | xargs`
        if [ x$ttf_files = "x" ]; then
            ttf_files=`find /usr/share/fonts/ -name "*ttf"`
            if [ x$ttf_files = "x" ]; then
                ttf_files=`find /usr/X11R6/lib/ -name "*ttf"`
            fi
        fi
	    ln -s $ttf_files $font_fallback_dir
    fi

    echo "Done."
    cd "$olddir"
}

find_rpm2cpio()
{
    # searching for rpm2cpio in path
    for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
        if [ -x "$i/rpm2cpio" -a ! -d "$i/$rpm2cpio" ]; then
            rpm2cpio_found="yes"
            break
        fi
    done
}

find_rpm()
{
    # searching for rpm in path
    for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
        if [ -x "$i/rpm" -a ! -d "$i/$rpm" ]; then
            rpm_found="yes"
            break
        fi
    done
}

check_architecture()
{
    # Check, if system and installation set fit together (x86 and sparc).
    # If not, throw a warning.
    # Architecture of the installation set is saved in file "installdata/xpd/setup.xpd"
    # <architecture>sparc</architecture> or <architecture>i386</architecture>
    # Architecture of system is determined with "uname -p"

    setupxpdfile="installdata/xpd/setup.xpd"

    if [ -f $setupxpdfile ]; then
        platform=`uname -p`	# valid values are "sparc" or "i386"
        searchstring="<architecture>$platform</architecture>"
        match=`cat $setupxpdfile | grep $searchstring`

        if [ -z "$match" ]; then
            # architecture does not fit, warning required
            if [ "$platform" = "sparc" ]; then
                echo "Warning: This is an attempt to install Solaris x86 packages on Solaris Sparc."
            else
                echo "Warning: This is an attempt to install Solaris Sparc packages on Solaris x86."
            fi
        fi
    fi
}

find_jre_in_path()
{
    # searching for java runtime in path
    for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
        if [ -x "$i/$java_runtime" -a ! -d "$i/$java_runtime" ]; then
            java_runtime="$i/$java_runtime"
            java_runtime_found="yes"
            break
        fi
    done
}

check_jre_version()
{
    # check version of an installed JRE
    javaoutput=`$java_runtime -version 2>&1 | tail ${tail_args} -1`
    hotspot=`echo $javaoutput | grep $sunjavahotspot`
    if [ ! -z "$hotspot" ]; then
        for i in $java_versions_supported; do
            versionmatch=`echo $javaoutput | grep $i`
            if [ ! -z "$versionmatch" ]; then
                java_runtime_sufficient="yes"
                break
            fi
        done

        # check new version format, where version number is not part of line 3 (1.6)
        if [ ! "$java_runtime_sufficient" = "yes" ]; then
            javaoutput=`$java_runtime -version 2>&1 | head ${tail_args} -3`
            for i in $java_versions_supported; do
                versionmatch=`echo $javaoutput | grep $i`
                if [ ! -z "$versionmatch" ]; then
                    java_runtime_sufficient="yes"
                    break
                fi
            done
        fi
    fi
}

check_linux_jre_version()
{
    # check version of an installed JRE
    javaoutput=`$java_runtime -version 2>&1 | head -1`

    for i in $java_versions_supported; do
        versionmatch=`echo $javaoutput | grep $i`
        if [ ! -z "$versionmatch" ]; then
            java_runtime_sufficient="yes"
            break
        fi
    done
}

check_64bit_architecture()
{
    # check system architecture using "uname -m"
    # unameoutput=`uname -m 2>&1`
    # x64str=`echo $unameoutput | grep $arch64string`

    # check system architecture using "file /usr/bin/file"
    fileoutput=`file /usr/bin/file 2>&1`
    x64str=`echo $fileoutput | grep $arch64string2`

    if [ ! -z "$x64str" ]; then
        is_64bit_arch="yes"
        echo "64-bit Linux"
    fi
}

# the user might want to specify java runtime on the commandline
USAGE="Usage: $0 [ -j <java_runtime> ]"
while getopts hj: opt; do
    echo "Parameter: $opt"
    case $opt in
        j)  java_runtime_set="yes";
            java_runtime="${OPTARG}"
            if [ ! -f "$java_runtime" ]; then
                errortext="Error: Invalid java runtime $java_runtime, file does not exist."
                errorcode="2"
                do_exit
            fi
            if [ ! -x "$java_runtime" ]; then
                errortext="Error: Invalid java runtime $java_runtime, not an executable file."
                errorcode="3"
                do_exit
            fi
            java_runtime_found="yes";
            ;;
        h)  echo ${USAGE}
            errortext=""
            errorcode=""
            do_exit
            ;;
        \?) echo ${USAGE}
            errortext=""
            errorcode=""
            do_exit
            ;;
    esac
done

# changing into setup directory
cd "`dirname "$0"`"

# prepare jre, if not set on command line
if [ "$java_runtime_set" != "yes" ]; then
    platform=`uname -s`
    if [ "`uname -s`" = "Linux" ]; then
        check_64bit_architecture
        if [ "$is_64bit_arch" = "no" ]; then
            install_linux_rpm
        else
            find_jre_in_path
            if [ "$java_runtime_found" = "yes" ]; then
                check_linux_jre_version
                if [ ! "$java_runtime_sufficient" = "yes" ]; then
                    errortext="Error: Did not find a valid Java Runtime Environment (JRE). Required JRE versions: $java_versions_supported"
                    errorcode="14"
                    do_exit
                fi
            else
                errortext="Error: Did not find an installed Java Runtime Environment (JRE)."
                errorcode="15"
                do_exit
            fi
        fi
    elif [ "`uname -s`" = "SunOS" ]; then
        check_architecture
        find_jre_in_path
        if [ "$java_runtime_found" = "yes" ]; then
            check_jre_version
            if [ ! "$java_runtime_sufficient" = "yes" ]; then
                errortext="Error: Did not find a valid Java Runtime Environment (JRE). Required JRE versions: $java_versions_supported"
                errorcode="9"
                do_exit
            fi
        else
            errortext="Error: Did not find an installed Java Runtime Environment (JRE)."
            errorcode="10"
            do_exit
        fi
    else
        errortext="Error: Platform $platform not supported for Java Runtime Environment (JRE) installation."
        errorcode="1"
        do_exit
    fi
fi

# jre for Linux is also required, if java runtime is set (for uninstallation mode)
if [ "$java_runtime_set" = "yes" ]; then
    platform=`uname -s`
    if [ "`uname -s`" = "Linux" ]; then
        set_jre_for_uninstall
    fi
fi

start_java

cleanup

exit 0
