#!/bin/ksh

###############################################
# Defines
###############################################

AWK=/usr/bin/awk
BASENAME=/usr/bin/basename
CAT=/usr/bin/cat
CP=/usr/bin/cp
CUT=/usr/bin/cut
DATE=/usr/bin/date
ECHO=/usr/bin/echo
ENV=/usr/bin/env
GREP=/usr/bin/grep
ID=/usr/bin/id
INSTALLF=/usr/sbin/installf
LN=/usr/bin/ln
LS=/usr/bin/ls
MKDIR=/usr/bin/mkdir
MV=/usr/bin/mv
PKGINFO=/usr/bin/pkginfo
RM=/usr/bin/rm
SED=/usr/bin/sed
SLEEP=/usr/bin/sleep
STTY=/usr/bin/stty
TOUCH=/usr/bin/touch
UNIQ=/usr/bin/uniq

OMIT_CHAR='\c'
BELL_CHAR='\a'

ORIG_IFS=$IFS

LOG_DIR="/var/opt/SUNWam/debug"
LOG_FILE="$LOG_DIR/deploy.log"

PKGINFO_FILE="/var/sadm/pkg/SUNWps/pkginfo"

TMP_DIR="/var/opt/SUNWps/tmp"
DEPLOY_TMP_DIR="$TMP_DIR/deploy"
DEPLOY_INFO_DIR="/etc/opt/SUNWps"

DEPLOY_INFO_FILE="$DEPLOY_INFO_DIR/.deploy"

CONTEXTPARAM_FILE="$TMP_DIR/context-param.tmp"
LISTENER_FILE="$TMP_DIR/listener.tmp"
FILTER_FILE="$TMP_DIR/filter.tmp"
FILTERMAPPING_FILE="$TMP_DIR/filterMapping.tmp"
SERVLET_FILE="$TMP_DIR/servlet.tmp"
SERVLETMAPPING_FILE="$TMP_DIR/servlet-mapping.tmp"
SESSIONCONFIG_FILE="$TMP_DIR/session-config.tmp"
WELCOMEFILELIST_FILE="$TMP_DIR/welcome-file-list.tmp"
TAGLIB_FILE="$TMP_DIR/taglib.tmp"

###############################################
# Usage
###############################################
Usage() {
  $ECHO "deploy"
  $ECHO ""
  $ECHO "  Command line options:"
  $ECHO "    help"
  $ECHO "  Command line options:"
  $ECHO "    deploy"
  $ECHO "    {-instance <instance>}"
  $ECHO "    -uri <URI of war file>"
  $ECHO "    -deploy_admin_password <password>"
  $ECHO "    -is_admin_password <password>"
  $ECHO "  Command line options:"
  $ECHO "    redeploy"
  $ECHO "    {-instance <instance>}"
  $ECHO "    {-newsearch}"
  $ECHO "    -deploy_admin_password <password>"
  $ECHO "    -is_admin_password <password>"
}

###############################################
# Question
###############################################
Question() {
  local PROMPT=$1
  local DEFAULT=$2
  local VALID_CHARS=$3
  local DONE=""
  local CHECK=""

  DONE="n"
  while [ "$DONE" = "n" ]; do
    $ECHO "$PROMPT [$DEFAULT] $OMIT_CHAR"
    read ANSWER
    if [ "$ANSWER" = "" ]; then
      ANSWER=$DEFAULT
      DONE="y"
    else
      CHECK=`$ECHO $ANSWER | $GREP "[^$VALID_CHARS]"`
      if [ "$CHECK" = "" ]; then
        DONE="y"
      else
        $ECHO "Invalid answer! $BELL_CHAR"
      fi
    fi
  done
}

###############################################
# Get password
###############################################
GetPassword() {
  local PROMPT=$1
  local ANSWER_REPEAT=""
  local DONE=""

  DONE="n"
  while [ "$DONE" = "n" ]; do
    eval print "$PROMPT \$OMIT_CHAR"
    $STTY -echo
    read ANSWER
    $STTY echo
    if [ "$ANSWER" != "" ]; then
      print "Again? $OMIT_CHAR"
      $STTY -echo
      read ANSWER_REPEAT
      $STTY echo
      print ""
      if [ "$ANSWER" != "$ANSWER_REPEAT" ]; then
	print "Password verification failed! $BELL_CHAR"
      else
	DONE="y"
      fi
    fi
  done
}

###############################################
# Check package 
###############################################
CheckPackage() {
  local PACKAGE=$1

  $PKGINFO -q $PACKAGE
  if [ $? -eq 0 ]; then
    ANSWER="has"
  else
    ANSWER="none"
  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//"`
}

###############################################
# Replace line in file
###############################################
ReplaceLine() {
  local FILE=$1
  local MATCH=$2
  local TEXT=$3

  $CP $FILE $FILE-tmp
  $SED -e "/$MATCH/ {
c\\
$TEXT
}" $FILE-tmp > $FILE
  $RM $FILE-tmp
}

