blob: ab6103904692fcaabfd17e4e847c55b9d9dfc512 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2004 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.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.edit.command.RemoveCommand;
/**
* Insert the type's description here. Creation date: (06/07/01 10:44:02 AM)
*
* @author: Administrator
*/
public class J2EERemoveOverrideCommand extends AbstractOverrideCommand {
private RemoveCommand bindingsRemoveCommand;
private RemoveCommand extensionsRemoveCommand;
private ResourceSet resourceSet;
/**
* J2EERemoveOverrideCommand constructor comment.
*/
protected J2EERemoveOverrideCommand() {
super();
}
public J2EERemoveOverrideCommand(RemoveCommand command) {
super(command);
}
protected RemoveCommand createRemoveCommand(Collection elements) {
return (RemoveCommand) RemoveCommand.create(getDomain(), elements);
}
/**
* 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() {
/*
* For each object being removed, check if it has a binding, and an extension Make
* collections of these, make a command parameter for each collection, an instantiate a
* remove command
*/
Collection objects = getRemoveCommand().getCollection();
List bindings = new ArrayList(objects.size());
List extensions = new ArrayList(objects.size());
Iterator it = objects.iterator();
while (it.hasNext()) {
EObject o = (EObject) it.next();
if (resourceSet == null)
resourceSet = o.eResource().getResourceSet();
// TODO make command adaptable
// EObject binding = BindingAndExtensionHelper.getBinding(o);
// if (binding != null) {
// bindings.add(binding);
// getJ2eeClipboard().addBinding(o, binding);
// }
// EObject extension = BindingAndExtensionHelper.getExtension(o);
// if (extension != null) {
// extensions.add(extension);
// getJ2eeClipboard().addExtension(o, extension);
// }
}
if (!bindings.isEmpty())
setBindingsRemoveCommand(createRemoveCommand(bindings));
if (!extensions.isEmpty())
setExtensionsRemoveCommand(createRemoveCommand(extensions));
executeAllChildren();
}
protected void executeAllChildren() {
executeNested(bindingsRemoveCommand);
executeNested(extensionsRemoveCommand);
getOverridable().doExecute();
}
protected void executeNested(RemoveCommand cmd) {
if (cmd != null && cmd.doCanExecute()) {
cmd.doExecute();
// Collection result = cmd.getResult();
//TODO
// BindingAndExtensionHelper.resolveAllProxies(result, resourceSet);
}
}
/**
* Insert the method's description here. Creation date: (06/07/01 1:32:44 PM)
*
* @return RemoveCommand
*/
protected RemoveCommand getBindingsRemoveCommand() {
return bindingsRemoveCommand;
}
/**
* Insert the method's description here. Creation date: (06/07/01 1:32:44 PM)
*
* @return RemoveCommand
*/
protected RemoveCommand getExtensionsRemoveCommand() {
return extensionsRemoveCommand;
}
public RemoveCommand getRemoveCommand() {
return (RemoveCommand) getOverridable();
}
protected boolean prepare() {
setJ2eeClipboard(new J2EEClipboard(getRemoveCommand().getCollection()));
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() {
executeAllChildren();
}
/**
* Insert the method's description here. Creation date: (06/07/01 1:32:44 PM)
*
* @param newBindingsRemoveCommand
* RemoveCommand
*/
protected void setBindingsRemoveCommand(RemoveCommand newBindingsRemoveCommand) {
bindingsRemoveCommand = newBindingsRemoveCommand;
}
/**
* Insert the method's description here. Creation date: (06/07/01 1:32:44 PM)
*
* @param newExtensionsRemoveCommand
* RemoveCommand
*/
protected void setExtensionsRemoveCommand(RemoveCommand newExtensionsRemoveCommand) {
extensionsRemoveCommand = newExtensionsRemoveCommand;
}
public void undo() {
getRemoveCommand().doUndo();
undoNested(bindingsRemoveCommand);
undoNested(extensionsRemoveCommand);
}
protected void undoNested(RemoveCommand cmd) {
if (cmd != null && cmd.doCanUndo())
cmd.doUndo();
}
}