#!/bin/bash

JARNAME=slang



#examples to run
#./mnode.sh -dir /path/to/dir -ddx /path/to/ddx -start
#./mnode.sh -dir /path/to/dir -java-home /usr/java/jdk1.8.0/ -debug arg1 arg2

RELATIVE_SCRIPT_DIR=`dirname $0`
CURRENT_DIR=`pwd`
SCRIPT_DIR=$RELATIVE_SCRIPT_DIR

echo $RELATIVE_SCRIPT_DIR | grep -E "^\..*" > /dev/null
if [ $? -eq 0 ]; then
   SCRIPT_DIR=$CURRENT_DIR/$RELATIVE_SCRIPT_DIR
fi

PLATFORM_LIB=platform/lib
jardir=$SCRIPT_DIR/../$PLATFORM_LIB

debug=false
dir=./
java_cfg=$JARNAME.conf
java_args=
java_home=$JAVA_HOME
args=()
norun=false

jvm_args="--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED --add-opens=java.base/sun.net.www=ALL-UNNAMED --add-opens=java.base/sun.security.util=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.xml/com.sun.org.apache.xerces.internal.jaxp.datatype=ALL-UNNAMED --add-opens=java.base/sun.net.www.protocol.jar=ALL-UNNAMED --add-opens=java.base/sun.security.provider=ALL-UNNAMED --add-opens=java.base/sun.reflect.generics.reflectiveObjects=ALL-UNNAMED --add-opens=java.base/jdk.internal.misc=ALL-UNNAMED --add-opens=java.base/sun.security.action=ALL-UNNAMED --add-opens=java.base/sun.security.pkcs=ALL-UNNAMED --add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED --add-opens=java.base/jdk.internal.access=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/sun.security.rsa=ALL-UNNAMED --add-opens=java.base/sun.nio.cs=ALL-UNNAMED"

java_exe=java

counter=$#;
while [ $counter -gt 0 ]
do
   case "$1" in
      -debug)
         debug=true
         ;;
      -dir)
         shift
         counter=`expr $counter - 1`
         dir=$1
         ;;
      -java-cfg)           
         shift
         counter=`expr $counter - 1`
         java_cfg=$1
         ;;
      -java-args)           
         shift
         counter=`expr $counter - 1`
         java_args=$1
         ;;
      -java-home)           
         shift
         counter=`expr $counter - 1`
         java_home=$1
         ;;
      -jar-dir)           
         shift
         counter=`expr $counter - 1`
         jardir=$1
         ;;
      -no-run)
         shift
         counter=`expr $counter - 1`
         norun=true
         ;;
      *)
         args[${#args[@]}]=$1
         ;;
    esac
    shift
    counter=`expr $counter - 1`
done

java_exe=$STROOT/platform/jre/bin/$java_exe
if [ ! -x $java_exe ]; then
   if [ x$java_home != "x" ]; then
      java_exe=$java_home/bin/$java_exe;
      if [ ! -x $java_exe ]; then
         echo "ERROR: Cannot find Java executable neither in $STROOT/platform/jre or in java_home path $java_home."
         exit -1
      fi
   else
      echo "ERROR: Cannot find Java executable in $STROOT/platform/jre."
      exit -1
   fi
fi

if [ x$dir != "x" ]; then
   echo $dir | grep -E "^\..*" > /dev/null
   if [ $? -eq 0 ]; then
      dir=$CURRENT_DIR/$dir
   fi

   if [ ! -d $dir ]; then
      echo "ERROR: Directory $dir doesn't exist"
      exit -1
   fi
   cd $dir
fi

if [ "x$java_cfg" != "x" ]; then
   if [ ! -f "$java_cfg" ]; then
      java_cfg=$JARNAME.conf
   fi

   if [ -f "$java_cfg" ];then
      while read line; do
         echo $line | grep -E "^\a*#.*" >> /dev/null
         if [ $? -ne 0 ]; then
            jvm_args="$jvm_args $line"
         fi
      done << EOF
         `cat $java_cfg`
EOF
   fi
fi


if [ "x$java_args" != "x" ]; then
   java_args=`echo $java_args | sed s/[\"\']//g`
   jvm_args="$jvm_args $java_args"
fi

if [ "x$jardir" != "x" ]; then
   echo $jardir | grep -E "^\..*" > /dev/null
   if [ $? -eq 0 ]; then
      jardir=$CURRENT_DIR/$jardir
   fi
fi

if [ ! -f $jardir/$JARNAME.jar ]; then
   jardir=$SCRIPT_DIR
fi

if [ ! -f $jardir/$JARNAME.jar ]; then
   if [ "x$STROOT" != "x" ]; then
      jardir=$STROOT/$PLATFORM_LIB
   fi
fi

### cygwin ###
windowsjardir=`cygpath -w $jardir 2>/dev/null`
if [ $? -eq 0 ]; then
   jardir=$windowsjardir
fi
### ###

jar="-jar $jardir/$JARNAME.jar"

if [ "x$norun" = "xtrue" ]; then
    echo "Working directory: $dir"
    echo "Jar to run: $jardir/$JARNAME.jar"
    echo "Command to run: \"$java_exe $jvm_args $jar ${args[@]}\""
    exit 0
fi

$java_exe $jvm_args $jar "${args[@]}"

exit $?
