@echo off

rem Startscript für: JobManagerV2
rem Funktion: startet die Programme des Jobmanagers
rem Erstellt..: 31.05.2007 J.Fes (c) J.Feuerstein 2007..2012
rem Stand vom.: 12.06.2012 15:39
rem ----------------------------------------------------------------------------
 set MyApplBase_TP=JobManagerV2
 call "%~dp0ApplicationInfo.cmd" GetVerInfoDumyPara


 Title "Start %MyApplBase_TP%: [%JobMgr_VerFull%][%JobMgr_VerDateTime%] from:[%~dp0]"

 rem JobMgr_Root_DP Dir ermitteln !!JobMgr_Root_DP Name nicht aendern!! siehe Entw: JS Settingsmanager
 call :Parse_PathCutLastDir "%~dp0" JobMgr_Root_DP

 rem new 11.10.2012 Verzeichniss: %JobMgr_RootL_DP% verwenden wenn dieses als Umgebunsvariable bereits definiert ist
 if not defined JobMgr_RootL_DP goto :JobMgr_RootL_DP_usedefault
 if     exist "%JobMgr_RootL_DP%" goto :Next
 if not exist "%JobMgr_RootL_DP%" md "%JobMgr_RootL_DP%"
 if     exist "%JobMgr_RootL_DP%" goto :Next


:JobMgr_RootL_DP_usedefault
 rem temp umbiegen
 rem angepasst 16.07.2009
 rem Step zunächst umbiegen nach %SystemDrive%\tmp
 set JobMgr_RootL_DP=%SystemDrive%\tmp
 set JobMgr_RootL_DP=%SystemDrive%\temp
 if not exist "%JobMgr_RootL_DP%" md "%JobMgr_RootL_DP%">nul
 if     exist "%JobMgr_RootL_DP%" md  "%JobMgr_RootL_DP%\JM$$TEMP$$TESTDIR">nul
 if     exist "%JobMgr_RootL_DP%\JM$$TEMP$$TESTDIR" rd /S /Q "%JobMgr_RootL_DP%\JM$$TEMP$$TESTDIR">nul& goto :Next
 if exist "%SystemDrive%\temp" set JobMgr_RootL_DP=%SystemDrive%\temp
 rem 24.09.2011 wenn kein anderes Verzeichniss verfuegbar dann User Temp verwenden
 if not exist "%JobMgr_RootL_DP%" set JobMgr_RootL_DP=%temp%
 goto :Next


