#!/usr/bin/bash
# Copyright 2014 BarD Software s.r.o
# This script launches GanttProject. It can be symlinked and can be ran from
# any working directory

SCRIPT_FILE="$0"

find_ganttproject_home() {
  WORKING_DIR="$(pwd)"
  # We want to find the directory where the real script file resides.
  # If real file is symlinked (possibly many times) then we need to follow
  # symlinks until we reach the real script
  # After that we run pwd to get directory path
  cd "$(dirname "$SCRIPT_FILE")"
  SCRIPT_FILE="$(basename "$SCRIPT_FILE")"

  while [ -L "$SCRIPT_FILE" ]; do
    SCRIPT_FILE="$(readlink "$SCRIPT_FILE")"
    cd "$(dirname "$SCRIPT_FILE")"
    SCRIPT_FILE="$(basename "$SCRIPT_FILE")"
  done

  pwd
}

GP_HOME="$(find_ganttproject_home)"

# Create log directory
GP_LOG_DIR="$HOME/.ganttproject.d"
# Check if log dir is present (or create it)
if [ ! -d $GP_LOG_DIR ]; then
  if [ -e  $GP_LOG_DIR ]; then
    echo "file $GP_LOG_DIR exists and is not a directory" >&2
    exit 1
  fi
  if ! mkdir $GP_LOG_DIR ; then
    echo "Could not create $GP_LOG_DIR directory" >&2
    exit 1
  fi
fi

# Create unique name for log file
LOG_FILE="$GP_LOG_DIR/.ganttproject-"$(date +%Y%m%d%H%M%S)".log"
if [ -e "$LOG_FILE" ] && [ ! -w "$LOG_FILE" ]; then
  echo "Log file $LOG_FILE is not writable" >2
  exit 1
fi

# Find usable java executable
if [ -z "$JAVA_HOME" ]; then
  JAVA_COMMAND=$(which java)
  if [ "1" = "$?" ]; then
    echo "No executable java found. Please set JAVA_HOME variable" >&2
    exit 1
  fi
else
  JAVA_COMMAND=$JAVA_HOME/bin/java
fi
if [ ! -e "$JAVA_COMMAND" ]; then
  echo "$JAVA_COMMAND does not exist" >&2
  exit 1
fi
if [ ! -x "$JAVA_COMMAND" ]; then
  echo "$JAVA_COMMAND is not executable" >&2
  exit 1
fi

if [ -z "$GP_HOME" ]; then
  echo "GanttProject home directory is not set. Please point GP_HOME environment variable to the directory with GanttProject files."
  exit 1
fi

echo "JAVA_HOME=$JAVA_HOME"
echo "JAVA_COMMAND=$JAVA_COMMAND"
echo "GP_HOME=$GP_HOME"
echo "user.dir=$(pwd)"

CLASSPATH="$CLASSPATH:$GP_HOME/eclipsito.jar:$GP_HOME"
export CLASSPATH
BOOT_CLASS=org.bardsoftware.eclipsito.Boot
ECLIPSITO_ARGS="-plugins-dir $GP_HOME/plugins -app net.sourceforge.ganttproject.GanttProject"

JAVA_ARGS="-Xmx1024m -Duser.dir=$(pwd) $BOOT_CLASS $ECLIPSITO_ARGS -log true -log_file $LOG_FILE"
if [ -n "$(echo \"$*\" | sed -n '/\(^\|\s\)-/{p;}')" ]; then
  "$JAVA_COMMAND" $JAVA_ARGS "$@"
else
  "$JAVA_COMMAND" $JAVA_ARGS "$@" &
fi

