#!/bin/bash

###################################################################################################################### 
# QCG Client script
# DO NOT CHANGE ANYTHING BELOW
######################################################################################################################

######################################################################################################################
# Functions

function exit_if_not_set {
if [ "x$2" == "x" ]; then
    echo Variable $1 is not set!
    exit 1
fi
}

function check_if_set {
if [ "x$2" == "x" ]; then
    echo Variable $1 is not set!
fi
}


######################################################################################################################

[ -z "$QCG_ENV_CONFIGURATION_FILE" ] && export QCG_ENV_CONFIGURATION_FILE=/etc/qcg/qcg-broker-client/qcg-broker-client.conf
[ -z "$QCG_ENV_DIR" ] && export QCG_ENV_DIR=~/.qcg
[ -z "$QCG_ENV_USER_CONFIGURATION_FILE" ] && export QCG_ENV_USER_CONFIGURATION_FILE=$QCG_ENV_DIR/qcg.conf

#If exists source QCG-Client configuration files
[ -f "$QCG_ENV_CONFIGURATION_FILE" ] && source $QCG_ENV_CONFIGURATION_FILE
[ -f "$QCG_ENV_USER_CONFIGURATION_FILE" ] && source $QCG_ENV_USER_CONFIGURATION_FILE

#Set QCG_CLIENT_LOCATION (QCG_CLIENT_LOCATION, QCG_URL and QCG_DN may be already set e.g. by module)
[ -z "$QCG_ENV_CLIENT_LOCATION" ] && export QCG_ENV_CLIENT_LOCATION=$QCG_CLIENT_LOCATION_DEFAULT 
[ -z "$QCG_ENV_CLIENT_LOCATION" ] && export QCG_ENV_CLIENT_LOCATION=`dirname $0`

[ -z "$QCG_ENV_URL" ] && export QCG_ENV_URL="$QCG_URL_DEFAULT"
[ -z "$QCG_ENV_DN" ] && export QCG_ENV_DN="$QCG_DN_DEFAULT"
[ -z "$QCG_ENV_GFTP_HOSTNAME" ] && export QCG_ENV_GFTP_HOSTNAME="$GFTP_HOSTNAME"
[ -z "$QCG_ENV_GFTP_PORT" ] && export QCG_ENV_GFTP_PORT="$GFTP_PORT"
[ -z "$QCG_ENV_GLOBUS_TCP_PORT_RANGE" ] && export QCG_ENV_GLOBUS_TCP_PORT_RANGE="$GLOBUS_TCP_PORT_RANGE"
[ -z "$QCG_ENV_PROXY_DURATION" ] && export QCG_ENV_PROXY_DURATION="$QCG_PROXY_DURATION_DEFAULT"
[ -z "$QCG_ENV_PROXY_DURATION_MIN" ] && export QCG_ENV_PROXY_DURATION_MIN="$QCG_PROXY_DURATION_MIN"
[ -z "$QCG_ENV_CONNECT_TIMEOUT" ] && export QCG_ENV_CONNECT_TIMEOUT="$QCG_CONNECT_TIMEOUT"
[ -z "$QCG_ENV_CERTIFICATES" ] && export QCG_ENV_CERTIFICATES="$QCG_CERTIFICATES"

[ -z "$QCG_ENV_JOB_FORMAT" ] && export QCG_ENV_JOB_FORMAT=$QCG_JOB_FORMAT
[ -z "$QCG_ENV_USER_JOB_FORMAT" ] && export QCG_ENV_USER_JOB_FORMAT=$QCG_USER_JOB_FORMAT
[ -z "$QCG_ENV_TASK_FORMAT" ] && export QCG_ENV_TASK_FORMAT=$QCG_TASK_FORMAT
[ -z "$QCG_ENV_USER_TASK_FORMAT" ] && export QCG_ENV_USER_TASK_FORMAT=$QCG_USER_TASK_FORMAT
[ -z "$QCG_ENV_RESERVATION_FORMAT" ] && export QCG_ENV_RESERVATION_FORMAT=$QCG_RESERVATION_FORMAT
[ -z "$QCG_ENV_USER_RESERVATION_FORMAT" ] && export QCG_ENV_USER_RESERVATION_FORMAT=$QCG_USER_RESERVATION_FORMAT
[ -z "$QCG_ENV_LIST_TIME_FORMAT" ] && export QCG_ENV_LIST_TIME_FORMAT=$QCG_LIST_TIME_FORMAT

[ -z "$QCG_ENV_HISTORY_MAX" ] && export QCG_ENV_HISTORY_MAX=100

