| /******************************************************************************* |
| * <copyright> |
| * |
| * Copyright (c) 2005, 2012 SAP AG. |
| * 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: |
| * fvelasco - Bug 323349 External feature invocation |
| * |
| * </copyright> |
| * |
| *******************************************************************************/ |
| package org.eclipse.graphiti.ui.internal.action; |
| |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| |
| import org.eclipse.core.commands.AbstractHandler; |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.commands.CommandStack; |
| import org.eclipse.graphiti.features.IFeature; |
| import org.eclipse.graphiti.features.context.impl.CustomContext; |
| import org.eclipse.graphiti.internal.command.GenericFeatureCommandWithContext; |
| import org.eclipse.graphiti.internal.command.ICommand; |
| import org.eclipse.graphiti.mm.pictograms.PictogramElement; |
| import org.eclipse.graphiti.tb.IToolBehaviorProvider; |
| import org.eclipse.graphiti.ui.internal.command.GefCommandWrapper; |
| import org.eclipse.graphiti.ui.platform.IConfigurationProvider; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.ui.handlers.HandlerUtil; |
| |
| /** |
| * @noinstantiate This class is not intended to be instantiated by clients. |
| * @noextend This class is not intended to be subclassed by clients. |
| */ |
| public class FeatureExecutionHandler extends AbstractHandler { |
| |
| public static final String COMMAND_ID = "org.eclipse.graphiti.ui.featureExecutionCommand"; //$NON-NLS-1$ |
| // org.eclipse.graphiti.ui.featureExecutionCommand |
| // org.eclipse.graphiti.ui.featureExecutionCommand |
| private static final String HINT_PARAMETER_ID = "org.eclipse.graphiti.ui.featureHint"; |
| |
| private IConfigurationProvider configurationProvider; |
| |
| public FeatureExecutionHandler(IConfigurationProvider configurationProvider) { |
| super(); |
| this.configurationProvider = configurationProvider; |
| } |
| |
| protected PictogramElement[] getSelectedPictogramElements(ExecutionEvent event) { |
| ISelection selectedObjects = HandlerUtil.getCurrentSelection(event); |
| List<Object> list = new ArrayList<Object>(); |
| if (selectedObjects instanceof IStructuredSelection) { |
| for (Iterator<?> iter = ((IStructuredSelection) selectedObjects).iterator(); iter.hasNext();) { |
| Object o = iter.next(); |
| if (o instanceof EditPart) { |
| EditPart editPart = (EditPart) o; |
| if (editPart.getModel() instanceof PictogramElement) { |
| list.add(editPart.getModel()); |
| } |
| } |
| } |
| } |
| |
| return list.toArray(new PictogramElement[0]); |
| } |
| |
| public Object execute(ExecutionEvent event) throws ExecutionException { |
| final IToolBehaviorProvider featureProvider = getToolBehaviorProvider(); |
| // CommandContainer commandContainer = new |
| // CommandContainer(featureProvider); |
| |
| PictogramElement pes[] = getSelectedPictogramElements(event); |
| CustomContext context = new CustomContext(pes); |
| IFeature feature = featureProvider.getCommandFeature(context, event.getParameter(HINT_PARAMETER_ID)); |
| if (feature != null && feature.canExecute(context)) { |
| // commandContainer.add(new |
| // GenericFeatureCommandWithContext(feature, context)); |
| executeOnCommandStack(new GenericFeatureCommandWithContext(feature, context)); |
| } |
| |
| // executeOnCommandStack(cmd); |
| |
| return null; |
| } |
| |
| private IToolBehaviorProvider getToolBehaviorProvider() { |
| return getConfigurationProvider().getDiagramTypeProvider().getCurrentToolBehaviorProvider(); |
| } |
| |
| protected IConfigurationProvider getConfigurationProvider() { |
| return configurationProvider; |
| } |
| |
| protected void executeOnCommandStack(ICommand command) { |
| CommandStack commandStack = getConfigurationProvider().getDiagramEditor().getEditDomain().getCommandStack(); |
| commandStack.execute(new GefCommandWrapper(command, getConfigurationProvider().getDiagramBehavior() |
| .getEditingDomain())); |
| } |
| } |