#!/bin/bash

. ./param_bash.ini

PROMPT_FOR_RAC_STRING()
{
    echo ""
    echo "RAC Configuration"
    echo ""
    RAC_TNS_PRE="RAC.$ORACLE_SID="
    RAC_JDBC_PRE="jdbc:oracle:thin:@"
    INFORM "Enter RAC DB Connection String" 
    INFORM "Make sure to insert a correct String, it will used be to connect to the DB" 
    INFORM "Make Sure there are No Spaces in the String" 
    INFORM "This is an Example of the RAC Connection String:" 
    INFORM "(description=(address_list=(load_balance=on)(failover=on)(address=(protocol=tcp)(host=il-dtldb01-vip.corp.exlibrisgroup.com)(port=1521))(address=(protocol=tcp)(host=il-dtldb02-vip.corp.exlibrisgroup.com)(port=1521)))(connect_data=(server=dedicated)(service_name=dps)))"
    INFORM "If you don't know/have the requested String, please stop and contact your DBA" 
    CONFIRM
    if [ "$?" != "0" ] ; then
        CANCEL "Aborting RAC Tnsnames Configuration" "$0"
    else
        echo -n "Please Enter The String:" 
        read -n 999 ans
        RAC_TNS="${RAC_TNS_PRE}${ans}"
        RAC_JDBC="${RAC_JDBC_PRE}${ans}"
        Update_params "RAC_TNS" "\"${RAC_TNS}\""
        Update_params "RAC_JDBC" "\"${RAC_JDBC}\""
        echo "${RAC_TNS_PRE}${ans}" > $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID
    fi
}
ORAC="N"
FILL_ORA_INST_TYPE()
{    
    echo -n "Choose your Oracle Installation Type [ Remote, RAC ] : "
    read ORA_INST_TYPE
    if [ "${ORA_INST_TYPE}" != "Remote" -a "${ORA_INST_TYPE}" != "RAC" ] ; then
        ORA_INST_TYPE=""
    else
        Update_params "ORA_INST_TYPE" "${ORA_INST_TYPE}"
        export ORA_INST_TYPE
    fi
}

clear
test -s ${IKIT_DIR}/tmp/.dbcreation.pid
if [ "$?" = "0" ] ; then
        CANCEL "A pid file exist:${IKIT_DIR}/tmp/.dbcreation.pid, check if db creation step is running, if not delete the pid file and execute this step again" "$0"
fi
START "Create listener.ora and tnsnames.ora file" "$0"

if [ ! -w /etc/passwd ] && [ "~" = "$ORACLE_HOME" ] ; then
    ERROR "please run the script as $ORACLE_USER  user or root user" "$0"
fi

OracleUserExist
if [ "$?" = "1" ] ; then 
    ERROR "the $ORACLE_HOME user doesn't exist" "$0"
else 
    ORACLE_USER=`cat /etc/passwd | grep $ORACLE_HOME |tail -1 | awk -F: '{print $1}'` > /dev/null 2>&1
fi


SERVER_NAME=$(getent hosts $(hostname) | awk -F" " '{print $2}') > /dev/null 2>&1
if [ "$SERVER_NAME" = "" ] ; then
        echo -n "Please enter the full server hostname [sname.exlibrisgroup.com] : "
        read ans
        if [ "$ans" != "" ] ; then
                SERVER_NAME=$ans
        else
                ERROR "The full server hostname which was enterded is not valid" "$0"
        fi
        echo "The full server hostname that will be used for database configuration is ${SERVER_NAME}"
        echo -n "Proceed with installation? (y,n) [n] : "
        read ans
        if [ "$ans" != "y" ] ; then
                 CANCEL "" "$0"
        fi
fi
Update_params "SERVER_NAME" "${SERVER_NAME}"

echo -n "Insert Oracle SID, no longer than 8 characters [$ORACLE_SID] : "
read ans
if [ "$ans" != "" ] ; then	
	ORACLE_SID=$ans	
