#!/bin/bash
#
# chkconfig: - 91 35
# description: Starts and stops apacheds server. 
#
# Shell script to start/stop apacheds 
# If you want to change apacheds service settings please modify the server.xml
# file.

DISPLAY=:0.0
export DISPLAY

# Source function library.
if [ -f /etc/init.d/functions ] ; then
     . /etc/init.d/functions
fi

# Source networking configuration.
if [ -f /etc/sysconfig/network ] ; then
     . /etc/sysconfig/network
fi

# Check that networking is up.
if [ ! -z "$NETWORKING" ] ; then
      if [ "$NETWORKING" = "no" ] ; then
           exit 0
      fi
fi

unset SERVERARGS
SERVERS=""
[ -f /etc/sysconfig/apacheds ] && . /etc/sysconfig/apacheds

prog=$"apacheds server"

# OS specific support.  $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
case "`uname`" in
  CYGWIN*) cygwin=true ;;
  Darwin*) darwin=true 
    if [ -z "$JAVA_VERSION" ] ; then
      JAVA_VERSION="CurrentJDK"
    else
      echo "Using Java version: $JAVA_VERSION"
    fi

    if [ -z "$JAVA_HOME" ] ; then
      JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/$JAVA_VERSION/Home
    fi
    ;;
  *) 
    if [ ! -d "$JAVA_HOME" ] ; then
      # look for java home in /usr/java
      if [ -d /usr/java/jre ] ; then
        JAVA_HOME=/usr/java
      elif [ `uname` = Linux ] ; then
        for jdkhome in `find /usr/java/ -type d -regex '.*\/j2sdk1\.4\.2...$' | sort`; do
          JAVA_HOME=$jdkhome;
        done
      fi 
	 fi

    if [ ! -d "$JAVA_HOME" ] ; then
      if [ `uname` = Linux ] ; then
        for jdkhome in `find /usr/java/ -type d -regex '.*\/jdk1\.5\.....$' | sort`; do
          JAVA_HOME=$jdkhome;
        done
      fi 
   fi
   ;;
esac

if [ -z "$APACHEDS_HOME" ] ; then
  # try to find install home 
  if [ -d /usr/local/apacheds-1.0_RC4 ] ; then
    APACHEDS_HOME=/usr/local/apacheds-1.0_RC4
  elif [ -d "$HOME/apacheds-1.0-RC4" ] ; then
    APACHEDS_HOME="$HOME/apacheds-1.0-RC4"
  elif [ -d "/Applications/apacheds-1.0-RC4" ] ; then
    APACHEDS_HOME=/Applications/apacheds-1.0-RC4
  fi
fi

if [ -z "$JAVA_HOME" ] ; then
  echo "Warning: JAVA_HOME environment variable is not set."
  echo "  If scrip fails because sun.* classes could not be found"
  echo "  you will need to set the JAVA_HOME environment variable"
  echo "  to the installation directory of java."
else
  echo JAVA_HOME=$JAVA_HOME
fi

if [ -z "$APACHEDS_HOME" ] ; then
  echo "Warning: APACHEDS_HOME environment variable is not set."
  echo "  If script fails because classes could not be found"
  echo "  you will need to set the APACHEDS_HOME environment variable"
  echo "  to the installation directory of apacheds."
else
  echo APACHEDS_HOME=$APACHEDS_HOME
fi
CLASSPATH=$CLASSPATH:$JAVA_HOME/lib/tools.jar
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
  [ -n "$APACHEDS_HOME" ] &&
    APACHEDS_HOME=`cygpath --unix "$APACHEDS_HOME"`
  [ -n "$APACHEDS_HOME_LOCAL" ] &&
    APACHEDS_HOME_LOCAL=`cygpath --unix "$APACHEDS_HOME_LOCAL"`
  [ -n "$JAVA_HOME" ] &&
    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
  [ -n "$CLASSPATH" ] &&
    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi

