#!/bin/sh

# $Id: perfexplorer.skel,v 1.47 2010/03/19 20:49:25 scottb Exp $
# $Name:  $

TAUROOT=/home/users/sameer/fresh/f/head/release/tau2
CONFIG_ARCH=default
SERVER_HOSTNAME=
SERVER_OBJECT_PORT=
SERVER_RMIREGISTRY_PORT=
JAR_HOME=${HOME}/.ParaProf
CONFIGFILE_BASE=$JAR_HOME/perfdmf.cfg
CONFIGFILE=""

SCHEMADIR=${TAUROOT}/etc
BINDIR=${TAUROOT}/${CONFIG_ARCH}/bin
LIBDIR=${TAUROOT}/${CONFIG_ARCH}/lib
JARDIR=${TAUROOT}/${CONFIG_ARCH}/lib

# run the user setup script
$BINDIR/tau_user_setup.sh

# Record all the arguments
arguments=""

# set some defaults
mode=standalone
testName="all"
redirect=""
RMIOptions=""
gui=""
script=""

CLIENT_DYLD_LIBRARY_PATH=$TAUROOT/$CONFIG_ARCH/lib

PERFEXPLORER_JAR=$TAUROOT/$CONFIG_ARCH/lib/perfexplorer.jar
PERFDMF_JAR=$TAUROOT/$CONFIG_ARCH/lib/perfdmf.jar
JARGS_JAR=$TAUROOT/$CONFIG_ARCH/lib/jargs.jar
JYTHON_JAR=$TAUROOT/$CONFIG_ARCH/lib/jython.jar
WEKA_JAR=$JAR_HOME/weka-3-6-1.jar
PERFEXPLORER_JAR=$TAUROOT/$CONFIG_ARCH/lib/perfexplorer.jar
JFREECHART_JAR=$TAUROOT/$CONFIG_ARCH/lib/jfreechart-1.0.12.jar
JCOMMON_JAR=$TAUROOT/$CONFIG_ARCH/lib/jcommon-1.0.15.jar
JOGL_JAR=$TAUROOT/$CONFIG_ARCH/lib/jogl.jar
VIS_JAR=$TAUROOT/$CONFIG_ARCH/lib/vis.jar
TAUCOMMON_JAR=$TAUROOT/$CONFIG_ARCH/lib/tau-common.jar
BATIK_JAR=$TAUROOT/$CONFIG_ARCH/lib/batik-combined.jar
XERCES_JAR=$TAUROOT/$CONFIG_ARCH/lib/xerces.jar
JUNIT_JAR=$TAUROOT/$CONFIG_ARCH/junit-3.8.1.jar

# JBoss Rules jars

ANTLR2_JAR=$JAR_HOME/antlr-2.7.6.jar
ANTLR3_JAR=$JAR_HOME/antlr-3.0ea8.jar
COMMONS_JCI_CORE_JAR=$JAR_HOME/commons-jci-core-1.0-406301.jar
COMMONS_JCI_ECLIPSE_JAR=$JAR_HOME/commons-jci-eclipse-3.2.0.666.jar
COMMONS_LANG_JAR=$JAR_HOME/commons-lang-2.1.jar
COMMONS_LOGGING_JAR=$JAR_HOME/commons-logging-api-1.0.4.jar
CORE_JAR=$JAR_HOME/core-3.2.0.666.jar
DROOLS_COMIPLER_JAR=$JAR_HOME/drools-compiler-3.0.6.jar
DROOLS_CORE_JAR=$JAR_HOME/drools-core-3.0.6.jar
DROOLS_DECISIONTABLES_JAR=$JAR_HOME/drools-decisiontables-3.0.6.jar
DROOLS_JSR94_JAR=$JAR_HOME/drools-jsr94-3.0.6.jar
JSR_JAR=$JAR_HOME/jsr94-1.1.jar
JXL_JAR=$JAR_HOME/jxl-2.4.2.jar
STRINGTEMPLATE_JAR=$JAR_HOME/stringtemplate-2.3b6.jar
JBOSS_RULES_JARS=$ANTLR3_JAR:$ANTLR2_JAR:$COMMONS_JCI_CORE_JAR:$COMMONS_JCI_ECLIPSE_JAR:$COMMONS_LANG_JAR:$COMMONS_LOGGING_JAR:$CORE_JAR:$DROOLS_COMIPLER_JAR:$DROOLS_CORE_JAR:$DROOLS_DECISIONTABLES_JAR:$DROOLS_JSR94_JAR:$JSR_JAR:$JXL_JAR:$STRINGTEMPLATE_JAR

