Package org.eclipse.compare.structuremergeviewer

## Class DiffNode

- java.lang.Object
- - org.eclipse.compare.structuremergeviewer.DiffElement
  - - org.eclipse.compare.structuremergeviewer.DiffContainer
    - - org.eclipse.compare.structuremergeviewer.DiffNode

All Implemented Interfaces:
  `ITypedElement`, `ICompareInput`, `IDiffContainer`, `IDiffElement`

    public class DiffNode
    extends DiffContainer
    implements ICompareInput

Diff node are used as the compare result of the differencing engine. Since it implements the `ITypedElement` and `ICompareInput` interfaces it can be used directly to display the compare result in a `DiffTreeViewer` and as the input to any other compare/merge viewer.

`DiffNode`s are typically created as the result of performing a compare with the `Differencer`.

Clients typically use this class as is, but may subclass if required.

See Also:
  `DiffTreeViewer`, `Differencer`

### Field Summary

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

`FOLDER_TYPE, TEXT_TYPE, UNKNOWN_TYPE`

### Constructor Summary

Constructors
`DiffNode​(int kind)` Creates a new `DiffNode` with the given diff kind.
`DiffNode​(int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right)` Creates a new `DiffNode` and initializes with the given values.
`DiffNode​(ITypedElement left, ITypedElement right)` Creates a new `DiffNode` with diff kind `Differencer.CHANGE` and initializes with the given values.
`DiffNode​(IDiffContainer parent, int kind)` Creates a new `DiffNode` and initializes with the given values.
`DiffNode​(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right)` Creates a new `DiffNode` and initializes with the given values.

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `addCompareInputChangeListener​(ICompareInputChangeListener listener)` Registers a listener for changes of this `ICompareInput`.
`void` `copy​(boolean leftToRight)` Copy one side (source) to the other side (destination) depending on the value of `leftToRight`.
`boolean` `dontExpand()` Returns `true` if this node shouldn't automatically be expanded in a `DiffTreeViewer`.
`boolean` `equals​(Object other)`
`protected void` `fireChange()` Sends out notification that a change has occurred on the `ICompareInput`.
`ITypedElement` `getAncestor()` Returns the ancestor side of this input.
`ITypedElement` `getId()` Returns the first not-`null` input of this node.
`Image` `getImage()` The `DiffElement` implementation of this `ITypedInput` method returns `null`.
`ITypedElement` `getLeft()` Returns the left side of this input.
`String` `getName()` Returns the (non-`null`) name of the left or right side if they are identical.
`ITypedElement` `getRight()` Returns the right side of this input.
`String` `getType()` The `DiffElement` implementation of this `ITypedElement` method returns `ITypedElement.UNKNOWN_TYPE`.
`int` `hashCode()`
`void` `removeCompareInputChangeListener​(ICompareInputChangeListener listener)` Unregisters a `ICompareInput` listener.
`void` `setAncestor​(ITypedElement ancestor)` Sets the ancestor input to the given value.
`void` `setDontExpand​(boolean dontExpand)` Controls whether this node is not automatically expanded when displayed in a `DiffTreeViewer`.
`void` `setLeft​(ITypedElement left)` Sets the left input to the given value.
`void` `setRight​(ITypedElement right)` Sets the right input to the given value.

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

`add, findChild, getChildren, hasChildren, remove, removeToRoot`

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

`getKind, getParent, setKind, setParent`

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

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

### Methods inherited from interface org.eclipse.compare.structuremergeviewer.ICompareInput

`getKind`

### Methods inherited from interface org.eclipse.compare.structuremergeviewer.IDiffElement

`getKind, getParent, setParent`

### Constructor Detail

#### DiffNode

    public DiffNode​(IDiffContainer parent,
                    int kind,
                    ITypedElement ancestor,
                    ITypedElement left,
                    ITypedElement right)

Creates a new `DiffNode` and initializes with the given values.

Parameters:
  `parent` - under which the new container is added as a child or `null`
  `kind` - of difference (defined in `Differencer`)
  `ancestor` - the common ancestor input to a compare
  `left` - the left input to a compare
  `right` - the right input to a compare

#### DiffNode

    public DiffNode​(ITypedElement left,
                    ITypedElement right)

Creates a new `DiffNode` with diff kind `Differencer.CHANGE` and initializes with the given values.

Parameters:
  `left` - the left input to a compare
  `right` - the right input to a compare

#### DiffNode

    public DiffNode​(int kind,
                    ITypedElement ancestor,
                    ITypedElement left,
                    ITypedElement right)

Creates a new `DiffNode` and initializes with the given values.

Parameters:
  `kind` - of difference (defined in `Differencer`)
  `ancestor` - the common ancestor input to a compare
  `left` - the left input to a compare
  `right` - the right input to a compare

#### DiffNode

    public DiffNode​(int kind)

Creates a new `DiffNode` with the given diff kind.

Parameters:
  `kind` - of difference (defined in `Differencer`)

#### DiffNode

    public DiffNode​(IDiffContainer parent,
                    int kind)

