#! /bin/bash

set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DESC='HSQLDB database server'


pidfile_name()
{
	local servertype=$1
	echo /var/run/hsqldb/${servertype}.pid
}


is_running()
{
	local servertype=$1
	local pidfile=$(pidfile_name $servertype)

	if [ ! -f "$pidfile" ]; then
		return 1
	fi

	local pid=$(cat "$pidfile")

	if ! kill -0 "$pid" 2>/dev/null; then
		return 1
	fi

	if [ ! -e /proc/"$pid"/exe ]; then
		return 1
	fi

        return 0
}


is_configured()
{
	local servertype=$1
	if grep -E -q '^[[:blank:]]*server\.database' /etc/hsqldb/${servertype}.properties; then
		return 0
	else
		return 1
	fi
}


run_shutdown()
{
	local servertype=$1
	shift

	hsqldb-sqltool --rcfile /etc/hsqldb/sqltool.rc --sql "SHUTDOWN;" localhost-${servertype}-sa /dev/null
}


start()
{
	local servertype=$1
	local pidfile=$(pidfile_name $servertype)

	local class
	if [ $servertype = server ]; then
		class=Server
	else
		class=WebServer
	fi

	su - hsqldb "
cd /var/lib/hsqldb
umask 077
java -classpath /usr/share/java/hsqldb.jar org.hsqldb.${class} </dev/null > >(logger -t hsqldb -p local0.info >/dev/null 2>&1) 2>&1 &
umask 022
echo \$! >${pidfile}"
}


stop()
{
	local servertype=$1
	local pidfile=$(pidfile_name $servertype)

	if is_running $servertype; then
		run_shutdown $servertype
		sleep 2
		is_running $servertype && \
			start-stop-daemon --stop --quiet --oknodo --pidfile $pidfile
	fi
	rm -f $pidfile
}


case "$1" in
    start)
        echo -n "Starting $DESC:"
	for type in server webserver; do
		if is_running $type; then
			echo -n " $type"
		else
			is_configured $type && start $type && echo -n " $type"
		fi
	done
        echo "."
        ;;
    stop)
        echo -n "Stopping $DESC:"
	for type in server webserver; do
		stop $type && echo -n " $type"
	done
        echo "."
        ;;
    restart|force-reload)
        $0 stop
        sleep 1
        $0 start
        ;;
    *)
        N=/etc/init.d/hsqldb
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
