#!/bin/sh
#
# CMS Control Script

### BEGIN INIT INFO
# Provides: cms
# X-UnitedLinux-Should-Start: alerts $remote_fs $network
# Required-Start: alerts
# Default-Start: 3 5
# Default-Stop: 0 1 2 6
# Description: Content Management System Server
### END INIT INFO

PRODUCT_HOME=/opt/tandbergtv/cms
ACS_SERVER_HOME=/usr/local/acsserver
JAVA_HOME=/usr/java/default/bin
JSTACK_CMD=$JAVA_HOME/jstack

#define the user under which jboss will run, or use RUNASIS to run as the current user
JBOSSUS=${JBOSSUS:-"nobody"}

if [ "$JBOSSUS" = "RUNASIS" ]; then
  SUBIT=""
else
  SUBIT="sudo -u $JBOSSUS "
fi

PROGNAME=`basename $0`

#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"$PRODUCT_HOME/jboss"}

if [ ! -d "$JBOSS_HOME" ]; then
  echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
  exit 1
fi

# Setup the java endorsed dirs
JBOSS_ENDORSED_DIRS="$JBOSS_HOME/lib/endorsed"

#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"}

# Setup the classpath
JBOSS_BOOT_CLASSPATH="$JBOSS_HOME/bin/run.jar"
JBOSS_CLASSPATH="$JBOSS_BOOT_CLASSPATH:$PRODUCT_HOME/workflow/lib"

# Setup properties

JAVA_OPTS="$JAVA_OPTS -Dprogram.name=$PROGNAME -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=10008 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
JAVA_OPTS="$JAVA_OPTS -Dcom.tandbergtv.cms.product.dir=$PRODUCT_HOME -Xmx13312m -XX:+HeapDumpOnOutOfMemoryError -XX:MaxPermSize=256m"

CMD_START="java -server $JAVA_OPTS -Djava.endorsed.dirs="$JBOSS_ENDORSED_DIRS" -classpath "$JBOSS_CLASSPATH" org.jboss.Main "$@" --configuration=standard -b 0.0.0.0"
CMD_STOP="java -server -classpath $JBOSSCP org.jboss.Shutdown --shutdown"

case "$1" in
start)
	pid=$(ps axww | grep "[o]rg.jboss.Main" | sed -e 's/^\s*//' | cut -d' ' -f1)
        if [ ! -z "${pid}" ] ; then
                echo "Content Management System is already running"
        else
                echo "Starting Content Management System"
                cd $JBOSS_HOME/bin
                if [ -z "$SUBIT" ]; then
                        $ACS_SERVER_HOME/scripts/AdiNameService start
                        sleep 2
                        eval env LANG=en_US.UTF-8 $CMD_START >/dev/null 2>&1 &
                else
                        if [ -d "$ACS_SERVER_HOME" ]; then # Check if ACSServer is installed
                                $ACS_SERVER_HOME/scripts/AdiNameService start
                                sleep 2
                        fi
                        $SUBIT env LANG=en_US.UTF-8 $CMD_START >/dev/null 2>&1 &
                fi
        fi
        ;;
stop)
	 echo "Stopping Content Management System"
         pid=$(ps axww | grep "[o]rg.jboss.Main" | sed -e 's/^\s*//' | cut -d' ' -f1)
         sudo -u nobody $JSTACK_CMD -l $pid > $PRODUCT_HOME/cms_stackdump.txt
         if [ -z "$SUBIT" ]; then
                 $CMD_STOP >/dev/null 2>&1 &
         else
                 $SUBIT $CMD_STOP >/dev/null 2>&1 &
         fi
 
         sleep 5
 
         # Forcefully kill the process in case if it is still running0o-
         if [ ! -z "${pid}" ] ; then
                 kill -9 $pid
         fi
 
         if [ -d "$ACS_SERVER_HOME" ]; then #Check if ACSServer is installed
                 # Stop ADI name service
                 $ACS_SERVER_HOME/scripts/AdiNameService stop
                 sleep 2
 
                 # Forcefully kill the process in case if it is still running
                 pid=$(ps axww | grep "[o]rg.jacorb.naming.NameServer" | sed -e 's/^\s*//' | cut -d' ' -f1)
                 if [ ! -z "${pid}" ] ; then
                         kill -9 $pid
                 fi
         fi
 
         ;;
status)
	pid=$(ps axww | grep "[o]rg.jboss.Main" | sed -e 's/^\s*//' | cut -d' ' -f1)
        if [ -z "${pid}" ] ; then
                echo "cms service is stopped"
        else
                echo "cms service (pid " $pid") is running..."
        fi

        if [ -d "$ACS_SERVER_HOME" ]; then #Check if ACSServer is installed
                pid=$(ps axww | grep "[o]rg.jacorb.naming.NameServer" | sed -e 's/^\s*//' | cut -d' ' -f1)
                if [ -z "${pid}" ] ; then
                        echo "ADI NameServer is stopped"
                else
                        echo "ADI NameServer (pid " $pid") is running..."
                fi
        fi
        ;;
restart)
	$0 stop
	$0 start
	;;
*)
	echo "usage: $0 (start|stop|restart|help)"
	;;
esac


