#!/bin/sh -f
#++
#  emutil - Utility Script for the EM
#
#  emutil is currently used to register job types with EM
#--
#
# MODIFIED
#    lsatyapr   04/16/09 - Lrg3465690 Fix shift usage
#    rdabbott   09/04/07 - cons conf not used
#    rdabbott   08/30/07 - fix 4570966: get password from stdin
#    minfan     04/25/07 - ojdbc14 sunset
#    rkpandey   03/16/07 - Bug 5343881 for LoP
#    rkpandey   04/20/07 - Backport rkpandey_bug-5343881 from main
#    bram       02/27/06 - Change Copyright year
#    smodh      02/20/06 - XbranchMerge smodh_jdbc_emcore from main 
#    rdabbott   08/23/05 - hand merge 4230566 by ashugupt 
#    ashugupt   08/10/05 - Fix 4230566 
#    rdabbott   08/18/05 - change echo order for jdbc 
#    rdabbott   08/11/05 - fix version 
#    njagathe   08/20/04 - Replace join with minimal perl5lib 
#    njagathe   08/16/04 - Fix hardcoded 561 refs 
#    rdabbott   08/06/04 - fix regression paths 
#    rdabbott   07/27/04 - emdrep bin in oracle home 
#    kmanicka   07/19/04 - added JDBC option
#    djoly      05/14/04 - Update core reference 
#    mbhoopat   03/11/04 - merge from pl_main_gen 
#    nsharma    02/27/04 - ia64 changes 
#    mbhoopat   12/19/03 - Fix class path 
#    skini      08/31/03 - FIx return code 
#    jsutton    04/25/03 - Fix up OUILOC
#    jmcdonal   04/09/03 - Bug 2737518: OUI dir changes
#    skini      03/18/03 - Changes to register jobtype to generate sql file
#    rlal       01/25/03 - fix for bug 2769541
#    jsutton    01/21/03 - -native not a supported VM option
#    aaitghez   01/13/03 - change EM version string
#    itarashc   12/16/02 - 
#    itarashc   12/11/02 - 
#    dmshah     12/08/02 - dmshah_add_emutil_main
#    skini      12/17/02 - Cutover to sysman/jlib location for em.jar
#    dmshah     11/26/02 - dmshah_emctl_40
#    dmshah     11/22/02 - Created.
#

displayHelp()
{
if ! test "$1"
then
   echo ""
   echo "Error: Incorrect command option"
elif [ "$1" != "NONE" ]
then
   echo ""
   echo Error: $1
fi

   echo ""
   echo Usage: 
   echo "    emutil register jobtype [options] [connect details] <Job Definition File>"
   echo "    CONNECT DETAILS:"
   echo "	-username <username> Repository login username"
   echo "	-password <password> Repository login password"
   echo "	-alias    <alias>    Repository alias or connect descriptor"
   echo "	                     "
   echo ""

if [ "$2" = "" ]
then
   echo "    Try  emutil -help for more information."
   echo ""
else
   echo ""
   echo "    OPTIONS:"
   echo "	-o <output>: Output the generated PL/SQL into the specified"
   echo "	file as an executable PL/SQL script. In this case, the job"
   echo "	type is not registered with the repository"
   echo ""
   echo "	-jdbc: Use JDBC driver to connect to the repository. This option"
   echo "	is mutually exclusive to the -o option."
   echo ""
   echo ""
   echo "    Deprecated Usage:"
   echo "	emutil register jobtype [options] <Job Definition File>"
   echo "	[<rep user> <rep passwd> <rep host> <rep port> <rep sid>]"
   echo "	OR"
   echo "	emutil register jobtype [options] <Job Definition File>"
   echo "	[<rep user> <rep passwd> <rep connect descriptor>]"
   echo ""
fi
   exit 2
}

#
# Make sure certain environment variables are set
#
JAVA_HOME=/oracle/EPP/11203/jdk
ORACLE_HOME=/oracle/EPP/11203
EMDROOT=/oracle/EPP/11203
export JAVA_HOME
export ORACLE_HOME
export EMDROOT

printf "Enterprise Manager 10.2.0.4.0\n"
printf "Copyright (c) 2002, 2007, Oracle Corporation.  All rights reserved.\n"

EM_OC4J_HOME=$EMDROOT/sysman/j2ee
# these variables - PERL5LIB and LD_LIBRARY_PATH - are set so that
# osfetchlets can run correctly

uname=`uname`
if [ "$uname" = "SunOS" ];
then

# Set up TZ if not already set, this is done as a workaround
# for bug in JDK 1.3.1
  if [ "$TZ" = "" ]
  then
    TMPFILE=/tmp/setTZ.sh.$$
    grep -v "^#" /etc/TIMEZONE | grep TZ > $TMPFILE
    . $TMPFILE
    echo "TZ set to $TZ\n"
    rm $TMPFILE
  fi
  export TZ

fi

PERL5LIB_NATIVE=:$ORACLE_HOME/perl/lib:$ORACLE_HOME/perl/lib/site_perl
PERL5LIB_TMP=${PERL5LIB_NATIVE}:$EMDROOT/sysman/admin/scripts

if [ "$PERL5LIB" = "" ] ;
then
   PERL5LIB=${PERL5LIB_TMP}
else
   PERL5LIB=${PERL5LIB_TMP}:${PERL5LIB}
fi

if [ "$LD_LIBRARY_PATH" = "" ] ; then
   LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix
else
   LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix:$LD_LIBRARY_PATH
fi

if [ "$SHLIB_PATH" = "" ] ; then
   SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix
else
   SHLIB_PATH=$ORACLE_HOME/lib32:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix:$SHLIB_PATH
fi

if [ "$LIBPATH" = "" ] ; then
   LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix
else
   LIBPATH=$ORACLE_HOME/lib32:$ORACLE_HOME/perl/lib:$EMDROOT/lib:/oracle/EPP/11203/oui/lib/aix:$LIBPATH
fi

# add java lib to LD_LIBRARY_PATH.
if [ "$uname" = "SunOS" ];
then
        LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/sparc/client:$JAVA_HOME/jre/lib/sparc:$LD_LIBRARY_PATH
elif [ "$uname" = "HP-UX" ] && [ "`uname -m`" = "9000/800" ] ; then
        SHLIB_PATH=$JRE_HOME/lib/PA_RISC2.0/client:$JRE_HOME/lib/PA_RISC2.0:$SHLIB_PATH
elif [ "$uname" = "HP-UX" ] && [ "`uname -m`" = "ia64" ] ; then
        SHLIB_PATH=$JRE_HOME/lib/IA64N/client:$JRE_HOME/lib/IA64N:$SHLIB_PATH
elif [ "$uname" = "Linux" ] && [ "`uname -m`" = "i686" ]  ; then
         LD_LIBRARY_PATH=$JRE_HOME/lib/i386/client:$JRE_HOME/lib/i386:$LD_LIBRARY_PATH
elif [ "$uname" = "Linux" ] && [ "`uname -m`" = "ia64" ] ; then
         LD_LIBRARY_PATH=$JRE_HOME/lib/ia64/client:$JRE_HOME/lib/ia64:$LD_LIBRARY_PATH
elif [ "$uname" = "Linux" ] && [ "`uname -m`" = "ppc64" ] ; then
    LD_LIBRARY_PATH=$JRE_HOME/bin/classic:$JRE_HOME/bin:$LD_LIBRARY_PATH
fi


# to workaround Solaris2.8 Java thr_suspend hang, use alternate libthread.
# Since this directory doesn't exist on other versions, this is a noop there.
#
#    ---- Let's try using T1 on 2.8 for a while with Java workaround -- jabramso
#
#if [ "$uname" = "SunOS" ];
#then
#       LD_LIBRARY_PATH=/usr/lib/lwp:$LD_LIBRARY_PATH
#fi

