#BEGINBUCKET RunJavaEditX
#/ ---------------------------------------------------------------------------------
#/ This template generates job steps to execute the JavaEditX program to do symbol
#/ substitution on members from the TKMVSENV.PRE dataset, and copy the resulting
#/ members to the TKMVSENV dataset. Because the work is done in a shell script, the
#/ generated job steps include a TSO step to create the shell script file, followed
#/ by a BPXBATCH step to execute the shell script. The output from the shell script
#/ is written to files that another TSO step copies to SYSOUT datasets so that the
#/ output is viewable in the job output. Next, a cleanup step deletes temporary
#/ output files and an IEBCOPY step replaces the TKMVSENV member with the one for
#/ the currently installed encoding.
#/ ---------------------------------------------------------------------------------
#BEGINDEFS
#/ -------------------------------------------------
#/EXCEPTIONFORMISSINGSYMBOL
#SYMBOLCALLS SYSOUT;CUSTPRODQUAL;STAGEQUAL
#/ -------------------------------------------------
#BEGININSTANCEQUALIFIERS
#/ -------------------------------------------------
#IFNOTEQ {MVS2BDSCODE} XT #THEN DOESNOTQUALIFY
#/ if it is a hotfix promote job, do not include the copy of tkmvsenv files
#IFEQ [STAGEQUAL] .SL #THEN QUALIFIES
#IFNOT [STAGEQUAL] #THEN QUALIFIES
#IFEQ [HOTFIX] TRUE #THEN NEXT
#THEN QUALIFIES
#NEXT
#IFEQ [PROMOTE] TRUE #THEN DOESNOTQUALIFY
#QUALIFIES
#CREATEINSTANCEFROMENTRY
#DOESNOTQUALIFY
#ENDQUALIFIERS
#/ -------------------------------------------------
#BEGINPREFIX 
#/ -------------------------------------------------
//JAVAEDTX EXEC PGM=IKJEFT1B,DYNAMNBR=20,COND=(4,LT)
//SYSTSPRT DD SYSOUT=[SYSOUT]
//SCRIPT DD *
#! /bin/sh      #/ force default shell
JREHOME1=[SDW_JREHOME1]
export JREHOME1
JREHOME2=[SDW_JREHOME2]
export JREHOME2
JREHOME3=[SDW_JREHOME3]
export JREHOME3
JREHOME4=[SDW_JREHOME4]
export JREHOME4
JRELIB=$JREHOME1$JREHOME2$JREHOME3$JREHOME4/lib
export JRELIB
JREBIN=$JREHOME1$JREHOME2$JREHOME3$JREHOME4/bin
export JREBIN
PATH=$JRELIB:$JREBIN:$PATH:/bin:/usr/bin
export PATH
SASHOMEDIR="[SASHOME]"
export SASHOMEDIR
OSTMPDIR1=[OSTEMPDIR1]
export OSTMPDIR1
OSTMPDIR2=[OSTEMPDIR2]
export OSTMPDIR2
OSTMPDIR3=[OSTEMPDIR3]
export OSTMPDIR3
OSTEMPDIR=$OSTMPDIR1$OSTMPDIR2$OSTMPDIR3
export OSTEMPDIR
msg="Customizing TKMVSENV content..."
echo $msg
echo "CONTROL ASIS" > $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
EDITXIN=$OSTEMPDIR/[DATETIMEPFX].editxin.txt
export EDITXIN
if test -f $EDITXIN
then
  rm -f $EDITXIN
  rc=$?
  if test ! "$rc" = 0
  then
    msg="Unable to remove $EDITXIN"
    echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    echo "EXIT CODE(12)" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    exit 12
  fi
