@echo off

rem ====================================================================================================
rem JRE_Downloader - v27 / RINEARN 2022
rem ====================================================================================================

rem 処理終了後に環境変数やカレントディレクトリが元に戻るようにローカル化
setlocal ENABLEDELAYEDEXPANSION

rem カレントディレクトリをこのバッチファイルの場所へ移動
cd /d "%~dp0"



set JRE_PATH_SETTING_FILE=.\JRE_Path_Setting.txt
set CURRENT_JRE_PATH=


rem ====================================================================================================
rem 初回ダウンロードかアップデートかの確認
rem ====================================================================================================

rem JREが既にダウンロード済みかを確認するため、まずパス設定ファイルの存在を確認
if exist "%JRE_PATH_SETTING_FILE%" (
	goto CHECK_JRE_PATH
) else (
	rem 存在しなければ、まだダウンロードされていないと見なして、ダウンロード処理へ
	goto FIRST_DOWNLOAD
)
rem パス設定ファイルが存在する場合は、その中で指定されているJREが本当に存在するかを確認
:CHECK_JRE_PATH
for /F "delims=" %%a in (%JRE_PATH_SETTING_FILE%) do (
	set CURRENT_JRE_PATH=%%a
)
rem 指定されているJREが存在すれば、「--update」オプションが付いている場合はアップデートの処理を実行、それ以外は終了
if exist "%CURRENT_JRE_PATH%" (
	if "%1" == "--update" (
		goto UPDATE
	) else (
		goto END
	)
rem 指定されているJREが存在すれば、初回ダウンロードの処理を実行
) else (
	goto FIRST_DOWNLOAD
)


rem ====================================================================================================
rem 初回ダウンロードの場合
rem ====================================================================================================

:FIRST_DOWNLOAD

echo.
echo ようこそ！
echo.
java -version 2> NUL
if %ERRORLEVEL%==0 (
	echo ご使用のPCには、既にJava^(R^)言語のプログラムの実行環境（JRE）が存在します。
	echo 一方、このソフトウェアの実行用に別のJREをダウンロードして使用する事もできます。
) else (
	echo このソフトの動作には、Java^(R^)言語のプログラムの実行環境（JRE）が必要です。
)
echo このまま「Enter」を押すと、実行環境を入手できます（一度行えば、以降はすぐに使用できます）。
echo.
echo    ※ 実行環境は「 https://download.rinearn.com/jre/ 」からダウンロードされ、
echo       このソフトの「jre」フォルダ内に配置されます。PC全体や他のソフトには影響しません。
echo       上記ページから手動で導入する事も可能です。
echo.
echo    ※ 実行環境はOpenJDKで生成されたもので、ライセンスは「クラスパス例外条項付きGPL version 2」です。
echo       （ ライセンスの詳細内容: https://openjdk.java.net/legal/gplv2+ce.html ）
echo       ダウンロードされる実行環境は、上記ライセンス下で無償で使用できますが、
echo       無保証であり、開発元/配布元は一切の責任を負担しない事を、あらかじめご了承ください。
echo       なお、ご希望の場合、同じ場所から同バージョンのOpenJDKのソースコードも入手できます。
echo.
echo    ※ OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における
echo       登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
echo.
echo 実行環境をダウンロード（ 無償 ）して使用しますか？
set /p pushKey="（Yes ならそのまま Enter か y を入力, No なら n を入力）:"

if "%pushKey%"=="" (
	goto DOWNLOAD
) else if "%pushKey%"=="y" (
	goto DOWNLOAD
) else if "%pushKey%"=="yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="Yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="n" (
	goto END
) else if "%pushKey%"=="no" (
	goto END
) else if "%pushKey%"=="No" (
	goto END
)
goto END


rem ====================================================================================================
rem アップデートの場合
rem ====================================================================================================

:UPDATE

