#!/bin/sh
##############################################################################
#
# Copyright (c) 2002, 2006 Nexedi SARL and Contributors. All Rights Reserved.
#                    Kevin Deldycke <kevin@nexedi.com>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
##############################################################################

# Startup script for a oood server based on zope startup script
#
# chkconfig: 2345 29 71
# description: oood, the standalone server for converting various types of docs to/from OpenOffice format

# Source function library.
. /etc/rc.d/init.d/functions

NAME="oood"
USER=oood
OOOD_CONFIG_FILE=/etc/oood/oood.conf  #change this if want to use another config file
HOME=$(awk -F= ' /^oood_home/ { print $2 }' $OOOD_CONFIG_FILE )
RUNDIR=$(awk -F= ' /^run_dir/ { print $2 }' $OOOD_CONFIG_FILE )
UNOPATH=$(awk -F= ' /^uno_path/ { print $2 }' $OOOD_CONFIG_FILE )
MAX_WAIT_TIME=120   #Maximum time to wait for the server to create pid file

MAX_RETRYS=$(($MAX_WAIT_TIME/5))
LOCKFILE=$RUNDIR/server_pid.lock
PIDFILE=$LOCKFILE
PYTHON=python

start() {
  if [ -f $LOCKFILE ] ; then
    gprintf "Another instance of %s is running (lockfile $LOCKFILE exists)." "$NAME"
    echo_failure
    echo
    exit 4
  fi

  gprintf "Starting %s: " "$NAME"
  rm -rf $RUNDIR/*
  # Start the server in the background
  su --login $USER --command="$PYTHON $HOME/runserw.py --start > /dev/null &"

           # Waiting for the lock file to be created by the server
           # We will check file existence at most MAX_RETRYS times, waiting 5 secs.
           # between retrys.

  RETR_NO=0
  while [ $RETR_NO -lt $MAX_RETRYS ]; do
    if [ -f $LOCKFILE ]; then
      echo_success
      echo
      exit 0
    fi
    sleep 5
    RETR_NO=$(($RETR_NO+1))
  done
  gprintf "%s is not running (no pid file ${PIDFILE} found)." "$NAME"
  su --login $USER --command="$PYTHON $HOME/start.py --flush > /dev/null 2>&1 /dev/null"
  rm -f $LOCKFILE
  echo_failure
}


stop() {
  if [ ! -f $LOCKFILE ] ; then
    gprintf "%s is not running (no lockfile found)." "$NAME"
    echo_failure
  else
    gprintf "Stopping %s daemon: " "$NAME"
    su --login $USER --command="$PYTHON $HOME/runserw.py --stop" && echo_success || echo_failure
  fi
  # Clean up in any case
  su --login $USER --command="$PYTHON $HOME/start.py --flush > /dev/null 2>&1 /dev/null"
  echo
}


status() {
  echo
  su --login $USER --command="$PYTHON $HOME/runserw.py --status"
  echo
  su --login $USER --command="$PYTHON $HOME/start.py   --status"
  echo
}


case "$1" in
  start)
    touch /var/lock/subsys/$NAME
    start
    ;;

  stop)
    stop
    rm -f /var/lock/subsys/$NAME
    rm -f $LOCKFILE  #sometimes is not removed by runserv.py
    ;;

  restart)
    stop
    start
    ;;

  status)
    status
    ;;

  *)
    gprintf "Usage: %s\n" "$0 {start|stop|restart|status}"
    exit 1
esac

exit
