blob: 1c0327f387b9711cc451a7b258f06fd79b85f166 [file] [log] [blame]
/**
* Copyright (c) 2006 IBM Corporation.
* 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:
* IBM Corporation - Initial Implementation
*
*/
package org.eclipse.ptp.remotetools.environment.ui.views;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.IJobChangeListener;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerSorter;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.ptp.remotetools.environment.EnvironmentPlugin;
import org.eclipse.ptp.remotetools.environment.control.ITargetControl;
import org.eclipse.ptp.remotetools.environment.core.ITargetElement;
import org.eclipse.ptp.remotetools.environment.core.ITargetElementStatus;
import org.eclipse.ptp.remotetools.environment.core.ITargetEnvironmentEventListener;
import org.eclipse.ptp.remotetools.environment.core.ITargetEventListener;
import org.eclipse.ptp.remotetools.environment.core.TargetElement;
import org.eclipse.ptp.remotetools.environment.core.TargetEnvironmentManager;
import org.eclipse.ptp.remotetools.environment.core.TargetTypeElement;
import org.eclipse.ptp.remotetools.environment.extension.INode;
import org.eclipse.ptp.remotetools.environment.ui.UIEnvironmentPlugin;
import org.eclipse.ptp.remotetools.environment.ui.messages.Messages;
import org.eclipse.ptp.remotetools.environment.wizard.EnvironmentWizard;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeColumn;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.part.ViewPart;
/**
*
* The view uses a label provider to define how model objects should be
* presented in the view. Each view can present the same model objects using
* different labels and icons, if needed. Alternatively, a single label provider
* can be shared between views in order to ensure that objects of the same type
* are presented in the same way everywhere.
* <p>
*
* @author Ricardo M. Matinata
* @since 1.1
*/
public class RemoteToolsEnvironmentView extends ViewPart implements ISelectionChangedListener, ITargetEventListener {
private TreeViewer viewer;
private Action startAction;
private Action stopAction;
private Action resumeAction;
private Action pauseAction;
private Action createAction;
private Action editAction;
private Action removeAction;
private Action doubleClickAction;
private List<Action> workloadControllers = new ArrayList<Action>();
// Set the table column property names
private final String ENVIRONMENT_CONTROL_NAME = Messages.RemoteToolsEnvironmentView_0;
private final String ENVIRONMENT_CONTROL_STATUS = Messages.RemoteToolsEnvironmentView_1;
// Set column names
private final String[] columnNames = new String[] { ENVIRONMENT_CONTROL_NAME, ENVIRONMENT_CONTROL_STATUS };
// Model
private final TargetEnvironmentManager model = EnvironmentPlugin.getDefault().getTargetsManager();
private ITargetElement currentElement = null;
private final ITargetEnvironmentEventListener eventListener = new ITargetEnvironmentEventListener() {
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.remotetools.environment.core.
* ITargetEnvironmentEventListener
* #elementAdded(org.eclipse.ptp.remotetools
* .environment.core.TargetElement)
*/
public void elementAdded(TargetElement element) {
refresh();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ptp.remotetools.environment.core.
* ITargetEnvironmentEventListener
* #elementRemoved(org.eclipse.ptp.remotetools
* .environment.core.ITargetElement)
*/
public void elementRemoved(ITargetElement element) {
refresh();
}
};
/*
* The content provider class is responsible for providing objects to the
* view. It can wrap existing objects in adapters or simply return objects
* as-is. These objects may be sensitive to the current input of the view,
* or ignore it and always show the same content (like Task List, for
* example).
*/
private class ViewContentProvider implements ITreeContentProvider {
private final Object[] EMPTY = new Object[] {};
/**
* Gets the children for a TargetEnvironmentTypeElement or
* TargetEnvironmentConfigElement
*
* @param element
* the TargetEnvironmentTypeElement or
* TargetEnvironmentConfigElement
* @return Object[]
*/
public Object[] getChildren(Object element) {
if (element instanceof TargetTypeElement) {
return ((TargetTypeElement) element).getElements().toArray();
} else if (element instanceof ITargetElement) {
// gets the children of ITargetElement
return EnvironmentPlugin.getDefault().getChildrenProviderManager().getChildren((ITargetElement) element);
} else if (element instanceof INode) {
return ((INode) element).getChildren();
}
return EMPTY;
}
/**
* Gets the parent TargetEnvironmentTypeElement for a
* TargetEnvironmentConfigElement
*
* @param arg0
* the TargetEnvironmentConfigElement
* @return Object
*/
public Object getParent(Object element) {
if (element instanceof ITargetElement) {
return ((ITargetElement) element).getType();
} else if (element instanceof INode) {
return ((INode) element).getParent();
}
return null;
}
/**
* Gets whether this team or player has children
*
* @param arg0
* the TargetEnvironmentTypeElement or
* TargetEnvironmentConfigElement
* @return boolean
*/
public boolean hasChildren(Object element) {
return getChildren(element).length > 0;
}
/**
* Gets the elements for the table
*
* @param arg0
* the model
* @return Object[]
*/
public Object[] getElements(Object element) {
if (element instanceof Object[]) {
return (Object[]) element;
}
return getChildren(element);
}
/**
* Disposes any resources
*/
public void dispose() {
}
/**
* Called when the input changes
*
* @param viewer
* the parent viewer
* @param oldInput
* the old input
* @param newInput
* the new input
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
// Do nothing
}
}
private class ViewLabelProvider extends LabelProvider implements ITableLabelProvider {
private Image viewIcon;
public String getColumnText(Object obj, int index) {
String result = ""; //$NON-NLS-1$
switch (index) {
case 0:
if (obj instanceof INode) {
result = ((INode) obj).getDisplayText();
} else {
result = obj.toString();
}
break;
case 1:
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
int status = ((ITargetElement) obj).getStatus();
switch (status) {
case ITargetElementStatus.STARTED:
result = Messages.RemoteToolsEnvironmentView_3;
break;
case ITargetElementStatus.STOPPED:
result = Messages.RemoteToolsEnvironmentView_4;
break;
case ITargetElementStatus.RESUMED:
result = Messages.RemoteToolsEnvironmentView_5;
break;
case ITargetElementStatus.PAUSED:
result = Messages.RemoteToolsEnvironmentView_6;
break;
}
}
break;
}
return result;
}
public Image getColumnImage(Object obj, int index) {
if (index == 0) {
if (obj instanceof INode) {
return ((INode) obj).getIcon();
} else {
return getImage(obj);
}
}
return null;
}
@Override
public Image getImage(Object obj) {
if (TargetTypeElement.class.isAssignableFrom(obj.getClass())) {
URL url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/connect_create.gif"); //$NON-NLS-1$
ImageDescriptor imageMonitorDescriptor = ImageDescriptor.createFromURL(url);
viewIcon = imageMonitorDescriptor.createImage();
} else if (TargetElement.class.isAssignableFrom(obj.getClass())) {
URL url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/monitor_obj.gif"); //$NON-NLS-1$
ImageDescriptor imageMonitorDescriptor = ImageDescriptor.createFromURL(url);
viewIcon = imageMonitorDescriptor.createImage();
}
return viewIcon;
}
@Override
public void dispose() {
super.dispose();
if (viewIcon != null) {
viewIcon.dispose();
viewIcon = null;
}
}
}
class NameSorter extends ViewerSorter {
}
/**
* The constructor.
*/
public RemoteToolsEnvironmentView() {
}
/**
* This is a callback that will allow us to create the viewer and initialize
* it.
*/
@Override
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
viewer.setContentProvider(new ViewContentProvider());
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setSorter(new NameSorter());
defineTable(viewer);
viewer.setColumnProperties(columnNames);
// viewer.setInput(getViewSite());
viewer.setInput(model.getTypeElements().toArray());
viewer.refresh();
getSite().setSelectionProvider(viewer);
viewer.addSelectionChangedListener(this);
workloadControllers = getWorkloadControllers();
for (Action controller : workloadControllers) {
if (controller instanceof ISelectionChangedListener) {
viewer.addSelectionChangedListener((ISelectionChangedListener) controller);
}
}
model.addModelEventListener(this);
model.addModelChangedListener(eventListener);
makeActions();
hookContextMenu();
hookDoubleClickAction();
contributeToActionBars();
// Pack the window
parent.pack();
// Scroll to top
viewer.reveal(viewer.getTree().getItem(0));
}
private void defineTable(TreeViewer viewer) {
Tree t = viewer.getTree();
t.setHeaderVisible(true);
// 1st column with image/checkboxes - NOTE: The SWT.CENTER has no
// effect!!
TreeColumn column = new TreeColumn(t, SWT.LEFT, 0);
column.setText(ENVIRONMENT_CONTROL_NAME);
column.setWidth(650);
// 2nd column with task Description
column = new TreeColumn(t, SWT.RIGHT, 1);
column.setText(ENVIRONMENT_CONTROL_STATUS);
column.setWidth(50);
viewer.expandAll();
// Pack the columns
/*
* for (int i = 0, n = t.getColumnCount(); i < n; i++) {
* t.getColumn(i).pack(); }
*/
// Turn on the header and the lines
t.setHeaderVisible(true);
t.setLinesVisible(true);
}
private void hookContextMenu() {
MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
// Edit
// Remove
createAction.setEnabled(false);
ITargetElement temp = (ITargetElement) obj;
if (temp.getStatus() == ITargetElementStatus.STOPPED) {
editAction.setEnabled(true);
removeAction.setEnabled(true);
} else {
editAction.setEnabled(false);
removeAction.setEnabled(false);
}
RemoteToolsEnvironmentView.this.fillContextMenu(manager);
} else if (TargetTypeElement.class.isAssignableFrom(obj.getClass())) {
// Create
createAction.setEnabled(true);
editAction.setEnabled(false);
removeAction.setEnabled(false);
RemoteToolsEnvironmentView.this.fillContextMenu(manager);
}
}
}
});
Menu menu = menuMgr.createContextMenu(viewer.getControl());
viewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, viewer);
}
private void contributeToActionBars() {
IActionBars bars = getViewSite().getActionBars();
fillLocalPullDown(bars.getMenuManager());
fillLocalToolBar(bars.getToolBarManager());
}
private void fillLocalPullDown(IMenuManager manager) {
// manager.add(action1);
// manager.add(new Separator());
// manager.add(action2);
}
private void fillContextMenu(IMenuManager manager) {
manager.add(createAction);
manager.add(editAction);
manager.add(removeAction);
// Other plug-ins can contribute there actions here
manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}
private void fillLocalToolBar(IToolBarManager manager) {
// Other plug-ins can contribute there actions here
for (Action controller : workloadControllers) {
manager.add(controller);
}
manager.add(startAction);
manager.add(stopAction);
manager.add(resumeAction);
manager.add(pauseAction);
}
@SuppressWarnings("unchecked")
private List<Action> getWorkloadControllers() {
List<Action> actions = new ArrayList<Action>();
IExtensionRegistry registry = Platform.getExtensionRegistry();
IExtensionPoint extensionPoint = registry
.getExtensionPoint("org.eclipse.ptp.remotetools.environment.ui.workloadController"); //$NON-NLS-1$
IExtension[] extensions = extensionPoint.getExtensions();
try {
for (int i = 0; i < extensions.length; i++) {
IExtension extension = extensions[i];
IConfigurationElement[] elements = extension.getConfigurationElements();
for (int j = 0; j < elements.length; j++) {
IConfigurationElement element = elements[j];
if ("controllerDelegate".equals(element.getName())) { //$NON-NLS-1$
actions.add((Action) element.createExecutableExtension("class")); //$NON-NLS-1$
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return actions.isEmpty() ? (List<Action>) Collections.EMPTY_LIST : actions;
}
public void refresh() {
final Display display = viewer.getControl().getDisplay();
display.asyncExec(new Runnable() {
public void run() {
if (!viewer.getControl().isDisposed())
viewer.refresh(true);
}
});
}
private void makeActions() {
URL url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/run_exc.gif"); //$NON-NLS-1$
ImageDescriptor imageRun = ImageDescriptor.createFromURL(url);
url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/terminatedlaunch.gif"); //$NON-NLS-1$
ImageDescriptor imageStop = ImageDescriptor.createFromURL(url);
url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/suspend.gif"); //$NON-NLS-1$
ImageDescriptor imageSuspend = ImageDescriptor.createFromURL(url);
url = UIEnvironmentPlugin.getDefault().getBundle().getEntry("/icons/resume.gif"); //$NON-NLS-1$
ImageDescriptor imageResume = ImageDescriptor.createFromURL(url);
IWorkbenchPartSite site = this.getSite();
final Shell shell = site.getShell();
final IJobChangeListener ijob = new IJobChangeListener() {
public void aboutToRun(IJobChangeEvent event) {
}
public void awake(IJobChangeEvent event) {
}
public void done(IJobChangeEvent event) {
refresh();
}
public void running(IJobChangeEvent event) {
}
public void scheduled(IJobChangeEvent event) {
}
public void sleeping(IJobChangeEvent event) {
}
};
startAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
final Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
Job job = new Job(Messages.RemoteToolsEnvironmentView_17) {
@Override
protected IStatus run(IProgressMonitor monitor) {
startAction.setEnabled(false);
IStatus status = null;
ITargetElement element = null;
ITargetControl control = null;
try {
element = (ITargetElement) obj;
control = element.getControl();
if (control.create(monitor))
status = Status.OK_STATUS;
} catch (CoreException e) {
status = e.getStatus();
startAction.setEnabled(true);
}
return status;
}
};
job.setUser(true);
job.schedule();
job.addJobChangeListener(ijob);
return;
}
}
showMessage(Messages.RemoteToolsEnvironmentView_18, viewer);
}
};
startAction.setText(Messages.RemoteToolsEnvironmentView_19);
startAction.setToolTipText(Messages.RemoteToolsEnvironmentView_20);
startAction.setImageDescriptor(imageRun);
stopAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
final Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
Job job = new Job(Messages.RemoteToolsEnvironmentView_21) {
@Override
protected IStatus run(IProgressMonitor monitor) {
stopAction.setEnabled(false);
IStatus status = null;
try {
if (((ITargetElement) obj).getControl().kill(monitor))
status = Status.OK_STATUS;
} catch (CoreException e) {
status = e.getStatus();
stopAction.setEnabled(true);
}
return status;
}
};
job.setUser(true);
job.schedule();
job.addJobChangeListener(ijob);
return;
}
}
showMessage(Messages.RemoteToolsEnvironmentView_22, viewer);
}
};
stopAction.setText(Messages.RemoteToolsEnvironmentView_23);
stopAction.setToolTipText(Messages.RemoteToolsEnvironmentView_24);
stopAction.setImageDescriptor(imageStop);
// resume
resumeAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
final Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
Job job = new Job(Messages.RemoteToolsEnvironmentView_25) {
@Override
protected IStatus run(IProgressMonitor monitor) {
resumeAction.setEnabled(false);
IStatus status = null;
try {
if (((ITargetElement) obj).getControl().resume(monitor)) {
status = Status.OK_STATUS;
pauseAction.setEnabled(true);
}
} catch (CoreException e) {
status = e.getStatus();
resumeAction.setEnabled(true);
}
return status;
}
};
job.setUser(true);
job.schedule();
job.addJobChangeListener(ijob);
return;
}
}
showMessage(Messages.RemoteToolsEnvironmentView_26, viewer);
}
};
resumeAction.setText(Messages.RemoteToolsEnvironmentView_27);
resumeAction.setToolTipText(Messages.RemoteToolsEnvironmentView_28);
resumeAction.setImageDescriptor(imageResume);
// stop
pauseAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
final Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
Job job = new Job(Messages.RemoteToolsEnvironmentView_29) {
@Override
protected IStatus run(IProgressMonitor monitor) {
pauseAction.setEnabled(false);
IStatus status = null;
try {
if (((ITargetElement) obj).getControl().stop(monitor)) {
status = Status.OK_STATUS;
resumeAction.setEnabled(true);
}
} catch (CoreException e) {
status = e.getStatus();
pauseAction.setEnabled(true);
}
return status;
}
};
job.setUser(true);
job.schedule();
job.addJobChangeListener(ijob);
return;
}
}
showMessage(Messages.RemoteToolsEnvironmentView_30, viewer);
}
};
pauseAction.setText(Messages.RemoteToolsEnvironmentView_31);
pauseAction.setToolTipText(Messages.RemoteToolsEnvironmentView_32);
pauseAction.setImageDescriptor(imageSuspend);
// Create
createAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (TargetTypeElement.class.isAssignableFrom(obj.getClass())) {
EnvironmentWizard wizard = new EnvironmentWizard((TargetTypeElement) obj);
WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.create();
dialog.setBlockOnOpen(true);
dialog.open();
/*
* refresh handled by ITargetEnvironmentEventListener
*/
}
}
};
createAction.setText(Messages.RemoteToolsEnvironmentView_33);
createAction.setToolTipText(Messages.RemoteToolsEnvironmentView_34);
// Edit
editAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
EnvironmentWizard wizard = new EnvironmentWizard((ITargetElement) obj);
WizardDialog dialog = new WizardDialog(shell, wizard);
dialog.create();
dialog.setBlockOnOpen(true);
dialog.open();
refresh();
}
}
};
editAction.setText(Messages.RemoteToolsEnvironmentView_35);
editAction.setToolTipText(Messages.RemoteToolsEnvironmentView_36);
// Remove
removeAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
ITargetElement confElement = (ITargetElement) obj;
if (confElement.getStatus() != ITargetElementStatus.STARTED) {
if (showConfirm(Messages.RemoteToolsEnvironmentView_37, viewer)) {
confElement.getType().removeElement(confElement);
/*
* refresh handled by
* ITargetEnvironmentEventListener
*/
}
} else {
showMessage(Messages.RemoteToolsEnvironmentView_38, viewer);
}
}
}
};
removeAction.setText(Messages.RemoteToolsEnvironmentView_39);
removeAction.setToolTipText(Messages.RemoteToolsEnvironmentView_40);
doubleClickAction = new Action() {
@Override
public void run() {
ISelection selection = viewer.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (TargetTypeElement.class.isAssignableFrom(obj.getClass())) {
if (viewer.getExpandedState(obj)) {
viewer.setExpandedState(obj, false);
} else
viewer.setExpandedState(obj, true);
}
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
ITargetElement ele = (ITargetElement) obj;
try {
ITargetControl control = ele.getControl();
if (control.query() == ITargetElementStatus.STOPPED) {
editAction.run();
}
} catch (CoreException e) {
e.printStackTrace();
}
}
if (INode.class.isAssignableFrom(obj.getClass())) {
INode node = (INode) obj;
UIEnvironmentPlugin.getDefault().getDoubleClickHandlerManager().doubleClickExecute(node);
}
// showMessage("Double-click detected on "+obj.toString(),viewer);
}
};
stopAction.setEnabled(false);
resumeAction.setEnabled(false);
pauseAction.setEnabled(false);
createAction.setEnabled(false);
editAction.setEnabled(false);
removeAction.setEnabled(false);
}
private void hookDoubleClickAction() {
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
doubleClickAction.run();
}
});
}
private void showMessage(String message, TreeViewer viewer) {
MessageDialog.openInformation(viewer.getControl().getShell(), Messages.RemoteToolsEnvironmentView_41, message);
}
private boolean showConfirm(String message, TreeViewer viewer) {
return MessageDialog.openConfirm(viewer.getControl().getShell(), Messages.RemoteToolsEnvironmentView_42, message);
}
/**
* Passing the focus request to the viewer's control.
*/
@Override
public void setFocus() {
viewer.getControl().setFocus();
}
public void selectionChanged(SelectionChangedEvent event) {
ISelection selection = event.getSelection();
Object obj = ((IStructuredSelection) selection).getFirstElement();
if (obj != null) {
if (TargetElement.class.isAssignableFrom(obj.getClass())) {
currentElement = (ITargetElement) obj;
switch (currentElement.getStatus()) {
case ITargetElementStatus.STARTED:
targetStarted(currentElement);
break;
case ITargetElementStatus.STOPPED:
targetStopped(currentElement);
break;
case ITargetElementStatus.RESUMED:
targetResumed(currentElement);
break;
case ITargetElementStatus.PAUSED:
targetPaused(currentElement);
break;
}
} else {
currentElement = null;
startAction.setEnabled(false); // Create
stopAction.setEnabled(false); // Kill
resumeAction.setEnabled(false); // Resume
pauseAction.setEnabled(false); // Pause
}
}
}
public void targetStarted(ITargetElement event) {
if (event != null && currentElement != null) {
if (event.equals(currentElement)) {
startAction.setEnabled(false); // Create
stopAction.setEnabled(true); // Kill
resumeAction.setEnabled(true); // Resume
pauseAction.setEnabled(false); // Pause
editAction.setEnabled(false);
removeAction.setEnabled(false);
}
}
this.refresh();
}
public void targetStopped(ITargetElement event) {
if (event != null && currentElement != null) {
if (event.equals(currentElement)) {
startAction.setEnabled(true); // Create
stopAction.setEnabled(false); // Kill
resumeAction.setEnabled(false); // Resume
pauseAction.setEnabled(false); // Pause
editAction.setEnabled(true);
removeAction.setEnabled(true);
}
}
this.refresh();
}
public void targetPaused(ITargetElement event) {
if (event != null && currentElement != null) {
if (event.equals(currentElement)) {
startAction.setEnabled(false); // Create
stopAction.setEnabled(true); // Kill
resumeAction.setEnabled(true); // Resume
pauseAction.setEnabled(false); // Pause
}
}
this.refresh();
}
public void targetResumed(ITargetElement event) {
if (event != null && currentElement != null) {
if (event.equals(currentElement)) {
startAction.setEnabled(false); // Create
stopAction.setEnabled(true); // Kill
resumeAction.setEnabled(false); // Resume
pauseAction.setEnabled(true); // Pause
}
}
this.refresh();
}
public void handleStateChangeEvent(int event, ITargetElement from) {
switch (event) {
case ITargetElementStatus.STARTED:
targetStarted(from);
break;
case ITargetElementStatus.STOPPED:
targetStopped(from);
break;
case ITargetElementStatus.RESUMED:
targetResumed(from);
break;
case ITargetElementStatus.PAUSED:
targetPaused(from);
break;
}
}
@Override
public void dispose() {
super.dispose();
model.removeModelEventListener(this);
}
}