blob: cad6ce695f371c5712835a76901d723b8c72b54f [file] [log] [blame]
/*******************************************************************************
* 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
* https://www.eclipse.org/legal/epl-2.0/
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.j2ee.internal.command;
import java.util.ArrayList;
import java.util.Collection;
import org.eclipse.emf.common.command.AbstractCommand;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.jst.j2ee.internal.provider.J2EEUIEditingDomain;
import org.eclipse.wst.common.internal.emf.utilities.CopyGroup;
import org.eclipse.wst.common.internal.emf.utilities.EtoolsCopyUtility;
/**
* Insert the type's description here. Creation date: (06/11/01 8:45:21 AM)
*
* @author: Administrator
*/
public class J2EECopyFromClipboardCommand extends AbstractCommand {
private J2EEUIEditingDomain domain;
private J2EEClipboard result;
private EtoolsCopyUtility copyUtil;
public J2EECopyFromClipboardCommand(J2EEUIEditingDomain editingDomain) {
domain = editingDomain;
}
/**
* This will perform the command activity required for the effect. The effect of calling execute
* when canExecute returns false, or when canExecute hasn't been called, is undefined.
*/
public void execute() {
if (copyUtil != null)
return;
copyUtil = new EtoolsCopyUtility();
J2EEClipboard clipboard = domain.getJ2EEClipboard();
result = new J2EEClipboard(new ArrayList(0));
for (int i = 0; i < clipboard.size(); i++) {
CopyGroup group = new CopyGroup();
EObject o = (EObject) clipboard.get(i);
group.add(o);
EObject bnd = clipboard.getBinding(o);
if (bnd != null)
group.add(bnd);
EObject ext = clipboard.getExtension(o);
if (ext != null)
group.add(ext);
copyUtil.copy(group);
EObject copy = copyUtil.getCopy(o);
result.add(copy);
if (bnd != null)
result.addBinding(copy, copyUtil.getCopy(bnd));
if (ext != null)
result.addExtension(copy, copyUtil.getCopy(ext));
}
//Reset the util so redo will actuall redo
copyUtil = null;
}
@Override
public Collection getAffectedObjects() {
return result;
}
@Override
public Collection getResult() {
return result;
}
@Override
protected boolean prepare() {
return true;
}
/**
* This will again perform the command activity required to redo the effect after undoing the
* effect. The effect, if any, of calling redo before undo is called is undefined. Note that if
* you implement redo to call execute then any derived class will be restricted to by that
* decision also.
*/
public void redo() {
execute();
}
@Override
public void undo() {
result = null;
}
}