/*
* (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;
}
}