:Next
 set temp_user=%temp%
 set temp=%JobMgr_RootL_DP%

 rem --- 01-BinServer ------------------
 rem !!JobMgr_01-BinServer_DP Name nicht aendern!! siehe Entw: JS Settingsmanager
 set JobMgr_01-BinServer_DP=%~dp0
 set JobMgr_01-BinServer_DP=%JobMgr_01-BinServer_DP:~0,-1%
 rem new 21.04.09 J.Fes Var %JobMgr_01-BinServer_PLast% beinhaltet den TopRoot Path von 01-BinServer
 call :Parse_PLast %JobMgr_01-BinServer_DP% JobMgr_01-BinServer_PLast JobMgr_01-BinServer_PLast
 rem - bestimmen JobMgr_01-BinServerL_DP nach %temp% legen
 rem Locale Dirs festlegen
 set JobMgr_01-BinServerL_DP=%temp%\%MyApplBase_TP%\%JobMgr_01-BinServer_PLast%V%JobMgr_VerNumber%

 rem 01-BinServer.Custom festlegen
 set JobMgr_ServerSetting_DP=%JobMgr_Root_DP%\01-BinServer.Custom
 set JobMgr_ClientSetting_DP=%JobMgr_Root_DP%\02-BinClient.Custom

 rem --- 02-BinClient ------------------
 rem set JobMgr_02-BinClient_DP=%JobMgr_Root_DPnoPLast%\02-BinClient
 rem JobMgr_02-BinClient_DP=.. new 21.04.09 angepasst 19.10.09 J.Fes damit 02-BinClient.ENTW wie 01-BinServer.ENTW (=TP) wird
 set JobMgr_02-BinClient_DP=%JobMgr_01-BinServer_DP:01-BinServer=02-BinClient%
 rem new 21.04.09 J.Fes Var %JobMgr_01-BinServer_PLast% beinhaltet den TopRoot Path von 01-BinServer
 call :Parse_PLast %JobMgr_02-BinClient_DP% JobMgr_02-BinClient_PLast JobMgr_02-BinClient_PLast

 rem Locale Dirs festlegen
 set JobMgr_02-BinClientL_DP=%temp%\%MyApplBase_TP%\%JobMgr_02-BinClient_PLast%V%JobMgr_VerNumber%

 rem --- 03-BinPublic ------------------
 set JobMgr_03-BinPublic_DP=%JobMgr_Root_DP%\03-BinPublic
 set JobMgr_03-BinPublicCustom_DP=%JobMgr_Root_DP%\03-BinPublic.Custom

 rem -- %JobMgr_Root_DP%;
 set path_org=%path%
 rem set path=%JobMgr_03-BinPublicCustom_DP%;%JobMgr_03-BinPublic_DP%;%JobMgr_01-BinServer_DP%;%JobMgr_02-BinClient_DP%;%Path%
 set path=%JobMgr_03-BinPublicCustom_DP%;%JobMgr_03-BinPublic_DP%;%Path%

 if /i "%1"=="/Server"    goto :JobServer
 if /i "%1"=="/JobServer" goto :JobServer
 if /i "%1"=="/Client"    goto :JobClient
 if /i "%1"=="/JobClient" goto :JobClient
 if /i "%1"=="/OnDemand"  goto :JobPlaner
 if /i "%1"=="/JobPlaner" goto :JobPlaner
 if /i "%1"=="/JobMgrLocalRoot_Open" goto :JobMgrLocalRoot_Open

 goto :JobMgrLocalRoot_Open

 echo ----------------------------------------------
 Echo Erro in start script for starting JobManager programms
 Echo %0
 Echo.
 Echo Start Parameters:
 Echo P1=%1 P2=%2 P3=%3 P4=%4 P5=%5 P6=%6 P7=%7 P8=%8 P9=%9
 Echo.
 Echo Error: missing valid parameter:!!
 Echo.
 Echo the first paramters must be one of the listed values:
 Echo  /Server  Starts %MyApplBase_TP% Server
 Echo  /Client  Starts %MyApplBase_TP% Client
 Echo.
 pause

goto :ende

:JobMgrLocalRoot_Open
 set toRun=start "" explorer.exe /e, "%JobMgr_RootL_DP%"
 %toRun%
 goto :ende


:Client
:JobClient
 rem ------------------------------------------------------------------------
 rem Funktion:
 rem  Starte den JobServer
 rem neuer Client erstellt 06.07.2010 A.Becker J.Feuerstein

 rem das locale JobClient_PRG
 set JobClient_EXE_DPNE=%JobMgr_02-BinClientL_DP%\JobClient.Starter.CUI.exe
 rem die JobClient ClientSettings immer vom Client
 set ClientSettingsXML_DPNE=%JobMgr_ClientSetting_DP%\ServerSettings.xml


:StartProg
 set toRun=robocopy "%JobMgr_02-BinClient_DP%" "%JobMgr_02-BinClientL_DP%" /mir /r:3 /w:1 /XD _svn .svn Resources Archiv
 Call %toRun%

 set toRun="%JobClient_EXE_DPNE%" /ServerSettingsXML "%ClientSettingsXML_DPNE%" %2 %3 %4 %5 %6 %7 %8 %9
 set path=%JobMgr_02-BinClientL_DP%;%JobMgr_03-BinPublic_DP%;%path_org%
 cd /D "%JobMgr_02-BinClientL_DP%"
 rem 28.09.2012 J.Fes /I eingefuegt um zu erreichen das nur das default Environment beim Start vom JobClient gesetzt ist
 rem 08.10.2012 J.Fes /I wieder entnommen da es zu Fehlern bei den Prompts kommen kann wenn C:\Dokumente und Einstellungen\UserName\..
 start "JC V%JobMgr_VerFull%" /D%JobMgr_02-BinClientL_DP% %toRun%
 set path=%Path_org%
 goto :ende