# Test for java 1.4+
JAVA_VERSION=`java -version 2>&1 | head -1 | cut -d '.' -f2`
if [ "x$JAVA_VERSION" = "x4" ] ; then
        echo ""
        echo "Java 1.5 or newer is required to run PerfExplorer."
        echo "Please update your Java SDK to a newer version to use PerfExplorer 2.0."
        echo "You will still be able to use PerfExplorer 1.0, from the TAU v2.17 release."
        echo ""
        if [ ! -d ${TAUROOT}/${CONFIG_ARCH}/bin/bin-1.4 ] ; then
                ${TAUROOT}/${CONFIG_ARCH}/bin/configure-1.4
        fi
        if [ ! -r ${TAUROOT}/${CONFIG_ARCH}/bin/bin-1.4/perfexplorer ] ; then
                ${TAUROOT}/${CONFIG_ARCH}/bin/bin-1.4/perfexplorer_configure
        fi
        ${TAUROOT}/${CONFIG_ARCH}/bin/bin-1.4/perfexplorer


        exit 0
fi

# check for the existence of weka
if [ ! -f $WEKA_JAR ] ; then
	echo "You are missing the correct Weka jar file.  Please re-run perfexplorer_configure."
	exit 1
fi

# check for the existence of drools
if [ ! -f $DROOLS_CORE_JAR ] ; then
	echo "You are missing the correct JBoss Rules jar files.  Please re-run perfexplorer_configure."
	exit 1
fi

# PARSE COMMAND LINE SWITCHES
###############################################################
for arg in "$@";
do
  case $arg in

  --server)
  	mode=server
    shift
    ;;

  --client)
    mode=client
    shift
    ;;

  --test=*)
    mode=test
    myarg=`echo $arg | sed 's/--test=//'`
	testName=$myarg
    shift
    ;;

   --verbose)
    RMIOptions="-Djava.rmi.server.logCalls=true -Dsun.rmi.loader.logLevel=BRIEF -Dsun.rmi.server.logLevel=BRIEF"
    shift
    ;;

  '')
    #echo "NULL switch!"
    # Required for HP/Compaq Tru64 machines.
    ;;

# all others are handled in the Java app
  *)
    arguments="$arguments $arg"
    ;;
  esac
done

#
# get the jdbc jar file from the configuration file
if [ "x$CONFIGFILE" != "x" ]; then
	JDBC_JAR=`grep jdbc_db_jarfile $CONFIGFILE 2>/dev/null | sed s/jdbc_db_jarfile://`
	if [ "x$JDBC_JAR" != "x" ]; then
    	if [ ! -r $JDBC_JAR ]; then
        	echo ""
        	echo "Warning: JDBC driver '$JDBC_JAR' not found."
        	echo ""
    	fi
	fi
fi

if [ "$CONFIG_ARCH" = "apple" ]; then
	EXTRA_OPTIONS="-Xdock:name=PerfExplorer -Xdock:icon=${TAUROOT}/${CONFIG_ARCH}/lib/tau-medium.png -Dapple.laf.useScreenMenuBar=true -Dcom.apple.mrj.application.growbox.intrudes=true"
else
	EXTRA_OPTIONS=""
fi

# check for right java version
PERFEXPLORER_OPTS="-w"



# Default to 800m heap space
MEMORY=-Xmx800m

# Check machine type for a heap space boost
machine=`uname -m`
platform=`uname -s`
if [ "x$machine" = "xx86_64" ] ; then
    MEMORY=-Xmx2000m
fi

testmax=`$BINDIR/tau_javamax.sh`
if [ "x$testmax" != "xfailed" -a "x$platform" != "xDarwin" ] ; then
    MEMORY="-Xmx${testmax}m"
fi