fi
#/ -------------------------------------------------
#BEGININSTANCE      #/ Each instance is ./ ADD followed by fully qualified DSN for editing, as part of JAVAEDITX SYSIN stream.
#/ -------------------------------------------------
#/
#/ This looks dumb, repeating the FORALL block inside the IFEQ, but when the IFEQ is inside
#/ the FORALL block, it doesn't work. Until that problem is fixed, this is the only way.
#/
#IFEQ [PROMOTE] TRUE #THEN USEPROD
#SET [UC] UC
#IFNOT [INSTALL-DIRECT] #THEN NAMESET
#SET [UC] NEW
#NAMESET
#FORALL <MEMBER>
#SET [NEWNAME] {[UC](MODULENAME)}
#SET [ADDNAMEEQUALS] {UC(MODULENAME)}
echo "./ ADD NAME=[NEWNAME]" >> $EDITXIN
member="//'[CUSTPRODQUAL][STAGEQUAL].[XT:LOQUAL]([ADDNAMEEQUALS])'"
export member
cat $member >> $EDITXIN
#ENDFORALL
#THEN NEXT
#USEPROD
#FORALL <MEMBER>
#SET [ADDNAMEEQUALS] {UC(MODULENAME)}
echo "./ ADD NAME=[ADDNAMEEQUALS]" >> $EDITXIN
member="//'[CUSTPRODQUAL].[XT:LOQUAL]([ADDNAMEEQUALS])'"
export member
cat $member >> $EDITXIN
#ENDFORALL
#NEXT
#/ -------------------------------------------------
#BEGINSUFFIX 
#/ -------------------------------------------------
DWIZDIR1=[SDWPATH1]
export DWIZDIR1
DWIZDIR2=[SDWPATH2]
export DWIZDIR2
DWIZDIR3=[SDWPATH3]
export DWIZDIR3
DWIZDIR4=[SDWPATH4]
export DWIZDIR4
DWIZDIR=$DWIZDIR1$DWIZDIR2$DWIZDIR3$DWIZDIR4
export DWIZDIR
ITJAR="$DWIZDIR/[ITJAR]"
export ITJAR
SDWJAR="$DWIZDIR/setup.jar"
export SDWJAR
CP="$ITJAR:$SDWJAR"
export CP
JAVAEDITX="com.sas.tools.installs.it.zos.JavaEditX"
export JAVAEDITX
TEMPLATESDIR="-DMVSTemplatesLocation=$SDMDIR/$DWIZDIR/MVSTemplates"
export TEMPLATESDIR
FE="-Dfile.encoding=IBM-1047"
export FE
TD="-Djava.io.tmpdir=$OSTEMPDIR"
export TD
OPTIONS="$FE $TD $TEMPLATESDIR -DSASHome=$SASHOMEDIR"
export OPTIONS
EDITXOUT=$SASHOMEDIR/InstallMisc/tkmvsenv
export EDITXOUT
if test -d $EDITXOUT
then
  rm -rf $EDITXOUT/*
  rc=$?
  if test ! "$rc" = 0
  then
    msg="Unable to remove contents of directory $EDITXOUT"
    echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    echo "EXIT CODE(12)" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    exit 12
  fi
else
  mkdir -p $EDITXOUT
  rc=$?
  if test ! "$rc" = 0
  then
    msg="Unable to create the directory $EDITXOUT"
    echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    echo "EXIT CODE(12)" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
    exit 12
  fi
fi
#IFEQ [PROMOTE] TRUE #THEN DOPROD
TKMVSENV="[CUSTPRODQUAL][STAGEQUAL].[TE:LOQUAL]"
#THEN DIDIT
#DOPROD
TKMVSENV="[CUSTPRODQUAL].[TE:LOQUAL]"
#DIDIT
export TKMVSENV
java -cp $CP $OPTIONS $JAVAEDITX $EDITXIN $EDITXOUT
#/
#/ This block of code changes the member names for tkmvsenv
#/ when running an update-in-place (Action B). This is so that
#/ we don't replace the customer's production members in case
#/ they have modified them. The first three characters of each
#/ member name are changed to "NEW".
#/
#IFNOT [INSTALL-DIRECT] #THEN DOCOPY
prev=`pwd`
cd $EDITXOUT
for m in * ; do
  newname=`echo $m | sed -e 's/^.../NEW/'`
  mv $m $newname
done
cd $prev
#DOCOPY
cp $EDITXOUT/* "//'$TKMVSENV'"
rc=$?
if test ! "$rc" = 0
then
  msg="Unable to copy files in $EDITXOUT to members in $TKMVSENV"
  echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
  echo "EXIT CODE(12)" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
  exit 12
fi  
rm -rf $EDITXOUT
rm -f $EDITXIN
msg="Completed customization of TKMVSENV content."
echo $msg
echo "WRITE $msg" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr
echo "EXIT CODE(0)" >> $OSTEMPDIR/[DATETIMEPFX].javaeditx.sherr           
exit 0
/*
//DFALTERR DD *
CONTROL ASIS
WRITE Customization of TKMVSENV content failed.
EXIT CODE(16)
//SYSTSIN DD *
 ALLOC FILE(OUTPUT) +
  PATH('[OSTEMPDIR1]+
#IFNOT [OSTEMPDIR2] #THEN NEXT
  [OSTEMPDIR2]+
#NEXT
#IFNOT [OSTEMPDIR3] #THEN NEXT
  [OSTEMPDIR3]+
#NEXT  
  /[DATETIMEPFX].javaeditx.sh') +
  PATHOPTS(OWRONLY,OCREAT) PATHMODE(SIRUSR,SIWUSR)
 OCOPY INDD(SCRIPT) OUTDD(OUTPUT) TEXT
 ALLOC FILE(ERROUT) +
  PATH('[OSTEMPDIR1]+
#IFNOT [OSTEMPDIR2] #THEN NEXT
  [OSTEMPDIR2]+
#NEXT
#IFNOT [OSTEMPDIR3] #THEN NEXT
  [OSTEMPDIR3]+
#NEXT  
  /[DATETIMEPFX].javaeditx.sherr') +
  PATHOPTS(OWRONLY,OCREAT) PATHMODE(SIRUSR,SIWUSR)
 OCOPY INDD(DFALTERR) OUTDD(ERROUT) TEXT
/*
//*
// SET OSTMP1='[OSTEMPDIR1]'
// SET OSTMP2='[OSTEMPDIR2]'      
// SET OSTMP3='[OSTEMPDIR3]'
//SHELLRUN EXEC PGM=BPXBATCH,PARM='SH',COND=(0,LT,JAVAEDTX)
//STDIN  DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.sh',
//       PATHOPTS=(ORDONLY)
//STDOUT DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.out',
//       PATHOPTS=(OWRONLY,OCREAT),PATHMODE=(SIRUSR,SIWUSR)
//STDERR DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.err',
//       PATHOPTS=(OWRONLY,OCREAT),PATHMODE=(SIRUSR,SIWUSR)
//*
//SHELLOUT EXEC PGM=IKJEFT1B,DYNAMNBR=20
//SYSTSPRT DD SYSOUT=[SYSOUT]
//STDOUT DD SYSOUT=[SYSOUT],DCB=(RECFM=VB,LRECL=1020,BLKSIZE=1024)
//STDERR DD SYSOUT=[SYSOUT],DCB=(RECFM=VB,LRECL=1020,BLKSIZE=1024)
//CLIST DD DISP=(NEW,CATLG),
// DSN=[CUSTPRODQUAL].JAVAEDTX.EXEC,
// UNIT=[DISKUNIT],SPACE=(TRK,(1,1)),
// DCB=(RECFM=VB,LRECL=255,BLKSIZE=6160)
//SYSTSIN DD *
 ALLOCATE FILE(INPUT) PATHOPTS(ORDONLY) +
   PATH('[OSTEMPDIR1]+
#IFNOT [OSTEMPDIR2] #THEN NEXT
  [OSTEMPDIR2]+
#NEXT
#IFNOT [OSTEMPDIR3] #THEN NEXT
  [OSTEMPDIR3]+
#NEXT  
  /[DATETIMEPFX].javaeditx.out')
 OCOPY INDD(INPUT) OUTDD(STDOUT) TEXT
 FREE FILE(INPUT)
 ALLOCATE FILE(INPUT) PATHOPTS(ORDONLY) +
   PATH('[OSTEMPDIR1]+
#IFNOT [OSTEMPDIR2] #THEN NEXT
  [OSTEMPDIR2]+
#NEXT
#IFNOT [OSTEMPDIR3] #THEN NEXT
  [OSTEMPDIR3]+
#NEXT   
   /[DATETIMEPFX].javaeditx.err')
 OCOPY INDD(INPUT) OUTDD(STDERR) TEXT
 FREE FILE(INPUT)
 ALLOCATE FILE(INPUT) PATHOPTS(ORDONLY) +
   PATH('[OSTEMPDIR1]+
#IFNOT [OSTEMPDIR2] #THEN NEXT
  [OSTEMPDIR2]+
#NEXT
#IFNOT [OSTEMPDIR3] #THEN NEXT
  [OSTEMPDIR3]+
#NEXT   
  /[DATETIMEPFX].javaeditx.sherr')
 OCOPY INDD(INPUT) OUTDD(CLIST) TEXT
 EXEC '[CUSTPRODQUAL].JAVAEDTX.EXEC'
/*
//*
// SET OSTMP1='[OSTEMPDIR1]'
// SET OSTMP2='[OSTEMPDIR2]'      
// SET OSTMP3='[OSTEMPDIR3]'
//CLEANUP EXEC PGM=IEFBR14
//DD1 DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.sh',
//     PATHOPTS=ORDONLY,PATHDISP=DELETE
//DD2 DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.out',
//     PATHOPTS=ORDONLY,PATHDISP=DELETE
//DD3 DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.err',
//     PATHOPTS=ORDONLY,PATHDISP=DELETE
//DD4 DD PATH='&OSTMP1&OSTMP2&OSTMP3/[DATETIMEPFX].javaeditx.sherr',
//     PATHOPTS=ORDONLY,PATHDISP=DELETE
//DD5 DD DISP=(MOD,DELETE,DELETE),
//  DSN=[CUSTPRODQUAL].JAVAEDTX.EXEC,
//  UNIT=[DISKUNIT],SPACE=(TRK,(1)),
//  DCB=(RECFM=VB,LRECL=255,BLKSIZE=6160)
//*
//RENAME  EXEC PGM=IEBCOPY,COND=(0,LT,JAVAEDTX)
//SYSPRINT DD SYSOUT=[SYSOUT]
#IFEQ [PROMOTE] TRUE #THEN DOPROMOTE
//INPUT    DD DSN=[CUSTPRODQUAL][STAGEQUAL].[TE:LOQUAL],
//  DISP=SHR
//OUTPUT   DD DSN=[CUSTPRODQUAL][STAGEQUAL].[TE:LOQUAL],
//  DISP=OLD
#THEN DONE
#DOPROMOTE
//INPUT    DD DSN=[CUSTPRODQUAL].[TE:LOQUAL],
//  DISP=SHR
//OUTPUT   DD DSN=[CUSTPRODQUAL].[TE:LOQUAL],
//  DISP=OLD
#DONE
//SYSIN    DD *
 COPY INDD=((INPUT,R)),OUTDD=OUTPUT
#IF [INSTALL-DIRECT] #THEN UPDATENAME
 S M=((TKMVEN[ORDERENCODING],TKMVSENV))
#THEN EXIT
#UPDATENAME
 S M=((NEWVEN[ORDERENCODING],NEWVSENV))
#EXIT
//*
#ENDBUCKET