:Server
:JobServer
 rem ------------------------------------------------------------------------
 rem Funktion:
 rem  Starte den JobServer
 rem
 rem  Kopiert die Programme mit allen erf. Komponenten auf den den localen Rechner (JobServer.Exe).
 rem  Anschliessend wird diese lokal kopierter Stand gestartet.
 rem  Die einstellungen ServerSettingsXML_DPNE werden vom Server verwendet
 rem  Hinweis: die Parameter P2..Pn werden an das Programm übergeben
 rem           die Umgebunsvariabale JobMgr_ServerSetting_DP wird für die bestimmung des pfades für den Ablageort der Serversettings festgelegt

 rem das locale JobServer_PRG
 set JobServer_EXE_DPNE=%JobMgr_01-BinServerL_DP%\JobServer.exe

 rem die JobServer ServerSettings immer vom Server
 set ServerSettingsXML_DPNE=%JobMgr_ServerSetting_DP%\ServerSettings.xml

:StartProg
  rem umgestell auf Versions Verzeichnisse am 22.05.2012 J.Fes
  set toRun=robocopy "%JobMgr_01-BinServer_DP%" "%JobMgr_01-BinServerL_DP%" /mir /r:3 /w:1 /XD _svn .svn Resources Archiv
  Echo Update Local "%JobMgr_01-BinServerL_DP%"
  call %toRun% >nul 2>nul
  set toRun=copy "%JobMgr_BinPublicClientServer_DP%\JobManagerCmdTools_Resources\*.dll"  "%JobMgr_01-BinServerL_DP%\*.*"
  call %toRun% >nul 2>nul

  set toRun="%JobServer_EXE_DPNE%" /ServerSettingsXML "%ServerSettingsXML_DPNE%" %2 %3 %4 %5 %6 %7 %8 %9
  rem path setzen
  set path=%JobMgr_01-BinServerL_DP%;%JobMgr_03-BinPublic_DP%;%path_org%
  cd /D "%JobMgr_01-BinServerL_DP%"
  start "%MyApplBase_TP%" /D%JobMgr_01-BinServerL_DP% %toRun%
  set path=%Path_org%

goto :Ende

:JobPlaner
 rem ------------------------------------------------------------------------
 rem Funktion:
 rem  Starte das Server Programm
 rem
 rem  Kopiert die Programme mit allen erf. Komponenten auf den den localen Rechner (JobServer.Exe).
 rem  Anschliessend wird diese lokal kopierter Stand gestartet.
 rem  Die einstellungen ServerSettingsXML_DPNE werden vom Server verwendet
 rem  Hinweis: die Parameter P2..Pn werden an das Programm übergeben
 rem           die Umgebunsvariabale JobMgr_ServerSetting_DP wird für die bestimmung des pfades für den Ablageort der Serversettings festgelegt

 rem das locale JobServer_PRG
 set JobPlaner_EXE_DPNE=%JobMgr_01-BinServerL_DP%\JobManager.OnDemand.exe

 rem die JobServer ServerSettings immer vom Server
 set ServerSettingsXML_DPNE=%JobMgr_ServerSetting_DP%\ServerSettings.xml

 rem kopiert das Programm auf den localen Rechner
 rem dies ist erforderliche da .NET.exe Programme nur mit besonderen einstellungen
 rem vom Netz aus gestartet werden dürfen
 if not exist "%JobPlaner_EXE_DPNE%" goto :StartProg

 :StartProg
  set toRun=robocopy "%JobMgr_01-BinServer_DP%" "%JobMgr_01-BinServerL_DP%" /mir /r:0 /w:0 /XD _svn .svn Resources
  %toRun%

  set toRun="%JobPlaner_EXE_DPNE%" /ServerSettingsXML "%ServerSettingsXML_DPNE%" %JobPlanerCmdOptions% %2 %3 %4 %5 %6 %7 %8 %9
  rem path setzen
  set path=%JobMgr_01-BinServerL_DP%;%JobMgr_03-BinPublic_DP%;%path_org%
  cd /D "%JobMgr_01-BinServerL_DP%"
  start "%MyApplBase_TP%" /D%JobMgr_01-BinServerL_DP% %toRun%
  set path=%Path_org%

