Package org.eclipse.compare.structuremergeviewer

# Class StructureRootNode

java.lang.Object
org.eclipse.compare.structuremergeviewer.DocumentRangeNode
org.eclipse.compare.structuremergeviewer.StructureRootNode

All Implemented Interfaces:
  `IDocumentRange`, `IEditableContent`, `IEditableContentExtension`, `IEncodedStreamContentAccessor`, `IStreamContentAccessor`, `ITypedElement`, `IStructureComparator`, `IAdaptable`, `IDisposable`

public class StructureRootNode extends DocumentRangeNode implements IDisposable, ITypedElement
A node that acts as the root of the tree returned from a `StructureCreator`. This node performs the following tasks tasks:

1. It adapts to an `ISharedDocumentAdapter` that provides the proper document key (@see `getAdapter(Class)`).
2. It invokes `IStructureCreator.save(IStructureComparator, Object)` when `nodeChanged(DocumentRangeNode)` is called.
3. It disposes of the `IDisposable` provided in the constructor when `dispose()` is called.

This class may be subclassed by clients.

Since:
  3.3

## Field Summary

Fields
Modifier and Type
Field
Description
`static final String`
`ROOT_ID`
The string constant (value `"root"`) that is used as the id of the root node.
`static final int`
`ROOT_TYPE`
The integer constant (value `0`) that is used as the type code of the root node.

### Fields inherited from interface org.eclipse.compare.contentmergeviewer.IDocumentRange

`RANGE_CATEGORY`

### Fields inherited from interface org.eclipse.compare.ITypedElement

`FOLDER_TYPE, TEXT_TYPE, UNKNOWN_TYPE`

## Constructor Summary

Constructors
Constructor
Description
`StructureRootNode(IDocument document, Object input, StructureCreator creator, ISharedDocumentAdapter adapter)`
Create the structure root node.

## Method Summary

Modifier and Type
Method
Description
`void`
`dispose()`
Disposes of this service.
`<T> T`
`getAdapter(Class<T> adapter)`
Override `IAdaptable.getAdapter(Class)` in order to provide an `ISharedDocumentAdapter` that provides the proper look up key based on the input from which this structure node was created.
`Image`
`getImage()`
Returns an image for this object.
`String`
`getName()`
Returns the name of this object.
`String`
`getType()`
Returns the type of this object.
`boolean`
`isReadOnly()`
Return whether the typed element being displayed is read-only. a read-only element will require a call to validateEdit before the element can be modified on disk.
`protected void`
`nodeChanged(DocumentRangeNode node)`
Override in order to invoke `IStructureCreator.save(IStructureComparator, Object)` when the contents of a node have changed.
`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.
`IStatus`
`validateEdit(Shell shell)`
If the element is read-only, this method should be called to attempt to make it writable.

### Methods inherited from class org.eclipse.compare.structuremergeviewer.DocumentRangeNode

`addChild, equals, getAppendPosition, getCharset, getChildren, getContents, getDocument, getId, getParentNode, getRange, getTypeCode, hashCode, internalSetContents, isEditable, setAppendPosition, setContent, setId, setLength`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### ROOT_TYPE

public static final int ROOT_TYPE
The integer constant (value `0`) that is used as the type code of the root node.

See Also:
  - `DocumentRangeNode.getTypeCode()`
  - Constant Field Values

### ROOT_ID

public static final String ROOT_ID
The string constant (value `"root"`) that is used as the id of the root node.

See Also:
  - `DocumentRangeNode.getId()`
  - Constant Field Values

## Constructor Details

### StructureRootNode

public StructureRootNode(IDocument document, Object input, StructureCreator creator, ISharedDocumentAdapter adapter)
Create the structure root node.

Parameters:
  `document` - the document
  `input` - the input associated with the document
  `creator` - the structure creator that is creating the node
  `adapter` - the shared document adapter from which the document was obtained or `null` if the document was not obtained from an `ISharedDocumentAdapter`

## Method Details

### dispose

public void dispose()
Description copied from interface: `IDisposable`
Disposes of this service. All resources must be freed. All listeners must be detached. Dispose will only be called once during the life cycle of a service.

Specified by:
  `dispose` in interface `IDisposable`

### getAdapter

public <T> T getAdapter(Class<T> adapter)
Override `IAdaptable.getAdapter(Class)` in order to provide an `ISharedDocumentAdapter` that provides the proper look up key based on the input from which this structure node was created.

Specified by:
  `getAdapter` in interface `IAdaptable`
Overrides:
  `getAdapter` in class `DocumentRangeNode`
Type Parameters:
  `T` - the class type
Parameters:
  `adapter` - the adapter class to look up
Returns:
  the object adapted to the given class or `null`
See Also:
  - `IAdaptable.getAdapter(Class)`

### nodeChanged

protected void nodeChanged(DocumentRangeNode node)
Override in order to invoke `IStructureCreator.save(IStructureComparator, Object)` when the contents of a node have changed.

Overrides:
  `nodeChanged` in class `DocumentRangeNode`
Parameters:
  `node` - the changed node

### replace

public ITypedElement replace(ITypedElement child, ITypedElement other)
Description copied from interface: `IEditableContent`
This method is called on a parent to add or remove a child, or to copy the contents of a child. What to do is encoded in the two arguments as follows:

add: | dest == null | src != null
remove: | dest != null | src == null
copy: | dest != null | src != null

Specified by:
  `replace` in interface `IEditableContent`
Overrides:
  `replace` in class `DocumentRangeNode`
Parameters:
  `child` - 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.
Returns:
  the argument `dest`

### getImage

public Image getImage()
Description copied from interface: `ITypedElement`
Returns an image for this object. This image is used when displaying this object in the UI.

Specified by:
  `getImage` in interface `ITypedElement`
Returns:
  the image of this object or `null` if this type of input has no image

### getName

public String getName()
Description copied from interface: `ITypedElement`
Returns the name of this object. The name is used when displaying this object in the UI.

Specified by:
  `getName` in interface `ITypedElement`
Returns:
  the name of this object

### getType

public String getType()
Description copied from interface: `ITypedElement`
Returns the type of this object. For objects with a file name this is typically the file extension. For folders its the constant `FOLDER_TYPE`. The type is used for determining a suitable viewer for this object.

Specified by:
  `getType` in interface `ITypedElement`
Returns:
  the type of this object

### isReadOnly

public boolean isReadOnly()
Description copied from interface: `IEditableContentExtension`
Return whether the typed element being displayed is read-only. a read-only element will require a call to validateEdit before the element can be modified on disk.

Specified by:
  `isReadOnly` in interface `IEditableContentExtension`
Overrides:
  `isReadOnly` in class `DocumentRangeNode`
Returns:
  whether the typed element is read-only

### validateEdit

public IStatus validateEdit(Shell shell)
Description copied from interface: `IEditableContentExtension`
If the element is read-only, this method should be called to attempt to make it writable.

Specified by:
  `validateEdit` in interface `IEditableContentExtension`
Overrides:
  `validateEdit` in class `DocumentRangeNode`
Parameters:
  `shell` - a shell used to prompt the user if required.
Returns:
  a status object that is `OK` if things are fine, otherwise a status describing reasons why modifying the given files is not reasonable. A status with a severity of `CANCEL` is returned if the validation was canceled, indicating the edit should not proceed.