All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.bdeploy.bhive.objects.view.scanner.TreeElementDiff Maven / Gradle / Ivy

Go to download

Public API including dependencies, ready to be used for integrations and plugins.

There is a newer version: 7.4.0
Show newest version
package io.bdeploy.bhive.objects.view.scanner;

import io.bdeploy.bhive.model.Tree;
import io.bdeploy.bhive.model.Tree.EntryType;
import io.bdeploy.bhive.objects.view.ElementView;
import io.bdeploy.bhive.objects.view.TreeView;

/**
 * Represents a single difference when comparing two {@link TreeView}s.
 *
 * @see TreeDiff
 */
public class TreeElementDiff {

    public enum DifferenceType {
        ONLY_LEFT,
        ONLY_RIGHT,
        CONTENT_DIFF
    }

    private final ElementView left;
    private final ElementView right;
    private final DifferenceType type;
    private final EntryType leftType;
    private final EntryType rightType;

    private TreeElementDiff(ElementView left, ElementView right, DifferenceType type, Tree.EntryType leftType,
            Tree.EntryType rightType) {
        this.left = left;
        this.right = right;
        this.type = type;
        this.leftType = leftType;
        this.rightType = rightType;
    }

    /**
     * @param element the {@link ElementView} only present in the 'left' {@link TreeView}
     * @param type the advertised {@link EntryType} in the source {@link Tree}.
     * @return the {@link TreeElementDiff} corresponding to the {@link ElementView}.
     */
    public static TreeElementDiff onlyLeft(ElementView element, Tree.EntryType type) {
        return new TreeElementDiff(element, null, DifferenceType.ONLY_LEFT, type, null);
    }

    /**
     * @param element the {@link ElementView} only present in the 'right' {@link TreeView}
     * @param type the advertised {@link EntryType} in the source {@link Tree}.
     * @return the {@link TreeElementDiff} corresponding to the {@link ElementView}.
     */
    public static TreeElementDiff onlyRight(ElementView element, Tree.EntryType type) {
        return new TreeElementDiff(null, element, DifferenceType.ONLY_RIGHT, null, type);
    }

    /**
     * @param left the {@link ElementView} present in the 'left' {@link TreeView}
     * @param right the {@link ElementView} present in the 'right' {@link TreeView}
     * @param leftType the advertised {@link EntryType} of the 'left' {@link ElementView} the source {@link Tree}.
     * @param rightType the advertised {@link EntryType} of the 'left' {@link ElementView} the source {@link Tree}.
     * @return the {@link TreeElementDiff} corresponding to the {@link ElementView}s present in both {@link TreeView}s.
     */
    public static TreeElementDiff content(ElementView left, ElementView right, Tree.EntryType leftType,
            Tree.EntryType rightType) {
        return new TreeElementDiff(left, right, DifferenceType.CONTENT_DIFF, leftType, rightType);
    }

    /**
     * @return the 'left' {@link ElementView}. Not set if {@link #getType() type} is {@link DifferenceType#ONLY_RIGHT}.
     */
    public ElementView getLeft() {
        return left;
    }

    /**
     * @return the type of the 'left' {@link ElementView}. Not set if {@link #getType() type} is
     *         {@link DifferenceType#ONLY_RIGHT}.
     */
    public EntryType getLeftType() {
        return leftType;
    }

    /**
     * @return the 'right' {@link ElementView}. Not set if {@link #getType() type} is {@link DifferenceType#ONLY_LEFT}.
     */
    public ElementView getRight() {
        return right;
    }

    /**
     * @return the type of the 'right' {@link ElementView}. Not set if {@link #getType() type} is
     *         {@link DifferenceType#ONLY_LEFT}.
     */
    public EntryType getRightType() {
        return rightType;
    }

    /**
     * @return the type of the difference.
     */
    public DifferenceType getType() {
        return type;
    }

    @Override
    public String toString() {
        switch (type) {
            case CONTENT_DIFF:
                return type.name() + ": " + left.getPath() + ": " + format(left, leftType) + " <--> " + format(right, rightType);
            case ONLY_LEFT:
                return type.name() + ": " + left.getPath() + ": " + format(left, leftType);
            case ONLY_RIGHT:
                return type.name() + ": " + right.getPath() + ": " + format(right, rightType);
            default:
                return "";
        }
    }

    private static String format(ElementView s, Tree.EntryType t) {
        return "[" + t.name() + "]" + s.getElementId();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy