#! /bin/sh -e
#
# /etc/init.d/tomcat -- startup script for the Tomcat 5.0 servlet engine
#
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
# Modified for Debian GNU/Linux	by Ian Murdock <imurdock@gnu.ai.mit.edu>.
# Modified for Tomcat by Stefan Gybas <sgybas@debian.org>.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=tomcat
DESC="Tomcat 5.5 servlet engine"
DAEMON=/usr/bin/$NAME
CATALINA_HOME=/opt/$NAME

# The following variables can be overwritten in /etc/default/tomcat5

# Run Tomcat 5.5 as this user ID (default: tomcat5)
# Set this to an empty string to prevent Tomcat from starting automatically
TOMCAT5_USER=root

# The first existing directory is used for JAVA_HOME (if JAVA_HOME is not
# defined in /etc/default/tomcat5)
JDK_DIRS="/opt/java"

# Arguments to pass to the Java virtual machine (JVM)
# CATALINA_OPTS=""

# Use the Java security manager? (yes/no)
TOMCAT5_SECURITY="no"

# End of variables that can be overwritten in /etc/default/tomcat5

# overwrite settings from default file
if [ -f /etc/default/tomcat5 ]; then
	. /etc/default/tomcat5
fi

test -f $DAEMON || exit 0

# Look for the right JVM to use
for jdir in $JDK_DIRS; do
	if [ -d "$jdir" -a -z "${JAVA_HOME}" ]; then
		JAVA_HOME="$jdir"
	fi
done
export JAVA_HOME
export CATALINA_OPTS

# Define other required variables
PIDFILE="/var/run/$NAME.pid"
LOGDIR="$CATALINA_HOME/logs"
WEBAPPDIR="$CATALINA_HOME/webapps"
STARTUP_OPTS=""
if [ "$TOMCAT5_SECURITY" = "yes" ]; then
	STARTUP_OPTS="-security"
fi

# CATALINA_PID for catalina.sh
export CATALINA_PID="$PIDFILE"

case "$1" in
  start)
	if [ -z "$TOMCAT5_USER" ]; then
	    echo "Not starting $DESC as configured (TOMCAT5_USER is empty in"
	    echo "/etc/default/tomcat5)."
	    exit 0
	fi
	if [ -z "$JAVA_HOME" ]; then
	    echo "Could not start $DESC because no Java Development Kit"
	    echo "(JDK) was found. Please download and install JDK 1.3 or higher and set"
	    echo "JAVA_HOME in /etc/default/tomcat5 to the JDK's installation directory."
	    exit 0
	fi

	echo -n "Starting $DESC using Java from $JAVA_HOME: "

	# Remove dangling webapp symlinks
	for webapp in "$WEBAPPDIR"/*; do
	    if [ "$webapp" != "$WEBAPPDIR/*" -a ! -e "$webapp" ]; then
		echo "Removing obsolete webapp $webapp" >>"$LOGDIR/catalina.out"
		rm "$webapp" >> "$LOGDIR/catalina.out" 2>&1 || true
	    fi
	done

	# Symlink new webapps from /usr/share/java/webapps
	for webapp in /usr/share/java/webapps/*; do
	    if [ -e "$webapp" -a ! -e "$WEBAPPDIR/`basename $webapp`" \
			-a ! -e "$WEBAPPDIR/`basename $webapp .war`" ]; then
		echo "Symlinking new webapp $webapp" >>"$LOGDIR/catalina.out"
		ln -s "$webapp" "$WEBAPPDIR" || true
	    fi
	done

	# Create catalina.policy (for the security manager)
#	rm -f /var/lib/tomcat/catalina.policy
#	cat /etc/tomcat/policy.d/*.policy >/var/lib/tomcat/catalina.policy

	mkdir -p "$CATALINA_HOME/work/_temp"
	touch "$PIDFILE" "$LOGDIR/catalina.out" || true
	chown --dereference "$TOMCAT5_USER" "$PIDFILE" "$LOGDIR" \
	    "$LOGDIR/catalina.out" "$CATALINA_HOME/work" \
	    "$CATALINA_HOME/temp" || true
	if start-stop-daemon --test --start --pidfile "$PIDFILE" \
		--user $TOMCAT5_USER --startas "$DAEMON" >/dev/null; then
		# -p preserves the environment (for $JAVA_HOME etc.)
		# -s is required because tomcat5's login shell is /bin/false
		su -p -s /bin/sh $TOMCAT5_USER \
			-c "\"$DAEMON\" start $STARTUP_OPTS" \
			>>"$LOGDIR/catalina.out" 2>&1
		echo "$NAME."
	else
		echo "(already running)."
	fi
	;;
  stop)
	echo -n "Stopping $DESC: "
	if start-stop-daemon --test --start --pidfile "$PIDFILE" \
		--user $TOMCAT5_USER --startas "$DAEMON" >/dev/null; then
		echo "(not running)."
	else
		su -p $TOMCAT5_USER -c "\"$DAEMON\" stop" >/dev/null 2>&1 || true
		# Fallback to kill the JVM process in case stopping did not work
		sleep 1
		start-stop-daemon --stop --oknodo --quiet --pidfile "$PIDFILE" \
			--user "$TOMCAT5_USER"
		rm -f "$PIDFILE"
		echo "$NAME."
	fi
	;;
  restart|force-reload)
	$0 stop
	sleep 1
	$0 start
	;;
  *)
	echo "Usage: /etc/init.d/tomcat {start|stop|restart|force-reload}" >&2
	exit 1
	;;
esac

exit 0