#!/bin/sh

realpath() {
  OURPWD=${PWD}
  cd "$(dirname "${1}")" || exit 2
  LINK=$(ls -l "$(basename "${1}")" | awk -F"-> " '{print $2}')
  while [ "${LINK}" ]; do
	  echo "link: ${LINK}" >&2
    cd "$(dirname "${LINK}")" || exit 2
    LINK=$(ls -l "$(basename "${1}")" | awk -F"-> " '{print $2}')
  done
  REALPATH="${PWD}/$(basename "${1}")"
  cd "${OURPWD}" || exit 2
  echo "${REALPATH}"
}

REALNAME=$(realpath "$0")
DIRNAME=$(dirname "${REALNAME}")
PROGNAME=$(basename "${REALNAME}")

#
# Load common functions
#
. "${DIRNAME}/inc"

#
# Sourcing environment settings for karaf similar to tomcats setenv
#
KARAF_SCRIPT="${PROGNAME}"
export KARAF_SCRIPT
if [ -f "${DIRNAME}/setenv" ]; then
  . "${DIRNAME}/setenv"
fi

setupClassPath() {
    # Add the jars in the lib dir
    CLASSPATH="${KARAF_HOME}/system/org/apache/karaf/org.apache.karaf.client/4.1.3/org.apache.karaf.client-4.1.3.jar"
    CLASSPATH="${CLASSPATH}:${KARAF_HOME}/system/org/apache/sshd/sshd-core/1.6.0/sshd-core-1.6.0.jar"
    CLASSPATH="${CLASSPATH}:${KARAF_HOME}/system/org/fusesource/jansi/jansi/1.16/jansi-1.16.jar"
    CLASSPATH="${CLASSPATH}:${KARAF_HOME}/system/org/jline/jline/3.5.0/jline-3.5.0.jar"
    CLASSPATH="${CLASSPATH}:${KARAF_HOME}/system/org/slf4j/slf4j-api/1.7.12/slf4j-api-1.7.12.jar"
}

init() {
    # Determine if there is special OS handling we must perform
    detectOS

    # Unlimit the number of file descriptors if possible
    unlimitFD

    # Locate the Karaf home directory
    locateHome

    # Locate the Karaf base directory
    locateBase

    # Locate the Karaf data directory
    locateData

    # Locate the Karaf etc directory
    locateEtc

    # Setup the native library path
    setupNativePath

    # Locate the Java VM to execute
    locateJava

    # Determine the JVM vendor
    detectJVM

    # Setup default options
    setupDefaults

    # Setup classpath
    setupClassPath
}

run() {
    convertPaths
    exec "${JAVA}" ${JAVA_OPTS} \
        -Dkaraf.instances="${KARAF_HOME}/instances" \
        -Dkaraf.home="${KARAF_HOME}" \
        -Dkaraf.base="${KARAF_BASE}" \
        -Dkaraf.etc="${KARAF_ETC}" \
        -Djava.io.tmpdir="${KARAF_DATA}/tmp" \
        -Djava.util.logging.config.file="${KARAF_BASE}/etc/java.util.logging.properties" \
        ${KARAF_OPTS} ${OPTS} \
        -classpath "${CLASSPATH}" \
        org.apache.karaf.client.Main "$@"
}

main() {
    init
    run "$@"
}

main "$@"
