#! /bin/ksh
# 
# @(#)sade	1.44 02/19/03
#
# Copyright 2001,2002 Sun Microsystems, Inc., All Rights Reserved.
#

# Package name for SADE
PKG=SUNWsade

#
# Messages
#
SADE_USAGE="Usage sade [-v][-d] <start | stop | purge | config>"
SADE_NOT_INSTALLED="SSDE is not installed or can not be located."
SADE_BAD_INSTALL="SSDE is not installed properly."
SADE_REINSTALL="Please install the $PKG package and try again."
SADE_BAD_JAVA="Java environment is not setup properly."
SADE_STOP="SSDE shutting down."
SADE_START="Starting SSDE"
SADE_DB_INIT="Initializing Database."
SADE_DB_DONE="Finished initializing database."
SADE_DB_ERROR="Error initializing database!"
SADE_ALREADY_RUNNING="SSDE is already/still running."
SADE_NOT_RUNNING="Unable to stop. SSDE is not running."
SADE_STOP_FAILED="Error shutting down SSDE."

SADE_FLUSH_REQUIRMENT="Purge of all data requires that SSDE be stopped first."
SADE_RESET_REQUEST="Purge all database and log records? (y/n) >"
SADE_RESET_ABORTED="Purge request aborted."
SADE_RESET_FINISHED="Purge completed."

#
# Get environment
#

# Set default mask for log files.
umask 022

PKGPARAM=/bin/pkgparam

BASEDIR=`$PKGPARAM $PKG BASEDIR 2>/dev/null`
if [ -z "$BASEDIR" ]    # pkg not installed or installed several times
then
    echo $SADE_NOT_INSTALLED
    echo $SADE_REINSTALL
    exit 1
fi

VARDIR=`$PKGPARAM $PKG VARDIR 2>/dev/null`
if [ -z "$VARDIR" ]  # pkg not installed or installed several times
then
    echo $SADE_NOT_INSTALLED
    echo $SADE_REINSTALL
    exit 1
fi

SADE_VERSION=`$PKGPARAM $PKG VERSION 2>/dev/null`
SADE_HOME=${BASEDIR}/${PKG}
SADE_OUTPUT=${VARDIR}/${PKG}
SADE_AGENT=`/usr/bin/hostname`
CATALINA_HOME=$SADE_HOME/web


#
# define java
#
JAVACMD=`$PKGPARAM $PKG JAVACMD`
if [ -z "$JAVACMD" ]
then 
    echo $SADE_BAD_INSTALL
    echo $SADE_BAD_JAVA
    exit 1
fi

# Adjust JAVACMD if a directory containing command.
if [ -d $JAVACMD ]; then
    if [ -x $JAVACMD/java ]; then
	JAVACMD=$JAVACMD/java
    elif [ -x $JAVACMD/bin/java ]; then
	JAVACMD=$JAVACMD/bin/java
    fi
fi

# Check that command is executable.
   if [ ! -x $JAVACMD ]; then
      echo $SADE_BAD_JAVA
      exit 1
fi

LD_LIBRARY_PATH=${SADE_HOME}/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

#
# Other Defines
#
INSTALLER_MAIN=com.sun.jade.apps.discovery.InstallerMain
mgmthost=`hostname`
jadelibdir=${SADE_HOME}/lib
POLICY=${SADE_HOME}/etc/policy.all
CODEBASE=http://${mgmthost}:8083
DEVICE_CONFIG=${SADE_OUTPUT}/config/storade.conf

#
# Set up classpath
#
SADE_LIB=$SADE_HOME/lib

