#!/bin/sh
#
# Startup script for DNA
#
PROCESSES="ExecutiveSystem.py dna.ExpertGUI dna\/third_party\/mosflm\/ipmosflm start_executive_system"
RUNNING=false
#
# Test if and DNA processes are running
#
for process in $PROCESSES
do
  if [ `uname` = "Linux" ]
    then
      output=`ps -u $USER -f --cols 5000 | grep "$process" | grep -v grep | awk '{print $2}'`
  else
    output=`ps -u $USER -f | grep "$process" | grep -v grep | awk '{print $2}'`
  fi
  if [ -n "$output" ]
    then
      RUNNING=true
  fi
done
#
KILL=false
if [ "$RUNNING" = "true" ]; then
  if [ -z "$DNAKILL" ]; then
    echo -n "Kill DNA processes owned by $USER on $HOSTNAME (y/n) ? "
    read KILL
    case "$KILL" in
      y|Y|yes|Yes|YES) KILL=true
                       break;;
    esac
  else
    KILL=true
  fi
fi
#
if [ "$KILL" = "true" ]; then
  PROCESSES="ExecutiveSystem.py dna.ExpertGUI dna\/third_party\/mosflm\/ipmosflm start_executive_system"
  RUNNING=false
#
# Try to kill any processes left hanging around.
#
  for process in $PROCESSES
  do
  if [ `uname` = "Linux" ]
    then
      kill -9 `ps -u $USER -f --cols 5000 | grep "$process" | grep -v grep | awk '{print $2}'` > /dev/null 2>&1
  else
    kill -9 `ps -u $USER -f | grep "$process" | grep -v grep | awk '{print $2}'` > /dev/null 2>&1
  fi
  done
#
# Test if processes are still running
#
  for process in $PROCESSES
  do
    if [ `uname` = "Linux" ]
      then
        output=`ps -u $USER -f --cols 5000 | grep "$process" | grep -v grep | awk '{print $2}'`
    else
      output=`ps -u $USER -f | grep "$process" | grep -v grep | awk '{print $2}'`
    fi
    if [ -n "$output" ]
      then
        RUNNING=true
    fi
  done
#
# If some process are still running give the user some advice and exit.
#
  if [ "$RUNNING" = "true" ]
    then
      echo "We have tried to kill the DNA processes."
      echo ""
      echo "These processes are owned by you but the kill has failed."
      echo "Please try again to run this command, if the problem persists"
      echo "please contact the beamline responsible."
      exit
  fi
#
fi
#
# Check that DNAHOME is defined.
#
if [ -z "$DNAHOME" ]; then
  echo "ERROR: DNAHOME not defined."
  exit 1
fi
echo "DNAHOME = $DNAHOME"
#
# Check that DNANAME is defined.
#
if [ -z "$DNANAME" ]; then
  echo "ERROR: DNANAME not defined."
  exit 1
fi
echo "DNANAME = $DNANAME"
#
# Check if DNA_PYTHON is set, if not set it to "python"
#
if [ -z $DNA_PYTHON ]; then
  DNA_PYTHON=python
fi
#
# Check versions of Python and Java
#
if $DNA_PYTHON $DNAHOME/scripts/test_dna_python_java
then
    echo "Python and Java versions are ok."
else
    echo "ERROR! Wrong version(s) of python and/or java."
    exit 1
fi
#
# Set DNA_SYSTEM_DEFAULTS to default value if not defined.
#
if [ -z "$DNA_SYSTEM_DEFAULTS" ] ; then
  DNA_SYSTEM_DEFAULTS=$DNAHOME/config/$DNANAME/system_defaults.xml
fi
echo "DNA_SYSTEM_DEFAULTS = $DNA_SYSTEM_DEFAULTS"
#
# Set DNA_USER_DEFAULTS to default value if not defined.
#
if [ -z "$DNA_USER_DEFAULTS" ] ; then
  DNA_USER_DEFAULTS=$HOME/.dna/user_defaults.xml
fi
echo "DNA_USER_DEFAULTS = $DNA_USER_DEFAULTS"
#
# Set DNAJAVAPROPERTIES to default value if not defined.
#
if [ -z "$DNAJAVAPROPERTIES" ] ; then
  DNAJAVAPROPERTIES=$DNAHOME/config/$DNANAME/java.properties
fi
echo "DNAJAVAPROPERTIES = $DNAJAVAPROPERTIES"
#
# Set JDK_PREFIX to null string if DNAJDK is not defined.
#
if [ -z "$DNAJDK" ] ; then
  JDK_PREFIX=
else
  JDK_PREFIX=$DNAJDK/bin/
