#!/bin/sh
### BEGIN INIT INFO
# Provides:            ofbiz
# Required-Start:      $local_fs $remote_fs $network $time
# Required-Stop:       $local_fs $remote_fs $network $time
# Should-Start:                postgresql mysql exim4
# Should-Stop:         postgresql mysql exim4
# Default-Start:       2 3 4 5
# Default-Stop:                0 1 6
# Short-Description:   OfBiz container
### END INIT INFO
#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you under the Apache License, Version 2.0 (the
#"License"); you may not use this file except in compliance
#with the License.  You may obtain a copy of the License at
#
#http://www.apache.org/licenses/LICENSE-2.0
#
#Unless required by applicable law or agreed to in writing,
#software distributed under the License is distributed on an
#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#KIND, either express or implied.  See the License for the
#specific language governing permissions and limitations
#under the License.

set -e

if ! [ -e "/usr/share/ofbiz/ofbiz.jar" ]; then
	exit 0
fi

PATH=/bin:/usr/bin:/sbin:/usr/sbin

# set defaults
DEFAULT=/etc/default/ofbiz
JAVA_HOME=""
JAVA_HOMES="/usr/lib/jvm/java-6-openjdk"
MEMIF=""
UMASK=002

. /lib/lsb/init-functions
. /etc/default/rcS

if [ -e /etc/default/locale ]; then
	. /etc/default/locale
	export LANG
fi

# allow local admin to change defaults
if [ -e "$DEFAULT" ]; then
	. "$DEFAULT"
fi

PATH=/bin:/usr/bin:/sbin:/usr/sbin

NAME=ofbiz
DESC="OfBiz Container"
OFBIZ_HOME=/usr/share/ofbiz
USER=ofbiz
PIDFILE=/var/run/ofbiz.pid
CLASS=org.ofbiz.base.start.Start

PROPS=""
if [ -f "/etc/ofbiz/debconf.cfg" ]; then
	PROPS="$PROPS -Dofbiz.system.props=/etc/ofbiz/debconf.cfg"
fi

if [ "x$JAVA_HOME" = x ]; then
	if [ "x$JAVA_HOMES" != x ]; then
		for possible in $JAVA_HOMES; do
			if [ -e "$possible/bin/java" ]; then
				JAVA_HOME="$possible"
				break
			fi
		done
	fi
	if [ "x$JAVA_HOME" = x ]; then
		log_failure_msg "Couldn't find a java."
		if [ "x$JAVA_HOMES" != x ]; then
			log_failure_msg "Tried $JAVA_HOMES"
		fi
		exit 1
	fi
fi
JAVA="$JAVA_HOME/bin/java"
CLASSPATH="$OFBIZ_HOME/ofbiz.jar:/usr/share/java/commons-daemon.jar"

run_ofbiz_cmd() {
	(
		cd "$OFBIZ_HOME"
		"$JAVA" $PROPS -jar ofbiz.jar "$1"
	)
}

