#!/usr/bin/qsh 
#
# //  DESCRIPTION:
# //      Install Fix Pack Script 

#SET VARIABLES

. $(/usr/bin/dirname $0)/setupCmdLine

VERSION=80010
IM_ROOT=/QIBM/ProdData/InstallationManager
WAS_FIXPACK_REPOSITORY=/QIBM/WAS/WASFIXPACKS/WAS/${VERSION}/FIXPACK
WAIT=NO
JOBQLIB=QSYS
JOBQ=QSYSNOMAX
JOBN=UPDATEWAS
EXTRA_PARMS=
QALWOBJRST=
QALWOBJRST_CURRENT_VALUE=true

echo " "
echo "======================================================================="
echo "IBM WebSphere Application Server v8.0 - Fix Pack Installation Utility"
echo "5733-W80 (C) COPYRIGHT International Business Machines Corp., 1997,2012"
echo "======================================================================="

cd ${WAS_INSTALL_ROOT}/properties/version
WAS_OFFERING_ID=`ls *.msl | sed -e s/.msl//g`
echo "The WAS v8.0 Offering ID being updated is ${WAS_OFFERING_ID}."
echo " "

#DEFINE METHODS

printUsage()
{
  echo "Usage:"
  echo "installFixPack${VERSION} [ -jobq jobq name ] [ -jobqlib jobq library name ] [-job job name] [-help]"
}

printNotFoundError()
{
  echo "ERROR: Unable to install fixpack. ${PRODUCT} not found at"
  echo "       location: "${LOCATION}
}

verifyObjectExistence()
{
  if [[ ! -e "${LOCATION}" ]] then
    printNotFoundError
    exit 1
  fi
}

checkSaveFile()
{
  if [[ -e "/QSYS.LIB/QGPL.LIB/${SAVF}.FILE" ]]
  then
    system "QSYS/CLRSAVF FILE(QGPL/${SAVF})"
    if [[ $? != 0 ]] then
      echo "ERROR: Unable to clear the QGPL/${SAVF} save file."
      exit 1
    fi    
  else
    system "QSYS/CRTSAVF FILE(QGPL/${SAVF}) TEXT('IBM WebSphere Application Server Installation Data')"
    if [[ $? != 0 ]] then
      echo "ERROR: Unable to create the QGPL/${SAVF} save file."
      exit 1 
    fi
  fi
}

setQALWOBJRST()
{
  system "QSYS/DSPSYSVAL SYSVAL(QALWOBJRST) OUTPUT(*)" | grep '*N*A' | cut -c 18-28 | tr -d ' ' | while read line
  do                                                                                     
    if test "${QALWOBJRST}" = ""; then
      QALWOBJRST=${line}
    else
      QALWOBJRST="${QALWOBJRST} ${line}"
    fi                                                     
  done
  if test "${QALWOBJRST}" = ""; then
    QALWOBJRST_CURRENT_VALUE=false
    echo "WARNING: Unable to determine current value of QALWOBJRST."
    echo "         System value QALWOBJRST will have to be manually set back to" 
    echo "          its original value after the fix pack install completes."
    echo " "
    echo "INFO: Changing system value, QALWOBJRST, to *ALL."
  else
    echo "INFO: The current value of QALWOBJRST is ${QALWOBJRST}."
    echo "INFO: Changing system value, QALWOBJRST, to *ALL.  QALWOBJRST will be"
    echo "    changed back to its original value after the fix pack is installed."  
  fi                        
  system "QSYS/CHGSYSVAL SYSVAL(QALWOBJRST) VALUE('*ALL')"
  if [[ $? != 0 ]] then
      echo "ERROR: Unable to set system value, QALWOBJRST, to *ALL."
      exit 1 
  fi
}

#MAIN BODY

#Read in arguments

while [ $# -gt 0 ]; do
  case $1 in
       -help)
              printUsage
              exit 0
              ;;
       -?)
              printUsage
              exit 0
              ;;
       -jobq) shift
              JOBQ="$1"
              ;;
       -jobqlib) shift
              JOBQLIB="$1"
                 ;;
       -job)  shift
              JOBN="$1"
              ;;
       *)     EXTRA_PARMS="${EXTRA_PARMS} $1"
		  ;;
  esac
  shift
done

#Verify variables are set correctly

PRODUCT="Installation Manager"
LOCATION=${IM_ROOT}
verifyObjectExistence