exit_if_not_set QCG_ENV_CLIENT_LOCATION $QCG_ENV_CLIENT_LOCATION
exit_if_not_set QCG_ENV_URL $QCG_ENV_URL
exit_if_not_set QCG_ENV_DN $QCG_ENV_DN

check_if_set QCG_ENV_GFTP_HOSTNAME $QCG_ENV_GFTP_HOSTNAME
check_if_set QCG_ENV_GFTP_PORT $QCG_ENV_GFTP_PORT
check_if_set QCG_ENV_GLOBUS_TCP_PORT_RANGE $QCG_ENV_GLOBUS_TCP_PORT_RANGE
check_if_set QCG_ENV_PROXY_DURATION $QCG_ENV_PROXY_DURATION
check_if_set QCG_ENV_PROXY_DURATION_MIN $QCG_ENV_PROXY_DURATION_MIN
check_if_set QCG_ENV_CONNECT_TIMEOUT $QCG_ENV_CONNECT_TIMEOUT
check_if_set QCG_ENV_HISTORY_MAX $QCG_ENV_HISTORY_MAX

######################################################################################################################

CLASSPATH=$QCG_ENV_CLIENT_LOCATION/jars
for i in $QCG_ENV_CLIENT_LOCATION/jars/axis/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/client/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/jglobus/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/jline/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/jna/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/jakarta/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/xerces/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/canl/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/jars/castor/*.jar; do CLASSPATH=$CLASSPATH:$i; done
for i in $QCG_ENV_CLIENT_LOCATION/lib/*.jar; do CLASSPATH=$CLASSPATH:$i; done

export CLASSPATH=$CLASSPATH:$QCG_ENV_CLIENT_LOCATION

#QCG client class
QCG_CLIENT=org.qcg.broker.webservice.client.QCGClient

export QCG_SRC_HANDLERS="\
org.qcg.broker.webservice.client.handlers.sources.FileSource:\
org.qcg.broker.webservice.client.handlers.sources.ConsoleSource:\
org.qcg.broker.webservice.client.handlers.sources.ArgsSource"

export QCG_FUNC_HANDLERS="\
org.qcg.broker.webservice.client.handlers.functionality.console.ConsoleHandler:\
org.qcg.broker.webservice.client.handlers.functionality.alias.AliasHandler:\
org.qcg.broker.webservice.client.handlers.functionality.proxy.ProxyHandler:\
org.qcg.broker.webservice.client.handlers.functionality.common.CommonHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.job_factory.QCGFactoryHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.job.JobHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.extension.monitor.job.JobMonitorHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.extension.monitor.task.TaskMonitorHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.task.TaskHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.allocation.AllocationHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.reservation_factory.ReservationFactoryHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.reservation.ReservationHandler:\
org.qcg.broker.webservice.client.handlers.functionality.service.registry.RegistryHandler"
                                
export QCG_TRANSL_HANDLERS="\
org.qcg.broker.webservice.client.handlers.translations.alias.AliasHandler"

QCG_JAVA_OPTS="-Djava.security.egd=file:///dev/urandom \
               -Djava.security.gsi.signing.policy=false \
               -Djava.io.tmpdir=/tmp/$USER \
               -Xmx1024m \
               -DX509_CERT_DIR=$QCG_ENV_CERTIFICATES \
               "

[ -n "$X509_USER_CERT" ] && QCG_SECURITY_OPTS="$QCG_SECURITY_OPTS -DX509_USER_CERT=$X509_USER_CERT"
[ -n "$X509_USER_KEY" ] && QCG_SECURITY_OPTS="$QCG_SECURITY_OPTS -DX509_USER_KEY=$X509_USER_KEY"
[ -n "$X509_USER_PROXY" ] && QCG_SECURITY_OPTS="$QCG_SECURITY_OPTS -DX509_USER_PROXY=$X509_USER_PROXY"


######################################################################################################################

#[ -z "$QCG_ENV_QUIET" ] && echo $QCG_ENV_URL
#[ -z "$QCG_ENV_QUIET" ] && echo $QCG_ENV_DN

mkdir -p $QCG_ENV_DIR
if [ $? -ne 0 ]; then
    echo "Failed to create directory for console auxiliary files"
    echo "Home directory will be used"
    QCG_ENV_DIR=$HOME
fi

touch $QCG_ENV_DIR/.qcg_aliases

mkdir -p /tmp/$USER

java -cp $CLASSPATH \
         $QCG_JAVA_OPTS \
         $QCG_SECURITY_OPTS \
         $QCG_CLIENT \
         "$@"
         
exit $?
