package jetbrains.mps.ide.java.platform.refactorings;
/*Generated by MPS */
import jetbrains.mps.openapi.editor.EditorContext;
import java.util.List;
import com.intellij.openapi.project.Project;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import jetbrains.mps.nodeEditor.EditorMessage;
import jetbrains.mps.nodeEditor.NodeHighlightManager;
import jetbrains.mps.nodeEditor.EditorComponent;
public abstract class DuplicatesProcessor<T> {
protected EditorContext myEditorContext;
public DuplicatesProcessor(EditorContext context) {
this.myEditorContext = context;
}
public void process(List<T> duplicates, Project project) {
boolean replaceAll = false;
for (T duplicate : ListSequence.fromList(duplicates)) {
if (!(replaceAll)) {
List<EditorMessage> messages = this.createEditorMessages(duplicate);
NodeHighlightManager highlightManager = ((EditorComponent) myEditorContext.getEditorComponent()).getHighlightManager();
highlightManager.mark(messages);
AskDialog dialog = new AskDialog(project, "Process Duplicates");
dialog.show();
AskDialog.DialogResults shouldSubstitute = dialog.getResult();
for (EditorMessage message : ListSequence.fromList(messages)) {
highlightManager.unmark(message);
}
highlightManager.repaintAndRebuildEditorMessages();
if (shouldSubstitute == AskDialog.DialogResults.Replace) {
this.substitute(duplicate);
} else if (shouldSubstitute == AskDialog.DialogResults.All) {
this.substitute(duplicate);
replaceAll = true;
} else if (shouldSubstitute == AskDialog.DialogResults.Cancel) {
break;
}
} else {
this.substitute(duplicate);
}
}
}
protected abstract List<EditorMessage> createEditorMessages(T duplicate);
public abstract void substitute(T duplicate);
}