/******************************************************************************* * Copyright (c) 2005, 2012 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.bpel.ui.actions; import java.util.ArrayList; import org.eclipse.bpel.ui.*; import org.eclipse.bpel.ui.commands.BPELCopyCommand; import org.eclipse.bpel.ui.commands.BPELPasteCommand; import org.eclipse.bpel.ui.commands.CompoundCommand; import org.eclipse.bpel.ui.commands.RestoreSelectionCommand; import org.eclipse.bpel.ui.commands.SetSelectionCommand; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.commands.Command; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorActionDelegate; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; /** * Create a duplicate entry if item in the process map. * * @author Michal Chmielewski (michal.chmielewski@oracle.com) * @date May 24, 2007 * */ public class BPELDuplicateAction extends BPELCopyAction implements IEditorActionDelegate { /** * The action id. */ public static final String ACTION_ID = BPELDuplicateAction.class.getName(); /** * */ public BPELDuplicateAction () { super(null); } /** * Duplicate selected objects in the editor. * * @param editorPart */ public BPELDuplicateAction(IWorkbenchPart editorPart) { super(editorPart); } @SuppressWarnings("nls") @Override protected void init() { super.init(); setText(Messages.BPELDuplicateAction_Duplicate_1); setToolTipText(Messages.BPELDuplicateAction_Duplicate_2); setId(ACTION_ID); setImageDescriptor( BPELUIPlugin.INSTANCE.getImageDescriptor( IBPELUIConstants.ICON_DUPLICATE_16_E )); setDisabledImageDescriptor ( BPELUIPlugin.INSTANCE.getImageDescriptor(IBPELUIConstants.ICON_DUPLICATE_16_D ) ); setEnabled(false); } /** * @see org.eclipse.bpel.ui.actions.BPELCopyAction#getCommand() */ @Override protected Command getCommand() { CompoundCommand cmd = new CompoundCommand(Messages.BPELCopyAction_Copy_3); final BPELEditor bpelEditor = (BPELEditor) getWorkbenchPart(); // 1. Restore selection cmd.add(new RestoreSelectionCommand(bpelEditor.getAdaptingSelectionProvider(), true, true)); // 2. Copy the objects that are selected. BPELCopyCommand copyCmd = new BPELCopyCommand(bpelEditor); if (fSelection.isEmpty()) { for (Object o : ((IStructuredSelection) bpelEditor.getSelection()).toList()) { if (o instanceof EObject) { fSelection.add((EObject) o); } } } if (fSelection.isEmpty()) { return null; } copyCmd.setObjectList( new ArrayList<EObject>(fSelection) ); cmd.add(copyCmd); // 3. Immediately paste them BPELPasteCommand pasteCmd = new BPELPasteCommand(bpelEditor) { /** * We override the canDoExecute, because the compound command in GEF will * check both of the commands for canDoExecute() before running the compound command. * Since the copy command is a prerequisite for the paste here, this condition will * never be true unless we just allow it. * * @see org.eclipse.bpel.ui.commands.BPELPasteCommand#canDoExecute() */ @Override public boolean canDoExecute() { return true; } }; pasteCmd.setTargetObject( fSelection.get(0) , true ); cmd.add(pasteCmd); // 4. Add the command to select the pasted elements cmd.add( new SetSelectionCommand(pasteCmd,false) ); return cmd; } /** * @see org.eclipse.ui.IEditorActionDelegate#setActiveEditor(org.eclipse.jface.action.IAction, org.eclipse.ui.IEditorPart) */ public void setActiveEditor (IAction action, IEditorPart targetEditor) { if (targetEditor instanceof BPELMultipageEditorPart) { targetEditor = ((BPELMultipageEditorPart) targetEditor).getActiveEditor(); } if (!(targetEditor instanceof BPELEditor)) { targetEditor = null; } setWorkbenchPart(targetEditor); if (targetEditor == null) { action.setEnabled(false); } } /** * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ public void run (IAction action) { run(); } /** * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged (IAction action, ISelection selection) { setSelection(selection); } }