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; } } }