Removed UI.
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpeclipse / phpeditor / PHPDocumentProvider.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpeclipse/phpeditor/PHPDocumentProvider.java
deleted file mode 100644 (file)
index 891f7f2..0000000
+++ /dev/null
@@ -1,601 +0,0 @@
-package net.sourceforge.phpeclipse.phpeditor;
-
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. and others.
-All rights reserved. This program and the accompanying materials
-are made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-
-Contributors:
-    IBM Corporation - Initial implementation
-    Klaus Hartlage - www.eclipseproject.de
-**********************************************************************/
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import net.sourceforge.phpdt.core.IProblemRequestor;
-import net.sourceforge.phpdt.core.compiler.IProblem;
-import net.sourceforge.phpdt.internal.ui.text.java.IProblemRequestorExtension;
-import net.sourceforge.phpeclipse.phpeditor.php.IPHPPartitionScannerConstants;
-import net.sourceforge.phpeclipse.phpeditor.php.PHPPartitionScanner;
-
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.core.resources.IMarkerDelta;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.text.DefaultLineTracker;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IDocumentPartitioner;
-import org.eclipse.jface.text.ILineTracker;
-import org.eclipse.jface.text.Position;
-import org.eclipse.jface.text.rules.DefaultPartitioner;
-import org.eclipse.jface.text.source.Annotation;
-import org.eclipse.jface.text.source.AnnotationModelEvent;
-import org.eclipse.jface.text.source.IAnnotationModel;
-import org.eclipse.jface.text.source.IAnnotationModelListener;
-import org.eclipse.jface.text.source.IAnnotationModelListenerExtension;
-import org.eclipse.jface.util.ListenerList;
-import org.eclipse.ui.IFileEditorInput;
-import org.eclipse.ui.editors.text.FileDocumentProvider;
-import org.eclipse.ui.part.FileEditorInput;
-import org.eclipse.ui.texteditor.MarkerAnnotation;
-import org.eclipse.ui.texteditor.ResourceMarkerAnnotationModel;
-
-/** 
- * The PHPDocumentProvider provides the IDocuments used by java editors.
- */
-
-public class PHPDocumentProvider extends FileDocumentProvider {
-
-  // private final static String[] TYPES= new String[] { PHPPartitionScanner.PHP, PHPPartitionScanner.JAVA_DOC, PHPPartitionScanner.JAVA_MULTILINE_COMMENT };
-  private final static String[] TYPES =
-    new String[] {
-      IPHPPartitionScannerConstants.PHP,
-      IPHPPartitionScannerConstants.PHP_MULTILINE_COMMENT,
-      IPHPPartitionScannerConstants.HTML,
-      IPHPPartitionScannerConstants.HTML_MULTILINE_COMMENT,
-      IPHPPartitionScannerConstants.JAVASCRIPT,
-      IPHPPartitionScannerConstants.CSS,
-                       IPHPPartitionScannerConstants.SMARTY,
-                       IPHPPartitionScannerConstants.SMARTY_MULTILINE_COMMENT };
-
-  private static PHPPartitionScanner PHP_PARTITION_SCANNER = null;
-  private static PHPPartitionScanner HTML_PARTITION_SCANNER = null;
-  private static PHPPartitionScanner XML_PARTITION_SCANNER = null;
-  private static PHPPartitionScanner SMARTY_PARTITION_SCANNER = null;
-
-  /** annotation model listener added to all created CU annotation models */
-  //           private GlobalAnnotationModelListener fGlobalAnnotationModelListener;   
-
-  /**
-                * Internal structure for mapping positions to some value. 
-                * The reason for this specific structure is that positions can
-                * change over time. Thus a lookup is based on value and not
-                * on hash value.
-                */
-  protected static class ReverseMap {
-
-    static class Entry {
-      Position fPosition;
-      Object fValue;
-    };
-
-    private List fList = new ArrayList(2);
-    private int fAnchor = 0;
-
-    public ReverseMap() {
-    }
-
-    public Object get(Position position) {
-
-      Entry entry;
-
-      // behind anchor
-      int length = fList.size();
-      for (int i = fAnchor; i < length; i++) {
-        entry = (Entry) fList.get(i);
-        if (entry.fPosition.equals(position)) {
-          fAnchor = i;
-          return entry.fValue;
-        }
-      }
-
-      // before anchor
-      for (int i = 0; i < fAnchor; i++) {
-        entry = (Entry) fList.get(i);
-        if (entry.fPosition.equals(position)) {
-          fAnchor = i;
-          return entry.fValue;
-        }
-      }
-
-      return null;
-    }
-
-    private int getIndex(Position position) {
-      Entry entry;
-      int length = fList.size();
-      for (int i = 0; i < length; i++) {
-        entry = (Entry) fList.get(i);
-        if (entry.fPosition.equals(position))
-          return i;
-      }
-      return -1;
-    }
-
-    public void put(Position position, Object value) {
-      int index = getIndex(position);
-      if (index == -1) {
-        Entry entry = new Entry();
-        entry.fPosition = position;
-        entry.fValue = value;
-        fList.add(entry);
-      } else {
-        Entry entry = (Entry) fList.get(index);
-        entry.fValue = value;
-      }
-    }
-
-    public void remove(Position position) {
-      int index = getIndex(position);
-      if (index > -1)
-        fList.remove(index);
-    }
-
-    public void clear() {
-      fList.clear();
-    }
-  };
-
-  /**
-                * Annotation model dealing with java marker annotations and temporary problems.
-                * Also acts as problem requestor for its compilation unit. Initialiy inactive. Must explicitly be
-                * activated.
-                */
-  protected class CompilationUnitAnnotationModel
-    extends ResourceMarkerAnnotationModel
-    implements IProblemRequestor, IProblemRequestorExtension {
-
-    private IFileEditorInput fInput;
-    private List fCollectedProblems;
-    private List fGeneratedAnnotations;
-    private IProgressMonitor fProgressMonitor;
-    private boolean fIsActive = false;
-
-    private ReverseMap fReverseMap = new ReverseMap();
-    private List fPreviouslyOverlaid = null;
-    private List fCurrentlyOverlaid = new ArrayList();
-
-    public CompilationUnitAnnotationModel(IFileEditorInput input) {
-      super(input.getFile());
-      fInput = input;
-    }
-
-    protected MarkerAnnotation createMarkerAnnotation(IMarker marker) {
-      return new JavaMarkerAnnotation(marker);
-    }
-
-    protected Position createPositionFromProblem(IProblem problem) {
-      int start = problem.getSourceStart();
-      if (start < 0)
-        return null;
-
-      int length = problem.getSourceEnd() - problem.getSourceStart() + 1;
-      if (length < 0)
-        return null;
-
-      return new Position(start, length);
-    }
-
-    protected void update(IMarkerDelta[] markerDeltas) {
-
-      super.update(markerDeltas);
-
-      //                                       if (markerDeltas != null && markerDeltas.length > 0) {
-      //                                               try {
-      //                                                       ICompilationUnit workingCopy = getWorkingCopy(fInput);
-      //                                                       if (workingCopy != null)
-      //                                                               workingCopy.reconcile(true, null);
-      //                                               } catch (JavaModelException ex) {
-      //                                                       handleCoreException(ex, ex.getMessage());
-      //                                               }
-      //                                       }
-    }
-
-    /*
-     * @see IProblemRequestor#beginReporting()
-     */
-    public void beginReporting() {
-      //                                       ICompilationUnit unit= getWorkingCopy(fInput);
-      //                                       if (unit != null && unit.getJavaProject().isOnClasspath(unit))
-      //                                               fCollectedProblems= new ArrayList();
-      //                                       else
-      fCollectedProblems = null;
-    }
-
-    /*
-     * @see IProblemRequestor#acceptProblem(IProblem)
-     */
-    public void acceptProblem(IProblem problem) {
-      if (isActive())
-        fCollectedProblems.add(problem);
-    }
-
-    /*
-     * @see IProblemRequestor#endReporting()
-     */
-    public void endReporting() {
-      if (!isActive())
-        return;
-
-      if (fProgressMonitor != null && fProgressMonitor.isCanceled())
-        return;
-
-      boolean isCanceled = false;
-      boolean temporaryProblemsChanged = false;
-      fPreviouslyOverlaid = fCurrentlyOverlaid;
-      fCurrentlyOverlaid = new ArrayList();
-
-      synchronized (fAnnotations) {
-
-        if (fGeneratedAnnotations.size() > 0) {
-          temporaryProblemsChanged = true;
-          removeAnnotations(fGeneratedAnnotations, false, true);
-          fGeneratedAnnotations.clear();
-        }
-
-        if (fCollectedProblems != null && fCollectedProblems.size() > 0) {
-
-          Iterator e = fCollectedProblems.iterator();
-          while (e.hasNext()) {
-
-            IProblem problem = (IProblem) e.next();
-
-            if (fProgressMonitor != null && fProgressMonitor.isCanceled()) {
-              isCanceled = true;
-              break;
-            }
-
-            Position position = createPositionFromProblem(problem);
-            if (position != null) {
-
-              //                                                                       ProblemAnnotation annotation= new ProblemAnnotation(problem);
-              //                                                                       overlayMarkers(position, annotation);                                                           
-              //                                                                       fGeneratedAnnotations.add(annotation);
-              //                                                                       addAnnotation(annotation, position, false);
-
-              temporaryProblemsChanged = true;
-            }
-          }
-
-          fCollectedProblems.clear();
-        }
-
-        removeMarkerOverlays(isCanceled);
-        fPreviouslyOverlaid.clear();
-        fPreviouslyOverlaid = null;
-      }
-
-      //                                       if (temporaryProblemsChanged)
-      //                                               fireModelChanged(new CompilationUnitAnnotationModelEvent(this, getResource(), false));
-    }
-
-    private void removeMarkerOverlays(boolean isCanceled) {
-      if (isCanceled) {
-        fCurrentlyOverlaid.addAll(fPreviouslyOverlaid);
-      } else if (fPreviouslyOverlaid != null) {
-        Iterator e = fPreviouslyOverlaid.iterator();
-        while (e.hasNext()) {
-          JavaMarkerAnnotation annotation = (JavaMarkerAnnotation) e.next();
-          annotation.setOverlay(null);
-        }
-      }
-    }
-
-    /**
-     * Overlays value with problem annotation.
-     * @param problemAnnotation
-     */
-    //                         private void setOverlay(Object value, ProblemAnnotation problemAnnotation) {
-    //                                 if (value instanceof  JavaMarkerAnnotation) {
-    //                                         JavaMarkerAnnotation annotation= (JavaMarkerAnnotation) value;
-    //                                         if (annotation.isProblem()) {
-    //                                                 annotation.setOverlay(problemAnnotation);
-    //                                                 fPreviouslyOverlaid.remove(annotation);
-    //                                                 fCurrentlyOverlaid.add(annotation);
-    //                                         }
-    //                                 }
-    //                         }
-
-    //                         private void  overlayMarkers(Position position, ProblemAnnotation problemAnnotation) {
-    //                                 Object value= getAnnotations(position);
-    //                                 if (value instanceof List) {
-    //                                         List list= (List) value;
-    //                                         for (Iterator e = list.iterator(); e.hasNext();)
-    //                                                 setOverlay(e.next(), problemAnnotation);
-    //                                 } else {
-    //                                         setOverlay(value, problemAnnotation);
-    //                                 }
-    //                         }
-
-    /**
-     * Tells this annotation model to collect temporary problems from now on.
-     */
-    private void startCollectingProblems() {
-      fCollectedProblems = new ArrayList();
-      fGeneratedAnnotations = new ArrayList();
-    }
-
-    /**
-     * Tells this annotation model to no longer collect temporary problems.
-     */
-    private void stopCollectingProblems() {
-      if (fGeneratedAnnotations != null) {
-        removeAnnotations(fGeneratedAnnotations, true, true);
-        fGeneratedAnnotations.clear();
-      }
-      fCollectedProblems = null;
-      fGeneratedAnnotations = null;
-    }
-
-    /*
-     * @see AnnotationModel#fireModelChanged()
-     */
-    //                         protected void fireModelChanged() {
-    //                                 fireModelChanged(new CompilationUnitAnnotationModelEvent(this, getResource(), true));
-    //                         }
-
-    /*
-     * @see IProblemRequestor#isActive()
-     */
-    public boolean isActive() {
-      return fIsActive && (fCollectedProblems != null);
-    }
-
-    /*
-     * @see IProblemRequestorExtension#setProgressMonitor(IProgressMonitor)
-     */
-    public void setProgressMonitor(IProgressMonitor monitor) {
-      fProgressMonitor = monitor;
-    }
-
-    /*
-     * @see IProblemRequestorExtension#setIsActive(boolean)
-     */
-    public void setIsActive(boolean isActive) {
-      if (fIsActive != isActive) {
-        fIsActive = isActive;
-        if (fIsActive)
-          startCollectingProblems();
-        else
-          stopCollectingProblems();
-      }
-    }
-
-    private Object getAnnotations(Position position) {
-      return fReverseMap.get(position);
-    }
-
-    /*
-     * @see AnnotationModel#addAnnotation(Annotation, Position, boolean)
-     */
-    protected void addAnnotation(Annotation annotation, Position position, boolean fireModelChanged) {
-      super.addAnnotation(annotation, position, fireModelChanged);
-
-      Object cached = fReverseMap.get(position);
-      if (cached == null)
-        fReverseMap.put(position, annotation);
-      else if (cached instanceof List) {
-        List list = (List) cached;
-        list.add(annotation);
-      } else if (cached instanceof Annotation) {
-        List list = new ArrayList(2);
-        list.add(cached);
-        list.add(annotation);
-        fReverseMap.put(position, list);
-      }
-    }
-
-    /*
-     * @see AnnotationModel#removeAllAnnotations(boolean)
-     */
-    protected void removeAllAnnotations(boolean fireModelChanged) {
-      super.removeAllAnnotations(fireModelChanged);
-      fReverseMap.clear();
-    }
-
-    /*
-     * @see AnnotationModel#removeAnnotation(Annotation, boolean)
-     */
-    protected void removeAnnotation(Annotation annotation, boolean fireModelChanged) {
-      Position position = getPosition(annotation);
-      Object cached = fReverseMap.get(position);
-      if (cached instanceof List) {
-        List list = (List) cached;
-        list.remove(annotation);
-        if (list.size() == 1) {
-          fReverseMap.put(position, list.get(0));
-          list.clear();
-        }
-      } else if (cached instanceof Annotation) {
-        fReverseMap.remove(position);
-      }
-
-      super.removeAnnotation(annotation, fireModelChanged);
-    }
-  };
-
-  protected static class GlobalAnnotationModelListener implements IAnnotationModelListener, IAnnotationModelListenerExtension {
-
-    private ListenerList fListenerList;
-
-    public GlobalAnnotationModelListener() {
-      fListenerList = new ListenerList();
-    }
-
-    /**
-     * @see IAnnotationModelListener#modelChanged(IAnnotationModel)
-     */
-    public void modelChanged(IAnnotationModel model) {
-      Object[] listeners = fListenerList.getListeners();
-      for (int i = 0; i < listeners.length; i++) {
-        ((IAnnotationModelListener) listeners[i]).modelChanged(model);
-      }
-    }
-
-    /**
-     * @see IAnnotationModelListenerExtension#modelChanged(AnnotationModelEvent)
-     */
-    public void modelChanged(AnnotationModelEvent event) {
-      Object[] listeners = fListenerList.getListeners();
-      for (int i = 0; i < listeners.length; i++) {
-        Object curr = listeners[i];
-        if (curr instanceof IAnnotationModelListenerExtension) {
-          ((IAnnotationModelListenerExtension) curr).modelChanged(event);
-        }
-      }
-    }
-
-    public void addListener(IAnnotationModelListener listener) {
-      fListenerList.add(listener);
-    }
-
-    public void removeListener(IAnnotationModelListener listener) {
-      fListenerList.remove(listener);
-    }
-  };
-
-  public PHPDocumentProvider() {
-    super();
-
-    //         fGlobalAnnotationModelListener= new GlobalAnnotationModelListener();
-
-  }
-
-  /* (non-Javadoc)
-   * Method declared on AbstractDocumentProvider
-   */
-  protected IDocument createDocument(Object element) throws CoreException {
-    IDocument document = super.createDocument(element);
-    if (document != null) {
-      //  int fileType = 0; // PHP 
-      IDocumentPartitioner partitioner = null;
-      if (element instanceof FileEditorInput) {
-        IFile file = (IFile) ((FileEditorInput) element).getAdapter(IFile.class);
-        String filename = file.getLocation().toString();
-        String extension = filename.substring(filename.lastIndexOf("."), filename.length());
-        //   System.out.println(extension);
-        if (extension.equalsIgnoreCase(".html") || extension.equalsIgnoreCase(".htm")) {
-          // html
-          partitioner = createHTMLPartitioner();
-        } else if (extension.equalsIgnoreCase(".xml")) {
-          // xml
-          partitioner = createXMLPartitioner();
-        } else if (extension.equalsIgnoreCase(".js")) {
-          // javascript
-          partitioner = createJavaScriptPartitioner();
-        } else if (extension.equalsIgnoreCase(".css")) {
-          // cascading style sheets
-          partitioner = createCSSPartitioner();
-        } else if (extension.equalsIgnoreCase(".tpl")) {
-          // smarty ?
-          partitioner = createSmartyPartitioner();
-        } else if (extension.equalsIgnoreCase(".inc")) {
-          // php include files ?
-          partitioner = createIncludePartitioner();
-        }
-      }
-
-      if (partitioner == null) {
-        partitioner = createPHPPartitioner();
-      }
-      document.setDocumentPartitioner(partitioner);
-      partitioner.connect(document);
-    }
-    return document;
-  }
-
-  /**
-   * Return a partitioner for .php files.
-   */
-  private IDocumentPartitioner createPHPPartitioner() {
-    return new DefaultPartitioner(getPHPPartitionScanner(), TYPES);
-  }
-
-  /**
-   * Return a partitioner for .html files.
-   */
-  private IDocumentPartitioner createHTMLPartitioner() {
-    return new DefaultPartitioner(getHTMLPartitionScanner(), TYPES);
-  }
-
-  private IDocumentPartitioner createXMLPartitioner() {
-    return new DefaultPartitioner(getXMLPartitionScanner(), TYPES);
-  }
-
-  private IDocumentPartitioner createJavaScriptPartitioner() {
-    return new DefaultPartitioner(getHTMLPartitionScanner(), TYPES);
-  }
-
-  private IDocumentPartitioner createCSSPartitioner() {
-    return new DefaultPartitioner(getHTMLPartitionScanner(), TYPES);
-  }
-
-  private IDocumentPartitioner createSmartyPartitioner() {
-    return new DefaultPartitioner(getSmartyPartitionScanner(), TYPES);
-  }
-
-  private IDocumentPartitioner createIncludePartitioner() {
-    return new DefaultPartitioner(getPHPPartitionScanner(), TYPES);
-  }
-  /**
-   * Return a scanner for creating php partitions.
-   */
-  private PHPPartitionScanner getPHPPartitionScanner() {
-    if (PHP_PARTITION_SCANNER == null)
-      PHP_PARTITION_SCANNER = new PHPPartitionScanner(IPHPPartitionScannerConstants.PHP_FILE);
-    return PHP_PARTITION_SCANNER;
-  }
-
-  /**
-   * Return a scanner for creating html partitions.
-   */
-  private PHPPartitionScanner getHTMLPartitionScanner() {
-    if (HTML_PARTITION_SCANNER == null)
-      HTML_PARTITION_SCANNER = new PHPPartitionScanner(IPHPPartitionScannerConstants.HTML_FILE);
-    return HTML_PARTITION_SCANNER;
-  }
-
-  /**
-   * Return a scanner for creating xml partitions.
-   */
-  private PHPPartitionScanner getXMLPartitionScanner() {
-    if (XML_PARTITION_SCANNER == null)
-      XML_PARTITION_SCANNER = new PHPPartitionScanner(IPHPPartitionScannerConstants.XML_FILE);
-    return XML_PARTITION_SCANNER;
-  }
-
-  /**
-   * Return a scanner for creating smarty partitions.
-   */
-  private PHPPartitionScanner getSmartyPartitionScanner() {
-    if (SMARTY_PARTITION_SCANNER == null)
-      SMARTY_PARTITION_SCANNER = new PHPPartitionScanner(IPHPPartitionScannerConstants.SMARTY_FILE);
-    return SMARTY_PARTITION_SCANNER;
-  }
-
-  /**
-   * Creates a line tracker working with the same line delimiters as the document
-   * of the given element. Assumes the element to be managed by this document provider.
-   * 
-   * @param element the element serving as blue print
-   * @return a line tracker based on the same line delimiters as the element's document
-   */
-  public ILineTracker createLineTracker(Object element) {
-    return new DefaultLineTracker();
-  }
-}