/**
* Copyright (c) 2002-2006 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 - Initial API and implementation
*/
package org.eclipse.emf.edit.command;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.eclipse.emf.common.command.Command;
import org.eclipse.emf.common.command.CommandWrapper;
import org.eclipse.emf.edit.EMFEditPlugin;
import org.eclipse.emf.edit.domain.EditingDomain;
/**
* This works just like {@link RemoveCommand} but also sets the removed objects to the {@link EditingDomain}.
* In fact, the implementation is just a proxy for remove command.
*/
public class CutToClipboardCommand extends CommandWrapper
{
/**
* This creates a command to remove an object
* and set it to the clipboard.
*/
public static Command create(EditingDomain domain, Object value)
{
if (domain == null)
{
return new CutToClipboardCommand(domain, RemoveCommand.create(domain, value));
}
else
{
return domain.createCommand(CutToClipboardCommand.class, new CommandParameter(null, null, Collections.singleton(value)));
}
}
/**
* This creates a command to remove a particular value from the specified feature of the owner
* and set it to the clipboard.
*/
public static Command create(EditingDomain domain, Object owner, Object feature, Object value)
{
if (domain == null)
{
return new CutToClipboardCommand(domain, RemoveCommand.create(domain, owner, feature, value));
}
else
{
return domain.createCommand(CutToClipboardCommand.class, new CommandParameter(owner, feature, Collections.singleton(value)));
}
}
/**
* This creates a command to remove multiple objects
* and set it to the clipboard.
*/
public static Command create(EditingDomain domain, Collection<?> collection)
{
if (domain == null)
{
return new CutToClipboardCommand(domain, RemoveCommand.create(domain, collection));
}
else
{
return domain.createCommand(CutToClipboardCommand.class, new CommandParameter(null, null, collection));
}
}
/**
* This creates a command to remove a collection of values from the specified feature of the owner
* and set it to the clipboard.
*/
public static Command create(EditingDomain domain, Object owner, Object feature, Collection<?> collection)
{
if (domain == null)
{
return new CutToClipboardCommand(domain, RemoveCommand.create(domain, owner, feature, collection));
}
else
{
return domain.createCommand(CutToClipboardCommand.class, new CommandParameter(owner, feature, collection));
}
}
/**
* This caches the label.
*/
protected static final String LABEL = EMFEditPlugin.INSTANCE.getString("_UI_CutToClipboardCommand_label");
/**
* This caches the description.
*/
protected static final String DESCRIPTION = EMFEditPlugin.INSTANCE.getString("_UI_CutToClipboardCommand_description");
/**
* This is the editing domain in which this command operates.
*/
protected EditingDomain domain;
/**
* This is the original clipboard value before execute.
*/
protected Collection<Object> oldClipboard;
/**
* This constructs an instance that yields the result of the given command as its clipboard.
*/
public CutToClipboardCommand(EditingDomain domain, Command command)
{
super(LABEL, DESCRIPTION, command);
this.domain = domain;
}
@Override
public void execute()
{
super.execute();
if (domain != null)
{
oldClipboard = domain.getClipboard();
domain.setClipboard(new ArrayList<Object>(command.getResult()));
}
}
@Override
public void undo()
{
super.undo();
if (domain != null)
{
domain.setClipboard(oldClipboard);
}
}
@Override
public void redo()
{
super.redo();
if (domain != null)
{
oldClipboard = domain.getClipboard();
domain.setClipboard(new ArrayList<Object>(command.getResult()));
}
}
/**
* This gives an abbreviated name using this object's own class' name, without package qualification,
* followed by a space separated list of <tt>field:value</tt> pairs.
*/
@Override
public String toString()
{
StringBuffer result = new StringBuffer(super.toString());
result.append(" (domain: " + domain + ")");
result.append(" (oldClipboard: " + oldClipboard + ")");
return result.toString();
}
}