package org.eclipse.epf.library.edit.command; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.epf.library.edit.LibraryEditPlugin; import org.eclipse.epf.library.edit.uma.ExtendReferenceMap; import org.eclipse.epf.library.edit.util.MethodElementPropUtil; import org.eclipse.epf.uma.MethodElement; import org.eclipse.epf.uma.Practice; public class ChangeUdtCommand extends MethodElementSetPropertyCommand { private boolean remove = false; private List<Practice> items; private Set<Practice> affectedSet = new HashSet<Practice>(); public ChangeUdtCommand(MethodElement element, List<Practice> items, boolean remove) { super(element, MethodElementPropUtil.Me_references); this.items = items; this.remove = remove; } @Override public void redo() { MethodElementPropUtil propUtil = MethodElementPropUtil.getMethodElementPropUtil(); List<Practice> listValue = propUtil.getUdtList(element, true); if (listValue == null || items == null || items.isEmpty()) { return; } for (Practice p : items) { if (remove) { if (listValue.remove(p)) { affectedSet.add(p); propUtil.removeOpposite(ExtendReferenceMap.UdtList, element, p); } } else { if (! listValue.contains(p) && listValue.add(p)) { affectedSet.add(p); propUtil.addOpposite(ExtendReferenceMap.UdtList, element, p); } } } try { this.value = propUtil.getReferencesXml(this.element, false); } catch (Exception e) { LibraryEditPlugin.getDefault().getLogger().logError(e); } super.redo(); } @Override public void undo() { MethodElementPropUtil propUtil = MethodElementPropUtil.getMethodElementPropUtil(); try { for (Practice p : affectedSet) { if (remove) { propUtil.addOpposite(ExtendReferenceMap.UdtList, element, p); } else { propUtil.removeOpposite(ExtendReferenceMap.UdtList, element, p); } } this.value = propUtil.getReferencesXml(this.element, true); } catch (Exception e) { LibraryEditPlugin.getDefault().getLogger().logError(e); } super.undo(); } }