blob: f1e2bb2d3ab5b53d27cb548aa8c51ebacb727495 [file] [log] [blame]
/*******************************************************************************
* Licensed Materials - Property of IBM
* (c) Copyright IBM Corporation 2007,2009. All Rights Reserved.
*
* Note to U.S. Government Users Restricted Rights:
* Use, duplication or disclosure restricted by GSA ADP Schedule
* Contract with IBM Corp.
*******************************************************************************/
package org.eclipse.epf.authoring.ui.properties;
import java.util.List;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.epf.library.edit.util.DescriptorPropUtil;
import org.eclipse.epf.library.edit.util.LibraryEditUtil;
import org.eclipse.epf.library.edit.util.ProcessUtil;
import org.eclipse.epf.uma.Descriptor;
import org.eclipse.epf.uma.MethodElement;
import org.eclipse.epf.uma.TaskDescriptor;
/**
*
* @author achen
*
*/
public class MoveDescriptorCommand extends RemoveDescriptorCommand {
private Descriptor desc;
private List items;
private List methodElements;
private int toFeature;
private DescriptorPropUtil propUtil = DescriptorPropUtil.getDesciptorPropUtil();
public MoveDescriptorCommand(Descriptor desc, List items, int fromFeature, int toFeature) {
super(desc, items, fromFeature, false);
this.desc = desc;
this.items = items;
methodElements = ProcessUtil.getAssociatedElementList(items);
this.toFeature = toFeature;
}
public void execute() {
redo();
}
public void redo() {
super.redo();
EStructuralFeature feature = desc.eClass().getEStructuralFeature(toFeature);
Object value = desc.eGet(feature);
if (value instanceof List) {
List listValue = (List) value;
listValue.addAll(methodElements);
}
Descriptor parent = propUtil.getGreenParentDescriptor(desc);
if ((parent != null) && (parent instanceof TaskDescriptor)) {
TaskDescriptor greenParent = (TaskDescriptor)parent;
EReference ref = (EReference) greenParent.eClass().getEStructuralFeature(getFeatureID());
EReference eRef = LibraryEditUtil.getInstance().getExcludeFeature(ref);
List<MethodElement> parentExecludeList = (List<MethodElement>) greenParent.eGet(eRef);
for (MethodElement elem : (List<MethodElement>) methodElements) {
propUtil.removeGreenRefDelta(desc, elem, eRef, false);
if (parentExecludeList != null && ! parentExecludeList.contains(elem)) {
propUtil.addGreenRefDelta(desc, elem, eRef, true);
}
}
}
}
public void undo() {
super.undo();
EStructuralFeature feature = desc.eClass().getEStructuralFeature(toFeature);
Object value = desc.eGet(feature);
if (value instanceof List) {
List listValue = (List) value;
listValue.removeAll(methodElements);
}
Descriptor parent = propUtil.getGreenParentDescriptor(desc);
if ((parent != null) && (parent instanceof TaskDescriptor)) {
TaskDescriptor greenParent = (TaskDescriptor)parent;
EReference ref = (EReference) greenParent.eClass().getEStructuralFeature(getFeatureID());
EReference eRef = LibraryEditUtil.getInstance().getExcludeFeature(ref);
List<MethodElement> parentExecludeList = (List<MethodElement>) greenParent.eGet(eRef);
for (MethodElement elem : (List<MethodElement>) methodElements) {
propUtil.addGreenRefDelta(desc, elem, eRef, false);
if (parentExecludeList != null && ! parentExecludeList.contains(elem)) {
propUtil.removeGreenRefDelta(desc, elem, eRef, true);
}
}
}
}
}