package org.archstudio.xarchadt.variability.ui.actions;
import java.util.List;
import org.archstudio.sysutils.UIDGenerator;
import org.archstudio.xadl3.variability_3_0.ChangeSet;
import org.archstudio.xadl3.variability_3_0.Variability;
import org.archstudio.xadl3.variability_3_0.Variability_3_0Factory;
import org.archstudio.xadl3.variability_3_0.Variability_3_0Package;
import org.archstudio.xarchadt.ObjRef;
import org.archstudio.xarchadt.XArchADTProxy;
import org.archstudio.xarchadt.variability.IXArchADTVariability;
import org.archstudio.xarchadt.variability.VariabilityUtils;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
public class AddChangeSetAction extends Action implements IHasXArchRef {
private static int count = 0;
IXArchADTVariability xarch;
ObjRef xArchRef = null;
public AddChangeSetAction(IXArchADTVariability xarch) {
super("Add Change Set");
setImageDescriptor(ImageDescriptor.createFromFile(getClass(), "add_change_set.gif"));
this.xarch = xarch;
setToolTipText(getText());
setXArchRef(null);
}
@Override
public void run() {
try {
if (xArchRef != null) {
Variability variability = VariabilityUtils.getVariability(xarch, xArchRef);
if (variability != null) {
Variability_3_0Factory factory = XArchADTProxy.proxy(xarch, Variability_3_0Package.eNS_URI);
ChangeSet changeSet = factory.createChangeSetOfChanges();
changeSet.setId(UIDGenerator.generateUID());
changeSet.setName("[New Change Set " + ++count + "]");
variability.getChangeSet().add(changeSet);
List<ObjRef> appliedChangeSets = xarch.getAppliedChangeSets(xArchRef);
appliedChangeSets.add(XArchADTProxy.unproxy(changeSet));
xarch.applyChangeSets(xArchRef, appliedChangeSets);
xarch.setActiveChangeSet(xArchRef, XArchADTProxy.unproxy(changeSet));
}
}
}
catch (Throwable t) {
t.printStackTrace();
MessageDialog.openError(null, "Error", "Unable to create change set: " + t.getMessage());
}
}
@Override
public ObjRef getXArchRef() {
return xArchRef;
}
@Override
public void setXArchRef(ObjRef xArchRef) {
this.xArchRef = xArchRef;
setEnabled(xArchRef != null && VariabilityUtils.getVariability(xarch, xArchRef) != null);
}
}