public abstract class StructureCreator extends Object implements IStructureCreator2
IStructureCreator2
that attempts to use an IDocumentProvider
to obtain a shared document for an ITypedElement
.
Clients may subclass this class.
Constructor and Description |
---|
StructureCreator() |
Modifier and Type | Method and Description |
---|---|
boolean |
contentsEquals(Object node1,
char contributor1,
Object node2,
char contributor2,
boolean ignoreWhitespace,
ICompareFilter[] compareFilters)
Returns true if the two nodes are equal for comparison purposes.
|
ITypedElement |
createElement(Object element,
Object input,
IProgressMonitor monitor)
Default implementation of
createElement(Object, Object, IProgressMonitor)
that uses getPath(Object, Object) to determine the
path for the element, createStructure(Object, IProgressMonitor) to create the structure
and findElement(IStructureComparator, String[]) to find the
element in the structure. |
IStructureComparator |
createStructure(Object element,
IProgressMonitor monitor)
Creates a tree structure consisting of
IStructureComparator s
from the given object and returns its root object. |
protected abstract IStructureComparator |
createStructureComparator(Object element,
IDocument document,
ISharedDocumentAdapter sharedDocumentAdapter,
IProgressMonitor monitor)
Create an
IStructureComparator for the given element using the
contents available in the given document. |
void |
destroy(Object object)
Release any resources associated with the given object.
|
protected ITypedElement |
findElement(IStructureComparator structure,
String[] path)
Find the element at the given path in the given structure.
|
protected IDocumentPartitioner |
getDocumentPartitioner()
Return the partitioner to be associated with the document or
null is partitioning is not needed or if the subclass
overrode setupDocument(IDocument) directly. |
protected String |
getDocumentPartitioning()
Return the partitioning to which the partitioner returned from
getDocumentPartitioner() is to be associated. |
protected String[] |
getPath(Object element,
Object input)
Return the path of the element in the structure of it's containing input
or
null if the element is not contained in the input. |
IStructureComparator |
getStructure(Object input)
Creates a tree structure consisting of
IStructureComparator s
from the given object and returns its root object. |
IStructureComparator |
locate(Object element,
Object input)
Default implementation of
locate(Object, Object) that
uses getPath(Object, Object) to determine the
path for the element, getStructure(Object) to create the structure
and findElement(IStructureComparator, String[]) to find the
element in the structure. |
void |
save(IStructureComparator node,
Object input)
Default implementation of save that extracts the contents from
the document of an
IDocumentRange and sets it on the
input. |
protected void |
setupDocument(IDocument document)
Setup the newly created document as appropriate.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getContents, getName
public IStructureComparator getStructure(Object input)
IStructureCreator
IStructureComparator
s
from the given object and returns its root object.
Implementing this method typically involves parsing the input object.
In case of an error (e.g. a parsing error) the value null
is returned.getStructure
in interface IStructureCreator
input
- the object from which to create the tree of IStructureComparator
null
in case of errorpublic IStructureComparator createStructure(Object element, IProgressMonitor monitor) throws CoreException
IStructureCreator2
IStructureComparator
s
from the given object and returns its root object. Implementing this
method typically involves parsing the input object. In case of an error
(e.g. a parsing error) the value null
is returned.
This method is equivalent to
IStructureCreator.getStructure(Object)
with the exception that
the IStructureCreator2.destroy(Object)
method must be called with the returned
comparator as a parameter when the comparator is no longer
needed. This is done to allow structure creators
to make use of shared resources such a file buffer.
Also, the node returned from this method should adapt to an
ISharedDocumentAdapter
if the provided input has
a shared document adapter and it is being used by the
this creator. The convenience class SharedDocumentAdapterWrapper
is provided to allow the creator to wrap the adapter of the input
so that the proper key can be returned.
createStructure
in interface IStructureCreator2
element
- the object from which to create the tree of
IStructureComparator
monitor
- a progress monitor or null
if progress and cancelation is not requirednull
in case of
errorCoreException
IStructureCreator.getStructure(Object)
,
IStructureCreator2.destroy(Object)
protected abstract IStructureComparator createStructureComparator(Object element, IDocument document, ISharedDocumentAdapter sharedDocumentAdapter, IProgressMonitor monitor) throws CoreException
IStructureComparator
for the given element using the
contents available in the given document. If the provided
ISharedDocumentAdapter
is not null
then the
IStructureComparator
returned by this method must implement the
IDisposable
interface and disconnect from the adapter when the
comparator is disposed. The StructureDiffViewer
class will call
dispose if the IStructureComparator
also implements
IDisposable
. Other clients must do the same.
It should be noted that the provided ISharedDocumentAdapter
will provide the key associated with the given element when
ISharedDocumentAdapter.getDocumentKey(Object)
is called
for any IDocumentRange
node whose document matches the
provided document. Thus, this adapter should also be returned
by the structure comparator and its children when they are adapted
to an ISharedDocumentAdapter
.
element
- the elementdocument
- the document that has the contents for the elementsharedDocumentAdapter
- the shared document adapter from which the
document was obtained or null
if the document
is not shared.monitor
- a progress monitor or null
if progress is not requiredCoreException
protected void setupDocument(IDocument document)
IDocumentExtension3
interface
in case the document is shared via a file buffer.document
- a documentprotected IDocumentPartitioner getDocumentPartitioner()
null
is partitioning is not needed or if the subclass
overrode setupDocument(IDocument)
directly.protected String getDocumentPartitioning()
getDocumentPartitioner()
is to be associated. Return null
only if partitioning is not needed or if the subclass
overrode setupDocument(IDocument)
directly.IDocumentExtension3
public void save(IStructureComparator node, Object input)
IDocumentRange
and sets it on the
input. If the input is an IEncodedStreamContentAccessor
,
the charset of the input is used to extract the contents from the
document. If the input adapts to ISharedDocumentAdapter
and
the document of the IDocumentRange
matches that of the
input, then the save is issued through the shared document adapter.save
in interface IStructureCreator
node
- the node for which to save the new contentinput
- the object from which the structure tree was created in getStructure
IStructureCreator.save(org.eclipse.compare.structuremergeviewer.IStructureComparator, java.lang.Object)
public ITypedElement createElement(Object element, Object input, IProgressMonitor monitor) throws CoreException
createElement(Object, Object, IProgressMonitor)
that uses getPath(Object, Object)
to determine the
path for the element, createStructure(Object, IProgressMonitor)
to create the structure
and findElement(IStructureComparator, String[])
to find the
element in the structure. Subclasses may override.createElement
in interface IStructureCreator2
element
- the elementinput
- the containing inputmonitor
- a progress monitorCoreException
- if a parse error occurredIStructureCreator.locate(Object, Object)
,
IStructureCreator2.destroy(Object)
public IStructureComparator locate(Object element, Object input)
locate(Object, Object)
that
uses getPath(Object, Object)
to determine the
path for the element, getStructure(Object)
to create the structure
and findElement(IStructureComparator, String[])
to find the
element in the structure. Subclasses may override.locate
in interface IStructureCreator
element
- the elementinput
- the containing inputprotected ITypedElement findElement(IStructureComparator structure, String[] path)
createElement(Object, Object, IProgressMonitor)
and locate(Object, Object)
methods to find the element for
the given path.structure
- the structurepath
- the path of an element in the structurenull
protected String[] getPath(Object element, Object input)
null
if the element is not contained in the input. This method is
invoked from createElement(Object, Object, IProgressMonitor)
and
locate(Object, Object)
methods to determine
the path to be passed to findElement(IStructureComparator, String[])
.
By default, null
is returned. Subclasses may override.element
- the elementinput
- the inputnull
public void destroy(Object object)
IStructureCreator2
IStructureCreator2.createStructure(Object, IProgressMonitor)
or
IStructureCreator2.createElement(Object, Object, IProgressMonitor)
.destroy
in interface IStructureCreator2
object
- the object to be destroyedIStructureCreator2.createElement(Object, Object, IProgressMonitor)
,
IStructureCreator2.createStructure(Object, IProgressMonitor)
public boolean contentsEquals(Object node1, char contributor1, Object node2, char contributor2, boolean ignoreWhitespace, ICompareFilter[] compareFilters)
compareFilters
is not empty, the filters are applied to each
line of each node's text representation.node1
- contributor1
- either 'A', 'L', or 'R' for ancestor, left or right
contributornode2
- contributor2
- either 'A', 'L', or 'R' for ancestor, left or right
contributorignoreWhitespace
- if true
whitespace characters will be ignored
when determining equality. Note: Will bypass any custom ignore
whitespace behaviors contributed through implementations of
org.eclipse.compare.structuremergeviewer.IStructureCreator.getContents()
compareFilters
- the filters used to customize the comparison of lines of text.
Copyright (c) 2000, 2014 Eclipse Contributors and others. All rights reserved.Guidelines for using Eclipse APIs.