#!/bin/sh
#
# LSB Linux. Examples: Ubuntu

NAME=JBoss_AS_7_2_0
DESC="JBoss AS 7.2.0 - Server"
DEFAULT=/etc/default/$NAME

# Check privileges
if [ `id -u` -ne 0 ]; then
    echo "You need root privileges to run this script"
    exit 1
fi

# Make sure jboss is started with system locale
if [ -r /etc/default/locale ]; then
    . /etc/default/locale
    export LANG
fi

. /lib/lsb/init-functions

if [ -r /etc/default/rcS ]; then
    . /etc/default/rcS
fi

# Overwrite settings from default file
if [ -f "$DEFAULT" ]; then
    . "$DEFAULT"
fi

# Location of java

# Load Java configuration.
[ -r /etc/java.conf ] && . /etc/java.conf
if [ -z "$JAVA_HOME" ]; then
	log_failure_msg "JAVA_HOME is not defined in this environment"
	exit 1
fi
export JAVA_HOME

# Check if java is installed
if [ ! -f "$JAVA_HOME/bin/java" ]; then
    log_failure_msg "Java is not installed in $JAVA_HOME"
    exit 1
fi

# Location of jboss
JBOSS_HOME=/opt/e-SUS/jboss-as-7.2.0.Final
export JBOSS_HOME

# Check if jboss is installed
if [ ! -f "$JBOSS_HOME/jboss-modules.jar" ]; then
    log_failure_msg "$NAME is not installed in $JBOSS_HOME"
    exit 1
fi

# Run as jboss user
JBOSS_USER=root
if [ -z "$JBOSS_USER" ]; then
    JBOSS_USER=root
fi

# Check jboss user
id $JBOSS_USER > /dev/null 2>&1
if [ $? -ne 0 -o -z "$JBOSS_USER" ]; then
    log_failure_msg "User $JBOSS_USER does not exist..."
    log_end_msg 1
    exit 1
fi

# Check startup file
JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh
if [ ! -x $JBOSS_SCRIPT ]; then
    log_failure_msg "$JBOSS_SCRIPT is not an executable!"
    exit 1
fi

# Check shutdown file
JBOSS_SH_SHUTDOWN=$JBOSS_HOME/bin/jboss-cli.sh
if [ ! -x $JBOSS_SH_SHUTDOWN ]; then
    log_failure_msg "$JBOSS_SH_SHUTDOWN is not an executable!"
    exit 1
fi

# The amount of time to wait for startup
if [ -z "$STARTUP_WAIT" ]; then
  STARTUP_WAIT=30
fi

# The amount of time to wait for shutdown
if [ -z "$SHUTDOWN_WAIT" ]; then
  SHUTDOWN_WAIT=30
fi

# Location to keep the console log
export JBOSS_CONSOLE_LOG=$JBOSS_HOME/standalone/log/console.log
# Location to set the pid file
export JBOSS_PIDFILE=$JBOSS_HOME/standalone/esus.pid
# Launch jboss in background
export LAUNCH_JBOSS_IN_BACKGROUND=true

# Helper function to check status of jboss service
check_status() {
    start-stop-daemon --status --name java --user $JBOSS_USER \
    --pidfile "$JBOSS_PIDFILE" >/dev/null 2>&1
    return $?
}

case "$1" in
 start)
    log_daemon_msg "Starting $DESC" "$NAME"
    check_status
    status_start=$?
    if [ $status_start -eq 3 ]; then
        mkdir -p $(dirname $JBOSS_PIDFILE)
        mkdir -p $(dirname $JBOSS_CONSOLE_LOG)
        chown $JBOSS_USER $(dirname $JBOSS_PIDFILE)
        cat /dev/null > $JBOSS_CONSOLE_LOG

        start-stop-daemon --start --user "$JBOSS_USER" \
        --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --pidfile "$JBOSS_PIDFILE" \
        --exec "$JBOSS_SCRIPT" 2>&1 > $JBOSS_CONSOLE_LOG &

        count=0
        launched=false
        until [ $count -gt $STARTUP_WAIT ]
        do
            grep 'JBAS015874:' $JBOSS_CONSOLE_LOG > /dev/null 
            if [ $? -eq 0 ] ; then
                launched=true
                break
            fi
            sleep 1
            count=$(($count + 1));
        done

        if check_status; then
            log_end_msg 0
        else
            log_end_msg 1
        fi
    elif [ $status_start -eq 1 ]; then
        log_failure_msg "$DESC is not running but the pid file exists"
        log_end_msg 1
        exit 1
    elif [ $status_start -eq 0 ]; then
        log_success_msg "$DESC (already running)"
        log_end_msg 0
    fi
 ;;
 stop)
    check_status
    status_stop=$?
    if [ $status_stop -eq 0 ]; then
        read kpid < $JBOSS_PIDFILE
        log_daemon_msg "Stopping $DESC" "$NAME"
        start-stop-daemon --start --chuid "$JBOSS_USER" \
        --exec "$JBOSS_SH_SHUTDOWN" -- --connect --command=:shutdown \
        >/dev/null 2>&1

        if [ $? -eq 1 ]; then
            kill -15 $kpid
        fi

        count=0
        until [ $count -gt $SHUTDOWN_WAIT ]
        do
            check_status
            if [ $? -eq 3 ]; then
                break
            fi
            sleep 1
            count=$(($count + 1));
        done
        
        if [ $count -gt $SHUTDOWN_WAIT ]; then
            kill -9 $kpid
        fi
    elif [ $status_stop -eq 1 ]; then
        log_daemon_msg "$DESC is not running but the pid file exists, cleaning up"
        rm -f $JBOSS_PIDFILE
    elif [ $status_stop -eq 3 ]; then
        log_daemon_msg "$DESC is not running"
    fi

    log_end_msg 0
 ;;
 restart|reload|force-reload)
    check_status
    status_restart=$?
    if [ $status_restart -eq 0 ]; then
        $0 stop
    fi
    $0 start
 ;;
 status)
    check_status
    status=$?
    if [ $status -eq 0 ]; then
        log_success_msg "$DESC is running with pid `cat $JBOSS_PIDFILE`"
        exit 0
    elif [ $status -eq 1 ]; then
        log_success_msg "$DESC is not running and the pid file exists"
        exit 1
    elif [ $status -eq 3 ]; then
        log_success_msg "$DESC is not running"
        exit 3
    else
        log_success_msg "Unable to determine $NAME status"
        exit 4
    fi
 ;;
 *)
 log_action_msg "Usage: $0 {start|stop|restart|status}"
 exit 2
 ;;
esac

exit 0
