Class AbstractRebaseDiff

  • All Implemented Interfaces:
    NodeStateDiff
    Direct Known Subclasses:
    ConflictAnnotatingRebaseDiff

    public abstract class AbstractRebaseDiff
    extends java.lang.Object
    implements NodeStateDiff
    AbstractRebaseDiff serves as base for rebase implementations. It implements a NodeStateDiff, which performs the conflict handling as defined in NodeStore.rebase(NodeBuilder) on the Oak SPI state level.

    Intended use of this class is to re-base a branched version of the node state tree. Given below situation:

         + head (master)
         |
         | + branch
         |/
         + base
         |
     
    The current state on the master branch is head and a branch was created at base. The current state on the branch is branch. Re-basing branch to the current head works as follows:
         NodeState head = ...
         NodeState branch = ...
         NodeState base = ...
         NodeBuilder builder = new MemoryNodeBuilder(head);
         branch.compareAgainstBaseState(base, new MyRebaseDiff(builder));
         branch = builder.getNodeState();
     
    The result is:
           + branch
          /
         + head (master)
         |
     

    Conflicts during rebase cause calls to the various abstracts conflict resolution methods of this class. Concrete subclasses of this class need to implement these methods for handling such conflicts.

    • Constructor Detail

      • AbstractRebaseDiff

        protected AbstractRebaseDiff​(NodeBuilder builder)
    • Method Detail

      • createDiff

        protected abstract AbstractRebaseDiff createDiff​(NodeBuilder builder,
                                                         java.lang.String name)
        Factory method for creating a rebase handler for the named child of the passed parent builder.
        Parameters:
        builder - parent builder
        name - name of the child for which to return a rebase handler
        Returns:
        rebase handler for child name in builder
      • addExistingProperty

        protected abstract void addExistingProperty​(NodeBuilder builder,
                                                    PropertyState before,
                                                    PropertyState after)
        Called when the property after was added on the branch but the property exists already in the trunk.
        Parameters:
        builder - parent builder
        before - existing property
        after - added property
      • changeDeletedProperty

        protected abstract void changeDeletedProperty​(NodeBuilder builder,
                                                      PropertyState after,
                                                      PropertyState base)
        Called when the property after was changed on the branch but was deleted already in the trunk.
        Parameters:
        builder - parent builder
        after - changed property
        base - base property
      • changeChangedProperty

        protected abstract void changeChangedProperty​(NodeBuilder builder,
                                                      PropertyState before,
                                                      PropertyState after)
        Called when the property after was changed on the branch but was already changed to before in the trunk.
        Parameters:
        builder - parent property
        before - changed property in branch
        after - changed property in trunk
      • deleteDeletedProperty

        protected abstract void deleteDeletedProperty​(NodeBuilder builder,
                                                      PropertyState before)
        Called when the property before was deleted in the branch but was already deleted in the trunk.
        Parameters:
        builder - parent builder
        before - deleted property
      • deleteChangedProperty

        protected abstract void deleteChangedProperty​(NodeBuilder builder,
                                                      PropertyState before)
        Called when the property before was deleted in the branch but was already changed in the trunk.
        Parameters:
        builder - parent builder
        before - deleted property
      • addExistingNode

        protected abstract void addExistingNode​(NodeBuilder builder,
                                                java.lang.String name,
                                                NodeState before,
                                                NodeState after)
        Called when the node after was added on the branch but the node exists already in the trunk.
        Parameters:
        builder - parent builder
        name - name of the added node
        before - existing node
        after - added added
      • changeDeletedNode

        protected abstract void changeDeletedNode​(NodeBuilder builder,
                                                  java.lang.String name,
                                                  NodeState after,
                                                  NodeState base)
        Called when the node after was changed on the branch but was deleted already in the trunk.
        Parameters:
        builder - parent builder
        name - name of the changed node
        after - changed node
        base - base node
      • deleteDeletedNode

        protected abstract void deleteDeletedNode​(NodeBuilder builder,
                                                  java.lang.String name,
                                                  NodeState before)
        Called when the node before was deleted in the branch but was already deleted in the trunk.
        Parameters:
        builder - parent builder
        before - deleted node
      • deleteChangedNode

        protected abstract void deleteChangedNode​(NodeBuilder builder,
                                                  java.lang.String name,
                                                  NodeState before)
        Called when the node before was deleted in the branch but was already changed in the trunk.
        Parameters:
        builder - parent builder
        before - deleted node
      • propertyAdded

        public boolean propertyAdded​(PropertyState after)
        Description copied from interface: NodeStateDiff
        Called for all added properties.
        Specified by:
        propertyAdded in interface NodeStateDiff
        Parameters:
        after - property state after the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.
      • propertyChanged

        public boolean propertyChanged​(PropertyState before,
                                       PropertyState after)
        Description copied from interface: NodeStateDiff
        Called for all changed properties. The names of the given two property states are guaranteed to be the same.
        Specified by:
        propertyChanged in interface NodeStateDiff
        Parameters:
        before - property state before the change
        after - property state after the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.
      • propertyDeleted

        public boolean propertyDeleted​(PropertyState before)
        Description copied from interface: NodeStateDiff
        Called for all deleted properties.
        Specified by:
        propertyDeleted in interface NodeStateDiff
        Parameters:
        before - property state before the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.
      • childNodeAdded

        public boolean childNodeAdded​(java.lang.String name,
                                      NodeState after)
        Description copied from interface: NodeStateDiff
        Called for all added child nodes.
        Specified by:
        childNodeAdded in interface NodeStateDiff
        Parameters:
        name - name of the added child node
        after - child node state after the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.
      • childNodeChanged

        public boolean childNodeChanged​(java.lang.String name,
                                        NodeState before,
                                        NodeState after)
        Description copied from interface: NodeStateDiff
        Called for all child nodes that may contain changes between the before and after states. The comparison implementation is expected to make an effort to avoid calling this method on child nodes under which nothing has changed.
        Specified by:
        childNodeChanged in interface NodeStateDiff
        Parameters:
        name - name of the changed child node
        before - child node state before the change
        after - child node state after the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.
      • childNodeDeleted

        public boolean childNodeDeleted​(java.lang.String name,
                                        NodeState before)
        Description copied from interface: NodeStateDiff
        Called for all deleted child nodes.
        Specified by:
        childNodeDeleted in interface NodeStateDiff
        Parameters:
        name - name of the deleted child node
        before - child node state before the change
        Returns:
        true to continue the comparison, false to abort. Abort will stop comparing completely, that means sibling nodes and sibling nodes of all parents are not further compared.