Newer
Older
DesignCraft / src / main / java / models / dataSynchronizationModel / ObjectHierarchy.java
package models.dataSynchronizationModel;

import models.deltaAlgebra.ObjectNode;
import models.deltaAlgebra.ReferenceEdge;

import java.util.ArrayList;
import java.util.List;

public class ObjectHierarchy {
    private ObjectNode top;
    private List<ReferenceEdge> edges;
    private boolean isFlat = false;

    public ObjectHierarchy(ObjectNode top) {
        this.top = top;
        this.edges = new ArrayList<>();
        this.isFlat = true;
    }

    public ObjectHierarchy(List<ReferenceEdge> edges) {
        this.top = (ObjectNode) edges.getFirst().getSource();
        this.edges = edges;
        this.isFlat = false;
    }

    public ObjectNode getTop() {
        return top;
    }

    public ObjectNode getBottom() {
        if (edges.size() == 0) {
            return top;
        }
        return (ObjectNode) edges.getLast().getDestination();
    }

    public List<ReferenceEdge> getEdges() {
        return edges;
    }

    public boolean isFlat() {
        return isFlat;
    }

    public int getDepth() {
        return edges.size();
    }

    public ReferenceEdge getEdge(int index) {
        return edges.get(index);
    }

    public boolean isPrefixOf(ObjectHierarchy another) {
        if (!top.equals(another.top)) {
            return false;
        }
        for (int i = 0; i < edges.size(); i++) {
            if (i >= another.edges.size() || !edges.get(i).equals(another.edges.get(i))) {
                return false;
            }
        }
        return true;
    }

    public ObjectHierarchy getPrevObjectHierarchy() {
        if (isFlat) {
            return new ObjectHierarchy(edges);
        }
        List<ReferenceEdge> edges = new ArrayList<>();
        if (this.edges.size() == 1) {
            return new ObjectHierarchy(top);
        }
        for (int i = 0; i < this.edges.size() - 1; i++) {
            edges.add(this.edges.get(i));
        }
        return new ObjectHierarchy(edges);
    }
}