package jetbrains.mps.vcs.diff.changes;
/*Generated by MPS */
import org.jetbrains.mps.openapi.module.SModuleReference;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.vcs.diff.ChangeSet;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.extapi.model.SModelBase;
public class ModuleDependencyChange extends DependencyChange {
private SModuleReference myModuleReference;
private ModuleDependencyChange.DependencyType myType;
public ModuleDependencyChange(@NotNull ChangeSet changeSet, @NotNull SModuleReference moduleReference, @NotNull ModuleDependencyChange.DependencyType type, boolean delete) {
super(changeSet, delete);
myModuleReference = moduleReference;
myType = type;
}
@Override
public String toString() {
return ((isDelete() ? "Delete" : "Add")) + " " + myType.myName + " " + myModuleReference;
}
@NotNull
@Override
protected ModelChange createOppositeChange() {
return new ModuleDependencyChange(getChangeSet().getOppositeChangeSet(), myModuleReference, myType, !(isDelete()));
}
@Override
public void apply(@NotNull SModel model, @NotNull NodeCopier nodeCopier) {
if (isDelete()) {
myType.myDeleteTask.invoke(model, myModuleReference);
} else {
myType.myAddTask.invoke(model, myModuleReference);
}
}
public SModuleReference getModuleReference() {
return myModuleReference;
}
public ModuleDependencyChange.DependencyType getDependencyType() {
return myType;
}
public enum DependencyType {
USED_DEVKIT("Used Devkit", new _FunctionTypes._void_P2_E0<SModel, SModuleReference>() {
public void invoke(SModel model, SModuleReference module) {
((SModelBase) model).addDevKit(module);
}
}, new _FunctionTypes._void_P2_E0<SModel, SModuleReference>() {
public void invoke(SModel model, SModuleReference module) {
((SModelBase) model).deleteDevKit(module);
}
});
private String myName;
private _FunctionTypes._void_P2_E0<? super SModel, ? super SModuleReference> myAddTask;
private _FunctionTypes._void_P2_E0<? super SModel, ? super SModuleReference> myDeleteTask;
private DependencyType(String name, _FunctionTypes._void_P2_E0<? super SModel, ? super SModuleReference> addTask, _FunctionTypes._void_P2_E0<? super SModel, ? super SModuleReference> deleteTask) {
myName = name;
myAddTask = addTask;
myDeleteTask = deleteTask;
}
}
}