#!/bin/bash

PRG="$0"
while [ -h "$PRG" ] ; do
 ls=`ls -ld "$PRG"`
 link=`expr "$ls" : '.*-> \(.*\)$'`
 if expr "$link" : '/.*' > /dev/null; then
   PRG="$link"
 else
   PRG=`dirname "$PRG"`/"$link"
 fi
done

setup_dynamic_libs() {
	LIB_DIR="${STARDOG}/lib"
	if [ ! -z ${LD_LIBRARY_PATH} ]; then
	    export LD_LIBRARY_PATH="${LIB_DIR}:${LD_LIBRARY_PATH}"
	else
	    export LD_LIBRARY_PATH="${LIB_DIR}"
	fi
	if [ ! -z ${DYLD_LIBRARY_PATH} ]; then
	    export DYLD_LIBRARY_PATH="${LIB_DIR}:${DYLD_LIBRARY_PATH}"
	else
	    export DYLD_LIBRARY_PATH="${LIB_DIR}"
	fi

	if [[ ${STARDOG_SERVER_JAVA_ARGS} != *"java.library.path"* ]]; then
	    export STARDOG_SERVER_JAVA_ARGS="${STARDOG_SERVER_JAVA_ARGS} -Djava.library.path=${LIB_DIR}"
	fi
	if [[ ${STARDOG_JAVA_ARGS} != *"java.library.path"* ]]; then
	    export STARDOG_JAVA_ARGS="${STARDOG_JAVA_ARGS} -Djava.library.path=${LIB_DIR}"
	fi
}



STARDOG_ARGS=("$@")

STARDOG_BIN=`dirname "$PRG"`
. ${STARDOG_BIN}/helpers.sh

is_appstart "${STARDOG_ARGS[@]}"

is_server_cmd "${STARDOG_ARGS[@]}"

build_classpath

is_foreground "${STARDOG_ARGS[@]}"

is_daemon "${STARDOG_ARGS[@]}"

handle_zk "${STARDOG_ARGS[@]}"

check_log4j_config

setup_dynamic_libs
CMD_ARGS=$(quote_cmdline "${STARDOG_ARGS[@]}")

# things we need to do for server start regardless of the server running in the foreground or background
if [ -n "$APP_START" ]; then
    check_home "$STARDOG_HOME"

    # Start the server in STARDOG_HOME.
    cd "${STARDOG_HOME}"

    export MALLOC_ARENA_MAX=4
    export MALLOC_MMAP_THRESHOLD_=64000
fi

if [ -n "$APP_START" ]; then
	# start the server in the background
	if [ -z "$FOREGROUND" ]; then
	    if [ "${IS_ZK}" = true ]; then
	        LOG_FILE="${STARDOG_HOME}/zookeeper.log"
	    else
	        LOG_FILE="${STARDOG_HOME}/stardog.log"
	    fi

	    touch $LOG_FILE
	    TEMP_FILE_CREATED=0
	    PID_FILE="${STARDOG_HOME}/stardog.pid"
	    if [ -z "$DAEMON" ]; then
	        SERVER_START_LOG=`mktemp -t stardog-server-start.XXXXXXXX`
	        SERVER_START_LOG=`cygwinify $SERVER_START_LOG`

	        if [ "$?" != "0" ]; then
	            echo Failed to create a temporary file
	        else
	            export SERVER_START_LOG
	            TEMP_FILE_CREATED=1
	        fi
	        tail -n 0 -f $LOG_FILE > >(grep -v "^INFO") &
	        TAILPID=$!
	    fi

	    trap "signal_handler_first_stage" INT TERM

	    EXPR="\"${java}\" ${STARDOG_SERVER_JAVA_ARGS} ${STARDOG_PERF_JAVA_ARGS} ${DEFAULT_JAVA_ARGS} \
		              -Dstardog.install.location="${STARDOG}"  -server -classpath "${CLASSPATH}:${STARDOG_EXT}/*" \
	              com.complexible.stardog.cli.admin.CLI "${CMD_ARGS}" >> $LOG_FILE 2>&1 &"

	    eval $EXPR
	    PID=$!
	    echo ${PID} > ${PID_FILE}

	    if [ $TEMP_FILE_CREATED -eq 1 ]; then
	        LOG_FILE_READY=0

	        EXIT_CODE=0
	        while [ $LOG_FILE_READY -eq 0 ]; do
	          sleep .5

	          if [ -s "$SERVER_START_LOG" ]; then
	            # server started succesfully
	            LOG_FILE_READY=1
	          fi

	          process_exists $PID
	          if [ "$?" != "0" ]; then
	            # server failed to start
	            EXIT_CODE=1
	            LOG_FILE_READY=1
	          fi
	        done

	        trap - INT TERM EXIT
	        rm $SERVER_START_LOG
	        disown $TAILPID
	        kill $TAILPID
	        exit $EXIT_CODE
	    else
	        echo Starting Stardog server in background, see $LOG_FILE for more information.
	    fi
	else
	  # start the server in the foreground
	  eval exec  "${java}" ${STARDOG_SERVER_JAVA_ARGS} ${STARDOG_PERF_JAVA_ARGS} ${DEFAULT_JAVA_ARGS} \
	         -Dstardog.install.location="${STARDOG}"  -server -classpath "${CLASSPATH}:${STARDOG_EXT}/*" \
	         com.complexible.stardog.cli.admin.CLI "${CMD_ARGS}"
    fi
else
  eval exec  "${java}" ${STARDOG_JAVA_ARGS} ${DEFAULT_JAVA_ARGS} \
        -Dstardog.install.location="${STARDOG}" -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=OFF \
        -server -classpath "${CLASSPATH}" \
        com.complexible.stardog.cli.admin.CLI "${CMD_ARGS}"
fi
