blob: e230cb231bc0810ed8512de049f9457f009826b6 [file] [log] [blame]
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;
public class ChangeQrCommand extends MethodElementSetPropertyCommand {
private boolean remove = false;
private List<MethodElement> items;
private Set<MethodElement> affectedSet = new HashSet<MethodElement>();
private String qualifierId;
private String oppositeName;
public ChangeQrCommand(MethodElement element, List<MethodElement> items, String qualifierId, boolean remove) {
super(element, MethodElementPropUtil.Me_references);
this.items = items;
this.remove = remove;
this.qualifierId = qualifierId;
this.oppositeName = ExtendReferenceMap.getOppositeName(ExtendReferenceMap.getQReferenceNameById(qualifierId));
}
@Override
public void redo() {
MethodElementPropUtil propUtil = MethodElementPropUtil.getMethodElementPropUtil();
List<MethodElement> listValue = propUtil.getQReferenceListById(element, qualifierId, true);
if (listValue == null || items == null || items.isEmpty()) {
return;
}
for (MethodElement p : items) {
if (remove) {
if (listValue.remove(p)) {
affectedSet.add(p);
propUtil.removeOpposite(oppositeName, element, p);
}
} else {
if (! listValue.contains(p) && listValue.add(p)) {
affectedSet.add(p);
propUtil.addOpposite(oppositeName, 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 (MethodElement p : affectedSet) {
if (remove) {
propUtil.addOpposite(oppositeName, element, p);
} else {
propUtil.removeOpposite(oppositeName, element, p);
}
}
this.value = propUtil.getReferencesXml(this.element, true);
} catch (Exception e) {
LibraryEditPlugin.getDefault().getLogger().logError(e);
}
super.undo();
}
}