Refactory: Remove UI from core plugin.
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / corext / textmanipulation / TextBufferEditor.java
diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/TextBufferEditor.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/corext/textmanipulation/TextBufferEditor.java
deleted file mode 100644 (file)
index 3ea69bc..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * (c) Copyright IBM Corp. 2000, 2001.
- * All Rights Reserved.
- */
-package net.sourceforge.phpdt.internal.corext.textmanipulation;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import net.sourceforge.phpdt.internal.corext.textmanipulation.TextEditNode.RootNode;
-
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
-
-// import net.sourceforge.phpdt.core.IJavaModelStatusConstants;
-// import net.sourceforge.phpdt.core.JavaModelException;
-//
-// import net.sourceforge.phpdt.internal.corext.Assert;
-
-/**
- * A <code>TextBufferEditor</code> manages a set of <code>TextEdit</code>s
- * and applies them as a whole to a <code>TextBuffer</code>. Added
- * <code>TextEdit</code>s must not overlap. The only exception from this rule
- * are insertion point. There can be more than one insert point at the same text
- * position. Clients should use the method <code>
- * canPerformEdits</code> to
- * validate if all added text edits follow these rules.
- * <p>
- * Clients can attach more than one <code>TextBufferEditor</code> to a single
- * <code>
- * TextBuffer</code>. If so <code>canPerformEdits</code> validates
- * all text edits from all text buffer editors working on the same text buffer.
- */
-public class TextBufferEditor {
-
-       private TextBuffer fBuffer;
-
-       private List fEdits;
-
-       private RootNode fRootNode;
-
-       private int fNumberOfNodes;
-
-       private int fConnectCount;
-
-       private int fMode;
-
-       /* package */static final int UNDEFINED = 0;
-
-       /* package */static final int REDO = 1;
-
-       /* package */static final int UNDO = 2;
-
-       /**
-        * Creates a new <code>TextBufferEditor</code> for the given
-        * <code>TextBuffer</code>.
-        * 
-        * @param the
-        *            text buffer this editor is working on.
-        */
-       public TextBufferEditor(TextBuffer buffer) {
-               fBuffer = buffer;
-               // Assert.isNotNull(fBuffer);
-               fEdits = new ArrayList();
-       }
-
-       /**
-        * Returns the text buffer this editor is working on.
-        * 
-        * @return the text buffer this editor is working on
-        */
-       public TextBuffer getTextBuffer() {
-               return fBuffer;
-       }
-
-       /**
-        * Adds a <code>TextEdit</code> to this text editor. Adding a
-        * <code>TextEdit</code> to a <code>TextBufferEditor</code> transfers
-        * ownership of the edit to the editor. So after a edit has been added to a
-        * editor the creator of that edit <b>must</b> not continue modifing it.
-        * 
-        * @param edit
-        *            the text edit to be added
-        * @exception CoreException
-        *                if the text edit can not be added to this text buffer
-        *                editor
-        */
-       public void add(TextEdit edit) throws CoreException {
-               // Assert.isTrue(fMode == UNDEFINED || fMode == REDO);
-               internalAdd(edit);
-               fMode = REDO;
-       }
-
-       /**
-        * Adds a <code>MultiTextEdit</code> to this text editor. Adding a
-        * <code>MultiTextEdit</code> to a <code>TextBufferEditor</code>
-        * transfers ownership of the edit to the editor. So after a edit has been
-        * added to a editor the creator of that edit <b>must</b> not continue
-        * modifing it.
-        * 
-        * @param edit
-        *            the multi text edit to be added
-        * @exception CoreException
-        *                if the multi text edit can not be added to this text
-        *                buffer editor
-        */
-       public void add(MultiTextEdit edit) throws CoreException {
-               // Assert.isTrue(fMode == UNDEFINED || fMode == REDO);
-               edit.connect(this);
-               fMode = REDO;
-       }
-
-       /**
-        * Adds a <code>UndoMemento</code> to this text editor. Adding a
-        * <code>UndoMemento</code> to a <code>TextBufferEditor</code> transfers
-        * ownership of the memento to the editor. So after a memento has been added
-        * to a editor the creator of that memento <b>must</b> not continue
-        * modifing it.
-        * 
-        * @param undo
-        *            the undo memento to be added
-        * @exception CoreException
-        *                if the undo memento can not be added to this text buffer
-        *                editor
-        */
-       public void add(UndoMemento undo) throws CoreException {
-               // Assert.isTrue(fMode == UNDEFINED);
-               List list = undo.fEdits;
-               // Add them reverse since we are adding undos.
-               for (int i = list.size() - 1; i >= 0; i--) {
-                       internalAdd((TextEdit) list.get(i));
-               }
-               fMode = undo.fMode;
-       }
-
-       /**
-        * Checks if the <code>TextEdit</code> added to this text editor can be
-        * executed.
-        * 
-        * @return <code>true</code> if the edits can be executed. Return
-        *         <code>false
-        *      </code>otherwise. One major reason why text edits
-        *         cannot be executed is a wrong offset or length value of a
-        *         <code>TextEdit</code>.
-        */
-       public boolean canPerformEdits() {
-               if (fRootNode != null)
-                       return true;
-               fRootNode = buildTree();
-               if (fRootNode == null)
-                       return false;
-               if (fRootNode.validate(fBuffer.getLength()))
-                       return true;
-
-               fRootNode = null;
-               return false;
-       }
-
-       /**
-        * Clears the text buffer editor.
-        */
-       public void clear() {
-               fRootNode = null;
-               fMode = UNDEFINED;
-               fEdits.clear();
-       }
-
-       /**
-        * Executes the text edits added to this text buffer editor and clears all
-        * added text edits.
-        * 
-        * @param pm
-        *            a progress monitor to report progress or <code>null</code>
-        *            if no progress is desired.
-        * @return an object representing the undo of the executed
-        *         <code>TextEdit</code>s
-        * @exception CoreException
-        *                if the edits cannot be executed
-        */
-       public UndoMemento performEdits(IProgressMonitor pm) throws CoreException {
-               if (pm == null)
-                       pm = new NullProgressMonitor();
-
-               int size = fEdits.size();
-               if (size == 0)
-                       return new UndoMemento(fMode == UNDO ? REDO : UNDO);
-
-               if (fRootNode == null) {
-                       fRootNode = buildTree();
-                       if (fRootNode == null || !fRootNode.validate(fBuffer.getLength())) {
-                               // throw new JavaModelException(null,
-                               // IJavaModelStatusConstants.NO_ELEMENTS_TO_PROCESS);
-                       }
-               }
-               try {
-                       pm.beginTask("", fNumberOfNodes + 10); //$NON-NLS-1$
-                       UndoMemento undo = null;
-                       if (fMode == REDO) {
-                               undo = fRootNode.performDo(fBuffer, pm);
-                               fRootNode.performedDo();
-                       } else {
-                               undo = fRootNode.performUndo(fBuffer, pm);
-                               fRootNode.performedUndo();
-                       }
-                       pm.worked(10);
-                       return undo;
-               } finally {
-                       pm.done();
-                       clear();
-               }
-       }
-
-       // ---- Helper methods
-       // ------------------------------------------------------------
-
-       private RootNode buildTree() {
-               TextEditNode[] nodes = new TextEditNode[fEdits.size()];
-               for (int i = fEdits.size() - 1; i >= 0; i--) {
-                       nodes[i] = TextEditNode.create((TextEdit) fEdits.get(i));
-               }
-               fNumberOfNodes = nodes.length;
-               Arrays.sort(nodes, new TextEditNodeComparator());
-               RootNode root = new RootNode(fBuffer.getLength());
-               for (int i = 0; i < nodes.length; i++) {
-                       root.add(nodes[i]);
-               }
-               return root;
-       }
-
-       private void internalAdd(TextEdit edit) throws CoreException {
-               edit.index = fEdits.size();
-               edit.isSynthetic = fConnectCount > 0;
-               try {
-                       fConnectCount++;
-                       edit.connect(this);
-               } finally {
-                       fConnectCount--;
-               }
-               fEdits.add(edit);
-       }
-}