Java tutorial
// Copyright (c) 2003-2008 by Leif Frenzel. All rights reserved. // This code is made available under the terms of the Eclipse Public License, // version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html package net.sf.eclipsefp.haskell.debug.ui.internal.launch; import java.util.ArrayList; import java.util.List; import net.sf.eclipsefp.haskell.core.util.ResourceUtil; import net.sf.eclipsefp.haskell.debug.core.internal.launch.IInteractiveLaunchOperationDelegate; import net.sf.eclipsefp.haskell.ui.HaskellUIPlugin; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.ui.ILaunchShortcut2; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorPart; /** <p>Shortcut to launch interactive sessions from the 'Run' action set.</p> * * <p>Subclasses must be declared in the <code>plugin.xml</code> and then * need only provide an implementation of * <code>IInteractiveLaunchOperationDelegate</code> that knows about * specific details.</p> * * @author Leif Frenzel */ public abstract class InteractiveLaunchShortcut implements ILaunchShortcut2 { // methods to be implemented by subclasses ////////////////////////////////////////// /** <p>returns the delegate that knows about the specific details * for launching an interactive environment.</p> */ public abstract IInteractiveLaunchOperationDelegate getDelegate(); // interface methods of ILaunchShortcut /////////////////////////////////////// @Override public void launch(final ISelection selection, final String mode) { // launched from workbench selection if (selection != null && selection instanceof IStructuredSelection) { List<IResource> list = new ArrayList<>(); IStructuredSelection ssel = (IStructuredSelection) selection; for (Object element : ssel.toList()) { IResource res = ResourceUtil.findResource(element); if (res != null) { list.add(res); } } IResource[] ress = ResourceUtil.toResourceArray(list); launch(ress, mode); } } @Override public void launch(final IEditorPart editor, final String mode) { // launched from editor part IResource resource = ResourceUtil.findResource(editor.getEditorInput()); launch(new IResource[] { resource }, mode); } // helping methods ////////////////// protected void launch(final IResource[] resources, final String mode) { // TODO put this into a Job and use the progress monitor // also: need a public job family in core (with icon in ui) try { IProgressMonitor monitor = new NullProgressMonitor(); new InteractiveLaunchOperation(getDelegate()).launch(resources, mode, monitor); } catch (CoreException cex) { // TODO show msg box String msg = "Could not launch Haskell application."; //$NON-NLS-1$ HaskellUIPlugin.log(msg, cex); } } @Override public IResource getLaunchableResource(final IEditorPart paramIEditorPart) { return null; } @Override public IResource getLaunchableResource(final ISelection paramISelection) { return null; } @Override public ILaunchConfiguration[] getLaunchConfigurations(final IEditorPart paramIEditorPart) { IResource resource = ResourceUtil.findResource(paramIEditorPart.getEditorInput()); try { List<ILaunchConfiguration> cs = InteractiveLaunchOperation.findConfig(getDelegate(), new IResource[] { resource }, getConfigTypeName()); return cs.toArray(new ILaunchConfiguration[cs.size()]); } catch (CoreException cex) { HaskellUIPlugin.log(cex); } return null; } /** * configuration type name. Subclasess can override if they use a different type but want ot piggy back on this implementation * @return */ protected String getConfigTypeName() { return InteractiveLaunchOperation.INTERACTIVE_CONFIG_TYPE; } /** * this allows launching a new configuration */ @Override public ILaunchConfiguration[] getLaunchConfigurations(final ISelection paramISelection) { try { List<ILaunchConfiguration> cs = InteractiveLaunchOperation.findConfig(getDelegate(), ResourceUtil.getResourcesFromSelection(paramISelection), getConfigTypeName()); return cs.toArray(new ILaunchConfiguration[cs.size()]); } catch (CoreException cex) { HaskellUIPlugin.log(cex); } return null; } }