echo.
echo.
echo このソフトウェアの「jre」フォルダ内には、既に以前に入手したJREが存在します。
echo RINEARNの公式なウェブサイト「 https://download.rinearn.com/jre/ 」において、
echo より新しいバージョンが配布されているかもしれません。確認しますか？
echo.
echo    ※ 確認は、上記ウェブサイトの「latest_w64.txt」から最新版のファイル名を取得し、
echo       それを現在「jre」フォルダ内にあるJREと比較する事で行われます。
echo       このコンピュータ内のファイルなどの情報が送信される事はありません。
echo.
set /p pushKey="（Yes ならそのまま Enter か y を入力, No なら n を入力）:"

if "%pushKey%"=="" (
	goto COMPARE_CURRENT_AND_LATEST
) else if "%pushKey%"=="y" (
	goto COMPARE_CURRENT_AND_LATEST
) else if "%pushKey%"=="yes" (
	goto COMPARE_CURRENT_AND_LATEST
) else if "%pushKey%"=="Yes" (
	goto COMPARE_CURRENT_AND_LATEST
) else if "%pushKey%"=="n" (
	goto END
) else if "%pushKey%"=="no" (
	goto END
) else if "%pushKey%"=="No" (
	goto END
)
goto END


: COMPARE_CURRENT_AND_LATEST
echo 最新版のファイル名を取得します...

bitsadmin /transfer download_jre_name "https://download.rinearn.com/jre/latest_w64.txt" "%CD%\latest_w64.txt"
set LATEST_JRE_NAME=
for /F "delims=" %%a in (.\latest_w64.txt) do (
	set LATEST_JRE_NAME=%%a
)

if not "%CURRENT_JRE_PATH%"=="%LATEST_JRE_NAME%\%LATEST_JRE_NAME%\jre\bin" (
	goto UPDATE_AVAILABLE
)

cls
echo.
echo 現在「jre」フォルダ内にあるJREは、既に最新版です。
echo JREの導入処理が正常に完了していた場合は、処理をここで終了してください。
echo.
echo ただし、導入に失敗して正しく動作しないなどの場合は、
echo 再び最新版をダウンロードして導入する事もできます。
echo 再びダウンロードして導入しますか？
echo.
set /p pushKey="（再ダウンロードならそのまま Enter か y を入力, ここで終了するなら n を入力）:"

if "%pushKey%"=="" (
	goto DOWNLOAD
) else if "%pushKey%"=="y" (
	goto DOWNLOAD
) else if "%pushKey%"=="yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="Yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="n" (
	goto END
) else if "%pushKey%"=="no" (
	goto END
) else if "%pushKey%"=="No" (
	goto END
)
goto END


: UPDATE_AVAILABLE

echo.
echo.
echo 現在「jre」フォルダ内にある実行環境（JRE）は、最新版に更新可能です。
echo.
echo    ※ 実行環境は「 https://download.rinearn.com/jre/ 」からダウンロードされ、
echo       このソフトの「jre」フォルダ内に配置されます。PC全体や他のソフトには影響しません。
echo       上記ページから手動で導入する事も可能です。
echo.
echo    ※ 実行環境はOpenJDKで生成されたもので、ライセンスは「クラスパス例外条項付きGPL version 2」です。
echo       （ ライセンスの詳細内容: https://openjdk.java.net/legal/gplv2+ce.html ）
echo       ダウンロードされる実行環境は、上記ライセンス下で無償で使用できますが、
echo       無保証であり、開発元/配布元は一切の責任を負担しない事を、あらかじめご了承ください。
echo       なお、ご希望の場合、同じ場所から同バージョンのOpenJDKのソースコードも入手できます。
echo.
echo    ※ OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における
echo       登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。
echo.
echo 実行環境を更新しますか？
set /p pushKey="（Yes ならそのまま Enter か y を入力, No なら n を入力）:"


