public class DocumentRangeNode extends Object implements IDocumentRange, IStructureComparator, IEditableContent, IEncodedStreamContentAccessor
DocumentRangeNodes are created while parsing the document and represent
a semantic entity (e.g. a Java class or method).
As a consequence of the parsing a DocumentRangeNode maps to a range
of characters in the document.
Since a DocumentRangeNode implements the IStructureComparator
and IStreamContentAccessor interfaces it can be used as input to the
differencing engine. This makes it possible to perform
a structural diff on a document and have the nodes and leaves of the compare easily map
to character ranges within the document.
Subclasses may add additional state collected while parsing the document.
DifferencerRANGE_CATEGORY| Constructor and Description |
|---|
DocumentRangeNode(int typeCode,
String id,
IDocument document,
int start,
int length)
Creates a new
DocumentRangeNode for the given range within the specified
document. |
| Modifier and Type | Method and Description |
|---|---|
void |
addChild(DocumentRangeNode node)
Adds the given node as a child.
|
boolean |
equals(Object other)
Implementation based on
getID. |
Position |
getAppendPosition()
Returns the position that has been set with
setAppendPosition. |
String |
getCharset()
Returns the name of a charset encoding to be used when decoding this
stream accessor's contents into characters.
|
Object[] |
getChildren()
Returns an iterator for all children of this object or
null
if there are no children. |
InputStream |
getContents()
Returns an open
InputStream for this object which can be used to retrieve the object's content. |
IDocument |
getDocument()
Returns the underlying document.
|
String |
getId()
Returns this node's id.
|
Position |
getRange()
Returns a position that specifies a subrange in the underlying document,
or
null if this document range spans the whole underlying document. |
int |
getTypeCode()
Returns the type code of this node.
|
int |
hashCode()
Implementation based on
getID. |
boolean |
isEditable()
Returns
true if this object can be modified. |
ITypedElement |
replace(ITypedElement child,
ITypedElement other)
This method is called on a parent to add or remove a child,
or to copy the contents of a child.
|
void |
setAppendPosition(int pos)
Sets a position within the document range that can be used to (legally) insert
text without breaking the syntax of the document.
|
void |
setContent(byte[] content)
Replaces the current content with the given new bytes.
|
void |
setId(String id)
Sets this node's id.
|
void |
setLength(int length)
Sets the length of the range of this node.
|
public DocumentRangeNode(int typeCode,
String id,
IDocument document,
int start,
int length)
DocumentRangeNode for the given range within the specified
document. The typeCode is uninterpreted client data. The ID is used when comparing
two nodes with each other: i.e. the differencing engine performs a content compare
on two nodes if their IDs are equal.typeCode - a type code for this nodeid - an identifier for this nodedocument - document on which this node is based onstart - start position of range within documentlength - length of rangepublic IDocument getDocument()
IDocumentRangegetDocument in interface IDocumentRangepublic Position getRange()
IDocumentRangenull if this document range spans the whole underlying document.getRange in interface IDocumentRangenullpublic int getTypeCode()
public String getId()
equals and hashcode.public void setId(String id)
equals and hashcode.id - the new id for this nodepublic void addChild(DocumentRangeNode node)
node - the node to add as a childpublic Object[] getChildren()
IStructureComparatornull
if there are no children.getChildren in interface IStructureComparatorpublic void setLength(int length)
length - the length of the rangepublic void setAppendPosition(int pos)
E.g. when parsing a Java document the "append position" of a DocumentRangeNode
representing a Java class could be the character position just before the closing bracket.
Inserting the text of a new method there would not disturb the syntax of the class.
pos - the character position within the underlying document where text can be legally insertedpublic Position getAppendPosition()
setAppendPosition.
If setAppendPosition hasn't been called, the position after the last character
of this range is returned.public boolean equals(Object other)
getID.equals in interface IStructureComparatorequals in class Objectother - the object to compare this DocumentRangeNode against.true if the DocumentRangeNodesare equal; false otherwise.Object.equals(java.lang.Object)public int hashCode()
getID.public InputStream getContents()
IStreamContentAccessorInputStream for this object which can be used to retrieve the object's content.
The client is responsible for closing the stream when finished.
Returns null if this object has no streamable contents.getContents in interface IStreamContentAccessorpublic boolean isEditable()
IEditableContenttrue if this object can be modified.
If it returns false the other methods of this API must not be called.isEditable in interface IEditableContenttrue if this object can be modifiedpublic ITypedElement replace(ITypedElement child, ITypedElement other)
IEditableContent| add: | dest == null | src != null |
| remove: | dest != null | src == null |
| copy: | dest != null | src != null |
replace in interface IEditableContentchild - the existing child of this object to be replaced; if null a new child can be added.other - the new child to be added or replaced; if null an existing child can be removed.destpublic void setContent(byte[] content)
IEditableContentsetContent in interface IEditableContentcontent - this new contents replaces the old contentspublic String getCharset()
IEncodedStreamContentAccessornull if a proper
encoding cannot be determined.
Note: this method does not check whether the result is a supported
charset name. Callers should be prepared to handle
UnsupportedEncodingException where this charset is used.
getCharset in interface IEncodedStreamContentAccessornullIStreamContentAccessor.getContents()Guidelines for using Eclipse APIs. Copyright (c) IBM Corp. and others 2000, 2006. All rights reserved.