#!/bin/sh
#
# Start-up script for the Webclient Admin
# Copyright notice: Copyright (c) 2005 - 2021 Veryant
#
# Determine the version of ISCOBOL to use.
#
# If ISCOBOL has been set by the user, use that, otherwise, determine
# the location of this script (which is known to be $ISCOBOL/bin/webclient-admin)
# and derive the value of $ISCOBOL from that.
#
#
# Use following variables to override default settings:
# WEBCLIENT_ADMIN_HOME
# WEBCLIENT_ADMIN_OPTS
# WEBCLIENT_ADMIN_JAVA_EXE
# WEBCLIENT_ADMIN_JAVA_OPTS
# WEBCLIENT_ADMIN_LOG_FILE
# WEBCLIENT_ADMIN_PID_FILE
# 
# for example: 
# WEBCLIENT_ADMIN_HOME=/home/webclient WEBCLIENT_ADMIN_JAVA_EXE=/var/share/jdk8/bin/java ./webclient-admin start

if [ -z "${ISCOBOL}" ]
then
    D=`dirname $0`
    B=`basename $0`
    abspath="`cd \"${D}\" 2>/dev/null && pwd || echo \"${D}\"`/${B}"
    _BIN_DIR=`dirname ${abspath}`
    ISCOBOL=`dirname ${_BIN_DIR}`
fi

if [ -f "$ISCOBOL/bin/default_java.conf" ]
then
. $ISCOBOL/bin/default_java.conf
fi

HOME=$ISCOBOL/webclient/admin
 
#export OPTS="-h 0.0.0.0 -j $HOME/jetty.properties -c $HOME/webclient.config"
export OPTS="-j $HOME/jetty.properties -c $HOME/webclient.config"
export JAVA_EXE=
export JAVA_OPTS=-Xmx128M

if [ -f "$ISCOBOL/bin/webclient-admin.options" ]
then
   . $ISCOBOL/bin/webclient-admin.options
fi

if [ -n "$WEBCLIENT_ADMIN_HOME" ]; then
    HOME="$WEBCLIENT_ADMIN_HOME"
fi  

export LOG=$HOME/webclient-admin.out
export PID_PATH_NAME=$HOME/webclient-admin.pid

if [ -n "$WEBCLIENT_ADMIN_OPTS" ]; then
    OPTS=$WEBCLIENT_ADMIN_OPTS
fi  
if [ -n "$WEBCLIENT_ADMIN_JAVA_EXE" ]; then
    JAVA_EXE=$WEBCLIENT_ADMIN_JAVA_EXE
fi  
if [ -n "$WEBCLIENT_ADMIN_JAVA_OPTS" ]; then
    JAVA_OPTS=$WEBCLIENT_ADMIN_JAVA_OPTS
fi 
if [ -n "$WEBCLIENT_ADMIN_LOG_FILE" ]; then
    LOG=$HOME/$WEBCLIENT_ADMIN_LOG_FILE
fi 
if [ -n "$WEBCLIENT_ADMIN_PID_FILE" ]; then
    PID_PATH_NAME=$HOME/$WEBCLIENT_ADMIN_PID_FILE
fi 

cd $HOME
SCRIPTPATH=$ISCOBOL/bin/webclient-admin

#
# Determine the version of the JRE to use.
#
# If the variable ISCOBOL_JRE_ROOT has been set, use that, otherwise
# if ISCOBOL_JDK_ROOT is set, use that, otherwise derive the location 
# of the JRE from the version of 'java' that is on the user's path
#

