#!/usr/bin/env bash

# Store arguments for use in local functions
FIRST_ARGUMENT=$1
ALL_ARGUMENTS=$@

# Declare Karaf executable's return code
KARAF_EXEC_RC=0

# Useful directories
SCRIPTDIR=$(dirname $0)
HOME_DIR=$(cd "${SCRIPTDIR}/.."; pwd -P)

# Useful files
PROPERTIES_FILE=$HOME_DIR/etc/custom.system.properties
RESTART_FILE="$SCRIPTDIR/restart.jvm"
GET=${SCRIPTDIR}/get_property

# Defines java garbage collection logging options
if [ -z "$EXTRA_JAVA_OPTS"]; then
    EXTRA_JAVA_OPTS="-Xlog:gc*=info:file=${HOME_DIR}/data/log/gc.log:time,uptime,level,tags:filecount=9,filesize=20m"
else
    EXTRA_JAVA_OPTS="-Xlog:gc*=info:file=${HOME_DIR}/data/log/gc.log:time,uptime,level,tags:filecount=9,filesize=20m $EXTRA_JAVA_OPTS"
fi
export EXTRA_JAVA_OPTS

# Return 0 (success/true) if a restart.jvm file was created to request a restart
is_restarting() {
    local RC=1
    if [ -f "$RESTART_FILE" ]; then
        RC=0
    fi
    return $RC
}

# Remove the restart file so we can detect later if restart was requested
clear_restart_flag() {
  rm -f $RESTART_FILE
}

shutdown_no_java_home_or_jre_home() {
    # Shutdown if JAVA_HOME and JRE_HOME is not set
    if [ -z $JAVA_HOME ] && [ -z $JRE_HOME ]; then
        echo "JAVA_HOME nor JRE_HOME is set. Set JAVA_HOME or JRE_HOME to proceed - Exiting."
        exit 1
    fi
}

attempt_startup() {
    # Process suspended while Karaf is running
    ${SCRIPTDIR}/karaf ${ALL_ARGUMENTS}
    KARAF_EXEC_RC=$?
}

attempt_shutdown() {
    if is_restarting; then
        echo "Restarting processes..."
    else
        exit $KARAF_EXEC_RC
    fi
}

while true; do
    clear_restart_flag
    shutdown_no_java_home_or_jre_home
    attempt_startup
    attempt_shutdown
done