if "%pushKey%"=="" (
	goto DOWNLOAD
) else if "%pushKey%"=="y" (
	goto DOWNLOAD
) else if "%pushKey%"=="yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="Yes" (
	goto DOWNLOAD
) else if "%pushKey%"=="n" (
	goto END
) else if "%pushKey%"=="no" (
	goto END
) else if "%pushKey%"=="No" (
	goto END
)
goto END




rem ====================================================================================================
rem 以下、JREをダウンロードする処理
rem ====================================================================================================

:DOWNLOAD

rem 最新版のファイル名を取得
cls
echo 最新版を確認しています...
bitsadmin /transfer download_jre_name "https://download.rinearn.com/jre/latest_w64.txt" "%CD%\latest_w64.txt"

set LATEST_JRE_NAME=
for /F "delims=" %%a in (.\latest_w64.txt) do (
	set LATEST_JRE_NAME=%%a
)

rem エラー確認
set LATEST_INFO_DOWNLOAD_FAILED=FALSE
if not %ERRORLEVEL%==0 set LATEST_INFO_DOWNLOAD_FAILED=TRUE
if not exist "%CD%\latest_w64.txt" set LATEST_INFO_DOWNLOAD_FAILED=TRUE
if %LATEST_INFO_DOWNLOAD_FAILED%==TRUE (
	echo. 
	echo. 
	echo ----------------------------------------------------------------------
	echo. 
	echo 申し訳ありませんが、何らかの理由により、
	echo 「 https://download.rinearn.com/jre/latest_w64.txt 」
	echo のダウンロードに失敗しました。
	echo.
	echo もし原因が上記URLの側にある場合は、
	echo （※ Webブラウザでアクセスしてもエラーになる場合など）
	echo また時間をあけて試すと成功するかもしれません。
	echo.
	echo または、処理に必要な権限が不足している可能性もあります。
	echo その場合、このバッチファイルを右クリックし、メニューから
	echo 「 管理者として実行 」を選択すると解決するかもしれません。
	echo.
	echo お急ぎの場合は、下記ページの説明を参考に、手動で導入する事もできます：
	echo   https://download.rinearn.com/jre/
	echo.
	set /p pushKey="終了するには Enter キーを押してください。"
	goto END
)
cls

rem ダウンロード
cls
echo ダウンロードしています...
bitsadmin /TRANSFER download_jre_file "https://download.rinearn.com/jre/%LATEST_JRE_NAME%.zip" "%CD%\%LATEST_JRE_NAME%.zip"

rem エラー確認
set JRE_DOWNLOAD_FAILED=FALSE
if not %ERRORLEVEL%==0 set LATEST_DOWNLOAD_FAILED=TRUE
if not exist "%CD%\%LATEST_JRE_NAME%.zip" set LATEST_DOWNLOAD_FAILED=TRUE
if %JRE_DOWNLOAD_FAILED%==TRUE (
	echo. 
	echo. 
	echo ----------------------------------------------------------------------
	echo. 
	echo 申し訳ありませんが、何らかの理由により、
	echo 「 https://download.rinearn.com/jre/%LATEST_JRE_NAME%.zip 」
	echo のダウンロードに失敗しました。
	echo.
	echo もし原因が上記URLの側にある場合は、
	echo （※ Webブラウザでアクセスしてもエラーになる場合など）
	echo また時間をあけて試すと成功するかもしれません。
	echo.
	echo または、処理に必要な権限が不足している可能性もあります。
	echo その場合、このバッチファイルを右クリックし、メニューから
	echo 「 管理者として実行 」を選択すると解決するかもしれません。
	echo.
	echo お急ぎの場合は、下記ページの説明を参考に、手動で導入する事もできます：
	echo   https://download.rinearn.com/jre/
	echo.
	set /p pushKey="終了するには Enter キーを押してください。"
	goto END
)
cls


rem ダウンロードしたZIPファイルを自動展開する
PowerShell -command "Expand-Archive -Force -Path %LATEST_JRE_NAME%.zip"