if [ -z "${WEBCLIENT_ADMIN_JAVA_EXE}" ]
then
 if [ -z "${ISCOBOL_JRE_ROOT}" ]
 then
  if [ -z "${ISCOBOL_JDK_ROOT}" ]
  then

    _JAVA_LOCATION=`type java | cut -f3 -d' '` 

    while [ -h "$_JAVA_LOCATION" ]; do
       ls=`ls -ld "$_JAVA_LOCATION"`
       link=`expr "$ls" : '.*-> \(.*\)$'`
       if expr "$link" : '/.*' > /dev/null; then
         _JAVA_LOCATION="$link"
       else
         _JAVA_LOCATION=`dirname "$_JAVA_LOCATION"`/"$link"
       fi
    done  

    if [ -z "$_JAVA_LOCATION" ]
    then
        echo "ERROR: Could not locate JRE. Please ensure that 'java' is"
        echo "on your PATH or set ISCOBOL_JRE_ROOT"
        exit 1
    fi

    _JRE_BINDIR=`dirname $_JAVA_LOCATION`
    ISCOBOL_JRE_ROOT=`dirname $_JRE_BINDIR`
    if [ ! -f "$ISCOBOL_JRE_ROOT/bin/java" ]
    then
        ISCOBOL_JRE_ROOT=`dirname $ISCOBOL_JRE_ROOT`
        if [ ! -f "$ISCOBOL_JRE_ROOT/bin/java" ]
        then
            echo "ERROR: Could not locate java runtime."
            echo "Please ensure that ISCOBOL_JRE_ROOT is set correctly."
            exit 1
        fi
    fi
  else
    # if ISCOBOL_JDK_ROOT is set, then use it
    ISCOBOL_JRE_ROOT=$ISCOBOL_JDK_ROOT/jre
  fi
 fi
 
 if [ -z "${_JRE_BINDIR}" ]
 then
   JAVA_EXE=$ISCOBOL_JRE_ROOT/bin/java
 else
  JAVA_EXE=$_JRE_BINDIR/java
 fi
 else
  JAVA_EXE=$WEBCLIENT_ADMIN_JAVA_EXE
fi # endif $WEBCLIENT_ADMIN_JAVA_EXE
# See how we were called.
case "$1" in
    run)
        # Run Webclient Admin server
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            echo "Starting Webclient-admin... "
            $JAVA_EXE $JAVA_OPTS -jar $HOME/server/webclient-jetty-launcher.jar $HOME/webclient-admin-server.war -j jetty.properties -admin $OPTS 2>> $LOG >> $LOG &
            echo $! > $PID_PATH_NAME
            echo "Webclient started"
            wait $(cat $PID_PATH_NAME)
        else
            echo "Webclient Admin is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    start)
        # Run Webclient Admin server
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            echo "Starting Webclient-admin... "
            $JAVA_EXE $JAVA_OPTS -jar $HOME/server/webclient-jetty-launcher.jar $HOME/webclient-admin-server.war -j jetty.properties -admin $OPTS 2>> $LOG >> $LOG &
            echo $! > $PID_PATH_NAME
            echo "Webclient started"
        else
            echo "Webclient Admin is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            echo "Webclient Admin stopping ..."
            kill -9 $(cat $PID_PATH_NAME);
            sleep 1
            if [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
                echo "Webclient Admin stopped ..."
                rm $PID_PATH_NAME
            else
                echo "Stopping Webclient Admin failed."
                exit 1
            fi
        else
            echo "Webclient Admin is not running ..."
        fi
    ;;
    status)
        if [ -f $PID_PATH_NAME ]; then
            if [ `ps axo pid | grep "^ *$(cat $PID_PATH_NAME)$" | wc -l` -eq 0 ]; then
                rm $PID_PATH_NAME
            else
                echo "Webclient Admin is running with pid $(cat $PID_PATH_NAME)."
            fi
        else
            echo "Webclient Admin is not running ..."
        fi
    ;;
    restart)
        $SCRIPTPATH stop
        $SCRIPTPATH start
    ;;
    env)
        echo "ISCOBOL:$ISCOBOL"
        echo "HOME:$HOME"
        echo "OPTS:$OPTS"
        echo "JAVA_EXE:$JAVA_EXE"
        echo "JAVA_OPTS:$JAVA_OPTS"
        echo "LOG:$LOG"
        echo "PID:$PID_PATH_NAME"
        echo "SCRIPT:$SCRIPTPATH$0" 
    ;;

    *)
        echo "Usage: $0 {run|start|stop|restart|status|env}"
        exit 1
esac

exit 0
