feature: Add process launcher keep-alive option at code level

Signed-off-by: Dominic Guss <Dominic.Guss@boeing.com>
diff --git a/org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/ScriptPage.java b/org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/ScriptPage.java
index 7047f61..e44f0fe 100644
--- a/org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/ScriptPage.java
+++ b/org.eclipse.osee.ote.ui.test.manager/src/org/eclipse/osee/ote/ui/test/manager/pages/ScriptPage.java
@@ -60,9 +60,11 @@
 
    private static final String NOT_CONNECTED = "<< NOT_CONNECTED >>";
    private static final int ABORT_BTN_TIMER = 5000;
+   private static final boolean KEEP_LAUNCHER_PROCESS_ALIVE = false;
 
    public enum UpdateableLabel {
-      HOSTLABEL, CONFIGPATHLABEL;
+      HOSTLABEL,
+      CONFIGPATHLABEL;
    }
 
    public static final OseeUiActivator plugin = TestManagerPlugin.getInstance();
@@ -81,11 +83,13 @@
    private ProgramButtonProviderService programButtonProviderService;
    private ILaunchAndKillProviderService launchAndKillProviderService;
    private ExecutorAdmin executorAdmin;
+   private Process launcherProcess;
 
    public ScriptPage(Composite parent, int style, TestManagerEditor parentTestManager) {
       super(parent, style, parentTestManager);
       this.testManagerEditor = parentTestManager;
-      launchAndKillProviderService = OsgiUtil.getService(ILaunchAndKillProvider.class, LaunchAndKillProviderService.class);
+      launchAndKillProviderService =
+         OsgiUtil.getService(ILaunchAndKillProvider.class, LaunchAndKillProviderService.class);
       executorAdmin = OsgiUtil.getService(ExecutorAdmin.class, ExecutorAdmin.class);
    }
 
@@ -112,7 +116,7 @@
       createScriptTableSection(sashForm);
       createStatusWindow(sashForm);
 
-      sashForm.setWeights(new int[] { 8, 2 });
+      sashForm.setWeights(new int[] {8, 2});
       setMinSize(0, 0);
 
       // TODO: Change to use OteHelpContext
@@ -121,29 +125,11 @@
       // Consume any program-specific ProgramButtonService that may have been
       // through OSGI, and if so, get the additional program-specific buttons
       // from the subscriber.
-      programButtonProviderService = OsgiUtil.getService(IProgramButtonProvider.class,
-            ProgramButtonProviderService.class);
+      programButtonProviderService =
+         OsgiUtil.getService(IProgramButtonProvider.class, ProgramButtonProviderService.class);
       for (IProgramButtonProvider provider : programButtonProviderService.getProgramButtonProviders()) {
          provider.getProgramButtons(coolBar, statusWindow);
       }
-
-      // Example to launch and kill processes:
-      for (ILaunchAndKillProvider provider : launchAndKillProviderService.getLaunchAndKillProviders()) {
-         Collection<ILaunchAndKill> launchers = provider.getLaunchers();
-         Collection<ILaunchAndKill> killers = provider.getKillers();
-         for (ILaunchAndKill launcher : launchers) {
-            Process launchProcess; // To access Process methods
-            //launchProcess = launcher.executeProcess(); // Launches the process
-           //launcher.setExecutorAdmin(launchAndKillProviderService.getExecutorAdmin());
-           //launcher.executeProcess();
-           //break;
-         }
-         for (ILaunchAndKill killer : killers) {
-            Process killProcess; // To access Process methods
-            //killProcess = killer.executeProcess(); // Kills the process
-            break;
-         }
-      }
    }
 
    public void loadStorageString() {
@@ -353,7 +339,7 @@
       statusWindow = new StatusWindowWidget(parent);
 
       statusWindow.setLabelAndValue(UpdateableLabel.HOSTLABEL.name(), "Selected Host", NOT_CONNECTED, SWT.BOLD,
-            SWT.COLOR_DARK_RED);
+         SWT.COLOR_DARK_RED);
 
       String selectedFile = testManagerEditor.loadValue(testManagerEditor.configFileName);
       if (!Strings.isValid(selectedFile)) {
@@ -455,12 +441,12 @@
             abortBatchButton.setEnabled(false);
             scriptTable.onConnectionChanged(true);
             statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), event.getProperties().getStation(), SWT.BOLD,
-                  SWT.COLOR_DARK_GREEN);
+               SWT.COLOR_DARK_GREEN);
             statusWindow.refresh();
-            
+
          }
       });
-  
+
       executorAdmin.submit("Launch Providers", new Runnable() {
          @Override
          public void run() {
@@ -470,6 +456,7 @@
 
       return result;
    }
+
    @Override
    public boolean onDisconnect(ConnectionEvent event) {
       boolean result = getScriptManager().disconnect(event);
@@ -482,7 +469,7 @@
             scriptTable.onConnectionChanged(false);
             statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), NOT_CONNECTED, SWT.BOLD, SWT.COLOR_DARK_RED);
             statusWindow.refresh();
-            
+
             executorAdmin.submit("Kill Providers", new Runnable() {
                @Override
                public void run() {
@@ -507,7 +494,7 @@
             scriptTable.onConnectionChanged(false);
             statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), NOT_CONNECTED, SWT.BOLD, SWT.COLOR_DARK_RED);
             statusWindow.refresh();
-            
+
             executorAdmin.submit("Kill Providers", new Runnable() {
                @Override
                public void run() {
@@ -519,23 +506,29 @@
       });
       return result;
    }
-   
+
    private void executeLaunchProviders() {
       for (ILaunchAndKillProvider provider : launchAndKillProviderService.getLaunchAndKillProviders()) {
          Collection<ILaunchAndKill> launchers = provider.getLaunchers();
          for (ILaunchAndKill launcher : launchers) {
-            Process launchProcess = launcher.executeProcess(); 
-            break;
+            if (launcherProcess != null && launcherProcess.isAlive()) {
+               continue;
+            } else {
+               launcherProcess = launcher.executeProcess(); // Not a solution for multiple launchers. There is only one currently.
+            }
          }
       }
    }
-   
+
    private void executeKillProviders() {
       for (ILaunchAndKillProvider provider : launchAndKillProviderService.getLaunchAndKillProviders()) {
          Collection<ILaunchAndKill> killers = provider.getKillers();
          for (ILaunchAndKill killer : killers) {
-            Process killProcess = killer.executeProcess(); 
-            break;
+            if (KEEP_LAUNCHER_PROCESS_ALIVE) {
+               continue;
+            } else {
+               killer.executeProcess();
+            }
          }
       }
    }