export PERL5LIB
export LD_LIBRARY_PATH
export SHLIB_PATH
export LIBPATH

# Add the var for HP
if [ "$uname" = "HP-UX" ] ; then
   UNIX95=XPG4;
   export UNIX95
   # fix for emctl stop issue on HP.
   EM_OC4J_OPTS="-XdoCloseWithReadPending $EM_OC4J_OPTS"
   export EM_OC4J_OPTS
fi

# jsutton 1/21/03: -native desupported for JDK 1.4
# (1.4 to be used when this branch ships)
#
#if [ "$uname" = "OSF1" ] ; then
#   # java "-native" flag not used on decunix
#   JAVA_OPTS=""
#else
#   JAVA_OPTS="-native"
#fi

#
# Set path so that our native executables can be found when run from java
#
PATH=$EMDROOT/bin:$PATH
export PATH

# use ulimit to make sure we have enough descriptors
if [ "$EM_DESCRIPTORS" = "" ]
then
   EM_DESCRIPTORS=1024
fi

CURRENT_LIMIT=`ulimit -n`

if [ "$CURRENT_LIMIT" != "unlimited" ]
then
   if [ $CURRENT_LIMIT -lt $EM_DESCRIPTORS ]
   then
      ulimit -n $EM_DESCRIPTORS
   fi
fi

#
# emutil register jobtype <XML filename> <rep user> <rep passwd> <rep host> <rep port> <rep sid>
#
if [ "$1" = "register" ] && [ "$2" = "jobtype" ] ; then
    CP=$ORACLE_HOME/oc4j/jdbc/lib/ojdbc5dms.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/ojdbc14dms.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-net-ee.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-utility.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-collation.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-net.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-internal.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-servlet.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-lcsd.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-tools.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-mapping.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n-translation.jar:\