if [ -z "$(which jsvc)" ]; then
	jsvc() {
		jsvc_jvm=""
		jsvc_wait=""
		jsvc_verbose_class=""
		jsvc_verbose_gc=""
		jsvc_verbose_jni=""
		jsvc_pidfile=""
		jsvc_detach=1
		jsvc_user=""
		jsvc_outfile="/dev/null"
		jsvc_errfile="/dev/null"
		jsvc_home=""
		jsvc_cp=""
		jsvc_extra=""
		jsvc_stop=""
		while [ $# -gt 0 ]; do
			case "$1" in
				(-version)		;;
				(-help)			;;
				(-?)			;;
				(-check)		;;
				(-jvm)			jsvc_jvm="$2"; shift;;
				(-wait)			jsvc_wait="$2"; shift;;
				(-stop)			jsvc_stop=1;;
				(-verbose:class)	jsvc_verbose_class=1; shift;;
				(-verbose:gc)		jsvc_verbose_gc=1; shift;;
				(-verbose:jni)		jsvc_verbose_jni=1; shift;;
				(-pidfile)		jsvc_pidfile="$2"; shift;;
				(-nodetach)		jsvc_detach="";;
				(-user)			jsvc_user="$2"; shift;;
				(-outfile)		jsvc_outfile="$2"; shift;;
				(-errfile)		jsvc_errfile="$2"; shift;;
				(-home)			jsvc_home="$2"; shift;;
				(-classpath)		jsvc_cp="$2"; shift;;
				(-cp)			jsvc_cp="$2"; shift;;
				(-D*)			jsvc_extra="$jsvc_extra \"$1\"";;
				(-X*)			jsvc_extra="$jsvc_extra \"$1\"";;
				(*)			break;;
			esac
			shift
		done
		if ! [ "$jsvc_home" ]; then log_failure_msg "-home not set"; exit 1; fi
		if ! [ "$jsvc_cp" ]; then log_failure_msg "-cp not set"; exit 1; fi
		if [ "$jsvc_jvm" ]; then log_failure_msg "-jvm not supported"; exit 1; fi
		if [ "$jsvc_wait" ]; then log_failure_msg "-wait not supported"; exit 1; fi
		if [ "$jsvc_stop" ]; then log_failure_msg "-stop not supported"; exit 1; fi
		jsvc_args=""
		if [ "$jsvc_verbose_class" ]; then :; fi
		if [ "$jsvc_verbose_gc" ]; then :; fi
		if [ "$jsvc_verbose_jni" ]; then :; fi
		jsvc_command_file=$(mktemp)
		echo "#!/bin/sh" > "$jsvc_command_file"
		chmod +x "$jsvc_command_file"
		echo "rm -f \"$jsvc_command_file\"" >> "$jsvc_command_file"
		if [ "$jsvc_pidfile" ]; then
			touch "$jsvc_pidfile"
			if [ "$jsvc_user" ]; then
				chown "$jsvc_user" "$jsvc_pidfile"
			fi
			echo "echo \$\$ > \"$jsvc_pidfile\"" >> "$jsvc_command_file"
		fi
		echo "exec \"$JAVA\" -classpath \"$jsvc_cp\" $jsvc_extra $@" >> "$jsvc_command_file"
		if [ "$jsvc_user" ]; then
			chown "$jsvc_user" "$jsvc_command_file"
			jsvc_command="su -c \"$jsvc_command_file\" -s \"/bin/sh\" \"$jsvc_user\""
		else
			jsvc_command="$jsvc_command_file"
		fi
		jsvc_command="$jsvc_command 1>\"$jsvc_outfile\" 2>\"$jsvc_errfile\""
		if [ "$jsvc_detach" ]; then
			eval $jsvc_command &
		else
			trap "rm -f \"$jsvc_command_file\"" EXIT
			eval $jsvc_command
		fi
		return $?
	}
fi

get_status() {
	status="$(run_ofbiz_cmd -status 2>/dev/null | sed -n 's/^Current Status : //p')"
	case "$status" in
		(Running|Starting|Stopping|Not\ Running)
			echo $status
		;;
		(*)
			echo Not Running
		;;
	esac
}

wait_for_status() {
	count="$1"
	while :; do
		if [ "$(get_status)" = "$2" ]; then
			break;
		fi
		count=$(($count - 1))
		if [ "$count" -eq 0 ]; then
			log_failure_msg "Timeout waiting for $3"
			exit 1
		fi
		log_begin_msg "."
		sleep 1
	done
}

ofbiz_shutdown() {
	run_ofbiz_cmd -shutdown >/dev/null
}

wait_for_stop() {
	wait_for_status 30 "Not Running" "stop"
	count="10"
	while :; do
		if ! start-stop-daemon --pidfile "$PIDFILE" --exec /usr/bin/jsvc --user $USER --signal 0 --quiet --stop; then
			break
		fi
		count=$(($count - 1))
		if [ "$count" -eq 0 ]; then
			log_failure_msg "Timeout waiting for stop"
			exit 1
		fi
		log_begin_msg "."
		sleep 1
	done
}

start() {
	case "$(get_status)" in
		(Stopping)
			log_progress_msg "(waiting for stop"
			wait_for_stop
			log_progress_msg ")"
		;;
		(Not\ Running)
		;;
		(Starting|Running)
			log_progress_msg "(already running)"
			return
		;;
		(*)
			log_progress_msg "(forcing stop"
			ofbiz_shutdown
			wait_for_stop
			log_progress_msg ")"
		;;
	esac
	(
		cd "$OFBIZ_HOME"
		touch /var/log/ofbiz/ofbiz.log
		chown ofbiz.ofbiz /var/log/ofbiz/ofbiz.log
		jsvc -pidfile "$PIDFILE" \
			-user $USER \
			-outfile /var/log/ofbiz/console.log -errfile '&1' \
			-home "$JAVA_HOME" -cp "$CLASSPATH" \
			$PROPS \
			$MEMIF \
			$CLASS
	)
	wait_for_status 120 "Running" "start"
}

stop() {
	case "$(get_status)" in
		(Not\ Running)
		;;
		(*)
			ofbiz_shutdown
		;;
	esac
	wait_for_stop
	if [ -e "$PIDFILE" ]; then
		rm "$PIDFILE"
	fi
}

install() {
	case "$(get_status)" in
		(Stopping)
			log_progress_msg "(waiting for stop"
			wait_for_stop
			log_progress_msg ")"
		;;
		(Not\ Running)
		;;
		(Starting|Running)
			log_failure_msg "(running, can't install)"
			exit 1
		;;
	esac
	(
		cd "$OFBIZ_HOME"
		touch /var/log/ofbiz/ofbiz.log
		chown ofbiz.ofbiz /var/log/ofbiz/ofbiz.log
		jsvc -pidfile "$PIDFILE" \
			-nodetach \
			-user $USER \
			-outfile /dev/fd/3 -errfile '&1' \
			-home "$JAVA_HOME" -cp "$CLASSPATH" \
			$PROPS \
			$MEMIF \
			$CLASS \
			install "$@" 3>&1 | \
			tee -a /var/log/ofbiz/install.log
	)
}

module_hook() {
	files=""
	result="0"
	while [ $# -gt 0 ]; do
		case "$1" in
			(-file=*)
				file="$(echo "$1" | sed 's/^-file=//')"
				if ! [ -e "$file" ]; then
					log_failure_msg "File $file does not exist"
					result=1
				else
					files="$files,$file"
				fi
			;;
			(-file)
				file="$2"
				if ! shift; then
					log_failure_msg "No file specified"
					result=1
				elif ! [ -e "$file" ]; then
					log_failure_msg "File $file does not exist"
					result=1
				else
					files="$files,$file"
				fi
			;;
			(*)
				log_failure_msg "Unknown argument($1)"
				exit 1
			;;
		esac
		shift
	done
	if ! [ "$files" ]; then
		return 0
	elif [ "$result" eq 1 ]; then
		return 1
	fi
	files="$(echo "$files" | cut -f 2- -d ,)"
	was_running=""
	case "$(get_status)" in
		(Not\ Running)
		;;
		(Stopping)
			wait_for_stop
		;;
		(*)
			log_daemon_msg "Stopping $DESC" "$NAME"
			ofbiz_shutdown
			wait_for_stop
			log_end_msg 0
			was_running=1
		;;
	esac
	cd "$OFBIZ_HOME"
	if ! jsvc \
		-user $USER -outfile /dev/tty -errfile '&1' -nodetach \
		-home "$JAVA_HOME" -cp "$CLASSPATH" \
		$CLASS install -file="$files"; then
		log_failure_msg "Error installing files"
		result=1
	fi
	if [ "$was_running" ]; then
		log_daemon_msg "Starting $DESC" "$NAME"
		start
		log_end_msg 0
	fi
	return "$result"
}
cmd="$1"
shift || true
case "$cmd" in
	(start)
		log_daemon_msg "Starting $DESC" "$NAME"
		start
		log_end_msg 0
	;;
	(stop)
		log_daemon_msg "Stopping $DESC" "$NAME"
		stop
		log_end_msg 0
	;;
	(install)
		log_daemon_msg "Installing $DESC" "$NAME"
		install "$@"
		log_end_msg 0
	;;
	(reload|restart|force-reload)
		log_daemon_msg "Restarting $DESC" "$NAME"
		stop
		start
		log_end_msg 0
	;;
	(module-hook)
		if ! module_hook "$@"; then
			exit 1
		fi
	;;
	(*)
		log_success_msg "Usage: $0 {start|stop|install|reload|force-reload|restart"
		exit 1
	;;
esac