# Add all jars in the lib directory
for i in ${SADE_LIB}/* ; do
  if [ "$SADE_CLASSPATH" != "" ]; then
    SADE_CLASSPATH=${SADE_CLASSPATH}:$i
  else
    SADE_CLASSPATH=$i
  fi
done

unset CLASSPATH
for i in ${CATALINA_HOME}/lib/* ; do
  if [ "$CLASSPATH" != "" ]; then
    CLASSPATH=${CLASSPATH}:$i
  else
    CLASSPATH=$i
  fi
done
CLASSPATH=$SADE_CLASSPATH:$CLASSPATH
export CLASSPATH

#
# function usage
#
usage() {
	echo $SADE_USAGE
}

#
# Intialize the PersistenceService Database Tables 
# 
initializeDatabase() {
    if [ ! -e $SADE_OUTPUT/db/* ]; then
	echo $SADE_DB_INIT
	java -classpath $SADE_HOME/lib/hsqldb.jar:$SADE_HOME/etc/dbinit:$SADE_HOME/lib/jade.jar \
             -Dstorade.propsSaveDir=$SADE_HOME/etc/properties \
	     -Dstorade.databaseDir=$SADE_OUTPUT/db            \
             DatabaseInitializer $SADE_HOME/db
	if [ "$?" = "0" ]; then
	    echo $SADE_DB_DONE
	    touch $SADE_OUTPUT/db/init
	else
	    echo $SADE_DB_ERROR
	    exit 1
	fi
    fi
}

#
# Reset database and device logs.
#
reset() {
   echo $SADE_RESET_REQUEST |tr -d '\012'
   read userReply
   if [ ! "y" == "$userReply" ]; then
      echo $SADE_RESET_ABORTED
      exit 0
   fi
   if [ -e $SADE_OUTPUT/db/* ]; then
      /bin/rm -rf $SADE_OUTPUT/db/*
   fi
   if [ -e $SADE_OUTPUT/device/* ]; then
      /bin/rm -rf $SADE_OUTPUT/device/*
   fi
   if [ -e $SADE_OUTPUT/log/* ]; then
      /bin/rm -rf $SADE_OUTPUT/log/*
   fi
   echo $SADE_RESET_FINISHED
}

#
# Check if SADE is running.
#
checkRunning() {
    SADE_PROCLIST=`ps -df | grep appname=SADE | grep -v grep`
    if [ ! -z "$SADE_PROCLIST" ]; then
	echo $SADE_ALREADY_RUNNING
	exit 1
    fi
}

#
# Discovery
#
discoverSolution() {
    if [ ! -e $DEVICE_CONFIG ]; then
	$JAVACMD com.sun.jade.apps.discovery.ProbeMain \
                 -s 192.168.0.20/35                    \
                 -f $DEVICE_CONFIG
    fi
}

checkForJDB() {
    JAVACMD="$JAVACMD -Dappname=SADE -Xdebug -Xrunjdwp:transport=dt_socket,address=8888,server=y,suspend=n"
}


startWatchDog() {
   nohup $SADE_HOME/etc/ssde_watch start </dev/null >/dev/null 2>&1 &
}

stopWatchDog(){
   $SADE_HOME/etc/ssde_watch stop
}

#
# Parse command line
#
while getopts h:vd c
do
    case $c in
    h)  SADE_AGENT=$OPTARG;;
    v)  verbose=true;;
    d)  debug=true;;
    \?) usage; exit 1;;
    esac
done
shift `expr $OPTIND - 1`

if [ "$verbose" = "true" ] ; then
    echo "CLASSPATH   =${CLASSPATH}"
    echo "CODEBASE    =${CODEBASE}"
    echo "CATALINA_HOME =${CATALINA_HOME}"
    echo "SADE_AGENT  =${SADE_AGENT}"
    $JAVACMD -version
fi

#
# main actions
#
if [ "$1" = "stop" ] ; then 
    shift 
    SADE_PROCLIST=`ps -df | grep appname=SADE | grep -v grep`
    if [ -z "$SADE_PROCLIST" ]; then
        stopWatchDog
	if [ "$?" = "1" ]; then
	    echo $SADE_NOT_RUNNING
	fi
	exit 1
    fi
    SADE_PID=`echo $SADE_PROCLIST | awk '{ print $2 }'`
    kill $SADE_PID

    if [ "$?" = "0" ]; then
	echo $SADE_STOP
        stopWatchDog
    else
	echo $SADE_STOP_FAILED
    fi
    exit $?

elif [ "$1" = "start" ] ; then 
    shift

    checkRunning
    initializeDatabase

    JAVADEFS="-Dappname=SADE"
    JAVADEFS="$JAVADEFS -Djava.security.manager"
    JAVADEFS="$JAVADEFS -Djava.security.policy=${POLICY}"
    JAVADEFS="$JAVADEFS -Djava.rmi.server.codebase=${CODEBASE}"
    JAVADEFS="$JAVADEFS -Dcatalina.home=${CATALINA_HOME}"
    JAVADEFS="$JAVADEFS -Djavax.fma.domain=${SADE_AGENT}"
    JAVADEFS="$JAVADEFS -Dstorade.propsSaveDir=${SADE_HOME}/etc/properties"
    JAVADEFS="$JAVADEFS -Dstorade.home=${SADE_HOME}"
    JAVADEFS="$JAVADEFS -Dstorade.output=${SADE_OUTPUT}"
    JAVADEFS="$JAVADEFS -Djade.log.output=${SADE_OUTPUT}/log/storade.log"
    JAVADEFS="$JAVADEFS -Dstorade.databaseDir=$SADE_OUTPUT/db"
    JAVADEFS="$JAVADEFS -Djava.security.auth.login.config=${SADE_HOME}/etc/console_login.config"
    JAVADEFS="$JAVADEFS -Dstorade.actionAuditSaveDir=${SADE_OUTPUT}/log"
    JAVADEFS="$JAVADEFS -Dstorade.deviceConfig=${DEVICE_CONFIG}"
    JAVADEFS="$JAVADEFS -Duser.home=${SADE_OUTPUT}"
    JAVADEFS="$JAVADEFS -Djava.awt.headless=true "
    JAVADEFS="$JAVADEFS -Djava.protocol.handler.pkgs=sun.net.www.protocol"

    if [ "$debug" = "true" ] ; then
	JAVADEFS="$JAVADEFS -Djade.log.debug=enable"
	JAVADEFS="$JAVADEFS -Djade.log.tag=ALL"
	checkForJDB
    fi

    echo "$SADE_START $SADE_VERSION"

    if [ "$verbose" = "true" ] ; then
	echo "$JAVACMD"
	echo "    $JAVADEFS"
	echo "    $INSTALLER_MAIN -n $SADE_AGENT -f ${DEVICE_CONFIG}&"
    fi
    if [ -f $SADE_OUTPUT/log/output.log ]; then
       mv $SADE_OUTPUT/log/output.log $SADE_OUTPUT/log/old.output.log
    fi
    nohup $JAVACMD $JAVADEFS -mx128m \
	     $INSTALLER_MAIN -n $SADE_AGENT -f ${DEVICE_CONFIG} \
             >${SADE_OUTPUT}/log/output.log 2>&1 &
    startWatchDog

elif [ "$1" = "purge" ] ; then 
    SADE_PROCLIST=`ps -df | grep appname=SADE | grep -v grep`
    if [ ! -z "$SADE_PROCLIST" ]; then
	echo $SADE_ALREADY_RUNNING
	echo $SADE_FLUSH_REQUIRMENT
	exit 1
    fi
    reset

elif [ "$1" = "config" ] ; then 
    $SADE_HOME/etc/java_config

else
    usage
    exit 0
fi

