:: ============LICENSE_START=======================================================
::  Copyright (C) 2016-2018 Ericsson. All rights reserved.
:: ================================================================================
:: Licensed under the Apache License, Version 2.0 (the "License");
:: you may not use this file except in compliance with the License.
:: You may obtain a copy of the License at
:: 
::      http://www.apache.org/licenses/LICENSE-2.0
:: 
:: Unless required by applicable law or agreed to in writing, software
:: distributed under the License is distributed on an "AS IS" BASIS,
:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
:: See the License for the specific language governing permissions and
:: limitations under the License.
:: 
:: SPDX-License-Identifier: Apache-2.0
:: ============LICENSE_END=========================================================

::
:: Script to run APEX Applications, call with '-h' for help
:: - adding a new app means to add a command to APEX_APP_MAP and a description to APEX_APP_DESCR_MAP using same/unique key
::
:: @package    org.onap.policy.apex
:: @author     Sven van der Meer <sven.van.der.meer@ericsson.com>
:: @version    v2.0.0

::
:: DO NOT CHANGE CODE BELOW, unless you know what you are doing
::

@echo off
setlocal enableDelayedExpansion


if defined APEX_HOME (
    if exist "%APEX_HOME%\" (
        set _dummy=dir
    ) else (
        echo[
        echo Apex directory 'APEX_HOME' not a directory
        echo Please set environment for 'APEX_HOME'
        echo[
        exit /b
    )
) else (
    echo[
    echo Apex directory 'APEX_HOME' not set
    echo Please set environment for 'APEX_HOME'
    echo[
    exit /b
)

:: Environment variables for HTTPS
set KEYSTORE=%APEX_HOME%/etc/ssl/policy-keystore"
set KEYSTORE_PASSWD="Pol1cy_0nap"
set TRUSTSTORE=%APEX_HOME%/etc/ssl/policy-truststore"
set TRUSTSTORE_PASSWD="Pol1cy_0nap"

:: HTTPS parameters
set HTTPS_PARAMETERS=-Djavax.net.ssl.keyStore=%KEYSTORE% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWD% -Djavax.net.ssl.trustStore=%TRUSTSTORE% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWD%

:: script name for output
set MOD_SCRIPT_NAME=apexApps

:: config for CP apps
SET _CONFIG=%HTTPS_PARAMETERS% -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -Dhazelcast.config=%APEX_HOME%\etc\hazelcast.xml -Dhazelcast.mancenter.enabled=false

:: Maven/APEX version
set /p _VERSION=<%APEX_HOME%\etc\app-version.txt


:: CP separator
set cpsep=;


:: CP for CP apps
set CLASSPATH=%APEX_HOME%\etc%cpsep%%APEX_HOME%\etc\hazelcast%cpsep%%APEX_HOME%\etc\infinispan%cpsep%%APEX_HOME%\lib\*


:: array of applications with name=command
:: declare -A APEX_APP_MAP
set APEX_APP_MAP[ws-console]=java -jar %APEX_HOME%\lib\applications\simple-wsclient-%_VERSION%-jar-with-dependencies.jar -c
set APEX_APP_MAP[ws-echo]=java -jar %APEX_HOME%\lib\applications\simple-wsclient-%_VERSION%-jar-with-dependencies.jar
set APEX_APP_MAP[tpl-event-json]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.tools.model.generator.model2event.Model2EventMain
set APEX_APP_MAP[model-2-cli]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.tools.model.generator.model2cli.Model2CliMain
set APEX_APP_MAP[rest-editor]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-editor-%_VERSION%-editor.jar
set APEX_APP_MAP[cli-editor]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.auth.clieditor.ApexCommandLineEditorMain
set APEX_APP_MAP[engine]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.service.engine.main.ApexMain
set APEX_APP_MAP[eng-deployment]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-deployment-%_VERSION%-deployment.jar
set APEX_APP_MAP[eng-monitoring]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-monitoring-%_VERSION%-monitoring.jar
set APEX_APP_MAP[full-client]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -jar %APEX_HOME%\lib\applications\client-full-%_VERSION%-full.jar
set APEX_APP_MAP[event-generator]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.testsuites.performance.benchmark.eventgenerator.EventGenerator
set APEX_APP_MAP[onappf]=java -Dlogback.configurationFile=%APEX_HOME%\etc\logback.xml -cp %CLASSPATH% %_CONFIG% org.onap.policy.apex.services.onappf.ApexStarterMain

:: array of applications with name=description
:: declare -A APEX_APP_DESCR_MAP
set APEX_APP_DESCR_MAP[ws-console]=a simple console sending events to APEX, connect to APEX consumer port
set APEX_APP_DESCR_MAP[ws-echo]=a simple echo client printing events received from APEX, connect to APEX producer port
set APEX_APP_DESCR_MAP[tpl-event-json]=provides JSON templates for events generated from a policy model
set APEX_APP_DESCR_MAP[model-2-cli]=generates CLI Editor Commands from a policy model
set APEX_APP_DESCR_MAP[rest-editor]=starts the APEX REST Editor inside a simple webserver
set APEX_APP_DESCR_MAP[cli-editor]=runs the APEX CLI Editor
set APEX_APP_DESCR_MAP[engine]=starts the APEX engine
set APEX_APP_DESCR_MAP[eng-deployment]=starts the APEX deployment client in a simple webserver
set APEX_APP_DESCR_MAP[eng-monitoring]=starts the APEX engine monitoring client in a simple webserver
set APEX_APP_DESCR_MAP[full-client]=starts the full APEX client (rest editor, deployment, monitoring) in a simple webserver
set APEX_APP_DESCR_MAP["event-generator"]=starts the event generator in a simple webserver for performance testing
set APEX_APP_DESCR_MAP[onappf]=starts the ApexStarter which handles the Apex Engine based on instructions from PAP

:: no command line means help, -h means help
if "%1" == "" goto Help
if "%1" == "-h" goto Help

:: -l means list
if "%1" == "-l" goto ListApps

:: -d means describe
if "%1" == "-d" goto DescribeApp


::
:: ok, we need to look for an application, should be in %1
::
set _APP=%1

set _CMD=!APEX_APP_MAP[%_APP%]!
if "!_CMD!" == "" (
    echo %MOD_SCRIPT_NAME%: : application '%_APP%' not supported
    echo[
    exit /b
)

for /f "tokens=1,* delims= " %%a in ("%*") do set ACTUAL_CLI=%%b
set _CMD_RUN=%_CMD% %ACTUAL_CLI%
:: echo %MOD_SCRIPT_NAME%: running application %_APP%' with command '%_CMD_RUN%'
%_CMD_RUN%
exit /b


::
:: Help screen and exit condition (i.e. too few arguments)
::
:Help
echo[
echo %MOD_SCRIPT_NAME% - runs APEX applications
echo[
echo        Usage:  %MOD_SCRIPT_NAME% [options] ^| [^<application^> [^<application options^>]]
echo[
echo        Options
echo          -d ^<app^>    - describes an application
echo          -l          - lists all applications supported by this script
echo          -h          - this help screen
echo[
echo[
exit /b



::
:: List applications
::
:ListApps
echo[
echo %MOD_SCRIPT_NAME%: supported applications:
for /F "tokens=2,3 delims=[]=" %%a in ('set APEX_APP_MAP') do (
    echo --^> %%a
)
echo[
exit /b


::
:: Describe an application
::
:DescribeApp
if "%2" == "" (
    echo %MOD_SCRIPT_NAME%: : supported applications:
    for /F "tokens=2,3 delims=[]=" %%a in ('set APEX_APP_MAP') do (
        echo --^> %%a
    )
    echo[
    exit /b
)
set _CMD=!APEX_APP_DESCR_MAP[%2%]!
if "%_CMD%" == "" (
    echo %MOD_SCRIPT_NAME%: : unknown application '%2%'
    echo[
    exit /b
)
echo %MOD_SCRIPT_NAME%: : application '%2%'
echo --^> %_CMD%
echo[
exit /b