SERVER_HOME=$APACHEDS_HOME
DAEMON_HOME=$SERVER_HOME/bin
CLASSPATH=$CLASSPATH:$DAEMON_HOME/bootstrapper.jar:$DAEMON_HOME/logger.jar:$DAEMON_HOME/daemon.jar
echo CLASSPATH=$CLASSPATH
APACHEDS_USER=$USER

TMP_DIR=$SERVER_HOME/var/tmp
PID_FILE=$SERVER_HOME/var/run/server.pid

cd $SERVER_HOME

case "$1" in
  start)
    #
    # Start apacheds
    #
    echo -n $"Starting $prog: "
    ulimit -S -c 0 >/dev/null 2>&1
    RETVAL=0
    
    $DAEMON_HOME/apacheds \
    -user $APACHEDS_USER \
    -home $JAVA_HOME \
    -Djava.io.tmpdir=$TMP_DIR \
    -Dlog4j.configuration=file://$SERVER_HOME/conf/log4j.properties\
    -Xms384m -Xmx384m \
    -pidfile $PID_FILE \
    -outfile $SERVER_HOME/var/log/apacheds-stdout.log \
    -errfile $SERVER_HOME/var/log/apacheds-stderr.log \
    -cp $CLASSPATH \
    org.apache.directory.daemon.JsvcBootstrapper \
    $APACHEDS_HOME start

    if [ `uname` = "Darwin" ] ; then
        [ "$RETVAL" -eq 0 ] && echo successful apacheds server startup || \
             echo failed apacheds server start
    elif [ `uname` = "SunOS" ] ; then
        [ "$RETVAL" -eq 0 ] && echo success apacheds server startup || \
             echo failure apacheds server start
    else
        [ "$RETVAL" -eq 0 ] && success $"apacheds server startup" || \
             failure $"apacheds server start"
        echo
        if [ -d /var/lock/subsys ] ; then
               [ "$RETVAL" -eq 0 ] && touch $SERVER_HOME/var/apacheds.lock
        fi
    fi

    exit $?
    ;;

  stop)
    #
    # Stop apacheds
    #
    echo -n $"Shutting down $prog: "
    RETVAL=0

    $DAEMON_HOME/apacheds \
    -stop \
    -pidfile $PID_FILE \
    -Dlog4j.configuration=file://$SERVER_HOME/conf/log4j.properties\
    org.apache.directory.daemon.JsvcBootstrapper stop

    if [ `uname` = "Darwin" ] ; then
        [ "$RETVAL" -eq 0 ] && echo successful apacheds server shutdown || \
             echo failed apacheds server shutdown
    elif [ `uname` = "SunOS" ] ; then
        [ "$RETVAL" -eq 0 ] && echo success apacheds server shutdown || \
             echo failure apacheds server shutdown
    else
        [ "$RETVAL" -eq 0 ] && success $"apacheds server shutdown" || \
             failure $"apacheds server shutdown"
        echo
        if [ -d /var/lock/subsys/apacheds ] ; then
               [ "$RETVAL" -eq 0 ] && rm $SERVER_HOME/var/apacheds.lock
        fi
    fi

    exit $?
    ;;

  debug)
    #
    # Debug apacheds
    #
    echo -n $"Starting $prog in debug mode: "
    ulimit -S -c 0 >/dev/null 2>&1
    RETVAL=0
    
    if [ -z "$2" ] ; then
      echo
      echo ========================================================
      echo "Warning: the debug port is not set. Using 5005 default."
      echo ========================================================
      echo
      DEBUG_PORT=5005
    else
      DEBUG_PORT="$2"
    fi
    
    $JAVA_HOME/bin/java\
    -Dlog4j.configuration=file://$SERVER_HOME/conf/log4j.properties\
    -Xms384m -Xmx384m \
    -Dcom.sun.management.jmxremote \
    -Xdebug -Xnoagent -Djava.compiler=NONE\
    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$DEBUG_PORT\
    -jar $DAEMON_HOME/bootstrapper.jar \
    $APACHEDS_HOME start
    ;;

  *)
    echo "Usage apacheds [start|stop|debug]"
    exit 1;;
esac
