/** * Copyright (c) 2011 committers of YAKINDU and others. * 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: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.simulation.ui.sexec.launch; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.ILaunchShortcut; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorPart; import org.yakindu.sct.simulation.core.launch.ISCTLaunchConfigurationType; import org.yakindu.sct.simulation.core.sexec.launch.ISCTLaunchParameters; /** * * @author andreas muelder * */ public class StatechartLaunchShortcut implements ILaunchShortcut, ISCTLaunchConfigurationType, ISCTLaunchParameters { public void launch(ISelection selection, String mode) { if (selection instanceof IStructuredSelection) { final IStructuredSelection structuredSelection = (IStructuredSelection) selection; final Object object = structuredSelection.getFirstElement(); if (object instanceof IAdaptable) { IFile file = (IFile) ((IAdaptable) object).getAdapter(IResource.class); launch(file, mode); } } } public void launch(IEditorPart editor, String mode) { IResource resource = (IResource) editor.getEditorInput().getAdapter(IResource.class); launch((IFile) resource, mode); } protected void launch(IFile file, String mode) { final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); final ILaunchConfigurationType configType = launchManager.getLaunchConfigurationType(getConfigType()); ILaunchConfiguration launchConfig = findLaunchConfiguration(configType, file); if (launchConfig != null) { DebugUITools.launch(launchConfig, mode); } else { ILaunchConfiguration launchConfiguration = createNewLaunchConfiguration(file); DebugUITools.launch(launchConfiguration, mode); } } protected String getConfigType() { return CONFIG_TYPE; } protected ILaunchConfiguration createNewLaunchConfiguration(IFile file) { final ILaunchManager launchManager = DebugPlugin.getDefault().getLaunchManager(); final ILaunchConfigurationType configType = launchManager.getLaunchConfigurationType(getConfigType()); try { ILaunchConfigurationWorkingCopy newConfig = configType.newInstance(null, launchManager.generateLaunchConfigurationName(file.getName())); newConfig.setAttribute(FILE_NAME, file.getFullPath().toString()); return newConfig.doSave(); } catch (CoreException e) { e.printStackTrace(); } throw new IllegalStateException(); } protected ILaunchConfiguration findLaunchConfiguration(ILaunchConfigurationType configType, IFile file) { ILaunchConfiguration[] configs; try { configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations(configType); for (ILaunchConfiguration config : configs) { String attribute = config.getAttribute(FILE_NAME, ""); if (attribute.equals(file.getFullPath().toString())) { return config; } } } catch (CoreException e) { e.printStackTrace(); } return null; } }