Creates a new `DiffNode` and initializes with the given values.

Parameters:
  `parent` - under which the new container is added as a child or `null`
  `kind` - of difference (defined in `Differencer`)

### Method Detail

#### addCompareInputChangeListener

    public void addCompareInputChangeListener​(ICompareInputChangeListener listener)

Registers a listener for changes of this `ICompareInput`. Has no effect if an identical listener is already registered.

Specified by:
  `addCompareInputChangeListener` in interface `ICompareInput`
Parameters:
  `listener` - the listener to add

#### removeCompareInputChangeListener

    public void removeCompareInputChangeListener​(ICompareInputChangeListener listener)

Unregisters a `ICompareInput` listener. Has no effect if listener is not registered.

Specified by:
  `removeCompareInputChangeListener` in interface `ICompareInput`
Parameters:
  `listener` - the listener to remove

#### fireChange

    protected void fireChange()

Sends out notification that a change has occurred on the `ICompareInput`.

#### dontExpand

    public boolean dontExpand()

Returns `true` if this node shouldn't automatically be expanded in a `DiffTreeViewer`.

Returns:
  `true` if node shouldn't automatically be expanded

#### setDontExpand

    public void setDontExpand​(boolean dontExpand)

Controls whether this node is not automatically expanded when displayed in a `DiffTreeViewer`.

Parameters:
  `dontExpand` - if `true` this node is not automatically expanded in `DiffTreeViewer`

#### getId

    public ITypedElement getId()

Returns the first not-`null` input of this node. Method checks the three inputs in the order: ancestor, right, left.

Returns:
  the first not-`null` input of this node

#### getName

    public String getName()

Returns the (non-`null`) name of the left or right side if they are identical. Otherwise both names are concatenated (separated with a slash ('/')).

Subclasses may re-implement to provide a different name for this node.

Specified by:
  `getName` in interface `ICompareInput`
Specified by:
  `getName` in interface `ITypedElement`
Returns:
  the name of this node.

#### getImage

    public Image getImage()

Description copied from class: `DiffElement`
The `DiffElement` implementation of this `ITypedInput` method returns `null`. Subclasses may re-implement to provide an image for this element.

Specified by:
  `getImage` in interface `ICompareInput`
Specified by:
  `getImage` in interface `ITypedElement`
Overrides:
  `getImage` in class `DiffElement`
Returns:
  `null`.

#### getType

    public String getType()

Description copied from class: `DiffElement`
The `DiffElement` implementation of this `ITypedElement` method returns `ITypedElement.UNKNOWN_TYPE`. Subclasses may re-implement to provide a type for this element.

Specified by:
  `getType` in interface `ITypedElement`
Overrides:
  `getType` in class `DiffElement`
Returns:
  `ITypedElement.UNKNOWN_TYPE`.

#### setAncestor

    public void setAncestor​(ITypedElement ancestor)

Sets the ancestor input to the given value.

Parameters:
  `ancestor` - the new value for the ancestor input
Since:
  3.0

#### getAncestor

    public ITypedElement getAncestor()

Description copied from interface: `ICompareInput`
Returns the ancestor side of this input. Returns `null` if this input has no ancestor or in the two-way compare case.

Specified by:
  `getAncestor` in interface `ICompareInput`
Returns:
  the ancestor of this input, or `null`

#### setLeft

    public void setLeft​(ITypedElement left)

Sets the left input to the given value.

Parameters:
  `left` - the new value for the left input

#### getLeft

    public ITypedElement getLeft()

Description copied from interface: `ICompareInput`
Returns the left side of this input. Returns `null` if there is no left side (deletion or addition).

Specified by:
  `getLeft` in interface `ICompareInput`
Returns:
  the left side of this input, or `null`

#### setRight

    public void setRight​(ITypedElement right)

Sets the right input to the given value.

Parameters:
  `right` - the new value for the right input

#### getRight

    public ITypedElement getRight()

Description copied from interface: `ICompareInput`
Returns the right side of this input. Returns `null` if there is no right side (deletion or addition).

Specified by:
  `getRight` in interface `ICompareInput`
Returns:
  the right side of this input, or `null`

#### copy

    public void copy​(boolean leftToRight)

Description copied from interface: `ICompareInput`
Copy one side (source) to the other side (destination) depending on the value of `leftToRight`. This method is called from a merge viewer if a corresponding action ("take left" or "take right") has been pressed.

The implementation should handle the following cases:

- if the source side is `null` the destination must be deleted,
- if the destination is `null` the destination must be created and filled with the contents from the source,
- if both sides are non-`null` the contents of source must be copied to destination.

In addition the implementation should send out notification to the registered `ICompareInputChangeListener`.

Specified by:
  `copy` in interface `ICompareInput`
Parameters:
  `leftToRight` - if `true` the left side is copied to the right side. If `false` the right side is copied to the left side

#### hashCode

    public int hashCode()

Overrides:
  `hashCode` in class `Object`

#### equals

    public boolean equals​(Object other)

Overrides:
  `equals` in class `Object`