#!/bin/bash

# We require the config/testenv file.
[ -f config/testEnv ] || exit $?

# Source test configuration file. 
. config/testEnv

# Check that these variables have been defined, and export them.
export ACS_INSTANCE
export ACS_TMP
export ACS_CDB
export ACS_LOG_STDOUT=2
export RUNLOCATION
export JAVA_OPTIONS

RETVAL=0

createLock() {
    # To be sure, delete all temporary and the recovery files before starting
    if [ -e "$ACS_TMP" ]; then
        if [ -e "$ACS_LOCK" ]; then
           printf "*** Lock file %s already exists, exiting\n" "$ACS_LOCK"
           exit 0
        fi
        rm -rf "$ACS_TMP" &> /dev/null
    fi
    mkdir "$ACS_TMP"
    date > "$ACS_LOCK"
}

clearLock() {
    rm -f "$ACS_LOCK" &> /dev/null
}

checkInstances() {
#     instanceFile="${ACS_TMP}/acs_instance"
#     if [ -e ${instanceFile} ]; then
#         fileInstance=`cat ${instanceFile}`
#         if [ ${fileInstance} != $ACS_INSTANCE ]; then
#             printf "*** Discrepancy in ACS instance\n"
#             printf "    env:   ACS_INSTANCE = %s\n" $ACS_INSTANCE
#             printf "    file:  ACS_INSTANCE = %s\n" $fileInstance
#         fi
#     else
#         printf "*** Missing ACS instance file ${instanceFile}"
#     fi
    rm -f "$ACS_LOCK" &> /dev/null
}

start() {
    printf "Starting test\n"
    startHSQLDB
    # startACS
}

suspend() {
    printf "Suspending test\n"
    # stopACS
}

restart() {
    printf "Restarting test\n"
    # startACS
}

stop() {
    printf "Stopping test\n"
    # stopACS
    stopHSQLDB
}

startHSQLDB() {
    printf "Starting HSQLDB\n"
    acsStartJava org.hsqldb.Server -database.0 file:"$DBDIR/$DBNAME" -dbname.0 "$DBNAME" -port "$DBPORT" &> tmp/hsqldb.log &
    # allow some time for the database to start
    sleep 5
    ./scripts/sqltool "\i $ACSDATA/config/DDL/hsqldb/TMCDB_swconfigcore/CreateHsqldbTables.sql"
    ./scripts/sqltool "\i $ACSDATA/config/DDL/hsqldb/TMCDB_swconfigext/CreateHsqldbTables.sql"
    ./scripts/sqltool "\i $ACSDATA/config/DDL/hsqldb/TMCDB_hwconfigmonitoring/CreateHsqldbTables.sql"
}

stopHSQLDB() {
    printf "Stopping HSQLDB\n"
    # Get the location of hsqldb.jar.
    if test -a $ACSROOT/lib/sqltool.jar; then
        HSQLDB_JAR=$ACSROOT/lib/sqltool.jar
    elif test -a $INTROOT/lib/sqltool.jar; then
        HSQLDB_JAR=$INTROOT/lib/sqltool.jar
    fi
    java -jar "$HSQLDB_JAR" --rcFile "$SQLTOOL_RC_FILE" --sql "shutdown;" "$DBNAME"
}

startACS() {
    # Unpack the CDB
    if test -n "$CDB_PACKED_FILE"; then
        CDB_ABS_LOC=`pwd`/$CDB_PACKED_FILE
        cd $ACS_CDB
        tar xvf "$CDB_ABS_LOC" &> /dev/null
        cd - &> /dev/null
    fi
    
    # Now see if we should wait for the interface repository to load
    if [ -n "$IDL_FILES_TO_LOAD" ]; then
        noloadifr='--noloadifr'
    fi

    #
    # Start the ORB services and manager and optionally load the interface repository
    #
    if [ -n "$noloadifr" ]; then
        acsutilTATPrologue -l $noloadifr
        if [ -n "$IDL_FILES_TO_LOAD" ]; then
            acsstartupLoadIFR  "$IDL_FILES_TO_LOAD" &> $ACS_TMP/loadifr.log
        fi
    else 
        acsutilTATPrologue -l
    fi
    
    # Start ACS containers
    declare -a CONTAINERS
    COUNTER=0
    for DIR in $ACS_CONTAINERS; do
        CONTAINERS[$COUNTER]=$DIR
        let COUNTER++
    done
    N=${#CONTAINERS[*]}
    for (( COUNTER=0; COUNTER<$N; COUNTER++)) ; do
        CONTAINER_TYPE="java"
        
        echo "${CONTAINERS[$COUNTER]}" | grep -q java
        if [ $? -eq 0 ] ; then
            CONTAINER_TYPE="java"
        fi
        echo "${CONTAINERS[$COUNTER]}" | grep -q python
        if [ $? -eq 0 ] ; then
            CONTAINER_TYPE="py"
        fi
        echo "${CONTAINERS[$COUNTER]}" | grep -q cpp
        if [ $? -eq 0 ] ; then
            CONTAINER_TYPE="cpp"
        fi
        LOG_FILE=$ACS_TMP/${CONTAINERS[$COUNTER]//\//_}.log
        # printf "%d) %s %s %s\n" "$COUNTER" "${CONTAINERS[$COUNTER]}" "$CONTAINER_TYPE" "$LOG_FILE"
        printf "Starting container %s\n" "${CONTAINERS[$COUNTER]}"
        
        logfile=$ACS_TMP/container-$c.log
        acsutilBlock -t 60 -f $LOG_FILE -b "components activated." \
           -x acsStartContainer -$CONTAINER_TYPE ${CONTAINERS[$COUNTER]} > \
           $ACS_TMP/acsutilBlock-$c.log 2>&1
        
    done
    
    #
    # Now start the archive
    #
    # ARCHIVE_CMD="tomcat start"
    # LOGFILE=$ACS_TMP/archive.log
    # ${ARCHIVE_CMD} > $LOGFILE 2>&1 &
    # pid=$!
    # echo $pid > $ACS_TMP/archive.pid
    # acsutilBlock -t 60 -f $LOGFILE -b "Initialized Archive subsystem."
    printf "Starting Tomcat\n"
    tomcat start &> $ACS_TMP/archive.log
    PID=$!
    echo $PID > $ACS_TMP/archive.pid
}

stopACS() {
    acsutilTATEpilogue
    printf "Stopping Tomcat\n"
    if [ -r "$ACS_TMP/archive.pid" ]; then
	    tomcat stop &> $ACS_TMP/archiveStop.log
    fi
}

case "$1" in
    start)
        createLock
        start
        checkInstances
        ;;
    suspend)
        suspend
        clearLock
        ;;
    restart)
        createLock
        restart
        checkInstances
        ;;
    stop)
        stop
        clearLock
        ;;
    *)
        printf "Usage: $0 {start|stop|suspend|restart}\n"
        exit 1
esac

exit $RETVAL