fi
 
if [ -d $ORACLE_BASE/admin/$ORACLE_SID ] ; then 
	ERROR "The database $ORACLE_SID already exist in the server" "$0"
fi

Update_params "ORACLE_SID" "${ORACLE_SID}"
 
#Create tnsnames.ora.$ORACLE_SID and listener.ora.$ORACLE_SID

if [ "$MODE" = "0" ] ; then
    echo -n "Please enter the name of the database [$ORACLE_SID] : "
    read ans
    if [ "$ans" != "" ] ; then	
            ORACLE_SID=$ans	
    fi 
fi
if [ "$INST_TYPE" = "SW_ONLY" ] ; then
    while [ "${ORA_INST_TYPE}" = "" ]
    do
        FILL_ORA_INST_TYPE
    done
    if [ "$ORA_INST_TYPE" = "RAC" ] ; then
        ORACLE_SERVER="RAC"
        ORAC="Y"
        Update_params "ORACLE_SERVER" "${ORACLE_SERVER}"
        Update_params "ORACLE_HOST" "${ORACLE_SERVER}"
    else
        echo -n "Enter the oracle server [$ORACLE_SERVER] : "
        read ans
        if [ "${ans}" != "" ] ; then
            ORACLE_SERVER=${ans}
            ORACLE_HOST=`echo $ORACLE_SERVER | awk -F. '{print $1}'`
            Update_params "ORACLE_SERVER" "${ORACLE_SERVER}"
            Update_params "ORACLE_HOST" "${ORACLE_HOST}"
        fi
    fi
fi

if [ ! -d $ORACLE_HOME/network/admin ] ; then 
    ERROR "The Oracle client software $ORACLE_HOME does not exist in the server" "$0"
fi

if [ "${ORA_INST_TYPE}" = "RAC" -o "${ORA_INST_TYPE}" = "Remote" ] ; then
    INFORM "Skipping listener configuration"
else
    cat listener.ora.tml | \
     sed -e "s:@ORACLE_HOME:$ORACLE_HOME:" | \
     sed -e "s:@ORACLE_SID:$ORACLE_SID:" | \
     sed -e "s:@HOST_ORA:$ORACLE_HOST:" \
     > $ORACLE_HOME/network/admin/listener.ora.$ORACLE_SID
    if [ ! -f $ORACLE_HOME/network/admin/listener.ora.$ORACLE_SID ] ; then
        ERROR "failed to create $ORACLE_HOME/network/admin/listener.ora.$ORACLE_SID file" "$0"
    fi
    chown $ORACLE_USER:$ORACLE_GROUP $ORACLE_HOME/network/admin/listener.ora.$ORACLE_SID 
fi

TNS_NAME=$ORACLE_HOST.$ORACLE_SID
SERVICE_NAMES=$ORACLE_SID.$ORACLE_SERVER

if [ "${ORA_INST_TYPE}" != "RAC" ] ; then
    cat tnsnames.ora.tml | \
      sed -e s:@ORACLE_SID:$ORACLE_SID: | \
      sed -e s:@TNS_NAME:$TNS_NAME: | \
      sed -e s:@SERVICE_NAMES:$SERVICE_NAMES: | \
      sed -e s:@HOST_ORA:$ORACLE_HOST: \
     > $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID
else
    PROMPT_FOR_RAC_STRING
fi
 
if [ ! -f $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID ] ; then
    ERROR "failed to create $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID file" "$0" 
fi
chown $ORACLE_USER:$ORACLE_GROUP $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID
#check if ORACLE_SID already found in the files
grep "${ORACLE_SID})" ${ORACLE_HOME}/network/admin/tnsnames.ora > /dev/null 2>&1
if [ $? = "0" ] ; then 
    echo "${ORACLE_SID} already exist in the tnsnames.ora file"
    echo "files: tnsnames.ora.$ORACLE_SID and listener.ora.$ORACLE_SID"
    echo "were created at $ORACLE_HOME/network/admin/"
    echo "cowardly refuse to configure them automatically"
    echo "configure them manually before continue with ikit"
    echo -n "Press enter to continue:"
    read
    exit 0
