Package org.eclipse.wst.xml.ui.internal.provisional

Source Code of org.eclipse.wst.xml.ui.internal.provisional.XMLSourceEditingTextTools$NodeLocationImpl

/*******************************************************************************
* Copyright (c) 2001, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*     Jens Lukowski/Innoopract - initial renaming/restructuring
*    
*******************************************************************************/
package org.eclipse.wst.xml.ui.internal.provisional;

import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.ui.IEditorPart;
import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter;
import org.eclipse.wst.sse.core.internal.provisional.INodeNotifier;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
import org.eclipse.wst.sse.ui.StructuredTextEditor;
import org.eclipse.wst.sse.ui.internal.StructuredTextViewer;
import org.eclipse.wst.sse.ui.internal.provisional.extensions.ISourceEditingTextTools;
import org.eclipse.wst.sse.ui.internal.provisional.extensions.breakpoint.NodeLocation;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMNode;
import org.eclipse.wst.xml.core.internal.provisional.document.IDOMText;
import org.w3c.dom.Document;
import org.w3c.dom.Node;

/**
* Implements ISourceEditingTextTools interface
*/
public class XMLSourceEditingTextTools implements IDOMSourceEditingTextTools, INodeAdapter {

  protected class NodeLocationImpl implements NodeLocation {
    private IDOMNode node;

    public NodeLocationImpl(IDOMNode xmlnode) {
      super();
      node = xmlnode;
    }

    public int getEndTagEndOffset() {
      if (node.getEndStructuredDocumentRegion() != null) {
        return node.getEndStructuredDocumentRegion().getEndOffset();
      }
      return -1;
    }

    public int getEndTagStartOffset() {
      if (node.getEndStructuredDocumentRegion() != null) {
        return node.getEndStructuredDocumentRegion().getStartOffset();
      }
      return -1;
    }

    public int getStartTagEndOffset() {
      if (node.getStartStructuredDocumentRegion() != null) {
        return node.getStartStructuredDocumentRegion().getEndOffset();
      }
      return -1;
    }

    public int getStartTagStartOffset() {
      if (node.getStartStructuredDocumentRegion() != null) {
        return node.getStartStructuredDocumentRegion().getStartOffset();
      }
      return -1;
    }
  }

  StructuredTextEditor fTextEditor = null;

  public int getCaretOffset() {
    StructuredTextViewer stv = fTextEditor.getTextViewer();
    if ((stv != null) && (stv.getTextWidget() != null) && !stv.getTextWidget().isDisposed()) {
      return stv.widgetOffset2ModelOffset(stv.getTextWidget().getCaretOffset());
    }
    return 0;
  }

  public IDocument getDocument() {
    return fTextEditor.getDocumentProvider().getDocument(fTextEditor.getEditorInput());
  }

  public Document getDOMDocument() {
    return (Document) fTextEditor.getModel().getAdapter(Document.class);
  }

  /*
   * If similar function is needed, composite it around the text editor's
   * instance. Removed also because it returns an alread-released model
   *
   * public Document getDOMDocument(IMarker marker) { if (marker == null)
   * return null;
   *
   * IResource res = marker.getResource(); if (res == null || !(res
   * instanceof IFile)) return null;
   *
   * IModelManager mm = StructuredModelManager.getModelManager();
   * IStructuredModel model = null; try { model =
   * mm.getExistingModelForRead((IFile) res); if (model == null || !(model
   * instanceof IDOMModel)) return null;
   *
   * return ((IDOMModel) model).getDocument(); } finally { if (model !=
   * null) model.releaseFromRead(); } }
   */

  public IEditorPart getEditorPart() {
    return fTextEditor.getEditorPart();
  }

  public Node getNode(int offset) throws BadLocationException {
    Node node = null;
    if ((0 <= offset) && (offset <= getDocument().getLength())) {
      node = (Node) fTextEditor.getModel().getIndexedRegion(offset);
    }
    else {
      throw new BadLocationException();
    }
    return node;
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.wst.sse.ui.extensions.SourceEditingTextTools#getNodeLocation(org.w3c.dom.Node)
   */
  public NodeLocation getNodeLocation(Node node) {
    if ((node.getNodeType() == Node.ELEMENT_NODE) && (node instanceof IDOMNode)) {
      return new NodeLocationImpl((IDOMNode) node);
    }
    return null;
  }

  public String getPageLanguage(Node node) {
    return ""; //$NON-NLS-1$
  }

  public ITextSelection getSelection() {
    return (ITextSelection) fTextEditor.getSelectionProvider().getSelection();
  }

  /**
   * IExtendedMarkupEditor method
   */
  // public List getSelectedNodes() {
  // ViewerSelectionManager vsm = getViewerSelectionManager();
  // return (vsm != null) ? vsm.getSelectedNodes() : null;
  // }
  public int getStartOffset(Node node) {
    if ((node == null) || !(node instanceof IDOMText)) {
      return -1;
    }

    IStructuredDocumentRegion fnode = ((IDOMText) node).getFirstStructuredDocumentRegion();
    return fnode.getStartOffset();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.wst.sse.core.core.INodeAdapter#isAdapterForType(java.lang.Object)
   */
  public boolean isAdapterForType(Object type) {
    return ISourceEditingTextTools.class.equals(type);
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.wst.sse.core.core.INodeAdapter#notifyChanged(org.eclipse.wst.sse.core.core.INodeNotifier,
   *      int, java.lang.Object, java.lang.Object, java.lang.Object, int)
   */
  public void notifyChanged(INodeNotifier notifier, int eventType, Object changedFeature, Object oldValue, Object newValue, int pos) {
  }

  public void setTextEditor(StructuredTextEditor editor) {
    fTextEditor = editor;
  }
}
TOP

Related Classes of org.eclipse.wst.xml.ui.internal.provisional.XMLSourceEditingTextTools$NodeLocationImpl

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.