$ORACLE_HOME/oc4j/jdbc/lib/orai18n.jar:\
$ORACLE_HOME/oc4j/lib/dms.jar:\
$ORACLE_HOME/jdbc/lib/ojdbc14.jar:\
$ORACLE_HOME/jdbc/lib/nls_charset12.jar:\
$ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/classes:\
$ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/lib/emCORE.jar:\
$ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/lib/emagentSDK.jar:\
$ORACLE_HOME/j2ee/OC4J_EM/applications/em/em/WEB-INF/lib/log4j-core.jar:\
$ORACLE_HOME/sysman/jlib/emCORE.jar:\
$ORACLE_HOME/sysman/jlib/emagentSDK.jar:\
$ORACLE_HOME/sysman/jlib/log4j-core.jar:\
$ORACLE_HOME/jlib/uix2.jar:\
$ORACLE_HOME/lib/xmlparserv2.jar

    shift
    shift

    if [ "$1" = "-o" ] ; then
        FILE_ONLY=true
        OUTFILENAME=$2
        if [ $# -gt 1 ] ; then shift ; fi
        if [ $# -gt 1 ] ; then shift ; fi
    else
        FILE_ONLY=false
        OUTFILENAME=$ORACLE_HOME/sysman/admin/emdrep/bin/`basename $1 .xml`_JT.sql
    fi

    if [ "$1" = "-jdbc" ] ; then
        if [ "$FILE_ONLY" = "true" ] ; then
            displayHelp "-o is not compatible with -jdbc"
        fi

	JDBC_FLAG=true
        if [ $# -gt 1 ] ; then shift ; fi
    else
	JDBC_FLAG=false
    fi

    if [ "$1" = "-username" ] ; then
        REP_USER=$2
        if [ $# -gt 1 ] ; then shift ; fi
        if [ $# -gt 1 ] ; then shift ; fi
    fi

    if [ "$1" = "-password" ] ; then
        REP_PWD=$2
        if [ $# -gt 1 ] ; then shift ; fi
        if [ $# -gt 1 ] ; then shift ; fi
    fi

    if [ "$1" = "-alias" ] ; then
        # NOTE: not possible to handle host:port:sid here...
        REP_ALIAS=$2
        if [ $# -gt 1 ] ; then shift ; fi
        if [ $# -gt 1 ] ; then shift ; fi
    fi

    if [ "$1" = "-help" ] ; then
        displayHelp "NONE" 2
    fi

    case "$1" in
        -*) displayHelp "Unexpected option: $1" ;;
    esac

    if [ "$1" = "" ] ; then
        displayHelp "Input filename not specified."
    fi
    XML_FILE=$1

    if [ "" != "$REP_USER" -o "" != "$REP_PWD" -o "" != "$REP_ALIAS" ] ; then
        if [ $# -gt 1 ] ; then
            displayHelp "Repository connection parameters can be specified by options or after the jobtype filename, but not both."
        elif [ "" = "$REP_USER" -o "" = "$REP_ALIAS" ] ; then
            displayHelp "Both -username and -alias must be supplied for secure mode."
        fi
    fi

    if [ "" = "$REP_ALIAS" ] ; then
        # get the connection detials the old way
        if [ $# -lt 4 ] ; then
            displayHelp "The repository connection details must be specified."
        fi
    
        REP_USER=$2
        REP_PWD=$3
    
        if [ $# -lt 6 ] ; then
            REP_ALIAS=$4
            DEBUG=$5
        else
            REP_HOST=$4
            REP_PORT=$5
            REP_SID=$6
            DEBUG=$7
            REP_ALIAS="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=$REP_HOST)(Port=$REP_PORT))(CONNECT_DATA=(SID=$REP_SID)))"
        fi
        if [ $# -gt 1 ] ; then shift ; fi
    fi

    if [ "$DEBUG" = "" ] ; then
        DEBUG="nodebug"
    fi

    if [ "$JDBC_FLAG" = "false" ] ; then

	${JAVA_HOME}/bin/java -classpath $CP -DEMDROOT=$EMDROOT oracle.sysman.emSDK.job.dtd.JobTypeHandler $XML_FILE $OUTFILENAME $DEBUG

	RET=$?

	if [ $RET -eq 0 ] && [ "$FILE_ONLY" = "false" ] ; then
	    # Add a QUIT directive to sqlplus so that it exits
            echo "QUIT" >>$OUTFILENAME

            echo "Committing type to database...."
            if [ "$REP_PWD" = "" ] ; then
                CONNECT_STR="   -L $REP_USER@$REP_ALIAS"
            else
                CONNECT_STR="-S -L $REP_USER/$REP_PWD@$REP_ALIAS"
            fi
            $ORACLE_HOME/bin/sqlplus $CONNECT_STR @$OUTFILENAME
            RET=$?

            if [ "$RET" = "0" ] ; then
                echo "Commit to database complete"
            else
                echo "Errors committing to database, exiting"
            fi
            exit $RET
        fi

        if [ "$FILE_ONLY" = "false" ] ; then
            rm -f $OUTFILENAME
        elif [ "$RET" = "0" ] ; then
            echo "Output file $OUTFILENAME saved successfully"
        else
            echo "Error saving output file"
        fi
    
    else

	echo "Committing type to database...."
        echo "- using jdbc connection"

	${JAVA_HOME}/bin/java -classpath $CP -DEMDROOT=$EMDROOT oracle.sysman.emSDK.job.dtd.JobTypeHandler $XML_FILE -jdbc $REP_USER $REP_PWD $REP_ALIAS $DEBUG
	RET=$?
        
	if [ "$RET" = "0" ] ; then
            echo "Commit to database complete"
        else
            echo "Errors committing to database, exiting"
        fi
	
	exit $RET
    fi
else
    if [ "$1" = "-help" ]
    then
        displayHelp "NONE" 2
    else
        displayHelp
    fi
fi

