Package cucumber.eclipse.editor.editors

Source Code of cucumber.eclipse.editor.editors.Editor

package cucumber.eclipse.editor.editors;

import gherkin.lexer.LexingError;
import gherkin.parser.Parser;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.projection.ProjectionAnnotation;
import org.eclipse.jface.text.source.projection.ProjectionAnnotationModel;
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.editors.text.TextEditor;


public class Editor extends TextEditor {

  private ColorManager colorManager;
  private IEditorInput input;

  public Editor() {
    super();
    colorManager = new ColorManager();
    setSourceViewerConfiguration(new GherkinConfiguration(this, colorManager));
    setDocumentProvider(new GherkinDocumentProvider());
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createSourceViewer
   * (org.eclipse.swt.widgets.Composite,
   * org.eclipse.jface.text.source.IVerticalRuler, int)
   */
  @Override
  protected ISourceViewer createSourceViewer(Composite parent,
      IVerticalRuler ruler, int styles) {
    fAnnotationAccess = getAnnotationAccess();
    fOverviewRuler = createOverviewRuler(getSharedColors());

    ISourceViewer viewer = new ProjectionViewer(parent, ruler,
        getOverviewRuler(), isOverviewRulerVisible(), styles);

    // ensure decoration support has been created and configured.
    getSourceViewerDecorationSupport(viewer);

    return viewer;
  }

  private ProjectionSupport projectionSupport;
  private ProjectionAnnotationModel annotationModel;
  private Annotation[] oldAnnotations;
  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.texteditor.AbstractDecoratedTextEditor#createPartControl
   * (org.eclipse.swt.widgets.Composite)
   */
  @Override
  public void createPartControl(Composite parent) {
    super.createPartControl(parent);
    ProjectionViewer viewer = (ProjectionViewer) getSourceViewer();

    projectionSupport = new ProjectionSupport(viewer,
        getAnnotationAccess(), getSharedColors());
    projectionSupport.install();

    // turn projection mode on
    viewer.doOperation(ProjectionViewer.TOGGLE);

    annotationModel = viewer.getProjectionAnnotationModel();

    // register the editor scope context
    IContextService service = (IContextService) getSite().getService(IContextService.class);
    if (service != null) {
      service.activateContext("cucumber.eclipse.editor.featureEditorScope");
    }
  }

  public void updateFoldingStructure( List<Position> positions )
  {
    Map<Annotation, Position> newAnnotations = new HashMap<Annotation, Position>();
    for( Position p : positions ) {
      newAnnotations.put( new ProjectionAnnotation(), p );
    }
    annotationModel.modifyAnnotations(oldAnnotations, newAnnotations, null);
    oldAnnotations = newAnnotations.keySet().toArray( new Annotation[0] );
  }

  @Override
  protected void initializeEditor() {
    super.initializeEditor();
    setEditorContextMenuId("#CukeEditorContext");
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.ui.editors.text.TextEditor#doSetInput(org.eclipse.ui.IEditorInput
   * )
   */
  @Override
  protected void doSetInput(IEditorInput newInput) throws CoreException {
    super.doSetInput(newInput);
    input = newInput;
    validateAndMark();
  }

  public void dispose() {
    super.dispose();
    colorManager.dispose();
  }

  @Override
  protected void editorSaved() {
    super.editorSaved();
    validateAndMark();
  }

  private void validateAndMark() {
    IDocument doc = getDocumentProvider().getDocument(input);
    GherkinErrorMarker marker = new GherkinErrorMarker(
        ((IFileEditorInput) input).getFile(), doc);
    marker.removeExistingMarkers();

    Parser p = new Parser(marker, false);
    try {
      p.parse(doc.get(), "", 0);
    } catch (LexingError l) {
    }

  }
}
TOP

Related Classes of cucumber.eclipse.editor.editors.Editor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.