###############################################
# Set DEPLOY_INSTANCES
###############################################
SetDeployInstanceList() {
  local INSTANCE=""
  local INSTANCES=""
  local ADMIN_INSTANCE=""
  local TMP_INSTANCES=""

  if [ "$DEPLOY_INSTANCE" != "" ]; then
    DEPLOY_INSTANCES="$DEPLOY_INSTANCE"
  else
    if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
      TMP_INSTANCES=`$LS -d $DEPLOY_DOMAIN/* 2>&1`
      ADMIN_INSTANCE="admin-server"

      INSTANCES=""
      for INSTANCE in $TMP_INSTANCES; do
	INSTANCES="$INSTANCE,$INSTANCES"
      done
    elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
      INSTANCES=""
      if [ -f $PKGINFO_FILE ]; then
	GrabConfig $PKGINFO_FILE "DEPLOY_INSTANCE" "="
	INSTANCES=$ANSWER
      fi
      ADMIN_INSTANCE=""
    elif [ "$DEPLOY_TYPE" = "WEBSPHERE" ]; then
      INSTANCES=""
      if [ -f $PKGINFO_FILE ]; then
	GrabConfig $PKGINFO_FILE "DEPLOY_INSTANCE" "="
	INSTANCES=$ANSWER
      fi
      ADMIN_INSTANCE=""
    elif [ "$DEPLOY_TYPE" = "IWS" ]; then
      TMP_INSTANCES=`$LS -d $IDSAME_BASEDIR/SUNWam/servers/https-* 2>&1`

      INSTANCES=""
      for INSTANCE in $TMP_INSTANCES; do
	INSTANCES="$INSTANCE,$INSTANCES"
      done
      ADMIN_INSTANCE="admserv"
    fi

    DEPLOY_INSTANCES=""
    IFS=","
    for INSTANCE in $INSTANCES; do
      INSTANCE=`$BASENAME $INSTANCE | $SED -e "s/https-//"`
      if [ "$INSTANCE" != "$ADMIN_INSTANCE" ]; then
	DEPLOY_INSTANCES="$INSTANCE,$DEPLOY_INSTANCES"
      fi
    done
    IFS=$ORIG_IFS
  fi
}

###############################################
# Test for deploy
###############################################
TestDeploy() {
  local FILES=""

  FILES=`$LS "$DEPLOY_SRC_DIR/WEB-INF/xml/*" 2>&1`
  if [ "$FILES" = "" ]; then
    return 1
  else
    return 0
  fi
}

