/******************************************************************************* * Copyright (c) 2003, 2005 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.jst.j2ee.internal.command; import java.util.Collection; import org.eclipse.emf.common.command.Command; import org.eclipse.emf.common.command.CommandWrapper; import org.eclipse.emf.common.command.StrictCompoundCommand; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.edit.command.AddCommand; import org.eclipse.emf.edit.command.PasteFromClipboardCommand; import org.eclipse.jst.j2ee.common.internal.util.IDUtility; import org.eclipse.jst.j2ee.internal.provider.J2EEUIEditingDomain; public class J2EEPasteFromClipboardOverrideCommand extends PasteFromClipboardCommand { private J2EECopyFromClipboardCommand copyCommand; private Command addBindingsCommand; private Command addExtensionsCommand; public J2EEPasteFromClipboardOverrideCommand(PasteFromClipboardCommand p) { super(p.getDomain(), p.getOwner(), p.getFeature(), p.getIndex(), false); } @Override public void doExecute() { super.doExecute(); executeAddBindings(); executeAddExtensions(); J2EEClipboard result = (J2EEClipboard) doGetResult(); for (int i = 0; i < result.size(); i++) { EObject o = (EObject) result.get(i); if (result.getBinding(o) != null || result.getExtension(o) != null) IDUtility.setDefaultID(o, true); } } @Override public Collection doGetAffectedObjects() { return copyCommand.getAffectedObjects(); } @Override public Collection doGetResult() { return copyCommand.getResult(); } @Override public void doRedo() { super.doRedo(); if (addBindingsCommand != null) addBindingsCommand.redo(); if (addExtensionsCommand != null) addExtensionsCommand.redo(); } @Override public void doUndo() { super.doUndo(); if (addBindingsCommand != null) addBindingsCommand.undo(); if (addExtensionsCommand != null) addExtensionsCommand.undo(); } protected void executeAddBindings() { if (addBindingsCommand != null && addBindingsCommand.canExecute()) addBindingsCommand.execute(); } protected void executeAddExtensions() { if (addExtensionsCommand != null && addExtensionsCommand.canExecute()) addExtensionsCommand.execute(); } public J2EEClipboard getCopiedClipoard() { return (J2EEClipboard) copyCommand.getResult(); } protected J2EEClipboard getJ2EEClipboard() { return (J2EEClipboard) domain.getClipboard(); } @Override protected boolean prepare() { if (getJ2EEClipboard() == null) return false; command = new StrictCompoundCommand(); copyCommand = new J2EECopyFromClipboardCommand((J2EEUIEditingDomain) domain); command.append(copyCommand); command.append(new CommandWrapper() { @Override protected Command createCommand() { Command addCommand = AddCommand.create(getDomain(), getOwner(), getFeature(), copyCommand.getResult(), getIndex()); return addCommand; } }); prepareBindingCommand(copyCommand); prepareExtensionCommand(copyCommand); boolean result; if (optimize) { // This will determine canExecute as efficiently as possible. // result = optimizedCanExecute(); } else { // This will actually execute the copy command in order to check if the add can execute. // result = command.canExecute(); } return result; } protected void prepareBindingCommand(final J2EECopyFromClipboardCommand cmd) { if (!getJ2EEClipboard().hasBindings()) return; //TODO make adaptable command // addBindingsCommand = new CommandWrapper() { // protected Command createCommand() { // Object bindingOwner = BindingAndExtensionHelper.getBindingAddOwner((EObject)getOwner()); // Collection bindingsCopies = getCopiedClipoard().getBindings().values(); // Command addCommand = AddCommand.create(getDomain(), bindingOwner, null, bindingsCopies, // CommandParameter.NO_INDEX); // return addCommand; // } // }; } protected void prepareExtensionCommand(final J2EECopyFromClipboardCommand cmd) { if (!getJ2EEClipboard().hasExtensions()) return; // TODO make adaptable command // addExtensionsCommand = new CommandWrapper() { // protected Command createCommand() { // Object extensionOwner = // BindingAndExtensionHelper.getExtensionAddOwner((EObject)getOwner()); // Collection extensionsCopies = getCopiedClipoard().getExtensions().values(); // Command addCommand = AddCommand.create(getDomain(), extensionOwner, null, // extensionsCopies, CommandParameter.NO_INDEX); // return addCommand; // } // }; } }