rem 以下、使用するJREを指定する設定ファイルを生成または上書きし、ダウンロードしたJREに付属しているREADMEを表示する
rem ただし、ZIPの展開方法によって、同名フォルダが二重階層になる場合と、単層になる場合がある

rem 単層の場合（同名フォルダが二重階層になっていない場合）
if exist %LATEST_JRE_NAME%\README_Japanese.txt (
	echo %LATEST_JRE_NAME%\jre\bin> %JRE_PATH_SETTING_FILE%
	start notepad %LATEST_JRE_NAME%\README_Japanese.txt
	goto SUCCEEDED
)

rem 同名フォルダが二重階層になっている場合
if exist %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\README_Japanese.txt (
	echo %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\jre\bin> %JRE_PATH_SETTING_FILE%
	start notepad %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\README_Japanese.txt
	goto SUCCEEDED
)


rem どちらでもない場合は、展開に失敗している可能性があるので、手動で展開してもらう
echo. 
echo. 
echo ----------------------------------------------------------------------
echo. 
echo ダウンロードしたZIPファイルの自動展開に失敗しました...
echo ダウンロードした場所を開きますので、
echo. 
echo    「 %LATEST_JRE_NAME%.zip （ZIP形式の圧縮ファイル） 」
echo. 
echo を右クリックし、「 すべて展開 」や「 ここに展開 」などを選んで、手動で展開してみてください。
echo. 

start "" "%CD%"
echo msgbox "開かれたウィンドウ内で「 %LATEST_JRE_NAME%.zip （ZIP形式の圧縮ファイル） 」を右クリックし、「 すべて展開 」や「 ここに展開 」などを選んで展開してください（完了後、黒い画面に戻って下さい）",vbInformation,"" > %TEMP%\msgboxtest.vbs & %TEMP%\msgboxtest.vbs

echo.
set /p pushKey="展開完了後、この黒い画面をクリックして「 Enter 」キーを押してください。"



rem 以下、再び展開結果を確認する

rem 単層の場合（同名フォルダが二重階層になっていない場合）
if exist %LATEST_JRE_NAME%\README_Japanese.txt (
	echo %LATEST_JRE_NAME%\jre\bin> %JRE_PATH_SETTING_FILE%
	start notepad %LATEST_JRE_NAME%\README_Japanese.txt
	goto SUCCEEDED
)

rem 同名フォルダが二重階層になっている場合
if exist %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\README_Japanese.txt (
	echo %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\jre\bin> %JRE_PATH_SETTING_FILE%
	start notepad %LATEST_JRE_NAME%\%LATEST_JRE_NAME%\README_Japanese.txt
	goto SUCCEEDED
)


echo.
echo.
echo 展開結果の認識に失敗しました...
echo 申し訳ありませんが、何らかの問題が生じているかもしれません。
echo 問題が解決しない場合は、お手数ですが、開発元へご相談ください。
echo.
set /p pushKey="終了するには「 Enter 」キーを押してください。"
goto END


rem JREの展開に成功した場合は、導入作業完了
:SUCCEEDED

cls
echo.
echo ----------------------------------------------------------------------------------------------------
echo.
echo 実行環境（JRE）の使用準備が完了しました。
echo 配置場所は、このソフトの「jre」フォルダ内の「 %LATEST_JRE_NAME% 」というフォルダです。
echo.
echo より新しい実行環境を入手した際、不要になった古いものは、必要に応じて手動で削除してください。
echo 使用する実行環境は、「jre」フォルダ内の「JRE_Path_Setting.txt」で切り替えられます。
echo.
echo より詳しい説明は、「jre」フォルダ内にあるテキストで読む事ができます。
echo.
if not "%1" == "--update" (
	echo ----------------------------------------------------------------------------------------------------
	echo.
	echo ソフトウェアを起動します...
	echo.
)
goto END

:END