###############################################
# Do war file
###############################################
DoWar() {
  local INSTANCE=$1
  local FILE=""
  local FILES=""

  $RM -f $CONTEXTPARAM_FILE
  $RM -f $LISTENER_FILE
  $RM -f $FILTER_FILE
  $RM -f $FILTERMAPPING_FILE
  $RM -f $SERVLET_FILE
  $RM -f $SERVLETMAPPING_FILE
  $RM -f $SESSIONCONFIG_FILE
  $RM -f $WELCOMEFILELIST_FILE
  $RM -f $TAGLIB_FILE

  $TOUCH $CONTEXTPARAM_FILE
  $TOUCH $LISTENER_FILE
  $TOUCH $FILTER_FILE
  $TOUCH $FILTERMAPPING_FILE
  $TOUCH $SERVLET_FILE
  $TOUCH $SERVLETMAPPING_FILE
  $TOUCH $SESSIONCONFIG_FILE
  $TOUCH $WELCOMEFILELIST_FILE
  $TOUCH $TAGLIB_FILE

  cd $DEPLOY_SRC_DIR

  FILE="WEB-INF/xml/search.xml"
  $SED -e "s#%DEPLOY_INSTANCE%#$INSTANCE#g" \
       -e "s#%DYNAMIC_URI%#$DEPLOY_URI#g" \
       $FILE-orig > $FILE

  FILES=`$LS WEB-INF/xml/*.xml 2>&1`
  IFS=$ORIG_IFS
  for FILE in $FILES; do
    if [ -f $FILE ]; then
      $SED -n -e "/<context-param>/,/<\/context-param>/p" $FILE >> $CONTEXTPARAM_FILE
      $SED -n -e "/<listener>/,/<\/listener>/p" $FILE >> $LISTENER_FILE
      if [ "$DEPLOY_TYPE" = "IWS" ] || [ "$DEPLOY_TYPE" = "SUNONE" ]; then
	$SED -n -e "/<filter>/,/<\/filter>/p" $FILE >> $FILTER_FILE
	$SED -n -e "/<filter-mapping>/,/<\/filter-mapping>/p" $FILE >> $FILTERMAPPING_FILE
      fi
      $SED -n -e "/<servlet>/,/<\/servlet>/p" $FILE >> $SERVLET_FILE
      $SED -n -e "/<servlet-mapping>/,/<\/servlet-mapping>/p" $FILE >> $SERVLETMAPPING_FILE
      $SED -n -e "/<session-config>/,/<\/session-config>/p" $FILE >> $SESSIONCONFIG_FILE
      $SED -n -e "/<welcome-file-list>/,/<\/welcome-file-list>/p" $FILE >> $WELCOMEFILELIST_FILE
      $SED -n -e "/<taglib>/,/<\/taglib>/p" $FILE >> $TAGLIB_FILE
    fi
  done

  FILE="WEB-INF/xml/search.xml"
  $RM -f $FILE

  FILE="WEB-INF/web.xml"
  $ECHO "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>" > $FILE
  $ECHO "" >> $FILE
  $ECHO "<!DOCTYPE web-app PUBLIC" >> $FILE
  $ECHO "  \"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN\"" >> $FILE
  $ECHO "  \"file:$PS_BASEDIR/SUNWps/dtd/web-app_2_2-filter.dtd\">" >> $FILE
  $ECHO "" >> $FILE
  $ECHO "<web-app>" >> $FILE
  $ECHO "  <context-param>" >> $FILE
  $ECHO "    <param-name>dynamicContext</param-name>" >> $FILE
  $ECHO "    <param-value>$DEPLOY_URI</param-value>" >> $FILE
  $ECHO "  </context-param>" >> $FILE
  $ECHO "  <context-param>" >> $FILE
  $ECHO "    <param-name>staticContext</param-name>" >> $FILE
  $ECHO "    <param-value>$DEPLOY_URI</param-value>" >> $FILE
  $ECHO "  </context-param>" >> $FILE
  $ECHO "  <context-param>" >> $FILE
  $ECHO "    <param-name>desktop.propertiesFile</param-name>" >> $FILE
  $ECHO "    <param-value>/etc/opt/SUNWps/desktop/desktopconfig.properties</param-value>" >> $FILE
  $ECHO "  </context-param>" >> $FILE
  $CAT $CONTEXTPARAM_FILE >> $FILE
  $CAT $LISTENER_FILE >> $FILE
  $CAT $FILTER_FILE >> $FILE
  $CAT $FILTERMAPPING_FILE >> $FILE
  $CAT $SERVLET_FILE >> $FILE
  $CAT $SERVLETMAPPING_FILE >> $FILE
  $CAT $SESSIONCONFIG_FILE >> $FILE
  $CAT $WELCOMEFILELIST_FILE >> $FILE
  $CAT $TAGLIB_FILE >> $FILE
  $ECHO "</web-app>" >> $FILE

  if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
    FILE="WEB-INF/sun-web.xml"
    if [ ! -f $FILE ]; then
      $ECHO "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > $FILE
      $ECHO "<!DOCTYPE sun-web-app PUBLIC" >> $FILE
      $ECHO "  \"-//Sun Microsystems Inc.//DTD Sun ONE Application Server 7.0 Servlet 2.3//EN\"" >> $FILE
      $ECHO "  \"file:$PS_BASEDIR/SUNWps/dtd/sun-web-app_2_3-0.dtd\">" >> $FILE
      $ECHO "" >> $FILE
      $ECHO "<sun-web-app>" >> $FILE
      $ECHO "  <locale-charset-info>" >> $FILE
      $ECHO "    <parameter-encoding form-hint-field=\"gx_charset\"/>" >> $FILE
      $ECHO "  </locale-charset-info>" >> $FILE
      $ECHO "</sun-web-app>" >> $FILE
    fi
  elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    $MV $PS_BASEDIR/SUNWps/web-src/WEB-INF/lib/jndi.jar /var/opt/SUNWps/tmp

    FILE="WEB-INF/web.xml"
    $CAT $FILE | $SED -e "/<load-on-startup\/>/d" > $FILE-tmp
    $MV $FILE-tmp $FILE
  fi

  WAR_FILE="$DEPLOY_TMP_DIR/$DEPLOY_URI.war"
  WAR_FILE=`$ECHO $WAR_FILE | $SED -e "s.//./.g"`

  $JAVA_HOME/bin/jar cf $WAR_FILE * >> $LOG_FILE

  if [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    $MV /var/opt/SUNWps/tmp/jndi.jar $PS_BASEDIR/SUNWps/web-src/WEB-INF/lib
  fi
}

###############################################
# Do search deploy
###############################################
DoSearchDeploy() {
  local INSTANCE=$1
  local PORT=$2
  local CS_LIB_DIR=""
  
  local CS_CLASS=""
  local CS_SETUP=""
  local CS_AS=""
  local FC_URL=""
  local FILE=""
  local PARAMS=""

  CS_ROOT_DIR="/var/opt/SUNWps/https-$INSTANCE$DEPLOY_URI"
  if [ -d $CS_ROOT_DIR ]; then
    $RM -rf "$CS_ROOT_DIR"
  fi
  $MKDIR -p "$CS_ROOT_DIR"

  CS_LIB_DIR="$PS_BASEDIR/SUNWps/lib"
  CS_CLASS=".:$CS_LIB_DIR/searchserver.jar:$CS_LIB_DIR/db.jar:$CS_LIB_DIR/nova.jar"
  CS_SETUP="$ENV LD_LIBRARY_PATH=$CS_LIB_DIR $JAVA_HOME/bin/java -classpath $CS_CLASS com/sun/portal/search/rdmgr/SearchSetup"
  if [ "$DEPLOY_TYPE" = "IWS" ]; then
    CS_AS="n"
  else
    CS_AS="y"
  fi
  PARAMS="$PS_BASEDIR \"$CS_ROOT_DIR\" $CS_AS $SERVER_HOST $PORT \"$INSTANCE\""
  $ECHO "Calling $CS_SETUP $PARAMS" >> $LOG_FILE
  eval $CS_SETUP $PARAMS >> $LOG_FILE 2>&1

  if [ -d $IDSAME_BASEDIR/SUNWam ]; then
    AMADMIN="$IDSAME_BASEDIR/SUNWam/bin/amadmin"

    FILE="$IDSAME_BASEDIR/SUNWam/lib/AMConfig.properties"
    ADMIN_DN=`$GREP "^com.sun.identity.authentication.super.user=" $FILE | $SED -e "s/com.sun.identity.authentication.super.user=//"`

    FC_URL="$SERVER_PROTOCOL://$SERVER_HOST:$PORT$DEPLOY_URI"
    
    FILE="/var/opt/SUNWps/tmp/SUNWpsse_requests.xml"
    $ECHO "Generating $FILE for adding new instance in Search Schema" >> $LOG_FILE
      $CAT > $FILE << EOF
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Requests
    PUBLIC "-//iPlanet//iDSAME 5.0 Admin CLI DTD//EN"
    "file:$IDSAME_BASEDIR/SUNWam/dtd/amAdmin.dtd"
>
<Requests>
  <SchemaRequests serviceName="SunPortalSearchService" SchemaType="global">
    <AddDefaultValues>
      <AttributeValuePair>
	<Attribute name="sunPortalSearchInstances"/>
	<Value>$FC_URL</Value>
      </AttributeValuePair>
    </AddDefaultValues>
  </SchemaRequests> 
</Requests>
EOF
    PARAMS="-u \"$ADMIN_DN\" -w \"$IDSAME_ADMIN_PASSWORD\" -t $FILE"
    $ECHO "Calling $AMADMIN $PARAMS" | $SED -e "s/-w \"$IDSAME_ADMIN_PASSWORD\"/-w ********/" >> $LOG_FILE
    eval $AMADMIN $PARAMS >> $LOG_FILE 2>&1
  fi
}

###############################################
# Create links for native libraries (NetFile)
###############################################
DoLinks() {
  local FILE1=""
  local FILE2=""
  local LINK1=""
  local LINK2=""

  CheckPackage "SUNWpsnf"
  if [ $ANSWER = "none" ]; then
    return
  fi

  if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
    LINK1="$DEPLOY_DIR/lib/libgetpwnam.so"
    LINK2="$DEPLOY_DIR/lib/libgetpwnam2.so"
  elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    LINK1="$DEPLOY_DIR/lib/solaris/libgetpwnam.so"
    LINK2="$DEPLOY_DIR/lib/solaris/libgetpwnam2.so"
  elif [ "$DEPLOY_TYPE" = "WEBSPHERE" ]; then
    LINK1="$PS_BASEDIR/SUNWps/lib/libgetpwnam.so"
    LINK2="$PS_BASEDIR/SUNWps/lib/libgetpwnam2.so"
  elif [ "$DEPLOY_TYPE" = "IWS" ]; then
    LINK1="$IDSAME_BASEDIR/SUNWam/servers/bin/https/lib/libgetpwnam.so"
    LINK2="$IDSAME_BASEDIR/SUNWam/servers/bin/https/lib/libgetpwnam2.so"
  fi

  if [ ! -f $LINK1 ]; then
    FILE1="$PS_BASEDIR/SUNWps/lib/solaris/sparc/libgetpwnam.so"
    FILE2="$PS_BASEDIR/SUNWps/lib/solaris/sparc/libgetpwnam2.so"

    $LN -s $FILE1 $LINK1
    $LN -s $FILE2 $LINK2

    $INSTALLF "SUNWpsnf" $LINK1
    $INSTALLF "SUNWpsnf" $LINK2
  fi
}

###############################################
# Do deploy
###############################################
DoDeploy() {
  local APP=""
  local DIR=""
  local FILE=""
  local PORT=""
  local PORTS=""
  local URI=""
  local SECURE=""

  DoLinks

  IFS=","
  for DEPLOY_INSTANCE in $DEPLOY_INSTANCES; do
    $ECHO "Deploying to instance \"$DEPLOY_INSTANCE\"..."

    DoWar "$DEPLOY_INSTANCE"

    if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
      if [ "$DEPLOY_ADMIN_PROTOCOL" = "https" ]; then
	SECURE="--secure=true"
      fi
      PARAMS="deploy -u $DEPLOY_ADMIN -w $DEPLOY_ADMIN_PASSWORD -p $DEPLOY_ADMIN_PORT $SECURE -H $SERVER_HOST --instance $DEPLOY_INSTANCE --name portal --contextroot $DEPLOY_URI --type web $WAR_FILE"
      $ECHO "Calling $DEPLOY $PARAMS" | $SED -e "s/-w $DEPLOY_ADMIN_PASSWORD/-w ********/" >> $LOG_FILE
      eval $DEPLOY $PARAMS >> $LOG_FILE 2>&1
      if [ $? -ne 0 ]; then
	$ECHO "Error: See $LOG_FILE. $BELL_CHAR"
	exit 1
      fi

      PORT=$SERVER_PORT
    elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
      URI=`$ECHO $DEPLOY_URI | $SED -e "s.^/.."`
      if [ "$MODE" = "deploy" ]; then
	PARAMS="${PS_BEA_DEPLOY_OPTIONS} -classpath $DEPLOY_DIR/lib/weblogic.jar weblogic.deploy -url $DEPLOY_ADMIN_PROTOCOL://$DEPLOY_ADMIN_HOST:$DEPLOY_ADMIN_PORT -component $URI:$DEPLOY_INSTANCE deploy $DEPLOY_ADMIN_PASSWORD $URI $WAR_FILE"
      else
	PARAMS="${PS_BEA_DEPLOY_OPTIONS} -classpath $DEPLOY_DIR/lib/weblogic.jar weblogic.deploy -url $DEPLOY_ADMIN_PROTOCOL://$DEPLOY_ADMIN_HOST:$DEPLOY_ADMIN_PORT -component $URI:$DEPLOY_INSTANCE update $DEPLOY_ADMIN_PASSWORD $URI $WAR_FILE"
      fi
      $ECHO "Calling $JAVA_HOME/bin/java $PARAMS" | $SED -e "s/ $DEPLOY_ADMIN_PASSWORD / ******** /" >> $LOG_FILE
      eval $JAVA_HOME/bin/java $PARAMS >> $LOG_FILE 2>&1
      if [ $? -ne 0 ]; then
	$ECHO "Error: See $LOG_FILE. $BELL_CHAR"
	exit 1
      fi

      PORT=$SERVER_PORT
    elif [ "$DEPLOY_TYPE" = "WEBSPHERE" ]; then

      WAR_FILENAME=`$ECHO "$DEPLOY_URI.war" | $SED -e "s.^/.."`
      $ECHO "
set modhost1_serv [list $WAR_FILENAME $DEPLOY_VIRTUAL_HOST]
set modhosts_serv [list \$modhost1_serv]   
set modappserv_serv [list $WAR_FILENAME "{/Node:$DEPLOY_NODE/ApplicationServer:$DEPLOY_INSTANCE/}"]
set modaservs_serv [list \$modappserv_serv ]

Module install /Node:$DEPLOY_NODE/ $WAR_FILE -contextroot $DEPLOY_URI -appname portal -modvirtualhosts \$modhosts_serv -moduleappservers \$modaservs_serv
EnterpriseApp start /EnterpriseApp:portal/
" > $DEPLOY_TMP_DIR/deploy.tcl
      eval $DEPLOY_DIR/bin/wscp.sh -f $DEPLOY_TMP_DIR/deploy.tcl
      if [ $? -ne 0 ]; then
	$ECHO "Error: See $LOG_FILE. $BELL_CHAR"
	exit 1
      fi
      eval $DEPLOY_DIR/bin/GenPluginCfg.sh -adminNodeName $SERVER_HOST

      PORT=$SERVER_PORT
    elif [ "$DEPLOY_TYPE" = "IWS" ]; then
      DIR=`$ECHO "$PS_BASEDIR/SUNWps/web-apps/https-$DEPLOY_INSTANCE/$DEPLOY_URI" | $SED -e "s.//./.g"`
      PARAMS="deploy -u $DEPLOY_URI -i $DEPLOY_INSTANCE -v https-$DEPLOY_INSTANCE -d $DIR $WAR_FILE"
      $ECHO "Calling $DEPLOY $PARAMS" >> $LOG_FILE
      eval $DEPLOY $PARAMS >> $LOG_FILE 2>&1 &
      $SLEEP 30

      FILE="$IDSAME_BASEDIR/SUNWam/servers/https-$DEPLOY_INSTANCE/config/server.xml"
      PORTS=`$GREP "port=" $FILE | $SED -e "s/^.*port=//" | $AWK '{print $1}' | $SED -e "s/\"//g"`
      PORT=`$ECHO $PORTS | $AWK '{print $1}'`
    fi

    if [ "$NEW_SEARCH" = "y" ]; then
      DoSearchDeploy "$DEPLOY_INSTANCE" $PORT
    fi

    if [ "$DEPLOY_TYPE" = "IWS" ]; then
      APP="$IDSAME_BASEDIR/SUNWam/servers/https-$DEPLOY_INSTANCE/stop"
      if [ ! -x $APP ]; then
	$ECHO "Error: Cannot find $APP. $BELL_CHAR"
	exit 1
      fi
      $ECHO "$APP" >> $LOG_FILE
      $APP >> $LOG_FILE 2>&1

      APP="$IDSAME_BASEDIR/SUNWam/servers/https-$DEPLOY_INSTANCE/start"
      if [ ! -x $APP ]; then
	$ECHO "Error: Cannot find $APP. $BELL_CHAR"
	exit 1
      fi
      $ECHO "$APP" >> $LOG_FILE
      $APP >> $LOG_FILE 2>&1 << EOF
$DEPLOY_ADMIN_PASSWORD
EOF
    elif [ "$DEPLOY_TYPE" = "SUNONE" ]; then
      APP="$DEPLOY_DIR/bin/asadmin"
      if [ ! -x $APP ]; then
	$ECHO "Error: Cannot find $APP. $BELL_CHAR"
	exit 1
      fi
      $ECHO "$APP restart-instance $DEPLOY_INSTANCE" >> $LOG_FILE
      eval $APP restart-instance $DEPLOY_INSTANCE >> $LOG_FILE 2>&1
      $SLEEP 60
    fi
  done
  IFS=$ORIG_IFS
}

###############################################
# Update JSP compiler classpath
###############################################
UpdateJSPCompilerClasspath() {
  local DIR=""
  local FILE=""
  local FILES=""
  local COMPILER_CLASSPATH=""

  DIR="$PS_BASEDIR/SUNWps/web-src/WEB-INF/lib"
  if [ -d $DIR ]; then
    COMPILER_CLASSPATH="/etc/opt/SUNWps/desktop/default/tld:$PS_BASEDIR/SUNWps/web-src/WEB-INF/classes"

    FILES=`$LS $DIR/*.jar`
    for FILE in $FILES; do
      COMPILER_CLASSPATH="$COMPILER_CLASSPATH:$FILE"
    done

    FILE="/etc/opt/SUNWps/desktop/desktopconfig.properties"
    if [ -f $FILE ]; then
      ReplaceLine $FILE "jspCompilerWARClassPath=" "jspCompilerWARClassPath=$COMPILER_CLASSPATH"
    fi
  fi
}

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

if [ "$1" = "help" ]; then
  Usage
  exit 0
fi

if [ `$ID | $AWK '{print $1}'` != "uid=0(root)" ]; then
  $ECHO "You must be root user. $BELL_CHAR"
  exit 1
fi

if [ ! -f $PKGINFO_FILE ]; then
  $ECHO "Error: $PKGINFO_FILE does not exist. $BELL_CHAR"
  exit 1
fi

GrabConfig $PKGINFO_FILE "DEPLOY_TYPE" "="
if [ "$ANSWER" != "" ]; then
  DEPLOY_TYPE=$ANSWER
else
  $ECHO "Error: Cannot determine DEPLOY_TYPE. $BELL_CHAR"
  exit 1
fi
if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
  GrabConfig $PKGINFO_FILE "DEPLOY_DIR" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_DIR=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_DIR. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_DOMAIN" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_DOMAIN=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_DOMAIN. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN_PROTOCOL" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN_PROTOCOL=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN_PROTOCOL. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN_PORT" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN_PORT=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN_PORT. $BELL_CHAR"
    exit 1
  fi
elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
  GrabConfig $PKGINFO_FILE "DEPLOY_DIR" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_DIR=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_DIR. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_DOMAIN" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_DOMAIN=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_DOMAIN. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN_PROTOCOL" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN_PROTOCOL=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN_PROTOCOL. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN_HOST" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN_HOST=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN_HOST. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_ADMIN_PORT" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_ADMIN_PORT=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_ADMIN_PORT. $BELL_CHAR"
    exit 1
  fi
elif [ "$DEPLOY_TYPE" = "WEBSPHERE" ]; then
  GrabConfig $PKGINFO_FILE "DEPLOY_DIR" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_DIR=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_DIR. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_VIRTUAL_HOST" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_VIRTUAL_HOST=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_VIRTUAL_HOST. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_NODE" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_NODE=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_NODE. $BELL_CHAR"
    exit 1
  fi
  GrabConfig $PKGINFO_FILE "DEPLOY_INSTANCE" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_INSTANCE=$ANSWER
  else
    $ECHO "Error: Cannot determine DEPLOY_INSTANCE. $BELL_CHAR"
    exit 1
  fi
fi
GrabConfig $PKGINFO_FILE "JDK_DIR" "="
if [ "$ANSWER" != "" ]; then
  JAVA_HOME=$ANSWER
else
  $ECHO "Error: Cannot determine JDK_DIR. $BELL_CHAR"
  exit 1
fi
GrabConfig $PKGINFO_FILE "IDSAME_BASEDIR" "="
if [ "$ANSWER" != "" ]; then
  IDSAME_BASEDIR=$ANSWER
else
  $ECHO "Error: Cannot determine IDSAME_BASEDIR. $BELL_CHAR"
  exit 1
fi
GrabConfig $PKGINFO_FILE "BASEDIR" "="
if [ "$ANSWER" != "" ]; then
  PS_BASEDIR=$ANSWER
else
  $ECHO "Error: Cannot determine BASEDIR. $BELL_CHAR"
  exit 1
fi
GrabConfig $PKGINFO_FILE "SERVER_PROTOCOL" "="
if [ "$ANSWER" != "" ]; then
  SERVER_PROTOCOL=$ANSWER
else
  $ECHO "Error: Cannot determine SERVER_PROTOCOL. $BELL_CHAR"
  exit 1
fi
GrabConfig $PKGINFO_FILE "SERVER_HOST" "="
if [ "$ANSWER" != "" ]; then
  SERVER_HOST=$ANSWER
  SERVER_HOSTNAME=${SERVER_HOST%%.*}
else
  $ECHO "Error: Cannot determine SERVER_HOST. $BELL_CHAR"
  exit 1
fi
GrabConfig $PKGINFO_FILE "SERVER_PORT" "="
if [ "$ANSWER" != "" ]; then
  SERVER_PORT=$ANSWER
else
  $ECHO "Error: Cannot determine SERVER_PORT. $BELL_CHAR"
  exit 1
fi

DEPLOY_SRC_DIR="$PS_BASEDIR/SUNWps/web-src"
if [ ! -d $DEPLOY_SRC_DIR ]; then
  $ECHO "Error: $DEPLOY_SRC_DIR does not exist. $BELL_CHAR"
  exit 1
fi

if [ "$1" = "redeploy" ]; then
  MODE=$1

  DEPLOY_INSTANCE=""
  NEW_SEARCH="n"
  shift
  while [ "$1" != "" ]; do
    if [ "$1" = "-instance" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -instance. $BELL_CHAR"
	Usage
	exit 1
      else
	DEPLOY_INSTANCE=$2      
	shift; shift
      fi
    elif [ "$1" = "-deploy_admin_password" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -deploy_admin_password. $BELL_CHAR"
	Usage
	exit 1
      else
	DEPLOY_ADMIN_PASSWORD=$2      
	shift; shift
      fi
    elif [ "$1" = "-is_admin_password" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -is_admin_password. $BELL_CHAR"
	Usage
	exit 1
      else
	IDSAME_ADMIN_PASSWORD=$2      
	shift; shift
      fi
    elif [ "$1" = "-newsearch" ]; then
      NEW_SEARCH="y"
      shift
    else
      $ECHO "Error: Unknown parameter $1. $BELL_CHAR"
      Usage
      exit 1
    fi
  done

  if [ "$DEPLOY_TYPE" = "SUNONE" ] || [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    if [ "$DEPLOY_ADMIN_PASSWORD" = "" ]; then
      $ECHO "Error: DEPLOY_ADMIN_PASSWORD is not set. $BELL_CHAR"
      exit 1
    fi
  fi
  if [ "$IDSAME_ADMIN_PASSWORD" = "" ]; then
    $ECHO "Error: IDSAME_ADMIN_PASSWORD is not set. $BELL_CHAR"
    exit 1
  fi

  SetDeployInstanceList

  if [ -f $DEPLOY_INFO_FILE ]; then
    GrabConfig $DEPLOY_INFO_FILE "DEPLOY_URI" "="
    if [ "$ANSWER" != "" ]; then
      DEPLOY_URI=$ANSWER
    else
      $ECHO "Error: Cannot determine DEPLOY_URI. $BELL_CHAR"
      exit 1
    fi
  else
    $ECHO "Error: $DEPLOY_INFO_FILE does not exist. $BELL_CHAR"
    exit 1
  fi
elif [ "$1" = "deploy" ]; then
  MODE=$1

  DEPLOY_INSTANCE=""
  shift
  while [ "$1" != "" ]; do
    if [ "$1" = "-instance" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -instance. $BELL_CHAR"
	Usage
	exit 1
      else
	DEPLOY_INSTANCE=$2      
	shift; shift
      fi
    elif [ "$1" = "-uri" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -uri. $BELL_CHAR"
	Usage
	exit 1
      else
	DEPLOY_URI=$2      
	shift; shift
      fi
    elif [ "$1" = "-deploy_admin_password" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -deploy_admin_password. $BELL_CHAR"
	Usage
	exit 1
      else
	DEPLOY_ADMIN_PASSWORD=$2      
	shift; shift
      fi
    elif [ "$1" = "-is_admin_password" ]; then
      if [ "$2" = "" ] || [ `$ECHO $2 | $CUT -c1` = '-' ]; then
	$ECHO "Error: Missing value for -is_admin_password. $BELL_CHAR"
	Usage
	exit 1
      else
	IDSAME_ADMIN_PASSWORD=$2      
	shift; shift
      fi
    else
      $ECHO "Error: Unknown parameter $1. $BELL_CHAR"
      Usage
      exit 1
    fi
  done

  if [ "$DEPLOY_URI" = "" ]; then
    $ECHO "Error: DEPLOY_URI is not set. $BELL_CHAR"
    exit 1
  fi
  if [ "$DEPLOY_TYPE" = "SUNONE" ] || [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    if [ "$DEPLOY_ADMIN_PASSWORD" = "" ]; then
      $ECHO "Error: DEPLOY_ADMIN_PASSWORD is not set. $BELL_CHAR"
      exit 1
    fi
  fi
  if [ "$IDSAME_ADMIN_PASSWORD" = "" ]; then
    $ECHO "Error: IDSAME_ADMIN_PASSWORD is not set. $BELL_CHAR"
    exit 1
  fi

  SetDeployInstanceList

  NEW_SEARCH="y"
else
  MODE="deploy"

  DEPLOY_INSTANCE="$SERVER_HOST"
  GrabConfig $PKGINFO_FILE "DEPLOY_INSTANCE" "="
  if [ "$ANSWER" != "" ]; then
    DEPLOY_INSTANCE=$ANSWER
  fi

  DEPLOY_URI="/portal"
  if [ -f $DEPLOY_INFO_FILE ]; then
    GrabConfig $DEPLOY_INFO_FILE "DEPLOY_URI" "="
    if [ "$ANSWER" != "" ]; then
      DEPLOY_URI=$ANSWER
    fi
  else
    GrabConfig $PKGINFO_FILE "DEPLOY_URI" "="
    if [ "$ANSWER" != "" ]; then
      DEPLOY_URI=$ANSWER
    fi
  fi

  Question "Deploy into which instance [\".\" for all]?" "$DEPLOY_INSTANCE" "a-zA-Z0-9 /\._-"
  if [ "$ANSWER" = "." ]; then
    DEPLOY_INSTANCE=""
  else
    DEPLOY_INSTANCE=$ANSWER
  fi

  Question "What is the deployment URI?" $DEPLOY_URI "a-zA-Z0-9/\._-"
  DEPLOY_URI=$ANSWER

  if [ "$DEPLOY_TYPE" = "SUNONE" ] || [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    GetPassword "What is the Application Server administration password?"
    DEPLOY_ADMIN_PASSWORD=$ANSWER
  fi

  GetPassword "What is the Identity Server administration password?"
  IDSAME_ADMIN_PASSWORD=$ANSWER

  SetDeployInstanceList

  NEW_SEARCH="y"
fi

if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
  DEPLOY="$DEPLOY_DIR/bin/asadmin"
  if [ ! -x $DEPLOY ]; then
    $ECHO "Error: Cannot find $DEPLOY. $BELL_CHAR"
    exit 1
  fi
elif [ "$DEPLOY_TYPE" = "IWS" ]; then
  IWS_SERVER_HOME="$IDSAME_BASEDIR/SUNWam/servers"
  export IWS_SERVER_HOME

  DEPLOY="$IWS_SERVER_HOME/bin/https/httpadmin/bin/wdeploy"
  if [ ! -x $DEPLOY ]; then
    $ECHO "Error: Cannot find $DEPLOY. $BELL_CHAR"
    exit 1
  fi
fi

$ECHO "" >> $LOG_FILE
$ECHO `$DATE +%D` "at" `$DATE +%r` >> $LOG_FILE
$ECHO "#########################################################" >> $LOG_FILE

IFS=","
for DEPLOY_INSTANCE in $DEPLOY_INSTANCES; do
  if [ "$DEPLOY_TYPE" = "SUNONE" ]; then
    $ECHO "Sync instance $DEPLOY_INSTANCE..." >> $LOG_FILE
    PARAMS="reconfig -u $DEPLOY_ADMIN -w $DEPLOY_ADMIN_PASSWORD -p $DEPLOY_ADMIN_PORT --keepmanualchanges $DEPLOY_INSTANCE"
    $ECHO "Calling $DEPLOY $PARAMS" | $SED -e "s/-w $DEPLOY_ADMIN_PASSWORD/-w ********/" >> $LOG_FILE
    eval $DEPLOY $PARAMS >> $LOG_FILE 2>&1

    $ECHO "Removing existing instance $DEPLOY_INSTANCE..." >> $LOG_FILE
    PARAMS="undeploy -u $DEPLOY_ADMIN -w $DEPLOY_ADMIN_PASSWORD -p $DEPLOY_ADMIN_PORT -H $SERVER_HOST --instance $DEPLOY_INSTANCE --type web portal"
    $ECHO "Calling $DEPLOY $PARAMS" | $SED -e "s/-w $DEPLOY_ADMIN_PASSWORD/-w ********/" >> $LOG_FILE
    eval $DEPLOY $PARAMS >> $LOG_FILE 2>&1
  elif [ "$DEPLOY_TYPE" = "WEBLOGIC" ]; then
    if [ "$MODE" = "" ]; then
      # XXX - need code to determine if portal is already deployed.
      MODE="redeploy"
    fi
  elif [ "$DEPLOY_TYPE" = "WEBSPHERE" ]; then
    $ECHO "Removing existing instance $DEPLOY_INSTANCE..." >> $LOG_FILE

    $ECHO "
EnterpriseApp stop /EnterpriseApp:portal/
EnterpriseApp remove /EnterpriseApp:portal/ -recursive
" > /tmp/undeploy.tcl
    eval $DEPLOY_DIR/bin/wscp.sh -f /tmp/undeploy.tcl
    eval $DEPLOY_DIR/bin/GenPluginCfg.sh -adminNodeName $SERVER_HOST
  elif [ "$DEPLOY_TYPE" = "IWS" ]; then
    PARAMS="delete -u $DEPLOY_URI -i $DEPLOY_INSTANCE -v https-$DEPLOY_INSTANCE hard"
    $ECHO "Calling $DEPLOY $PARAMS" >> $LOG_FILE
    eval $DEPLOY $PARAMS >> $LOG_FILE 2>&1
  fi

  $RM -rf $PS_BASEDIR/SUNWps/web-apps/https-$DEPLOY_INSTANCE/$DEPLOY_URI
done
IFS=$ORIG_IFS
$RM -f $DEPLOY_SRC_DIR/WEB-INF/web.xml

$MKDIR -p $DEPLOY_TMP_DIR

TestDeploy
if [ $? -eq 0 ]; then
  DoDeploy

  UpdateJSPCompilerClasspath

  if [ ! -d $DEPLOY_INFO_DIR ]; then
    MKDIR -p $DEPLOY_INFO_DIR
  fi
  $ECHO "DEPLOY_URI=$DEPLOY_URI" > $DEPLOY_INFO_FILE
fi

exit 0
