//package de.ovgu.cide.editor;
//
//import org.eclipse.core.runtime.CoreException;
//import org.eclipse.jface.action.Action;
//import org.eclipse.jface.text.BadLocationException;
//import org.eclipse.jface.text.ITextSelection;
//
//import cide.gast.IASTNode;
//import cide.gparser.ParseException;
//import de.ovgu.cide.af.Alternative;
//import de.ovgu.cide.editor.keepcolors.ColorCacheManager;
//
///**
// * Action that switches to another alternative of the selected code-fragment.
// *
// * @author Malte Rosenthal
// */
//public class SwitchAlternativeAction extends Action {
//
// private Alternative alternative;
// private SelectionActionsContext context;
// private IASTNode selectedNode;
//
// public SwitchAlternativeAction(SelectionActionsContext context, Alternative alternative, IASTNode selectedNode) {
// this.alternative = alternative;
// this.context = context;
// this.selectedNode = selectedNode;
//
// this.setChecked(alternative.isActive);
// this.setDescription("Switch to alternative >" + alternative.altID + "<");
// this.setEnabled(!alternative.isActive);
// this.setText(alternative.altID);
// this.setToolTipText("Switch to alternative >" + alternative.altID + "<");
// }
//
// @Override
// public void run() {
// ITextSelection selection = context.getTextSelection();
// ColoredEditorExtensions editorExtensions = context.getEditorExtensions();
// ColorCacheManager colorCacheManager = editorExtensions.getColorCacheManager();
//
// context.getEditorExtensions().getAltAnnotationManager().removeAnnotations();
//
// try {
// if (colorCacheManager != null) colorCacheManager.deactivate();
// editorExtensions.getDocument().replace(selection.getOffset(), selection.getLength(), alternative.text);
// if (colorCacheManager != null) colorCacheManager.restoreActivation();
// } catch (BadLocationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// editorExtensions.save();
// try {
// context.getSourceFile().getAltFeatureManager().activateAlternative(alternative, selectedNode);
// context.getEditorExtensions().getAltAnnotationManager().setAnnotations(context.getSourceFile().getAltFeatureManager().getAlternativeNodesWithActiveParent());
// } catch (CoreException e) {
// context.getEditorExtensions().markCoreException(e);
// return;
// } catch (ParseException e) {
// context.getEditorExtensions().markParseException(e);
// return;
// }
//
// // CIDECorePlugin.notifyListeners() funktioniert nicht richtig, wenn man am Ende des Dokuments eine Alternative
// // einsetzt, die kuerzer ist als der urspruengliche Text. Grund dafuer scheint zu sein, dass man nur die AST-Knoten
// // der alten Alternative zur Verfuegung hat, die man dem ASTColorChangedEvent gibt.
// // Bevor wir hier gross aufwendige Workarounds finden, invalidieren wir einfach alles - ist wahrscheinlich sogar
// // effizienter als z.B. das Ermitteln der neuen AST-Knoten.
// editorExtensions.invalidateTextPresentation();
// }
//}