#!/bin/sh
#
# Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

# This script creates and starts a domain called "sqe-domain"
# with a single server instance named "sqe-server".

#--- Extract environment properties --- "sed" doesn't work with iastools.zip used in windows

PASSWORD_FILE=${APS_HOME}/devtests/connector/config/password.txt

for x in `cat $APS_HOME/devtests/connector/config/ee-config.properties`
do
    varval=`echo $x |cut -d'=' -f1`

    if [ $varval = "admin.user" ];
    then
        AS_ADMIN_USER=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "admin.port" ];
    then
        AS_ADMIN_PORT=`echo $x |cut -d'=' -f2`
    fi
    
    if [ $varval = "admin.host" ];
    then
        AS_ADMIN_HOST=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "orb.port" ];
    then
        ORB_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "http.port" ];
    then
        HTTP_LISTENER_1_PORT=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "https.port" ];
    then
        SSL_PORT=`echo $x |cut -d'=' -f2`
    fi
    
    if [ $varval = "admin.password" ];
    then
        echo "AS_ADMIN_PASSWORD=`echo $x |cut -d'=' -f2`" > ${PASSWORD_FILE} 
        echo "AS_ADMIN_ADMINPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE} 
    fi

    if [ $varval = "master.password" ];
    then
        echo "AS_ADMIN_MASTERPASSWORD=`echo $x |cut -d'=' -f2`" >> ${PASSWORD_FILE}
    fi

    if [ $varval = "admin.domain" ];
    then
        AS_ADMIN_DOMAIN=`echo $x |cut -d'=' -f2`
    fi
    if [ $varval = "nodeagent.name" ];
    then
        AS_ADMIN_NODEAGENT=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "server.instance.name" ];
    then
        AS_ADMIN_SERVER=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "cluster.name" ];
    then
        CLUSTER_NAME=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "clustered.instance.name" ];
    then
        CLUSTERED_INSTANCE_NAME=`echo $x |cut -d'=' -f2`
    fi

    if [ $varval = "install.type" ];
    then
        INSTALL_TYPE=`echo $x |cut -d'=' -f2`
    fi

done

ASADMIN=${S1AS_HOME}/bin/asadmin
HTTP_LISTENER_2_PORT="1042"
SSL_MUTUALAUTH_PORT="1058"
JMX_SYSTEM_CONNECTOR_PORT="8687"

export AS_ADMIN_USER
#export AS_ADMIN_PASSWORD ## do not set AS_ADMIN_PASSWORD in env. -password option is deprecated. 
export AS_ADMIN_PORT
export AS_ADMIN_HOST
export AS_ADMIN_DOMAIN
export AS_ADMIN_NODEAGENT
export AS_ADMIN_SERVER
export CLUSTER_NAME
export CLUSTERED_INSTANCE_NAME

##----- End Variable Defintions --------------



#Create domain: sqe-domain----
echo "               EESETUP: creating domain ${AS_ADMIN_DOMAIN}..."
${ASADMIN} create-domain --adminport ${AS_ADMIN_PORT} --adminuser ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_DOMAIN}

# Start domain: sqe-domain----
echo "               EESETUP: starting domain ${AS_ADMIN_DOMAIN}..."
${ASADMIN} start-domain --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_DOMAIN}

# Create node agent (sqe-agent) referencing sqe-domain.----
echo "               EESETUP: creating node agent: ${AS_ADMIN_NODEAGENT}..."
${ASADMIN} create-node-agent --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_NODEAGENT}

#----Start the sqe-agent. ----
echo "               EESETUP: starting node agent: ${AS_ADMIN_NODEAGENT}..."
${ASADMIN} start-node-agent --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} ${AS_ADMIN_NODEAGENT}

echo "               EESETUP: INSTALL TYPE is set to :${INSTALL_TYPE}"
#echo "               EESETUP: install.type value in config.properties needs to be one of [standalone | cluster]"

if [ ${INSTALL_TYPE} = "standalone" ]; then
#  ----------------
    # Create server instance: sqe-server----
    echo "               EESETUP: creating sever instance:${AS_ADMIN_SERVER}..."
    ${ASADMIN} create-instance \
        --user ${AS_ADMIN_USER} \
        --passwordfile ${PASSWORD_FILE} \
        --nodeagent ${AS_ADMIN_NODEAGENT} \
        ${AS_ADMIN_SERVER}

    ${ASADMIN} start-instance \
        --user ${AS_ADMIN_USER} \
        --passwordfile ${PASSWORD_FILE} \
        ${AS_ADMIN_SERVER}
fi

