#!/bin/sh
#
# Start-up script for the Webclient Test Tool
# Copyright notice: Copyright (c) 2005 - 2024 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-testtool)
# and derive the value of $ISCOBOL from that.
#
#
# Use following variables to override default settings:
# WEBCLIENT_SP_HOME
# WEBCLIENT_SP_OPTS
# WEBCLIENT_SP_JAVA_EXE
# WEBCLIENT_SP_JAVA_OPTS
# WEBCLIENT_SP_LOG_FILE
# WEBCLIENT_SP_PID_FILE
# 
# for example: 
# WEBCLIENT_SP_HOME=/home/webclient-testtool WEBCLIENT_SP_JAVA_EXE=/var/share/jdk8/bin/java ./webclient-testtool 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/test-tool
 
export OPTS="-j $HOME/jetty.properties -c $HOME/webclient-app.config"
export JAVA_EXE=
export JAVA_OPTS=-Xmx2g


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

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

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

if [ -n "$WEBCLIENT_SP_OPTS" ]; then
    OPTS=$WEBCLIENT_SP_OPTS
fi  
if [ -n "$WEBCLIENT_SP_JAVA_EXE" ]; then
    JAVA_EXE=$WEBCLIENT_SP_JAVA_EXE
fi  
if [ -n "$WEBCLIENT_SP_JAVA_OPTS" ]; then
    JAVA_OPTS=$WEBCLIENT_SP_JAVA_OPTS
fi 
if [ -n "$WEBCLIENT_SP_LOG_FILE" ]; then
    LOG=$HOME/$WEBCLIENT_SP_LOG_FILE
fi 
if [ -n "$WEBCLIENT_SP_PID_FILE" ]; then
    PID_PATH_NAME=$HOME/$WEBCLIENT_SP_PID_FILE
fi 

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

#
# 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_SP_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_SP_JAVA_EXE
fi # endif $WEBCLIENT_SP_JAVA_EXE

if [ -z `command -v xvfb-run` ]; then
    echo "Unable to locate xvfb-run command. Please install Xvfb before starting WebClient." 
    exit 1
fi
if [ ! -z `command -v ldconfig` ]; then
    if [ `ldconfig -p | grep -i libxext.so | wc -l` -eq 0 ]; then 
        echo "Missing dependent library libXext."
        exit 1
    fi
    if [ `ldconfig -p | grep -i libxi.so | wc -l` -eq 0 ]; then
        echo "Missing dependent library libXi."
        exit 1
    fi
    if [ `ldconfig -p | grep -i libxtst.so | wc -l` -eq 0 ]; then
        echo "Missing dependent library libXtst"
        exit 1
    fi
    if [ `ldconfig -p | grep -i libxrender.so | wc -l` -eq 0 ]; then
        echo "Missing dependent library libXrender."
        exit 1
    fi
fi

# See how we were called.
case "$1" in
    run)
        # Run Webclient Test Tool server- expects X Server to be running
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            $JAVA_EXE $JAVA_OPTS -jar $HOME/webclient-test-tool.war -testtool $OPTS 2>> $LOG >> $LOG &
            echo $! > $PID_PATH_NAME
            wait $(cat $PID_PATH_NAME)
        else
            echo "Webclient Test Tool is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    start)
        # Start daemon.
        if [ ! -f $PID_PATH_NAME ] || [ `ps -axo pid | grep "$(cat $PID_PATH_NAME)" | wc -l` -eq 0 ]; then
            echo "Starting Webclient Test Tool... "
            xvfb-run $SCRIPTPATH run  &
            echo "Webclient Test Tool started"
        else
            echo "Webclient Test Tool is already running with pid $(cat $PID_PATH_NAME)"
        fi
        ;;
    stop)
        if [ -f $PID_PATH_NAME ]; then
            echo "Webclient Test Tool 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 Test Tool stopped ..."
                rm $PID_PATH_NAME
            else
                echo "Stopping Webclient Test Tool failed."
                exit 1
            fi
        else
            echo "Webclient Test Tool 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 Test Tool is running with pid $(cat $PID_PATH_NAME)."
            fi
        else
            echo "Webclient Test Tool 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
