#!/bin/bash

# Copyright: 2023 Virtuozzo International GmbH

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

[ -n "${JAVACOMMONENGINELIB_VERSION:-}" ] && return 0;
JAVACOMMONENGINELIB_VERSION="0.1";
$PROGRAM 'grep'
$PROGRAM 'setcap'
$PROGRAM 'patchelf'

JAVA_COMMON_PATH="/usr/java"
JAVA6_DIR=$(ls $JAVA_COMMON_PATH | $GREP jdk1.6 | sort -r | head -n 1) ;
JAVA7_DIR=$(ls $JAVA_COMMON_PATH | $GREP jdk1.7 | sort -r | head -n 1) ;
JAVA8_DIR=$(ls $JAVA_COMMON_PATH | $GREP jdk1.8 | sort -r | head -n 1) ;
JAVA_LATEST_DIR="/usr/java/latest"
JAVA_DEFAULT_DIR="/usr/java/default"


function switchEngine(){

    local engine_type=$1

    case $engine_type in
        "java6" )
        local java_dir="$JAVA6_DIR"
    ;;
        "java7" )
        local java_dir="$JAVA7_DIR"
    ;;
        "java8" )
        local java_dir="$JAVA8_DIR"
    ;;
    *)
    return 1

    esac

    [ -L "$JAVA_LATEST_DIR" ] && { set -f; rm "$JAVA_LATEST_DIR"; set +f; }
    [ ! -z "$java_dir" ] && ln -s "$java_dir" "$JAVA_LATEST_DIR";

    [ -L "$JAVA_DEFAULT_DIR" ] && { set -f; rm "$JAVA_DEFAULT_DIR"; set +f; }
    [ ! -z "$java_dir" ] && ln -s "$JAVA_LATEST_DIR" "$JAVA_DEFAULT_DIR";

    [ -d "$JAVA_COMMON_PATH" ] && chown -R "$DATA_OWNER" "$JAVA_COMMON_PATH" 2>>"$JEM_CALLS_LOG";

    # Do not setcap for java6
    [[ "x${engine_type}" == "xjava6" ]] && return 0

    [ -e "/etc/ld.so.conf.d/java.conf" ] && /bin/rm "/etc/ld.so.conf.d/java.conf"

    echo -e "$(find /usr/java/${java_dir} -name libjli.so -printf "%h\n")" > "/etc/ld.so.conf.d/java.conf"
    ldconfig

    $SETCAP cap_net_bind_service=+epi "/usr/java/${java_dir}/bin/java"
    $SETCAP cap_net_bind_service=+epi "/usr/java/${java_dir}/jre/bin/java"

    $PATCHELF --set-rpath "/usr/java/${java_dir}/jre/lib/amd64/jli" "/usr/java/${java_dir}/jre/bin/java"
    $PATCHELF --set-rpath "/usr/java/${java_dir}/lib/amd64/jli" "/usr/java/${java_dir}/bin/java"

    #TODO: Investigate and fix this double-run
    $SETCAP cap_net_bind_service=+epi "/usr/java/${java_dir}/bin/java"
    $SETCAP cap_net_bind_service=+epi "/usr/java/${java_dir}/jre/bin/java"
}


function describeSetVersion(){
	echo "\n\t<version>\tset java version";
}