if [ ${INSTALL_TYPE} = "cluster" ]; then
#  ----------------
    # Create cluster: sqe-cluster----
    echo "               EESETUP: creating cluster:${CLUSTER_NAME}..."
    ${ASADMIN} create-cluster --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} ${CLUSTER_NAME}

    # Set ports for first instance 
    echo "               EESETUP: using default ports in ee-config.properties for first instance..."
        HTTP_LISTENER_1_PORT=`expr ${HTTP_LISTENER_1_PORT} `
        HTTP_LISTENER_2_PORT=`expr ${HTTP_LISTENER_2_PORT} `
        ORB_LISTENER_1_PORT=`expr ${ORB_LISTENER_1_PORT} `
        SSL_PORT=`expr ${SSL_PORT} `
        SSL_MUTUALAUTH_PORT=`expr ${SSL_MUTUALAUTH_PORT} `
        JMX_SYSTEM_CONNECTOR_PORT=`expr ${JMX_SYSTEM_CONNECTOR_PORT} `

    # Create clustered instance: clustered-server----
    echo "               EESETUP: creating server instance:${CLUSTERED_INSTANCE_NAME}_1..."
    ${ASADMIN} create-instance \
        --nodeagent ${AS_ADMIN_NODEAGENT} \
        --cluster ${CLUSTER_NAME} \
        --systemproperties "HTTP_LISTENER_PORT=${HTTP_LISTENER_1_PORT}:HTTP_SSL_LISTENER_PORT=${HTTP_LISTENER_2_PORT}:IIOP_LISTENER_PORT=${ORB_LISTENER_1_PORT}:IIOP_SSL_LISTENER_PORT=${SSL_PORT}:IIOP_SSL_MUTUALAUTH_PORT=${SSL_MUTUALAUTH_PORT}:JMX_SYSTEM_CONNECTOR_PORT=${JMX_SYSTEM_CONNECTOR_PORT}" \
        --user ${AS_ADMIN_USER} \
	--passwordfile ${PASSWORD_FILE} \
    ${CLUSTERED_INSTANCE_NAME}_1

    # Roll over ports ----------------
    echo "               EESETUP: Rolling over default port values by 4."
        HTTP_LISTENER_1_PORT=`expr ${HTTP_LISTENER_1_PORT} + 4`
        HTTP_LISTENER_2_PORT=`expr ${HTTP_LISTENER_2_PORT} + 4`
        ORB_LISTENER_1_PORT=`expr ${ORB_LISTENER_1_PORT} + 4`
        SSL_PORT=`expr ${SSL_PORT} + 4`
        SSL_MUTUALAUTH_PORT=`expr ${SSL_MUTUALAUTH_PORT} + 4`
        JMX_SYSTEM_CONNECTOR_PORT=`expr ${JMX_SYSTEM_CONNECTOR_PORT} + 4`

    # Create clustered instance: clustered-server----
    echo "               EESETUP: creating server instance:${CLUSTERED_INSTANCE_NAME}_2..."
    ${ASADMIN} create-instance \
        --nodeagent ${AS_ADMIN_NODEAGENT} \
        --cluster ${CLUSTER_NAME} \
        --systemproperties "HTTP_LISTENER_PORT=${HTTP_LISTENER_1_PORT}:HTTP_SSL_LISTENER_PORT=${HTTP_LISTENER_2_PORT}:IIOP_LISTENER_PORT=${ORB_LISTENER_1_PORT}:IIOP_SSL_LISTENER_PORT=${SSL_PORT}:IIOP_SSL_MUTUALAUTH_PORT=${SSL_MUTUALAUTH_PORT}:JMX_SYSTEM_CONNECTOR_PORT=${JMX_SYSTEM_CONNECTOR_PORT}" \
        --user ${AS_ADMIN_USER} \
	--passwordfile ${PASSWORD_FILE} \
    ${CLUSTERED_INSTANCE_NAME}_2
    #-- END Cluster Setup--------------------------

    # Start cluster: sqe-cluster----
    echo "               EESETUP: Starting cluster:${CLUSTER_NAME}..."
    ${ASADMIN} start-cluster --user ${AS_ADMIN_USER} --passwordfile ${PASSWORD_FILE} --host ${AS_ADMIN_HOST} --port ${AS_ADMIN_PORT} ${CLUSTER_NAME}

fi

rm -f $PASSWORD_FILE
echo "               EESETUP: EE setup complete!"

# ---------  Notes. ------------

#NOTE: There is an unstated jmx port 8686 which is 
# currently not configurable. This port will need to be specified 
# when creating the node agent.

#NOTE: The domain should be up an running when the node agent is started. 

#NOTE: The stop-nodeagent command currently does
# not function due to a bug so should you ever need to stop the node
# agent you must kill its process. In reality you should never need 
# to stop the node agent once it is started.

#NOTE: The ports by default will not conflict with those of the DAS. 
#The http-listener port will default to 8079. 


