#!/bin/sh
#
# chkconfig: 2345 99 99
# description: Start Tomcat server 
#

PATH=$PATH:/sbin:/usr/sbin:/usr/bin
export PATH

. /etc/sysconfig/ams
export JAVA_HOME

# Check if JAVA_HOME is correctly set.
if [ ! -r "$JAVA_HOME"/bin/java ]; then
  echo "The JAVA_HOME environment variable is not defined correctly"
  echo "Please edit /etc/sysconfig/ams and set JAVA_HOME correctly."
  exit 0
fi

AMU_HOME="/usr/opt/amu"
CATALINA_HOME="${AMU_HOME}/tomcat"
CATALINA_SH="${CATALINA_HOME}/bin/catalina.sh"
AMU_EXEC="${AMU_HOME}/bin/ams_exec"
MSG_PROMPT="amutomcat: "
NUM_HOOPS_START="6"
NUM_HOOPS_STOP="24"
SLEEP_PERIOD="5"

GetTomcatPid()
{
	/bin/ps --cols 600 -A -o pid,ppid,cmd | /bin/grep -i java | /bin/grep tomcat | /bin/grep Bootstrap $* | while read pid ppid command args
	do
		if [ "$ppid" = "1" ]
		then
			echo "$pid"
			exit
		fi
	done
}


if [ ! -x $CATALINA_SH ]; then
	echo "${MSG_PROMP}tomcat control script ${CATALINA_SH} not found!"
	exit 1
fi

case "$1" in
'start')
	# start tomcat
	#
	tomcatProcess=`GetTomcatPid`
	if [ ! -z "$tomcatProcess" ]; then
		echo "${MSG_PROMPT}tomcat process already running."
	else
		echo "${MSG_PROMPT}starting tomcat process..."
		$AMU_EXEC $CATALINA_SH start
		echo -n "${MSG_PROMPT}"

		waitcount=0
		while [ "$waitcount" -lt "$NUM_HOOPS_START" ]
		do
			echo -n "."
			/bin/sleep "$SLEEP_PERIOD"
			tomcatProcess=`GetTomcatPid`

			if [ ! -z "$tomcatProcess" ]; then
				echo ""
				echo "${MSG_PROMPT}tomcat process started."
				exit
			fi
                        waitcount=`expr $waitcount + 1`
		done
		echo ""
		echo "${MSG_PROMPT}tomcat process failed to start!"
		exit 1
	fi
	;;
'stop')
	# stop tomcat
	#
	tomcatProcess=`GetTomcatPid`
	if [ -z "$tomcatProcess" ]; then
		echo "${MSG_PROMPT}tomcat process was not running."
	else
		echo "${MSG_PROMPT}stopping tomcat process..."
		$CATALINA_SH stop
		echo -n "${MSG_PROMPT}"
		
		waitcount=0
		while [ "$waitcount" -lt "$NUM_HOOPS_STOP" ]
		do
			echo -n "."
			/bin/sleep "$SLEEP_PERIOD"
			tomcatProcess=`GetTomcatPid`

			if [ -z "$tomcatProcess" ]; then
				echo ""
				echo "${MSG_PROMPT}tomcat process stopped."
				exit
			fi
			waitcount=`expr $waitcount + 1`
		done

		# Tomcat did not stop, use kill to halt process
		if [ "$waitcount" -eq "$NUM_HOOPS_STOP" ]; then
				mypid=`GetTomcatPid`
				echo ""
				echo "${MSG_PROMPT}Halting tomcat process " $mypid
				/bin/kill -9 $mypid
			exit 1
		fi
	fi
	;;
'restart')
	$0 stop
	$0 start
	;;
'status')
	tomcatProcess=`GetTomcatPid`
	if [ -z "$tomcatProcess" ]; then
		echo "${MSG_PROMPT}tomcat process is NOT running."
	else
		echo "${MSG_PROMPT}tomcat process is running."
	fi
	;;
*)
	echo "Usage: $0 {start|stop|restart|status}"
	;;
esac