PRODUCT="WebSphere Installation Path"
LOCATION=${WAS_INSTALL_ROOT}
verifyObjectExistence
    
PRODUCT="WebSphere Installation Library"
LOCATION="/QSYS.LIB/${WAS_LIB}.LIB"
verifyObjectExistence

PRODUCT="WebSphere Product Library"
LOCATION="/QSYS.LIB/${WAS_PROD_LIB}.LIB"
verifyObjectExistence

PRODUCT="Fix Pack Repository" 
LOCATION="${WAS_FIXPACK_REPOSITORY}/repository.xml"        
verifyObjectExistence

echo "Step 1 of 6..."
SAVF="IM"
SAV_OBJ=${IM_ROOT}
checkSaveFile
echo "INFO: Saving the ${SAV_OBJ} directory."
system "QSYS/SAV DEV('/QSYS.LIB/QGPL.LIB/${SAVF}.FILE') OBJ(('${SAV_OBJ}')) PVTAUT(*YES)"
echo " "

echo "Step 2 of 6..."
SAVF="WASPRDDTA"
SAV_OBJ=${WAS_INSTALL_ROOT}
checkSaveFile 
echo "INFO: Saving the ${SAV_OBJ} directory."
system "QSYS/SAV DEV('/QSYS.LIB/QGPL.LIB/${SAVF}.FILE') OBJ(('${SAV_OBJ}')) PVTAUT(*YES)"
echo " "

echo "Step 3 of 6..."
SAVF="WASLIB"
SAV_OBJ=${WAS_LIB}
checkSaveFile
echo "INFO: Saving the ${SAV_OBJ} installation library."
system "QSYS/SAVLIB LIB(${SAV_OBJ}) DEV(*SAVF) SAVF(QGPL/${SAVF}) PVTAUT(*YES)"
echo " "
        
echo "Step 4 of 6..."
SAVF="WASPRDLIB"
SAV_OBJ=${WAS_PROD_LIB}
checkSaveFile
echo "INFO: Saving the ${SAV_OBJ} product library."
system "QSYS/SAVLIB LIB(${SAV_OBJ}) DEV(*SAVF) SAVF(QGPL/${SAVF}) PVTAUT(*YES)"
echo " "

echo "Step 5 of 6..."
setQALWOBJRST
echo " "
echo "INFO: Starting all IBM i Host Servers."
system "QSYS/STRHOSTSVR *ALL"
echo " "

echo "Step 6 of 6..."
echo "INFO: Starting the WAS v8.0 fix pack installation process:"
echo "INFO: Invoking the command: \"${IM_ROOT}/eclipse/tools/imcl install ${WAS_OFFERING_ID} -acceptLicense  -installationDirectory ${WAS_INSTALL_ROOT} -repositories ${WAS_FIXPACK_REPOSITORY} -showVerboseProgress ${EXTRA_PARMS}\""
echo " "
if test "${QALWOBJRST_CURRENT_VALUE}" = "true"; then 
  system "QSYS/SBMJOB CMD(QSYS/STRQSH CMD('umask 022;${IM_ROOT}/eclipse/tools/imcl install ${WAS_OFFERING_ID} -acceptLicense  -installationDirectory ${WAS_INSTALL_ROOT} -repositories ${WAS_FIXPACK_REPOSITORY} -showVerboseProgress ${EXTRA_PARMS};system \"QSYS/CHGSYSVAL SYSVAL(QALWOBJRST) VALUE(''${QALWOBJRST}'')\"')) JOBQ(${JOBQLIB}/${JOBQ}) JOB(${JOBN})"
else
  system "QSYS/SBMJOB CMD(QSYS/STRQSH CMD('umask 022;${IM_ROOT}/eclipse/tools/imcl install ${WAS_OFFERING_ID} -acceptLicense  -installationDirectory ${WAS_INSTALL_ROOT} -repositories ${WAS_FIXPACK_REPOSITORY} -showVerboseProgress ${EXTRA_PARMS}')) JOBQ(${JOBQLIB}/${JOBQ}) JOB(${JOBN})"
fi
echo " "
echo "INFO: The WAS v8.0 fix pack installation process has completed when" 
echo "      the ${JOBN} job has ended."  
echo "INFO: Please review the QPRINT spool file produced by the ${JOBN} job"
echo "      to verify the the installation status."