| /******************************************************************************* |
| * 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.commands; |
| |
| import org.eclipse.bpel.ui.Messages; |
| import org.eclipse.bpel.ui.commands.util.AutoUndoCommand; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.EStructuralFeature; |
| import org.eclipse.osgi.util.NLS; |
| |
| |
| /** |
| * Generic "model-setting" command. Subclasses only need to implement get() and set() |
| * in terms of the particular model property they set. |
| */ |
| public class SetCommand extends AutoUndoCommand { |
| |
| /** Target */ |
| protected EObject fTarget; |
| |
| /** The structural feature we are setting */ |
| protected EStructuralFeature fFeature = null; |
| |
| /** New and old value for the structural feature */ |
| protected Object fNewValue, fOldValue; |
| |
| boolean fExecuteWasSkipped = false; |
| |
| |
| /** |
| * Brand new shiny SetStructuralFeatureCommand command. |
| * |
| * Typically, you would override getDefaultLabel() |
| * |
| * @param aTarget the target EMF object |
| * @param aValue the value to set |
| */ |
| |
| public SetCommand (EObject aTarget, Object aValue ) { |
| super(aTarget); |
| fTarget = aTarget; |
| fNewValue = aValue; |
| } |
| |
| |
| /** |
| * Brand new shiny SetStructuralFeatureCommand command. For example |
| * <pre> |
| * new SetCommand ( copyBpelObject, newTo, BPELPackage.eINSTANCE.getCopy_To() ); |
| * </pre> |
| * |
| * Typically, you would override getDefaultLabel() |
| * |
| * @param aTarget the target EMF object |
| * @param aValue the value to set |
| * @param aFeature the feature id |
| */ |
| |
| public SetCommand (EObject aTarget, Object aValue, EStructuralFeature aFeature ) { |
| this(aTarget,aValue); |
| fNewValue = aValue; |
| fFeature = aFeature; |
| } |
| |
| /** |
| * Get the value of the structural feature from the current target. |
| * @return the value of the structural feature. |
| */ |
| |
| public Object get() { |
| return fTarget.eGet(fFeature); |
| } |
| |
| /** |
| * Set the value of the structural feature. |
| * |
| * @param o |
| */ |
| public void set (Object o) { |
| fTarget.eSet(fFeature, o); |
| } |
| |
| |
| |
| // TODO: THIS SHOULDN'T EXIST. FIX. |
| public void setNewValue (EObject newValue) { |
| this.fNewValue = newValue; |
| } |
| |
| /** |
| * Return the default command label. |
| * @return the default label |
| */ |
| |
| @Override |
| public String getLabel() { |
| if (fFeature == null) { |
| return Messages.SetCommand_Change_1; |
| } |
| return NLS.bind(Messages.SetCommand_Change_2, fFeature.getName(), null ); |
| } |
| |
| |
| protected boolean hasNoEffect() { |
| if (fOldValue == null) return (fNewValue == null); |
| if (fNewValue == null) return false; |
| return fNewValue.equals(fOldValue); |
| } |
| |
| /** |
| * @see org.eclipse.bpel.ui.commands.util.AutoUndoCommand#canDoExecute() |
| */ |
| @Override |
| public boolean canDoExecute() { |
| return true; |
| } |
| |
| /** |
| * @see org.eclipse.bpel.ui.commands.util.AutoUndoCommand#doExecute() |
| */ |
| @Override |
| public void doExecute() { |
| fOldValue = get(); |
| if (hasNoEffect()) { |
| fExecuteWasSkipped = true; |
| } else { |
| set(fNewValue); |
| } |
| } |
| |
| |
| // TODO! |
| // public Resource[] getModifiedResources() { |
| // if (executeWasSkipped) return EMPTY_RESOURCE_ARRAY; |
| // return getResources(); |
| // } |
| } |