@ECHO OFF
::-------------------------------------------------------------
::
:: Licensed to the Apache Software Foundation (ASF) under one
:: or more contributor license agreements.  See the NOTICE file
:: distributed with this work for additional information
:: regarding copyright ownership.  The ASF licenses this file
:: to you 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.
::
::-------------------------------------------------------------

echo ================================================================================

IF "%~1" == ""      GOTO Err
IF "%~1" == "-help" GOTO Msg
IF "%~1" == "-h"    GOTO Msg

setLocal EnableDelayedExpansion

SET USER_DIR=%CD%

pushd %~dp0..
SET PROJECT_ROOT_DIR=%CD%
popd

SET BUILD_DIR=%PROJECT_ROOT_DIR%\target
SET HADOOP_LIB_DIR=%BUILD_DIR%\lib
SET DML_SCRIPT_CLASS=%BUILD_DIR%\classes\org\apache\sysml\api\DMLScript.class

SET BUILD_ERR_MSG=You must build the project before running this script.
SET BUILD_DIR_ERR_MSG=Could not find target directory "%BUILD_DIR%". %BUILD_ERR_MSG%
SET HADOOP_LIB_ERR_MSG=Could not find required libraries "%HADOOP_LIB_DIR%\*". %BUILD_ERR_MSG%
SET DML_SCRIPT_ERR_MSG=Could not find "%DML_SCRIPT_CLASS%". %BUILD_ERR_MSG%

:: check if the project had been built and the jar files exist
IF NOT EXIST "%BUILD_DIR%"        ( echo %BUILD_DIR_ERR_MSG%  & GOTO ExitErr )
IF NOT EXIST "%HADOOP_LIB_DIR%"   ( echo %HADOOP_LIB_ERR_MSG% & GOTO ExitErr )
IF NOT EXIST "%DML_SCRIPT_CLASS%" ( echo %DML_SCRIPT_ERR_MSG% & GOTO ExitErr )


:: if the present working directory is the project root or the bin folder, then use the temp folder as user.dir
IF "%USER_DIR%" == "%PROJECT_ROOT_DIR%" (
  SET USER_DIR=%PROJECT_ROOT_DIR%\temp
  ECHO Output dir: "!USER_DIR!"
)
IF "%USER_DIR%" == "%PROJECT_ROOT_DIR%\bin" (
  SET USER_DIR=%PROJECT_ROOT_DIR%\temp
  ECHO Output dir: "!USER_DIR!"
)


:: if the SystemML-config.xml does not exist, create it from the template
IF NOT EXIST "%PROJECT_ROOT_DIR%\conf\SystemML-config.xml" (
  copy "%PROJECT_ROOT_DIR%\conf\SystemML-config.xml.template" ^
       "%PROJECT_ROOT_DIR%\conf\SystemML-config.xml" > nul
  echo ...created "%PROJECT_ROOT_DIR%\conf\SystemML-config.xml"
)

:: if the log4j.properties do not exis, create them from the template
IF NOT EXIST "%PROJECT_ROOT_DIR%\conf\log4j.properties" (
  copy "%PROJECT_ROOT_DIR%\conf\log4j.properties.template" ^
       "%PROJECT_ROOT_DIR%\conf\log4j.properties" > nul
  echo ...created "%PROJECT_ROOT_DIR%\conf\log4j.properties"
)

SET SCRIPT_FILE=%1

:: if the script file path was omitted, try to complete the script path
IF NOT EXIST %SCRIPT_FILE% (
  FOR /R "%PROJECT_ROOT_DIR%" %%f IN (%SCRIPT_FILE%) DO IF EXIST %%f ( SET "SCRIPT_FILE_FOUND=%%f" )
)

IF NOT EXIST %SCRIPT_FILE% IF NOT DEFINED SCRIPT_FILE_FOUND (
  echo Could not find DML script: "%SCRIPT_FILE%"
  GOTO Err
) ELSE (
  SET SCRIPT_FILE="%SCRIPT_FILE_FOUND%"
  echo DML script: "%SCRIPT_FILE_FOUND%"
)


:: the hadoop winutils
SET HADOOP_HOME=%PROJECT_ROOT_DIR%\target\lib\hadoop

:: add dependent libraries to classpath (since Java 1.6 we can use wildcards)
set CLASSPATH=%PROJECT_ROOT_DIR%\target\lib\*

:: add compiled SystemML classes to classpath
set CLASSPATH=%CLASSPATH%;%PROJECT_ROOT_DIR%\target\classes


:: remove the DML script file from the list of arguments
:: allow for dml script path with spaces, enclosed in quotes
rem for /f "tokens=1,* delims= " %%a in ("%*") do set DML_OPT_ARGS=%%b
rem for /f tokens^=1^,*^ delims^=^" %%a in ("%*") do set DML_OPT_ARGS=%%b
set ARGS=%*
set DML_OPT_ARGS=!ARGS:%1 =!

echo ================================================================================

:: construct the java command with options and arguments
set CMD=java -Xmx4g -Xms2g -Xmn400m ^
     -cp "%CLASSPATH%" ^
     -Dlog4j.configuration=file:"%PROJECT_ROOT_DIR%\conf\log4j.properties" ^
     -Duser.dir="%USER_DIR%" ^
     org.apache.sysml.api.DMLScript ^
     -f %SCRIPT_FILE% ^
     -exec singlenode ^
     -config "%PROJECT_ROOT_DIR%\conf\SystemML-config.xml" ^
     %DML_OPT_ARGS%

:: execute the java command
%CMD%

:: if there was an error, display the full java command (in case some of the variable substitutions broke it)
IF  ERRORLEVEL 1 (
  ECHO Failed to run SystemML. Exit code: %ERRORLEVEL%
  SET LF=^


  :: keep empty lines above for the line breaks
  ECHO %CMD:      =!LF!     %
  EXIT /B %ERRORLEVEL%
)
GOTO End

:Err
ECHO Wrong Usage. Please provide DML filename to be executed.
GOTO Msg

:Msg
ECHO Usage: runStandaloneSystemML.bat ^<dml-filename^> [arguments] [-help]
ECHO Script internally invokes 'java -Xmx4g -Xms4g -Xmn400m -jar jSystemML.jar -f ^<dml-filename^> -exec singlenode -config SystemML-config.xml [Optional-Arguments]'
GOTO ExitErr

:ExitErr
EXIT /B 1

:End
EXIT /B 0