fi
#create tnsnames.ora file
if [ -f $ORACLE_HOME/network/admin/tnsnames.ora ] ; then
    cp -p $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora.$DD
    cat $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID >> $ORACLE_HOME/network/admin/tnsnames.ora
elif [ -f $ORACLE_BASE/product/102/network/admin/tnsnames.ora ] ; then
    cp -p $ORACLE_BASE/product/102/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
    cat $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID >> $ORACLE_HOME/network/admin/tnsnames.ora
elif [ -f $ORACLE_BASE/product/920/network/admin/tnsnames.ora ] ; then 
    cp -p $ORACLE_BASE/product/920/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.ora
    cat $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID >> $ORACLE_HOME/network/admin/tnsnames.ora
else
    cp -p $ORACLE_HOME/network/admin/tnsnames.ora.$ORACLE_SID $ORACLE_HOME/network/admin/tnsnames.ora
fi

if [ "${ORA_INST_TYPE}" != "RAC" -a "${ORA_INST_TYPE}" != "Remote" ] ; then
#create listener.ora
    if [ ! -f $ORACLE_HOME/network/admin/listener.ora ] ; then
        if [ ! -d $ORACLE_BASE/product/102 ] ; then
            cp -p $ORACLE_HOME/network/admin/listener.ora.$ORACLE_SID $ORACLE_HOME/network/admin/listener.ora
            DONE "The Oracle network files(listener.ora and tnsnames.ora) are created properly" "$0" 		
        else
            cp -p $ORACLE_BASE/product/102/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora
            cp -p $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora.$DD
        fi
    else
        cp -p $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.ora.$DD
    fi
#########################################################################################
    lis_str1="(address="
    lis_str2="(protocol=ipc)"
    lis_str3="(key=${ORACLE_SID}))"
    lis_str2_1="(global_name=${ORACLE_SID}.${ORACLE_SERVER})"
    lis_str2_2="(sid_name=$ORACLE_SID)"
    lis_str2_3="(oracle_home=${ORACLE_HOME})" 
    lis_str2_4=")"

    cat $ORACLE_HOME/network/admin/listener.ora | sed -e 's:(address_list=:(address_list=\
                            (address=\
                                    (protocol=ipc)\
                                    '$lis_str3':' > $ORACLE_HOME/network/admin/listener.ora.tmp1

    chown $ORACLE_USER:$ORACLE_GROUP $ORACLE_HOME/network/admin/listener.ora.tmp1

    cat $ORACLE_HOME/network/admin/listener.ora.tmp1 | sed -e 's:sid_list_listener=(sid_list=:sid_list_listener=(sid_list=\
                            (sid_desc=\
                                    '$lis_str2_1'\
                                    '$lis_str2_2'\
                                    '$lis_str2_3'\
                            '$lis_str2_4':' > $ORACLE_HOME/network/admin/listener.ora.tmp2
    chown $ORACLE_USER:$ORACLE_GROUP $ORACLE_HOME/network/admin/listener.ora.tmp2
#########################################################################################
    cp -p $ORACLE_HOME/network/admin/listener.ora.tmp2 $ORACLE_HOME/network/admin/listener.ora
    chown $ORACLE_USER:$ORACLE_GROUP $ORACLE_HOME/network/admin/listener.ora
    rm -f $ORACLE_HOME/network/admin/listener.ora.tmp1
    rm -f $ORACLE_HOME/network/admin/listener.ora.tmp2
    DONE "The Oracle network files(listener.ora and tnsnames.ora) are created properly" "$0" 
else
    DONE "The Oracle network files(listener.ora and tnsnames.ora) are created properly" "$0"
fi
