feature: Add DTE launch and kill functionality

Signed-off-by: Dominic Guss <Dominic.Guss@boeing.com>
diff --git a/org.eclipse.osee.ote.ui.test.manager/META-INF/MANIFEST.MF b/org.eclipse.osee.ote.ui.test.manager/META-INF/MANIFEST.MF
index f79c326..b5d9ce4 100644
--- a/org.eclipse.osee.ote.ui.test.manager/META-INF/MANIFEST.MF
+++ b/org.eclipse.osee.ote.ui.test.manager/META-INF/MANIFEST.MF
@@ -44,7 +44,8 @@
  org.eclipse.osee.ote.runtimeManager
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Import-Package: org.apache.xml.serialize,
+Import-Package: com.boeing.ote.common.f18,
+ org.apache.xml.serialize,
  org.eclipse.core.filesystem,
  org.eclipse.jdt.core,
  org.eclipse.nebula.widgets.xviewer.core.model,
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 effdc54..b7f72ae 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
@@ -10,10 +10,12 @@
  *******************************************************************************/
 package org.eclipse.osee.ote.ui.test.manager.pages;
 
+import java.io.IOException;
 import java.rmi.RemoteException;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.logging.Level;
+
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.osee.framework.jdk.core.util.Lib;
@@ -49,6 +51,9 @@
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
 
+import com.boeing.ote.common.f18.Kill_DTE;
+import com.boeing.ote.common.f18.Launch_DTE;
+
 public abstract class ScriptPage extends TestManagerPage {
 
    private static final String NOT_CONNECTED = "<< NOT_CONNECTED >>";
@@ -68,6 +73,8 @@
    private Label hostConnectLabel;
    private LoadWidget loadWidget;
    protected ToolItem runButton;
+   protected ToolItem launchDTEButton;
+   protected ToolItem cleanUpDTEButton;
    private SaveWidget saveWidget;
    private ScriptTableViewer scriptTable;
    private StatusWindowWidget statusWindow;
@@ -294,6 +301,76 @@
          }
       });
       abortBatchButton.setEnabled(false);
+      
+      // Create and configure the "Launch DTE" button
+      launchDTEButton = new ToolItem(controlsToolBar, SWT.PUSH | SWT.CENTER);
+      launchDTEButton.setImage(ImageManager.getImage(TestManagerImage.SEL_RUN_EXEC));
+      launchDTEButton.setDisabledImage(ImageManager.getImage(TestManagerImage.UNSEL_ABORT_STOP));
+      launchDTEButton.setText("Launch DTE");
+      launchDTEButton.setToolTipText("Launch DTE application");
+      launchDTEButton.addSelectionListener(new SelectionAdapter() {
+         @Override
+         public void widgetSelected(SelectionEvent e) {
+            try {
+				handleLaunchDTEButton();
+				launchDTEButton.setEnabled(false);
+			} catch (IOException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+         }
+      });
+      launchDTEButton.addListener(SWT.MouseUp, new Listener() {
+         @Override
+         public void handleEvent(Event e) {
+            if (e.button == 3) {
+            	try {
+					handleLaunchDTEButton();
+					launchDTEButton.setEnabled(false);
+				} catch (IOException e1) {
+					// TODO Auto-generated catch block
+					e1.printStackTrace();
+				}
+            }
+         }
+      });
+      launchDTEButton.setEnabled(true);     
+      
+      // Create and configure the "Clean Up DTE" button
+      cleanUpDTEButton = new ToolItem(controlsToolBar, SWT.PUSH | SWT.CENTER);
+      cleanUpDTEButton.setImage(ImageManager.getImage(TestManagerImage.SEL_BATCH_ABORT_STOP));
+      cleanUpDTEButton.setDisabledImage(ImageManager.getImage(TestManagerImage.UNSEL_ABORT_STOP));
+      cleanUpDTEButton.setText("Clean UP\n DTE");
+      cleanUpDTEButton.setToolTipText("Clean up and close DTE");
+      cleanUpDTEButton.addSelectionListener(new SelectionAdapter() {
+         @Override
+         public void widgetSelected(SelectionEvent e) {
+            try {
+				handleCleanUpDTEButton();
+				cleanUpDTEButton.setEnabled(false);
+				launchDTEButton.setEnabled(true);
+			} catch (IOException e1) {
+				// TODO Auto-generated catch block
+				e1.printStackTrace();
+			}
+         }
+      });
+      cleanUpDTEButton.addListener(SWT.MouseUp, new Listener() {
+         @Override
+         public void handleEvent(Event e) {
+            if (e.button == 3) {
+            	try {
+					handleCleanUpDTEButton();
+					cleanUpDTEButton.setEnabled(false);
+					launchDTEButton.setEnabled(true);
+				} catch (IOException e1) {
+					// TODO Auto-generated catch block
+					e1.printStackTrace();
+				}
+            }
+         }
+      });
+      cleanUpDTEButton.setEnabled(true);
 
       controlsToolBar.pack();
 
@@ -378,7 +455,19 @@
          MessageDialog.openError(Displays.getActiveShell(), "Error", runJob.getErrorMessage());
       }
    }
