| /******************************************************************************* |
| * Copyright (c) 2006, 2012 Oracle 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: |
| * Oracle Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.bpel.ui.actions; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.bpel.ui.util.ModelHelper; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.gef.commands.Command; |
| import org.eclipse.gef.ui.actions.SelectionAction; |
| import org.eclipse.ui.IWorkbenchPart; |
| |
| |
| |
| /** |
| * @author Michal Chmielewski (michal.chmielewski@oracle.com) |
| * @date Jun 4, 2007 |
| * |
| */ |
| public abstract class EditAction extends SelectionAction { |
| |
| protected List<EObject> fSelection = new ArrayList<EObject>(); |
| |
| static protected EObject [] EMPTY_EOBJECT_ARRAY = {}; |
| |
| /** |
| * Brand new shiny edit action. |
| * |
| * @param aPart |
| */ |
| public EditAction(IWorkbenchPart aPart) { |
| super(aPart); |
| } |
| |
| |
| /** |
| * @see org.eclipse.gef.ui.actions.WorkbenchPartAction#calculateEnabled() |
| */ |
| @Override |
| protected boolean calculateEnabled () { |
| fSelection.clear(); |
| |
| List<?> selection = getSelectedObjects(); |
| if (selection.isEmpty()) { |
| return false; |
| } |
| |
| for(Object obj : selection) { |
| |
| if (obj instanceof EObject) { |
| EObject eObj = (EObject) obj; |
| fSelection.add(eObj); |
| } else { |
| fSelection.clear(); |
| break; |
| } |
| } |
| return fSelection.size() > 0; |
| } |
| |
| |
| protected abstract Command getCommand () ; |
| |
| |
| /** |
| * Trims the selection to the list of "parent" objects. So if you select a sequence and an |
| * activity within it, the result is the sequence element. |
| * |
| * @param aList a list of currently selected objects. |
| * |
| * @return the trimmed list. |
| */ |
| |
| |
| protected List<EObject> trimSelection (List<EObject> aList) { |
| // |
| ArrayList<EObject> trimmedList = new ArrayList<EObject>( aList.size() ); |
| |
| for(EObject next : aList) { |
| |
| boolean skipNext = false; |
| for(EObject parent : aList) { |
| if (next != parent && ModelHelper.isChildContainedBy(parent, next)) { |
| skipNext = true; |
| break; |
| } |
| } |
| |
| if (skipNext) { |
| continue; |
| } |
| |
| trimmedList.add(next); |
| } |
| return trimmedList; |
| } |
| |
| |
| /** |
| * @see org.eclipse.jface.action.Action#run() |
| */ |
| @Override |
| public void run () { |
| execute (getCommand()); |
| } |
| |
| } |