#!/bin/sh
#
# Startup script for hsqldb.
#
# chkconfig: 345 83 17
# description:	hsqldb - A High Performance Java Database Server

# Source function library.
. /etc/init.d/functions

. /usr/lib/java-common/java-functions

FindJVM

HSQLDB_OWNER=hsqldb
TARGET_CLASS=Server

HSQLDB_HOME=/var/lib/hsqldb
HSQLDB_JAR_PATH=$HSQLDB_HOME/lib/hsqldb.jar
AUTH_FILE=${HSQLDB_HOME}/sqltool.rc
CFGFILE=/etc/sysconfig/hsqldb
LOGFILE=/var/log/hsqldb/hsqldb.log
PIDFILE=/var/run/hsqldb.pid
LOCKFILE=/var/lock/subsys/hsqldb

RETVAL=0

. "$CFGFILE"
# Suffix delimiter to $SERVER_ADDL_CLASSPATH, if it is set.
[ -n "$SERVER_ADDL_CLASSPATH" ] && SERVER_ADDL_CLASSPATH="${SERVER_ADDL_CLASSPATH}:"

# PROPERTY_FILE is a derived value.
case "$TARGET_CLASS" in
	Server) PROPERTY_FILE="$HSQLDB_HOME"/server.properties;;
	WebServer) PROPERTY_FILE="$HSQLDB_HOME"/webserver.properties;;
	*)
		echo 'Unsupported value for $TARGET_CLASS:  '"$TARGET_CLASS" 1>&2
		exit 2;;
esac
			    

start()
{

	msg_starting hsqldb
	if [ -f "$PIDFILE" ]; then
		if [ -n "$(ps --no-headers p $(cat $PIDFILE))" ]; then
			echo "hsqldb already running"
			echo_passed
			echo -e "\r"
			return 0
		else
			echo "hsqldb is not running, but pid-file exist. Starting..."
			rm -f "$PIDFILE"
			rm -f "$LOCKFILE"
		fi
	fi

	TLS_SWITCHES=
        [ -n "$TLS_KEYSTORE" ] &&
		TLS_SWITCHES="-Djavax.net.ssl.keyStore=$TLS_KEYSTORE -Djavax.net.ssl.keyStorePassword=$TLS_PASSWORD"

	/bin/su -s /bin/sh -l "$HSQLDB_OWNER" -c \
	    "/usr/bin/java $SERVER_JVMARGS $TLS_SWITCHES -classpath $HSQLDB_JAR_PATH org.hsqldb.$TARGET_CLASS >> $LOGFILE 2>&1" &

	RETVAL=$?
	PID=$!
	echo "$PID" > $PIDFILE
	[ -z "$LOCKFILE" ] || touch "$LOCKFILE"

	sleep 1

	if [ $RETVAL = 0 ]; then

		/usr/bin/java "-Dsqltoolsprayer.rcfile=$AUTH_FILE" $CLIENT_JVMARGS \
		"-Dsqltoolsprayer.propfile=$PROPERTY_FILE" \
		"-Dsqltoolsprayer.monfile=$PIDFILE" \
		"-Dsqltoolsprayer.maxtime=1000" \
		-classpath $HSQLDB_JAR_PATH \
		org.hsqldb.util.SqlToolSprayer ''
		
		if [ $? = 0 ]; then
			echo_success
			echo -e "\r"
		else
			echo_failure
			echo -e "\r"
			RETVAL=1
		fi
											    
	else
		echo_failure
		echo -e "\r"
	fi

	return $RETVAL
}

stop()
{
    msg_stopping hsqldb
    if [ -f "$PIDFILE" ]; then
	if [ -n "$(ps --no-headers p $(cat $PIDFILE))" ]; then

		/usr/bin/java "-Dsqltoolsprayer.rcfile=$AUTH_FILE" $CLIENT_JVMARGS \
		"-Dsqltoolsprayer.propfile=$PROPERTY_FILE" \
		-classpath $HSQLDB_JAR_PATH \
		org.hsqldb.util.SqlToolSprayer 'shutdown ;' \
		$SHUTDOWN_URLIDS

		sleep 2
		if [ -n "$(ps --no-headers p $(cat $PIDFILE))" ]; then
		    echo "hsqldb wasn't stoped within 2 second. Force stopping..."
		    kill $(cat $PIDFILE)
		fi
		
		echo_success
		echo -e "\r"
	else
		echo "hsqldb is not running, but pid-file exist"
		echo_passed
		echo -e "\r"
	fi
	rm -f "$PIDFILE"
	rm -f "$LOCKFILE"
    else
	echo "hsqldb is not running"
	echo_failure
	echo -e "\r"
    fi

    RETVAL=$?
    return $RETVAL
}

status()
{
    if [ -f "$PIDFILE" ]; then
        if [ -n "$(ps --no-headers p $(cat $PIDFILE))" ]; then
            echo "hsqldb is running"
        else
            echo "hsqldb is not running, but pid-file exists"
        fi
    else
            echo "hsqldb is not running"
    fi

    RETVAL=$?
    return $RETVAL
}

# See how we were called.
case "$1" in
    start)
	start
        ;;
    stop)
	stop
        ;;
    restart|reload)
	stop
	start
	;;
    condstop)
	# Stop the servce if it is already running, for example:
	if [ -e "$LOCKFILE" ]; then
	    stop
	fi
	;;
    condrestart)
	# Restart the servce if it is already running, for example:
	if [ -e "$LOCKFILE" ]; then
	    stop
	    start
	fi
	;;
    status)
	status
	;;
    *)
	echo "Usage: ${0##*/} {start|stop|reload|restart|condstop|condrestart|status}"
	RETVAL=1
esac

exit $RETVAL
