| /** |
| * 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); |
| } |
| } |