#!/bin/bash
#
# This script provides systemd activation of the novell iprint tomcat service.
# 

# check the basic environment variables
if [[ -z "${CATALINA_BASE}" || \
    -z "${CATALINA_HOME}" || \
    -z "${CATALINA_TMPDIR}" ]]; then

echo "ERROR: one of CATALINA_BASE, CATALINA_HOME or CATALINA_TMPDIR is not defined" >&2
echo "       use proper EnvironmentFile= in your .service file" >&2
exit 1

fi

if [ -r /usr/share/java-utils/java-functions ]; then
  . /usr/share/java-utils/java-functions
else
  echo "Can't read Java functions library, aborting"
  exit 1
fi

# Include the optional setenv.sh script.
# (See section 3.4 of https://tomcat.apache.org/tomcat-8.0-doc/RUNNING.txt)
if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then
   . "$CATALINA_BASE/bin/setenv.sh"
elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then
   . "$CATALINA_HOME/bin/setenv.sh"
fi

#Setting Java binary path
set_javacmd

# CLASSPATH munging
CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/bootstrap.jar"
CLASSPATH="${CLASSPATH}:${CATALINA_HOME}/bin/tomcat-juli.jar"
CLASSPATH="${CLASSPATH}:$(build-classpath commons-daemon 2>/dev/null)"

#sanitize the classpath - remove double and trailing colons
CLASSPATH="`echo ${CLASSPATH} | sed 's/::+/:/g; s/^://; s/:$//g'`"

MAIN_CLASS=org.apache.catalina.startup.Bootstrap

VERBOSE=1
FLAGS="$JAVA_OPTS"
CONF_PATH="/var/opt/novell/iprint-tomcat/conf"

if [ -z "$LOGGING_PROPERTIES" ] ; then
  LOGGING_PROPERTIES="${CONF_PATH}/logging.properties"
  if [ ! -f "${LOGGING_PROPERTIES}" ] ; then
    LOGGING_PROPERTIES="${CATALINA_HOME}/conf/logging.properties"
  fi
fi

OPTIONS="-Dcatalina.base=$CATALINA_BASE \
	-Dcatalina.home=$CATALINA_HOME \
	-Djava.endorsed.dirs=$JAVA_ENDORSED_DIRS \
	-Djava.io.tmpdir=$CATALINA_TMPDIR \
	-Djava.util.logging.config.file=${LOGGING_PROPERTIES} \
	-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

# See how we were called.
function start() {

    if [[ "$SECURITY_MANAGER" = "true" ]]; then
        DSECURITY_MANAGER="-Djava.security.manager"
        DSECURITY_POLICY="-Djava.security.policy=${CATALINA_BASE}/conf/catalina.policy"
    else
        unset DSECURITY_MANAGER
        unset DSECURITY_POLICY
    fi
	
    OPTIONS="${OPTIONS} ${DSECURITY_MANAGER} ${DSECURITY_POLICY}"		
    run start
}

function stop() {
    run stop
    ret=${?}

    # workaround the 143 code emmited by jvm in case of sigterm
    # using ExecStart=- will ignore all other failures as well
    if [[ ret == 143 ]]; then
       ret=0
    fi

    return $ret
}

function version() {

    exec ${JAVACMD} -classpath ${CATALINA_HOME}/lib/catalina.jar \
        org.apache.catalina.util.ServerInfo

}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    version)
        version
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|version}" >&2
        exit 1
esac

