#! /bin/sh
#
# OPENDJ SERVICE SCRIPT
#

#
# The contents of this file are subject to the terms of the Common Development and
# Distribution License (the License). You may not use this file except in compliance with the
# License.
#
# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
# specific language governing permission and limitations under the License.
#
# When distributing Covered Software, include this CDDL Header Notice in each file and include
# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
# Header, with the fields enclosed by brackets [] replaced by your own identifying
# information: "Portions Copyright [year] [name of copyright owner]".
#
# Copyright 2013-2015 ForgeRock AS.


# chkconfig: 2345 80 05
# description: Starts and stops opendj LDAPv3 service.
#
### BEGIN INIT INFO
# Provides:          opendj
# Required-Start:
# Required-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: This is the opendj daemon
# Description:       OpenDJ is an LDAPv3 compliant directory service, developed for the Java
#                    platform, providing a high performance, highly available and secure store
#                    for the identities managed by enterprises. Its easy installation process,
#                    combined with the power of the Java platform makes OpenDJ one of the
#                    simplest and fastest directory servers to deploy and manage.
### END INIT INFO

# Set up source function library depending on the distribution
if [ -f /etc/redhat-release ] ; then
    # Redhat
    . /etc/init.d/functions
    LOCKFILE=/var/lock/subsys/opendj
elif [ -f /etc/SuSE-release ] ; then
    # SuSE
    . /etc/rc.status
    LOCKFILE=/var/run/rcopendj
elif [ -f /etc/lsb-release ] || lsb_release -a >/dev/null 2>&1 ; then
    # Debian
    # On Debian 8 the file /etc/lsb-release does not exist. The lsb_release command may be used instead.
    . /lib/lsb/init-functions
    LOCKFILE=/var/lock/opendj
elif [ -f /etc/init.d/functions.sh ] ; then
    # Other dist.
    . /etc/init.d/functions.sh
    LOCKFILE=/tmp/unused-lockfile-opendj
fi
# LOCKFILE is used by the service subsystem to know whether the opendj service is started and act upon it


# Sets the script vars
INSTALL_ROOT="/opt/opendj"
export INSTALL_ROOT
DAEMON=opendj

# Original PID file
ORIGINPIDFILE=/opt/opendj/logs/server.pid

# Pid file is a symlink to /opt/opendj/log/server.pid
PIDFILE=/var/run/opendj.pid
RETVAL=0

# If the daemon is not there, then exit / LSB return code.
test -x "$INSTALL_ROOT/bin/start-ds" || exit 5

# Recreates the symlink if needed (/var/run is deleted after reboot (eg. debian)).
test -h "$PIDFILE" || ln -s $ORIGINPIDFILE $PIDFILE

instance_configured() {
  if [ -f $INSTALL_ROOT/config/buildinfo ] && [ "$(ls -A $INSTALL_ROOT/config/archived-configs)" ] ; then
      return 1
  fi

  return 0
}

# Starts the server and creates pid file.
start() {
    instance_configured
    if [ $? = 0 ] ; then
        echo "Instance is not configured. Please run $INSTALL_ROOT/setup"
        return 1
    fi

    echo -n "Starting $DAEMON: "
    # Server is running
    if [ -e $PIDFILE ] ; then
        echo "> Already running."
        return 0
    else
        "$INSTALL_ROOT"/bin/start-ds --quiet
        RETVAL=$?
        if [ $RETVAL = 0 ] ; then
            touch $LOCKFILE
            echo "> SUCCESS."
        else
            echo "> FAILURE."
        fi
        echo ""
        return $RETVAL
    fi
}

# Stops the server and removes pid file.
stop() {
    instance_configured
    if [ $? = 0 ] ; then
        echo "Instance is not configured. Please run $INSTALL_ROOT/setup"
        return 1
    fi

    echo -n "Stopping $DAEMON: "
    if [ -e $PIDFILE ]
    then
        # Server is running
        "$INSTALL_ROOT"/bin/stop-ds --quiet
        RETVAL=$?
        if [ $RETVAL = 0 ] ; then
            echo "> SUCCESS."
        else
            echo "> FAILURE."
        fi
        rm -f $LOCKFILE
        echo ""
        return $RETVAL
    else
        echo "> Already stopped."
        echo ""
        return 3
    fi
}

# Displays the service status
status() {
    instance_configured
    if [ $? = 0 ] ; then
        echo "Instance is not configured. Please run $INSTALL_ROOT/setup"
        return 1
    fi

    echo -n $"$DAEMON status: "
    if [ -e $PIDFILE ] ; then
        echo "> Running."
        return 0
    else
        echo "> Stopped."
        return 3
    fi
}

case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    restart)
        instance_configured
        if [ $? = 0 ] ; then
            echo "Instance is not configured. Please run $INSTALL_ROOT/setup"
            exit 1
        else
            stop
            sleep 5
            start
        fi
    ;;
    force-reload)
        # Not implemented.
        echo "Not implemented."
    ;;
    status)
        status
    ;;
    *)
        echo "Usage: /etc/init.d/$DAEMON {start|restart|stop|force-reload|status}"
        exit 1
    ;;
esac

exit $RETVAL
