/******************************************************************************* * 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); } } } } }