#!/bin/bash

SCRIPT="$0"

# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
  ls=`ls -ld "$SCRIPT"`
  # Drop everything prior to ->
  link=`expr "$ls" : '.*-> \(.*\)$'`
  if expr "$link" : '/.*' > /dev/null; then
    SCRIPT="$link"
  else
    SCRIPT=`dirname "$SCRIPT"`/"$link"
  fi
done

# determine kernel home
KERNEL_HOME=`dirname "$SCRIPT"`/..

# make KERNEL_HOME absolute
KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`

# execute user setenv script if needed
if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
then
	. $KERNEL_HOME/bin/setenv.sh
fi

# setup classpath and java environment
. "$KERNEL_HOME/bin/setupClasspath.sh"

# Run java version check with the discovered java jvm.
. "$KERNEL_HOME/bin/checkJava.sh"

shopt -s extglob
	
# parse the command we executing
COMMAND=$1
shift;
	
if [ "$COMMAND" = "start" ]
then
	
	# parse the standard arguments
	CONFIG_DIR=$KERNEL_HOME/configuration
	CLEAN_FLAG=
	NO_START_FLAG=

	SHELL_FLAG=
	
	DEBUG_FLAG=
	DEBUG_PORT=8000
	SUSPEND=n
	if [ -z "$JMX_PORT" ]
	then
		JMX_PORT=9875
	fi
	
	if [ -z "$KEYSTORE_PASSWORD" ]
	then
		KEYSTORE_PASSWORD=changeit
	fi
	
	ADDITIONAL_ARGS=

	while (($# > 0))
		do
		case $1 in
		-debug)
				DEBUG_FLAG=1
				if [[ "$2" == +([0-9]) ]]
				then
					DEBUG_PORT=$2
					shift;
				fi
				;;
		-clean)
				CLEAN_FLAG=1
				;;
		-configDir)
				CONFIG_DIR=$2
				shift;
				;;
		-jmxport)
				JMX_PORT=$2
				shift;
				;;
		-keystore)
				KEYSTORE_PATH=$2
				shift;
				;;
		-keystorePassword)
				KEYSTORE_PASSWORD=$2
				shift;
				;;
		-noStart)
				NO_START_FLAG=1
				;;
				
		-suspend)
				SUSPEND=y
				;;
		-shell)
				SHELL_FLAG=1
				;;
		*)
				ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
				;;
		esac
		shift
	done
	
	# start the kernel
	if [[ "$CONFIG_DIR" != /* ]]
	then
	    CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
	fi

	if [ -z "$KEYSTORE_PATH" ]
	then
	    KEYSTORE_PATH=$CONFIG_DIR/keystore
	fi

	if [ "$DEBUG_FLAG" ]
	then
		DEBUG_OPTS=" \
			-Xdebug \
			-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
	fi

	if [ "$CLEAN_FLAG" ]
	then
        echo "Cleaning the serviceability and working directories..."
        rm -rf "$KERNEL_HOME/work"
        rm -rf "$KERNEL_HOME/serviceability"

        LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
	fi
	
	if [ "$SHELL_FLAG" ]
	then
	    echo "Warning: Kernel shell not supported; -shell option ignored."
		# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
	fi

    ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
    AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
    AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
    CONFIG_AREA=$KERNEL_HOME/work
    JAVA_PROFILE=$KERNEL_HOME/configuration/java-server.profile

    if $cygwin; then
        ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
        AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
        AUTH_FILE=$(cygpath -wp $AUTH_FILE)
        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
        CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
        JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
    fi
	
	# Set the required permissions on the JMX configuration files
	chmod 600 "$ACCESS_PROPERTIES"

   	if [ -z "$JAVA_HOME" ]
    then
      	JAVA_EXECUTABLE=java
    else
     	JAVA_EXECUTABLE=$JAVA_HOME/bin/java
    fi

	# If we get here we have the correct Java version.
	
	if [ -z "$NO_START_FLAG" ]
	then
		TMP_DIR=$KERNEL_HOME/work/tmp
		# Ensure that the tmp directory exists
		mkdir -p "$TMP_DIR"

        JAVA_OPTS="-Xmx1024m \
                    -XX:MaxPermSize=512m $JAVA_OPTS"

		cd "$KERNEL_HOME"; exec $JAVA_EXECUTABLE \
			$JAVA_OPTS \
			$DEBUG_OPTS \
			$JMX_OPTS \
			-XX:+HeapDumpOnOutOfMemoryError \
			-XX:ErrorFile="$KERNEL_HOME/serviceability/error.log" \
			-XX:HeapDumpPath="$KERNEL_HOME/serviceability/heap_dump.hprof" \
			-Djava.security.auth.login.config="$AUTH_LOGIN" \
			-Dorg.eclipse.virgo.kernel.authentication.file="$AUTH_FILE" \
			-Djava.io.tmpdir="$TMP_DIR" \
			-Dorg.eclipse.virgo.kernel.home="$KERNEL_HOME" \
			-Dorg.eclipse.virgo.kernel.config="$CONFIG_DIR" \
			-Dosgi.sharedConfiguration.area="$CONFIG_DIR" \
			-Dosgi.java.profile="file:$JAVA_PROFILE" \
            -Declipse.ignoreApp=true \
            -Dosgi.install.area="$KERNEL_HOME" \
            -Dosgi.configuration.area="$CONFIG_AREA" \
            -Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
            -Dosgi.frameworkClassPath="$FWCLASSPATH" \
            -Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
            -Dcom.sun.management.jmxremote.port=$JMX_PORT \
		    -Dcom.sun.management.jmxremote.authenticate=true \
	    	-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
    		-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
		    -Djavax.net.ssl.keyStore="$KEYSTORE_PATH" \
		    -Djavax.net.ssl.keyStorePassword="$KEYSTORE_PASSWORD" \
		    -Dcom.sun.management.jmxremote.ssl=true \
		    -Dcom.sun.management.jmxremote.ssl.need.client.auth=false \
            -classpath "$CLASSPATH" \
			org.eclipse.equinox.launcher.Main \
            -noExit \
			$LAUNCH_OPTS \
			$ADDITIONAL_ARGS
	fi
elif [ "$COMMAND" = "stop" ]
then

	CONFIG_DIR="$KERNEL_HOME/configuration"

	#parse args for the script
	if [ -z "$TRUSTSTORE_PATH" ]
	then
		TRUSTSTORE_PATH=$CONFIG_DIR/keystore
	fi
	
	if [ -z "$TRUSTSTORE_PASSWORD" ]	
	then
		TRUSTSTORE_PASSWORD=changeit
	fi

	if [ -z "$JMX_PORT" ]
	then
		JMX_PORT=9875
	fi

	shopt -s extglob

	while (($# > 0))
		do
		case $1 in
		-truststore)
				TRUSTSTORE_PATH=$2
				shift;
				;;
		-truststorePassword)
				TRUSTSTORE_PASSWORD=$2
				shift;
				;;
		-configDir)
				CONFIG_DIR=$2
				shift;
				;;
		-jmxport)
				JMX_PORT=$2
				shift;
				;;
		*)
			OTHER_ARGS+=" $1"
			;;
		esac
		shift
	done

	OTHER_ARGS+=" -jmxport $JMX_PORT"

    if $cygwin; then
        KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
        CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
    fi

	exec $JAVA_EXECUTABLE \
	     $JAVA_OPTS \
	     $JMX_OPTS \
		-classpath "$CLASSPATH" \
		-Djavax.net.ssl.trustStore="$TRUSTSTORE_PATH" \
		-Djavax.net.ssl.trustStorePassword="$TRUSTSTORE_PASSWORD" \
		-Dorg.eclipse.virgo.kernel.home="$KERNEL_HOME" \
		-Dorg.eclipse.virgo.kernel.authentication.file="$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties" \
		org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
	
else
	echo "Unknown command: ${COMMAND}"
fi

