/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
package net.sourceforge.phpdt.internal.corext.textmanipulation;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.util.Assert;
public class MultiTextEdit {
private List fChildren;
/**
* Creates a new composite text edit.
*/
public MultiTextEdit() {
fChildren = new ArrayList(3);
}
protected MultiTextEdit(List children) throws CoreException {
fChildren = new ArrayList(children.size());
for (Iterator iter = children.iterator(); iter.hasNext();) {
fChildren.add(((TextEdit) iter.next()).copy());
}
}
protected List getChildren() {
return fChildren;
}
/**
* Adds all TextEdits
managed by the given multt text edit.
*
* @param edit
* the multi text edit to be added.
*/
public void add(MultiTextEdit edit) {
Assert.isNotNull(edit);
fChildren.add(edit);
}
/**
* Adds a text edit.
*
* @param edit
* the text edit to be added
*/
public void add(TextEdit edit) {
Assert.isNotNull(edit);
fChildren.add(edit);
}
/**
* Returns the children managed by this text edit collection.
*
* @return the children of this composite text edit
*/
public Iterator iterator() {
return fChildren.iterator();
}
/**
* Connects this text edit to the given TextBufferEditor
.
* Note that this method should only be called by a
* TextBufferEditor
.
*
* This default implementation does nothing. Subclasses may override if
* needed.
*
* @param editor
* the text buffer editor this text edit has been added to
*/
public void connect(TextBufferEditor editor) throws CoreException {
for (Iterator iter = fChildren.iterator(); iter.hasNext();) {
Object element = iter.next();
if (element instanceof TextEdit)
editor.add((TextEdit) element);
else
editor.add((MultiTextEdit) element);
}
}
/**
* Creates and returns a copy of this text edit collection. The copy method
* should be implemented in a way so that the copy can be added to a
* different
* This default implementation returns
* TextBuffer
without causing any harm to the
* object from which the copy has been created.
*
* @return a copy of this object.
*/
public MultiTextEdit copy() throws CoreException {
return new MultiTextEdit(fChildren);
}
/**
* Returns the TextRange
that this text edit is going to
* manipulate. If this method is called before the
* MultiTextEdit
has been added to a
* TextBufferEditor
it may return
* null
to
* indicate this situation.
*
* @return the TextRange
s this TextEdit is going
* to manipulate
*/
public TextRange getTextRange() {
int size = fChildren.size();
if (size == 0)
return new TextRange(0, 0);
TextRange range = ((TextEdit) fChildren.get(0)).getTextRange();
int start = range.getOffset();
int end = range.getInclusiveEnd();
for (int i = 1; i < size; i++) {
range = ((TextEdit) fChildren.get(i)).getTextRange();
start = Math.min(start, range.getOffset());
end = Math.max(end, range.getInclusiveEnd());
}
return new TextRange(start, end - start + 1);
}
/**
* Returns the element modified by this text edit. The method may return
*
null
if the modification isn't related to a element or if
* the content of the modified text buffer doesn't follow any syntax.
* null
*
* @return the element modified by this text edit
*/
public Object getModifiedElement() {
return null;
}
}