/******************************************************************************* * 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()); } }