blob: b7f72ae0cb2897522edca2f4e095cde3163b181d [file] [log] [blame]
/*******************************************************************************
* 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.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;
import org.eclipse.osee.framework.jdk.core.util.Strings;
import org.eclipse.osee.framework.logging.OseeLog;
import org.eclipse.osee.framework.ui.plugin.OseeUiActivator;
import org.eclipse.osee.framework.ui.plugin.util.AWorkbench;
import org.eclipse.osee.framework.ui.plugin.util.HelpUtil;
import org.eclipse.osee.framework.ui.swt.Displays;
import org.eclipse.osee.framework.ui.swt.ImageManager;
import org.eclipse.osee.ote.service.ConnectionEvent;
import org.eclipse.osee.ote.ui.test.manager.TestManagerImage;
import org.eclipse.osee.ote.ui.test.manager.configuration.LoadWidget;
import org.eclipse.osee.ote.ui.test.manager.configuration.SaveWidget;
import org.eclipse.osee.ote.ui.test.manager.connection.ScriptManager;
import org.eclipse.osee.ote.ui.test.manager.core.TestManagerEditor;
import org.eclipse.osee.ote.ui.test.manager.internal.TestManagerPlugin;
import org.eclipse.osee.ote.ui.test.manager.jobs.ScriptRunJob;
import org.eclipse.osee.ote.ui.test.manager.pages.scriptTable.ScriptTableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.CoolBar;
import org.eclipse.swt.widgets.CoolItem;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
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 >>";
private static final int ABORT_BTN_TIMER = 5000;
public enum UpdateableLabel {
HOSTLABEL,
CONFIGPATHLABEL;
}
public static final OseeUiActivator plugin = TestManagerPlugin.getInstance();
private static final String pageName = "Scripts";
private ToolItem abortButton;
private ToolItem abortBatchButton;
private CoolBar coolBar;
private ToolItem deleteButton;
private Label hostConnectLabel;
private LoadWidget loadWidget;
protected ToolItem runButton;
protected ToolItem launchDTEButton;
protected ToolItem cleanUpDTEButton;
private SaveWidget saveWidget;
private ScriptTableViewer scriptTable;
private StatusWindowWidget statusWindow;
private final TestManagerEditor testManagerEditor;
public ScriptPage(Composite parent, int style, TestManagerEditor parentTestManager) {
super(parent, style, parentTestManager);
this.testManagerEditor = parentTestManager;
}
public void addFile(String fullPath) {
scriptTable.addFile(fullPath);
}
@Override
public void createPage() {
super.createPage();
Composite parent = (Composite) getContent();
coolBar = new CoolBar(parent, SWT.FLAT);
createControlsToolBar(coolBar);
createConfigurationToolBar(coolBar);
packCoolBar();
SashForm sashForm = new SashForm(parent, SWT.NONE);
sashForm.setLayout(new GridLayout());
sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
sashForm.setOrientation(SWT.VERTICAL);
sashForm.SASH_WIDTH = 3;
createScriptTableSection(sashForm);
createStatusWindow(sashForm);
sashForm.setWeights(new int[] {8, 2});
setMinSize(0, 0);
// TODO: Change to use OteHelpContext
HelpUtil.setHelp(this, "test_manager_scripts_page", "org.eclipse.osee.framework.help.ui");
}
public void loadStorageString() {
scriptTable.loadStorageString(testManagerEditor.loadValue(testManagerEditor.scriptsQualName));
}
@Override
public void dispose() {
scriptTable.dispose();
testManagerEditor.storeValue(testManagerEditor.scriptsQualName, scriptTable.getStorageString());
OseeLog.log(TestManagerPlugin.class, Level.INFO, "ScriptPage Dispose Called");
super.dispose();
}
public CoolBar getCoolBar() {
return coolBar;
}
public String getOFP() {
if (hostConnectLabel == null) {
return "";
}
return hostConnectLabel.getText();
}
@Override
public String getPageName() {
return pageName;
}
public String getScripts() {
if (scriptTable == null) {
return "";
} else if (scriptTable.getTaskList() == null) {
return "";
}
return scriptTable.getTaskList().toString();
}
public ScriptTableViewer getScriptTableViewer() {
return scriptTable;
}
public StatusWindowWidget getStatusWindow() {
return statusWindow;
}
public void onScriptRunning(final boolean running) {
AWorkbench.getDisplay().asyncExec(new Runnable() {
@Override
public void run() {
if(runButton.isDisposed()){
return;
}
if (running) {
runButton.setEnabled(false);
abortButton.setEnabled(true);
abortBatchButton.setEnabled(true);
} else {
runButton.setEnabled(true);
abortButton.setEnabled(false);
abortBatchButton.setEnabled(false);
}
}
});
}
public void packCoolBar() {
Point size = this.getSize();
coolBar.setSize(coolBar.computeSize(size.x, size.y));
}
private void createConfigurationToolBar(CoolBar coolBar) {
CoolItem configCoolItem = new CoolItem(coolBar, SWT.NONE);
ToolBar configToolBar = new ToolBar(coolBar, SWT.FLAT | SWT.HORIZONTAL);
saveWidget = new SaveWidget(this);
saveWidget.createToolItem(configToolBar);
loadWidget = new LoadWidget(this);
loadWidget.createToolItem(configToolBar);
deleteButton = new ToolItem(configToolBar, SWT.PUSH | SWT.CENTER);
deleteButton.setImage(ImageManager.getImage(TestManagerImage.FILE_DELETE));
deleteButton.setToolTipText("Deletes Selected (highlighted) Scripts");
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleDeleteButton();
}
});
deleteButton.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event e) {
if (e.button == 3) {
handleDeleteButton();
}
}
});
configToolBar.pack();
Point size = configToolBar.getSize();
configCoolItem.setControl(configToolBar);
configCoolItem.setSize(configCoolItem.computeSize(size.x, size.y));
configCoolItem.setMinimumSize(size);
}
private void createControlsToolBar(CoolBar coolBar) {
CoolItem controlsCoolItem = new CoolItem(coolBar, SWT.NONE);
ToolBar controlsToolBar = new ToolBar(coolBar, SWT.FLAT | SWT.HORIZONTAL);
runButton = new ToolItem(controlsToolBar, SWT.PUSH | SWT.CENTER);
runButton.setImage(ImageManager.getImage(TestManagerImage.SEL_RUN_EXEC));
runButton.setDisabledImage(ImageManager.getImage(TestManagerImage.UNSEL_RUN_EXEC));
runButton.setToolTipText("Runs the Checked Scripts");
runButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleRunButton();
}
});
runButton.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event e) {
if (e.button == 3) {
handleRunButton();
}
}
});
runButton.setEnabled(false);
// Create and configure the "Abort" button
abortButton = new ToolItem(controlsToolBar, SWT.PUSH | SWT.CENTER);
abortButton.setImage(ImageManager.getImage(TestManagerImage.SEL_ABORT_STOP));
abortButton.setDisabledImage(ImageManager.getImage(TestManagerImage.UNSEL_ABORT_STOP));
abortButton.setToolTipText("Abort Currently Running Script");
abortButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleAbortButton();
abortBatchButton.setEnabled(false);
abortButton.setEnabled(false);
Timer timer = new Timer();
timer.schedule(new EnabledAbortsTimer(), ABORT_BTN_TIMER);
}
});
abortButton.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event e) {
if (e.button == 3) {
handleAbortButton();
abortBatchButton.setEnabled(false);
abortButton.setEnabled(false);
Timer timer = new Timer();
timer.schedule(new EnabledAbortsTimer(), ABORT_BTN_TIMER);
}
}
});
abortButton.setEnabled(false);
abortBatchButton = new ToolItem(controlsToolBar, SWT.PUSH | SWT.CENTER);
abortBatchButton.setImage(ImageManager.getImage(TestManagerImage.SEL_BATCH_ABORT_STOP));
abortBatchButton.setDisabledImage(ImageManager.getImage(TestManagerImage.UNSEL_BATCH_ABORT_STOP));
abortBatchButton.setToolTipText("Abort Script Batch");
abortBatchButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
handleBatchAbortButton();
abortBatchButton.setEnabled(false);
abortButton.setEnabled(false);
Timer timer = new Timer();
timer.schedule(new EnabledAbortsTimer(), ABORT_BTN_TIMER);
}
});
abortBatchButton.addListener(SWT.MouseUp, new Listener() {
@Override
public void handleEvent(Event e) {
if (e.button == 3) {
handleBatchAbortButton();
abortBatchButton.setEnabled(false);
abortButton.setEnabled(false);
Timer timer = new Timer();
timer.schedule(new EnabledAbortsTimer(), ABORT_BTN_TIMER);
}
}
});
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();
Point size = controlsToolBar.getSize();
controlsCoolItem.setControl(controlsToolBar);
controlsCoolItem.setSize(controlsCoolItem.computeSize(size.x, size.y));
controlsCoolItem.setMinimumSize(size);
}
private void createScriptTableSection(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
scriptTable = new ScriptTableViewer(composite, this.getTestManager());
// scriptTable.addDisposeListener(new DisposeListener() {
// public void widgetDisposed(DisposeEvent e) {
// testManagerEditor.storeValue(testManagerEditor.scriptsQualName, scriptTable.getStorageString());
// }
// });
}
private void createStatusWindow(Composite parent) {
statusWindow = new StatusWindowWidget(parent);
statusWindow.setLabelAndValue(UpdateableLabel.HOSTLABEL.name(), "Selected Host", NOT_CONNECTED, SWT.BOLD,
SWT.COLOR_DARK_RED);
String selectedFile = testManagerEditor.loadValue(testManagerEditor.configFileName);
if (!Strings.isValid(selectedFile)) {
selectedFile = testManagerEditor.getDefaultConfigPath();
testManagerEditor.storeValue(testManagerEditor.configFileName, selectedFile);
}
OseeLog.log(TestManagerPlugin.class, Level.INFO, "The default config is: " + selectedFile);
statusWindow.setLabelAndValue(UpdateableLabel.CONFIGPATHLABEL.name(), "Config File Path", selectedFile);
saveWidget.setStatusLabel(statusWindow);
loadWidget.setStatusLabel(statusWindow);
// // Status ICON Labels
// connectStatusIconLabel = new
// Label(statusWindow.getStatusIconComposite(), SWT.NONE);
// hostWidget.setConnectStatusLabel(connectStatusIconLabel);
// connectStatusIconLabel.setVisible(false);
statusWindow.refresh();
}
// TODO this stuff needs some updating too...
protected void handleAbortButton() {
TestManagerPlugin.getInstance().getOteConsoleService().write("Aborting Test Script...");
try {
getScriptManager().abortScript(false);
} catch (RemoteException e) {
TestManagerPlugin.getInstance().getOteConsoleService().writeError(Lib.exceptionToString(e));
}
}
// TODO this stuff needs some updating too...
protected void handleBatchAbortButton() {
TestManagerPlugin.getInstance().getOteConsoleService().write("Aborting Test Script Batch...");
try {
getScriptManager().abortScript(true);
} catch (RemoteException e) {
TestManagerPlugin.getInstance().getOteConsoleService().writeError(Lib.exceptionToString(e));
}
}
private void handleDeleteButton() {
scriptTable.removeSelectedTasks();
}
private void handleRunButton() {
ScriptRunJob runJob = new ScriptRunJob(getTestManager());
if (runJob.isRunAllowed()) {
runJob.setPriority(Job.LONG);
runJob.setUser(true);
runJob.schedule();
} else {
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
public void run() {
Displays.ensureInDisplayThread(new Runnable() {
@Override
public void run() {
try {
if (!runButton.isEnabled()) {
abortBatchButton.setEnabled(true);
abortButton.setEnabled(true);
}
} catch (Throwable th) {
}
}
});
}
}
@Override
public boolean areSettingsValidForRun() {
return getScriptTableViewer().getRunTasks().size() > 0;
}
@Override
public String getErrorMessage() {
StringBuilder builder = new StringBuilder();
if (getScriptTableViewer().getRunTasks().size() <= 0) {
builder.append("Scripts not selected.");
}
return builder.toString();
}
@Override
public boolean onConnection(final ConnectionEvent event) {
boolean result = getScriptManager().connect(event);
Displays.ensureInDisplayThread(new Runnable() {
@Override
public void run() {
runButton.setEnabled(true);
abortButton.setEnabled(false);
abortBatchButton.setEnabled(false);
scriptTable.onConnectionChanged(true);
statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), event.getProperties().getStation(), SWT.BOLD,
SWT.COLOR_DARK_GREEN);
statusWindow.refresh();
}
});
return result;
}
@Override
public boolean onDisconnect(ConnectionEvent event) {
boolean result = getScriptManager().disconnect(event);
Displays.ensureInDisplayThread(new Runnable() {
@Override
public void run() {
runButton.setEnabled(false);
abortButton.setEnabled(false);
abortBatchButton.setEnabled(false);
scriptTable.onConnectionChanged(false);
statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), NOT_CONNECTED, SWT.BOLD, SWT.COLOR_DARK_RED);
statusWindow.refresh();
}
});
return result;
}
@Override
public boolean onConnectionLost() {
boolean result = getScriptManager().onConnectionLost();
Displays.ensureInDisplayThread(new Runnable() {
@Override
public void run() {
runButton.setEnabled(false);
abortButton.setEnabled(false);
abortBatchButton.setEnabled(false);
scriptTable.onConnectionChanged(false);
statusWindow.setValue(UpdateableLabel.HOSTLABEL.name(), NOT_CONNECTED, SWT.BOLD, SWT.COLOR_DARK_RED);
statusWindow.refresh();
}
});
return result;
}
public abstract ScriptManager getScriptManager();
public void addFiles(String[] files) {
scriptTable.addFiles(files);
}
}