/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.core.container;
import java.util.Collections;
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.edit.command.AddCommand;
import org.eclipse.emf.edit.command.CommandParameter;
import org.eclipse.emf.edit.command.CopyCommand;
import org.eclipse.emf.edit.command.PasteFromClipboardCommand;
import org.eclipse.emf.edit.domain.EditingDomain;
import org.teiid.designer.core.ModelEditorImpl;
/**
* PasteFromClipboardWithMappingCommand
*
* @since 8.0
*/
public class PasteFromClipboardWithMappingCommand extends PasteFromClipboardCommand {
/**
* This creates a command to add copies from the clipboard to the specified feature of the owner.
*/
public static Command create( EditingDomain domain,
Object owner,
Object feature ) {
return create(domain, owner, feature, CommandParameter.NO_INDEX);
}
/**
* This creates a command to add copies from the clipboard to the specified feature of the owner and at the given index.
*/
public static Command create( EditingDomain domain,
Object owner,
Object feature,
int index ) {
if (domain == null) {
return new PasteFromClipboardWithMappingCommand(domain, owner, feature, index, true);
}
Command command = domain.createCommand(PasteFromClipboardCommand.class, new CommandParameter(owner, feature,
Collections.EMPTY_LIST,
index));
return command;
}
private CopyCommand.Helper helper;
/**
* This constructs an instance from the domain, which provides access the clipboard collection via
* {@link EditingDomain#getCommandStack}.
*/
public PasteFromClipboardWithMappingCommand( EditingDomain domain,
Object owner,
Object feature,
int index ) {
this(domain, owner, feature, index, true);
}
public PasteFromClipboardWithMappingCommand( EditingDomain domain,
Object owner,
Object feature,
int index,
boolean optimize ) {
super(domain, owner, feature, index, optimize);
this.helper = new CopyCommand.Helper();
}
public CopyCommand.Helper getHelper() {
return this.helper;
}
@Override
protected boolean prepare() {
// Create a strict compound command to do a copy and then add the result
//
command = new StrictCompoundCommand();
// Create a command to copy the clipboard.
//
final Command copyCommand = ModelEditorImpl.createCopyCommand(domain, domain.getClipboard(), helper);
command.append(copyCommand);
// Create a proxy that will create an add command.
//
command.append(new CommandWrapper() {
@Override
protected Command createCommand() {
Command addCommand = AddCommand.create(getDomain(), getOwner(), getFeature(), copyCommand.getResult(), getIndex());
return addCommand;
}
});
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;
}
}