package org.objectstyle.wolips.eomodeler.actions;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.AbstractOperation;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.objectstyle.wolips.eomodeler.core.model.EOModelException;
import org.objectstyle.wolips.eomodeler.core.model.EOModelObject;
import org.objectstyle.wolips.eomodeler.core.model.EOModelVerificationFailure;
public class CutItemOperation extends AbstractOperation {
private EOModelObject _parent;
private EOModelObject _child;
private EOModelObject _childClone;
public CutItemOperation(EOModelObject object) {
super("Cut");
_child = object;
}
@Override
public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
try {
Set<EOModelVerificationFailure> failures = new HashSet<EOModelVerificationFailure>();
_parent = (EOModelObject) _child._getModelParent();
_childClone = _child._cloneModelObject();
_child._removeFromModelParent(failures);
} catch (EOModelException e) {
throw new ExecutionException("Failed to cut object.", e);
}
return Status.OK_STATUS;
}
@Override
public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
return execute(monitor, info);
}
@Override
public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
try {
Set<EOModelVerificationFailure> failures = new HashSet<EOModelVerificationFailure>();
_child._addToModelParent(_parent, true, failures);
} catch (EOModelException e) {
throw new ExecutionException("Failed to readd object.", e);
}
return Status.OK_STATUS;
}
}