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
Constructor
Description
`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

Modifier and Type
Method
Description
`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 Details

### 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 Details

### 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`