if [ $mode = "standalone" ] ; then
	CLASSPATH=$PERFEXPLORER_JAR:$PERFDMF_JAR:$JDBC_JAR:$JFREECHART_JAR:$JCOMMON_JAR:$WEKA_JAR:$JOGL_JAR:$VIS_JAR:$JARGS_JAR:$JYTHON_JAR:$TAUCOMMON_JAR:$BATIK_JAR:$XERCES_JAR:$JUNIT_JAR:$JBOSS_RULES_JARS
	java $MEMORY $EXTRA_OPTIONS \
	-classpath $CLASSPATH \
	-Dderby.system.home=${JAR_HOME} \
	-Djava.library.path=$CLIENT_DYLD_LIBRARY_PATH:$SERVER_DYLD_LIBRARY_PATH \
	-Dpython.home=$JAR_HOME/jython \
	edu.uoregon.tau.perfexplorer.client.PerfExplorerClient -s $PERFEXPLORER_OPTS -t $JARDIR -a $SCHEMADIR $@
fi

if [ $mode = "test" ] ; then
	CLASSPATH=$PERFEXPLORER_JAR:$PERFDMF_JAR:$JDBC_JAR:$JFREECHART_JAR:$JCOMMON_JAR:$WEKA_JAR:$JOGL_JAR:$VIS_JAR:$JARGS_JAR:$JYTHON_JAR:$TAUCOMMON_JAR:$BATIK_JAR:$XERCES_JAR:$JUNIT_JAR:$JBOSS_RULES_JARS

	java $MEMORY \
	-classpath $CLASSPATH \
	-Dderby.system.home=${JAR_HOME} \
	-Djava.library.path=$CLIENT_DYLD_LIBRARY_PATH:$SERVER_DYLD_LIBRARY_PATH \
	-Dpython.home=$JAR_HOME/jython \
	edu.uoregon.tau.perfexplorer.client.TestHarness -s -t $testName $arguments
fi

if [ $mode = "server" ] ; then

	CLASSPATH=$PERFEXPLORER_JAR:$PERFDMF_JAR:$JDBC_JAR:$JFREECHART_JAR:$JCOMMON_JAR:$WEKA_JAR:$JYTHON_JAR:$JARGS_JAR:$TAUCOMMON_JAR:$XERCES_JAR:$JUNIT_JAR:$JBOSS_RULES_JARS

	echo "Starting rmiregistry..."
	rmiregistry $SERVER_RMIREGISTRY_PORT & 
	echo "Starting server..."

	java $MEMORY $EXTRA_OPTIONS \
	-classpath $CLASSPATH \
	-Dderby.system.home=${JAR_HOME} \
	-Djava.security.policy=${TAUROOT}/${CONFIG_ARCH}/lib/java.policy \
	-Djava.library.path=$SERVER_DYLD_LIBRARY_PATH \
	${RMIOptions} \
	-Dsun.rmi.server.exceptionTrace=true \
	-Dpython.home=$JAR_HOME/jython \
	edu.uoregon.tau.perfexplorer.server.PerfExplorerServer -p $SERVER_OBJECT_PORT -t $JARDIR -a $SCHEMADIR  $arguments

	echo "Killing rmiregistry..."
	killall rmiregistry
fi

if [ $mode = "client" ] ; then

	CLASSPATH=$PERFEXPLORER_JAR:$PERFDMF_JAR:$JFREECHART_JAR:$JCOMMON_JAR:$JOGL_JAR:$VIS_JAR:$JYTHON_JAR:$JARGS_JAR:$TAUCOMMON_JAR:$BATIK_JAR:$XERCES_JAR:$JUNIT_JAR:$JBOSS_RULES_JARS

	java $MEMORY $EXTRA_OPTIONS \
	-classpath $CLASSPATH \
	-Djava.security.policy=${TAUROOT}/${CONFIG_ARCH}/lib/java.policy \
	-Djava.library.path=${CLIENT_DYLD_LIBRARY_PATH} \
	-Djava.rmi.server.hostname=$SERVER_HOSTNAME \
	-Dpython.home=$JAR_HOME/jython \
	edu.uoregon.tau.perfexplorer.client.PerfExplorerClient -t $JARDIR -a $SCHEMADIR $arguments
fi