goto :Ende



:Ende

 goto :eof


rem ##### ------------ Standard Subroutines --------------------- ######
:DateTimeNowGet
 rem call :DateTimeNowGet
 rem Set File_LPNE=%DatRoot_DP%\MyName-%DateTimeNowFileExt%.txt


 if     "%time:~0,1%"==" " set time-h=0%time:~1,1%
 if not "%time:~0,1%"==" " set time-h=%time:~0,2%

 if     "%time:~3,1%"==" " set time-m=0%time:~4,1%
 if not "%time:~3,1%"==" " set time-m=%time:~3,2%

 set Date-Y=%Date:~6,4%
 set Date-M=%Date:~3,2%
 set Date-D=%Date:~0,2%
 set DateTimeNowFileExt=%Date-Y%-%Date-M%-%Date-D%-%time-h%-%time-m%
 goto :eof


:Parse_All
 rem parst alle File Bezeichner aus
 rem "\" abschneiden
 set Parse_all$temp=%~dp1
 set Parse_all$temp=%Parse_all$temp:~0,-1%
 call :Parse_PLast %Parse_all$temp% %2_PLast %2_PLast2
 call :Parse_PathCutLastDir %~dp0 %2_DPnoPLast
 set %2_DP=%Parse_all$temp%
 set %2_D=%~d1
 rem "\" hinten und vorne abschneiden
 set Parse_all$temp=%~p1
 set Parse_all$temp=%Parse_all$temp:~1,-1%
 set %2_P=%Parse_all$temp%
 set %2_NE=%~nx1
 set %2_N=%~n1
 set %2_E=%~x1
 set %2_DPNE=%1
 set %2_DPN=%~dpn1
 set Parse_all$temp=
 goto :eof

:Parse_PLast
 rem parst den LetzenPath
 set %2=%~n1
 set %3=%~nx1
 goto :eof


:Parse_PathCutLastDir
 rem schneidet das letzte Verzeichniss Uebergeben path ab
 rem P1 = Name der Variablen
 rem P2 = der Übergebene Path
 rem Example : call :Parse_PathCutLastDir %~dp0 EntwRoot_DP
 rem Example : call :Parse_PathCutLastDir %~dp0 MyVar_DP

 set PathCutLastDir$temp=%1
 set PathCutLastDir$temp=%PathCutLastDir$temp:"=%

 set PathCutLastDir$tempLastChar=%PathCutLastDir$temp:~-1%
 set PathCutLastDir$tempNoBacks=%PathCutLastDir$temp:~0,-1%

 if "%PathCutLastDir$tempLastChar%"=="\" (
   rem "\" abschneiden wenn vorhanden
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$tempNoBacks%
 ) else (
   rem
   call :PathCutLastDirDo PathCutLastDir$tempRes %PathCutLastDir$temp%
 )
 set PathCutLastDir$tempRes=%PathCutLastDir$tempRes:~0,-1%
 set %2=%PathCutLastDir$tempRes%
 set PathCutLastDir$temp=
 set PathCutLastDirDo$temp1=
 set PathCutLastDir$tempNoBacks=
 set PathCutLastDir$tempNoLastChar=
 set PathCutLastDir$tempLastChar=
 set PathCutLastDir$tempRes=
 goto :eof

:PathCutLastDirDo
 rem hiermit schneiden wir den Path ab
 rem echo.
 rem Echo P1=%1 P2=%2
 set PathCutLastDirDo$temp=%~dp2
 rem "\" abschneiden
 set PathCutLastDirDo$temp1=%PathCutLastDir$temp:~0,-1%
 set %1=%PathCutLastDirDo$temp%
 set PathCutLastDirDo$temp=
 set PathCutLastDirDo$temp1=
 goto :eof
