#!/bin/ksh

DIFF=/usr/bin/diff
ECHO=/usr/bin/echo
FIND=/usr/bin/find
GREP=/usr/bin/grep
RM=/usr/bin/rm
SED=/usr/bin/sed
UNIQ=/usr/bin/uniq

OSTYPE=`/bin/uname -s`
if [ "$OSTYPE" = "Linux" ]; then
  ECHO=/bin/echo
  GREP=/bin/grep
  RM=/bin/rm
  SED=/bin/sed
fi

###############################################
# Get configuration from file
###############################################
GrabConfig() {
  local FILE=$1
  local KEY=$2
  local SEPARATOR=$3

  ANSWER=`$GREP "^$KEY$SEPARATOR" $FILE | $UNIQ | $SED -e "s/$KEY$SEPARATOR//"`
}

###############################################
# Main
###############################################

if [ $# -lt 1 ]; then
  $ECHO "You must specify a command (export, describe, containers, or import) as the first argument"
  exit 1
fi

case $1 in
  "export") CMDCLASS=CmdExport;;
  "describe") CMDCLASS=CmdDescribe;;
  "containers") CMDCLASS=CmdContainers;;
  "import") CMDCLASS=CmdImport;;
  "--version") CMDCLASS=CmdVersion;;
  "-v") CMDCLASS=CmdVersion;;
esac

if [ "$CMDCLASS" = "" ]; then
  $ECHO "Unrecognized command - $1"
  exit 1
fi
shift

#
# Config info
#

STATE_FILE="/etc/opt/SUNWps/PSConfig.properties"
if [ ! -f $STATE_FILE ]; then
  $ECHO "Cannot find $STATE_FILE."
  exit 1
fi

GrabConfig $STATE_FILE "DEPLOY_TYPE" "="
DEPLOY_TYPE=$ANSWER

GrabConfig $STATE_FILE "DEPLOY_DIR" "="
DEPLOY_DIR=$ANSWER

GrabConfig $STATE_FILE "JDK_DIR" "="
JAVA_HOME=$ANSWER

GrabConfig $STATE_FILE "IDSAME_BASEDIR" "="
IDSAME_BASEDIR=$ANSWER

GrabConfig $STATE_FILE "BASEDIR" "="
PS_BASEDIR=$ANSWER

if [ "$OSTYPE" = "SunOS" ]; then
  GrabConfig "/var/sadm/pkg/SUNWjss/pkginfo" "BASEDIR" "="
  JSS_BASEDIR=$ANSWER
else
  JSS_BASEDIR=""
fi

#
# LD_LIBRARY_PATH
#

# To workaround JDK JNI bug on Linux
if [ "$OSTYPE" = "Linux" ]; then
  EXTRA_LIBS="$JAVA_HOME/jre/lib/i386/native_threads"
else
  EXTRA_LIBS=""
fi

DIR="$JSS_BASEDIR/usr/lib/mps/secv1"
if [ -z "$LD_LIBRARY_PATH" ]; then
  LD_LIBRARY_PATH="$DIR:$EXTRA_LIBS"
else
  LD_LIBRARY_PATH="$DIR:$EXTRA_LIBS:$LD_LIBRARY_PATH"
fi
export LD_LIBRARY_PATH

#
# IS
#

IDSAME_LOCALE_DIR="$IDSAME_BASEDIR/SUNWam/locale"
IDSAME_LIB_DIR="$IDSAME_BASEDIR/SUNWam/lib"
IDSAME_CONFIG_DIR="/etc/opt/SUNWam/config"
IDSAME_JAR_DIR="$DEPLOY_DIR/bin/https/jar"
SERVLET_JAR="$IDSAME_LIB_DIR/servlet.jar"
JSS_JAR="$JSS_BASEDIR/usr/share/lib/mps/secv1/jss3.jar"
MAIL_JAR="$IDSAME_BASEDIR/SUNWam/lib/mail.jar"
JAAS_JAR="$IDSAME_LIB_DIR/jaas.jar"
SDK_JARS="$IDSAME_LIB_DIR/am_sdk.jar:$IDSAME_LIB_DIR/am_services.jar"
IDSAME_CLASSPATH="$IDSAME_LOCALE_DIR:$IDSAME_LIB_DIR:$IDSAME_CONFIG_DIR:$SDK_JARS:$JSS_JAR:$SERVLET_JAR:$JAAS_JAR:$MAIL_JAR"

#
# JAXP
#

JAXP_JARS="$IDSAME_LIB_DIR/jaxp-api.jar:$IDSAME_LIB_DIR/xercesImpl.jar:$IDSAME_LIB_DIR/xalan.jar:$IDSAME_LIB_DIR/dom.jar:$IDSAME_LIB_DIR/sax.jar"

#
# PS
#

PS_LIB_DIR="$PS_BASEDIR/SUNWps/lib"
PS_WEBSRC_DIR="$PS_BASEDIR/SUNWps/web-src"
PS_CONFIG_DIR="$PS_WEBSRC_DIR/WEB-INF/classes"
RW_JAR="$PS_WEBSRC_DIR/WEB-INF/lib/rewriter.jar"
DT_JAR="$PS_WEBSRC_DIR/WEB-INF/lib/desktop.jar"
PS_CLASSPATH="$PS_LIB_DIR:$PS_CONFIG_DIR:$RW_JAR:$DT_JAR"

#
# CLASSPATH
#

if [ -z "$CLASSPATH" ]; then
  CLASSPATH="$PS_CLASSPATH:$IDSAME_CLASSPATH:$JAXP_JARS:$JAVA_HOME/lib/lib.zip"
else
  CLASSPATH="$PS_CLASSPATH:$IDSAME_CLASSPATH:$JAXP_JARS:$JAVA_HOME/lib/lib.zip:$CLASSPATH"
fi

#
# Snapshot of current web-src
#

if [ "$CMDCLASS" = "CmdImport" ]; then
  $FIND $PS_WEBSRC_DIR -type f -ls > /tmp/par.tmp1
fi

#
# Main
#

$JAVA_HOME/bin/java -Xms64m -Xmx256m -classpath $CLASSPATH -D"com.iplanet.coreservices.configpath=/etc/opt/SUNWam/config/ums" -D"desktop.propertiesFile=/etc/opt/SUNWps/desktop/desktopconfig.properties" -D"ps.staticDir=$PS_WEBSRC_DIR" com.sun.portal.desktop.deployment.$CMDCLASS "$@"

#
# Snapshot of new web-src
#

if [ "$CMDCLASS" = "CmdImport" ]; then
  $FIND $PS_WEBSRC_DIR -type f -ls > /tmp/par.tmp2
fi

#
# Redeploy if needed
#

if [ "$CMDCLASS" = "CmdImport" ]; then
  $DIFF -b -w /tmp/par.tmp1 /tmp/par.tmp2 > /dev/null 2>&1
  if [ $? -eq 1 ]; then
    $PS_BASEDIR/SUNWps/bin/deploy redeploy
  fi
  $RM -f /tmp/par.tmp1 /tmp/par.tmp2
fi

exit 0