fi
#
# Set DNATMPDIR to default working directory if not defined
#
if [ -z "$DNATMPDIR" ] ; then
  DNATMPDIR=`pwd`
  export DNATMPDIR
else
  #
  # Check that the provided DNATMPDIR is a directory
  #
  if [ ! -d "$DNATMPDIR" ]; then
    echo "ERROR! DNATMPDIR is set to $DNATMPDIR but this directory does not exist."
    echo "Please correct DNATMPDIR and restart DNA."
    exit 1
  fi
  #
  # Check that the provided DNATMPDIR is writable
  #
  if [ ! -w "$DNATMPDIR" ]; then
    echo "ERROR! DNATMPDIR is set to $DNATMPDIR but this directory is not writable for DNA." 
    echo "Please correct DNATMPDIR and restart DNA."
    exit 1
  fi
fi
#
# Set DNALOGDIR to default working directory if not defined
#
if [ -z "$DNALOGDIR" ] ; then
  DNALOGDIR=`pwd`
  export DNALOGDIR
else
  #
  # Check that the provided DNALOGDIR is a directory
  #
  if [ ! -d "$DNALOGDIR" ]; then
    echo "ERROR! DNALOGDIR is set to $DNALOGDIR but this directory does not exist."
    echo "Please correct DNALOGDIR and restart DNA."
    exit 1
  fi
  #
  # Check that the provided DNALOGDIR is writable
  #
  if [ ! -w "$DNALOGDIR" ]; then
    echo "ERROR! DNALOGDIR is set to $DNALOGDIR but this directory is not writable for DNA." 
    echo "Please correct DNALOGDIR and restart DNA."
    exit 1
  fi
fi
#
# Run the dna_configurator
#
PYTHONPATH=$DNAHOME/es/src:$DNAHOME/xsd/python
PYTHONPATH=$PYTHONPATH:$DNAHOME/scheduler/Scheduler/Mosflm
PYTHONPATH=$PYTHONPATH:$DNAHOME/scheduler/DiffractionImage/lib
PYTHONPATH=$PYTHONPATH:$DNAHOME/ext/lib
export PYTHONPATH
if [ -z $DNA_PYTHON ]; then
  DNA_PYTHON=python
fi
if $DNA_PYTHON $DNAHOME/scripts/dna_configurator.py
  then
     echo "DNA configurator done."
  else
     echo "ERROR! The DNA configurator encountered a problem!"
     exit 1
  fi
#
# Define GUIHOME and CLASSPATH
#
GUIHOME=$DNAHOME/gui
if [ -z "$DNACLASSPATH" ] ; then
  CLASSPATH=$GUIHOME:$GUIHOME/classes:$DNAHOME/ext/jars/castor-0.9.3.19-dna.jar:$DNAHOME/ext/jars/xerces.jar:$DNAHOME/ext/jars/gnu-regexp-1.1.4.jar:$DNAHOME/third_party/STAC/STAC.jar:$DNAHOME/ext/jars/vecmath.jar:$CLASSES
else
  CLASSPATH=$DNACLASSPATH
fi
#
# Start the similator if requested
#
if [ "$1" = "--simulator" ]; then
    export DNA_DB_SIMULATOR=1
    export DNA_BCM_SIMULATOR=1
    xterm -e $DNAHOME/scripts/start_bcm_simulator $DNAHOME/tests/TestCase &
fi
#
# Check that DNA is not already running
#
#dna_pid=`ps -aelf | grep -v grep | grep java | grep dna.ExpertGUI`
#if [ -n "$dna_pid" ] ; then
#  echo "An other DNA GUI seems to be running on this computer!"
#  echo "If this is not the case, kill the following PIDs:"
#  echo `ps -aelf | grep -v grep | grep java | grep dna.ExpertGUI | awk '{print $4}'`
#  exit 1
#fi
#
# Start up the GUI
#
JAVA="${JDK_PREFIX}java -classpath $CLASSPATH"
$JAVA -Ddl.propertiesFile=$DNAJAVAPROPERTIES \
      -Ddna.home=$DNAHOME \
      -Ddna.name=$DNANAME \
      -Ddna.system_defaults=$DNA_SYSTEM_DEFAULTS \
      -Ddna.user_defaults=$DNA_USER_DEFAULTS \
      -Ddna.down1=$GUIHOME/dna/down1.gif \
      -Ddna.down2=$GUIHOME/dna/down2.gif \
      -Ddna.status_idle=$GUIHOME/dna/idle.gif \
      -Ddna.status_active=$GUIHOME/dna/active.gif \
      -Ddna.status_error=$GUIHOME/dna/error.gif \
      $STAC_PARAMETERS \
      dna.ExpertGUI $*
