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