#!/bin/sh

ECHO=/bin/echo
GREP=/bin/grep
SED=/bin/sed
AWK=/bin/awk
CUT=/bin/cut
LS=/bin/ls
MV=/bin/mv
WC=/usr/bin/wc
CP="/bin/cp -p"
RM="/bin/rm -f"
RPM=/bin/rpm
gettext=/usr/bin/gettext

RTM_VERSION=7.0
RTM_RELEASE=16
AMRPMSUFFIX=$RTM_VERSION-$RTM_RELEASE.i686.rpm
MAVERSION=6.2
MARELEASE=25
MOBILEACCESSRPMSUFFIX=$MAVERSION-$MARELEASE.1.i386.rpm
VERSION_FILE=.version
CONFIG_DIR=/etc/opt/sun/identity/config
AMCONFIG=$CONFIG_DIR/AMConfig.properties

##############################################################
# get base dir
##############################################################
get_base_dir() {
  if [ ! -f $AMCONFIG ]; then
    eval $ECHO "`$gettext 'ERROR: ${AMCONFIG} does not exist! can not apply patch'`"
    exit 1
  fi

  $CP $AMCONFIG /tmp/.
  BASEDIR=`$GREP com.iplanet.am.installdir= $AMCONFIG \
    | $SED -e 's/\/identity//g' | $SED -e 's/com.iplanet.am.installdir=//g'`
  INSTALL_DIR=$BASEDIR/$PRODUCT_DIR
}

##############################################################
# check RTM RPM bits directory
##############################################################
check_rpm_dir() {
  RPMDIR=$1
  if [ -d $RPMDIR ]; then
    RPMS=`$LS -l $RPMDIR/sun-identity-* | $WC -l | $SED -e 's/ //g'`
    if [ $RPMS -lt 1 ]; then
      $ECHO "`$gettext 'This directory does not contain any AM RTMs'`"
      $ECHO "`$gettext 'A valid path could be /jes4/Linux_x86/Product/identity_svr/Packages'`"
      exit
    fi
  else
    $ECHO "`$gettext 'This directory does not exist'`"
    exit
  fi
}

##############################################################
# test for root user
##############################################################
check_root_user() {
  if test `id | $AWK '{print $1}'` != "uid=0(root)"
  then
    eval $ECHO "`$gettext 'You must be root user to run $0.'`"
    exit 1
  fi
}

##############################################################
# check Access Manager existance
##############################################################
check_am() {
  rpm -q --quiet sun-identity-sdk
  if [ $? -eq 0 ];then
    version=`rpm -q --queryformat "%{VERSION}\n" sun-identity-sdk`
    release=`rpm -q --queryformat "%{RELEASE}\n" sun-identity-sdk`
    if [ "$version" != "$RTM_VERSION" ]; then
      $ECHO "`$gettext 'The current Access Manager installed is not 7.0.'`"
      exit
    fi
  else
    $ECHO "`$gettext 'No Access Manager installation found.'`"
    exit
  fi
}

##############################################################
# install RTM RPM's
##############################################################
install_rpm() {
  $ECHO "`$gettext 'Starting re-installing AM 7.0 Packages'`"
  cd $RPMDIR
  installed="`$RPM -qa | grep sun-identity`"
  for pkg in $installed
  do
    name=`$ECHO $pkg | sed -e "s/^\(..*\)\-[0-9]..*$/\1/"`
    name=`$ECHO $name | sed -e "s/^\(..*\)\-[0-9]..*$/\1/"`
    pkgname=$name-$AMRPMSUFFIX
    if [ $name = "sun-identity-mobileaccess" ] || \
        [ $name = "sun-identity-mobileaccess-config" ]; then
      pkgname=$name-$MOBILEACCESSRPMSUFFIX
    fi

    if [ -f $pkgname ]; then
      case "${name}" in
        sun-identity-console-sdk | sun-identity-sdk-config | sun-identity-services-config | sun-identity-mobileaccess-config)
        rpm -Uvh --nodeps --force $pkgname
      ;;

      *)      
        rpm -Uvh --prefix=${BASEDIR} --nodeps --force $pkgname 
      ;;

      esac
    else
      $ECHO "`$gettext 'There is no $pkgname in this patch'`"
    fi
  done
}

##############################################################
# update the version file
##############################################################
update_version_string() {
  cd $CONFIG_DIR
  $ECHO "Sun Java System Access Manager 2005Q4" > $VERSION_FILE
}

##############################################################
# main processing
##############################################################
CURRENTDIR=`pwd`
if [ $# -ne 1 ]; then
  $ECHO "`$gettext 'Usage: reinstallRTM <path_to_JES4_bits>'`"
  exit
fi

check_root_user
check_rpm_dir $1
check_am
get_base_dir
install_rpm
update_version_string

# generate the silent file and print the redeployment instructions
$MV /tmp/AMConfig.properties $AMCONFIG
cd $CURRENTDIR
D=`dirname $0`
cd $D
if [ -f getSilentFile ]; then
  . getSilentFile
else
  eval $ECHO "`$gettext 'ERROR: Script getSilentFile is missing, amsilent file for AM application redeployment fails to create!'`"
fi