-
+   
+   private void handleLaunchDTEButton() throws IOException {  
+         Launch_DTE dte = new Launch_DTE();
+       	Thread t = new Thread(dte);
+       	t.start();
+   }
+   
+   private void handleCleanUpDTEButton() throws IOException {
+      	Kill_DTE dte = new Kill_DTE();
+      	Thread t = new Thread(dte);
+      	t.start();
+   }
+   
    private class EnabledAbortsTimer extends TimerTask {
 
       @Override
diff --git a/org.eclipse.ote.test.manager/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.ote.test.manager/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/org.eclipse.ote.test.manager/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/AutomatedTestManagerAction.java b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/AutomatedTestManagerAction.java
new file mode 100644
index 0000000..332fec4
--- /dev/null
+++ b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/AutomatedTestManagerAction.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Boeing.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Boeing - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ote.test.manager.navigate;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.osee.framework.core.data.OseeData;
+import org.eclipse.osee.framework.jdk.core.type.OseeCoreException;
+import org.eclipse.osee.framework.logging.OseeLog;
+import org.eclipse.osee.framework.ui.swt.Displays;
+import org.eclipse.osee.framework.ui.ws.AWorkspace;
+import org.eclipse.osee.ote.ui.test.manager.core.TestManagerEditorInput;
+import org.eclipse.ote.test.manager.OteTestManagerFactory;
+import org.eclipse.ote.test.manager.internal.OteTestManagerPlugin;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+
+/**
+ * @author Donald G. Dunne
+ */
+public class AutomatedTestManagerAction extends Action {
+
+   private IFile inputFile;
+
+   public AutomatedTestManagerAction() {
+      super("Open DTE Automated Test Manager");
+   }
+
+   @Override
+   public void run() {
+
+      inputFile = null;
+
+      // ElementListSelection
+      Displays.pendInDisplayThread(new Runnable() {
+         @Override
+         public void run() {
+            ElementListSelectionDialog dlg =
+               new ElementListSelectionDialog(Displays.getActiveShell(), new ILabelProvider() {
+                  @Override
+                  public Image getImage(Object element) {
+                     return null;
+                  }
+
+                  @Override
+                  public String getText(Object element) {
+                     if (element instanceof IFile) {
+                        return ((IFile) element).getFullPath().toString();
+                     } else {
+                        return element.toString();
+                     }
+                  }
+
+                  @Override
+                  public void addListener(ILabelProviderListener listener) {
+                     // INTENTIONALLY EMPTY BLOCK
+                  }
+
+                  @Override
+                  public void dispose() {
+                     // INTENTIONALLY EMPTY BLOCK
+                  }
+
+                  @Override
+                  public boolean isLabelProperty(Object element, String property) {
+                     return false;
+                  }
+
+                  @Override
+                  public void removeListener(ILabelProviderListener listener) {
+                     // INTENTIONALLY EMPTY BLOCK
+                  }
+               });
+            try {
+               List<Object> files = new ArrayList<>();
+               files.addAll(AWorkspace.findWorkspaceFileMatch(".*\\.ote"));
+               if (files.isEmpty()) {
+                  files.add(new String("Create a new configuration file (none found in workspace)"));
+               }
+               dlg.setMultipleSelection(false);
+               dlg.setElements(files.toArray());
+               dlg.setInitialSelections(new Object[] {files.get(0)});
+               dlg.setTitle("Test Manager Configuration Files");
+               dlg.setMessage("Select a test manager configuration file to open.");
+               dlg.open();
+               Object[] results = dlg.getResult();
+               if (results != null) {
+                  System.out.println();
+
+                  if (results.length > 0) {
+                     if (results[0] instanceof IFile) {
+                        inputFile = (IFile) results[0];
+                     } else if (results[0] instanceof String) {
+                        PipedOutputStream pos = new PipedOutputStream();
+                        PrintStream ps = new PrintStream(pos);
+                        InputStream in = new PipedInputStream(pos);
+                        ps.println(getDefaultTMData());
+                        ps.close();
+                        try {
+                           inputFile = OseeData.getIFile(
+                              OteTestManagerFactory.TEST_MANAGER_FILENAME + "." + OteTestManagerFactory.TEST_MANAGER_EXTENSION,
+                              in);
+                        } catch (OseeCoreException ex) {
+                           OseeLog.log(OteTestManagerPlugin.class, Level.SEVERE, ex);
+                        }
+
+                     }
+                  }
+
+               }
+            } catch (IOException ex) {
+               OseeLog.log(OteTestManagerPlugin.class, Level.SEVERE, ex);
+            }
+         }
+      });
+
+      if (inputFile != null) {
+
+         IEditorInput editorInput = new TestManagerEditorInput(inputFile);
+         IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+         try {
+            page.openEditor(editorInput, OteTestManagerFactory.EDITOR_ID);
+         } catch (PartInitException ex) {
+            OseeLog.log(OteTestManagerPlugin.class, Level.SEVERE, ex);
+         }
+      }
+   }
+
+   protected String getDefaultTMData() {
+      StringBuilder sb = new StringBuilder();
+      sb.append("<automatedTestManager>\n");
+      sb.append("</automatedTestManager>\n");
+      return sb.toString();
+   }
+}
diff --git a/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerAction.java b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerAction.java
index 12fcce4..daae45a 100644
--- a/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerAction.java
+++ b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerAction.java
@@ -18,8 +18,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.logging.Level;
-import org.eclipse.ote.test.manager.OteTestManagerFactory;
-import org.eclipse.ote.test.manager.internal.OteTestManagerPlugin;
+
 import org.eclipse.core.resources.IFile;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.viewers.ILabelProvider;
@@ -30,6 +29,8 @@
 import org.eclipse.osee.framework.ui.swt.Displays;
 import org.eclipse.osee.framework.ui.ws.AWorkspace;
 import org.eclipse.osee.ote.ui.test.manager.core.TestManagerEditorInput;
+import org.eclipse.ote.test.manager.OteTestManagerFactory;
+import org.eclipse.ote.test.manager.internal.OteTestManagerPlugin;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.IWorkbenchPage;
diff --git a/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerNavigateViewItems.java b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerNavigateViewItems.java
index e61ef4f..0dc39b2 100644
--- a/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerNavigateViewItems.java
+++ b/org.eclipse.ote.test.manager/src/org/eclipse/ote/test/manager/navigate/TestManagerNavigateViewItems.java
@@ -12,6 +12,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.osee.framework.ui.plugin.xnavigate.IXNavigateContainer;
 import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItem;
 import org.eclipse.osee.framework.ui.plugin.xnavigate.XNavigateItemAction;
@@ -30,6 +31,7 @@
       List<XNavigateItem> items = new ArrayList<>();
 
       items.add(new XNavigateItemAction(null, new TestManagerAction(), TestManagerImage.TEST_MANAGER, false));
+      items.add(new XNavigateItemAction(null, new AutomatedTestManagerAction(), TestManagerImage.TEST_MANAGER, false));
 
       return items;
    }