@echo off

Rem **************************************************************************
Rem Create the restart script
Rem **************************************************************************
set SRVARG_RESUME=-srvarg=/SDTExecutionService/resume=true
echo %~f0 %*
echo %~f0 %* %SRVARG_RESUME% > restart_slc.bat

Rem **************************************************************************
Rem Test if CMD Extensions are available
Rem **************************************************************************
verify other 2>nul
setlocal enableextensions
if errorlevel 1 (
  if not "%SERVERSTARTED%" == "1" (
    set SERVERSTARTED=1
    goto restartext
  )
)

Rem **************************************************************************
Rem Check if the first parameter is sapjvm="<path>"
Rem **************************************************************************
if %1==sapjvm (
  set JAVA_HOME=%2
)else (
  echo WARNING: No sapjvm path in command, try to use JAVA_HOME.
)

Rem **************************************************************************
Rem Check if the second parameter is debug="true"
Rem **************************************************************************
if %3==debug (
  set DEBUG=true
  echo Starting SL Controller in debug mode
)else (
  set DEBUG=false
  echo Starting SL Controller in normal mode
)

Rem **************************************************************************
Rem Determine java executable
Rem **************************************************************************
if DEFINED JAVA_HOME (
  set JAVA_CMD="%JAVA_HOME%\bin\java"
  echo Using JDK %JAVA_HOME%.
) else (
  echo WARNING: Environment variable JAVA_HOME not set, try to launch java from current PATH.
  set JAVA_CMD=java
)

Rem **************************************************************************
Rem Set extra parameters for the Java virtual machine
Rem **************************************************************************
Rem Set maximum heap size:
set JAVA_CMD=%JAVA_CMD% -Xmx256m

Rem Create heap dump on out of memory error:
Rem This option is not supported by all JVM versions
Rem Uncomment only if needed and the JVM used supports the -XX:+HeapDumpOnOutOfMemoryError option 
Rem set JAVA_CMD=%JAVA_CMD% -XX:+HeapDumpOnOutOfMemoryError

Rem **************************************************************************
Rem We are coming from work-dir of sapstart - take care about trex difference
Rem **************************************************************************

cd ..\..
cd SYS

if %ERRORLEVEL%==1 (
  cd ..
  set IS_TREX_START=1
  echo Starting SL Controller from working directory of a TREX instance
) else (
  set IS_TREX_START=0
  echo Starting SL Controller from working directory of an ABAP or JAVA instance
)

if %IS_TREX_START%==1 (
  set SDTSERVER_HOME=%CD%\SYS\global\SDT
) else (
  set SDTSERVER_HOME=%CD%\global\SDT
)

Rem **************************************************************************
Rem change to root directory of SDTServer and delete old jar lib\sdt_server.jar
Rem **************************************************************************
cd %SDTSERVER_HOME%  && DEL /F /Q  lib\sdt_server.jar

set SDTSERVER_CLASSPATH=%SDTSERVER_HOME%\lib\sdt_compatibility.jar
set SDTSERVER_CLASSPATH=%SDTSERVER_CLASSPATH%;%SDTSERVER_HOME%\lib\sdt_slctrl.jar
set SDTSERVER_CLASSPATH=%SDTSERVER_CLASSPATH%;%SDTSERVER_HOME%\lib\sdt_mxp.jar

set SRVARG=-srvarg=/SDTExecutionService/restart
set RESTART_OPT=%SRVARG%=false

:restartloop
if %DEBUG% == false (
%JAVA_CMD% -cp %SDTSERVER_CLASSPATH% SDTServer rootdir=%SDTSERVER_HOME% %RESTART_OPT% %*
) else (
%JAVA_CMD% -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -cp %SDTSERVER_CLASSPATH% SDTServer rootdir=%SDTSERVER_HOME% %RESTART_OPT% %*
)
set RETCODE=%ERRORLEVEL%
if %RETCODE% == 42 goto selfpatch
goto exit

:selfpatch
rename exe\slmLaunchSDTServer2.bat exe\slmLaunchSDTServer2_old.bat
call SAPCAR.EXE -xvf LUP.SAR
set RETCODE=%ERRORLEVEL%
if NOT %RETCODE% == 0 (
  echo ERROR: SDTServer self patch failed with rc=%RETCODE%
  goto exit
)
set RESTART_OPT=%SRVARG%=true 
goto restartloop

Rem **************************************************************************
:restartext
echo *** Restarting script enabling CMD extensions
cmd /E:ON /C call %0 %*
goto exit

:exit
