Skip to content
Arc.java 1.84 KiB
Newer Older
Javier Costa's avatar
Javier Costa committed
package tfm.arcs;
Javier Costa's avatar
Javier Costa committed

Javier Costa's avatar
Javier Costa committed
import tfm.arcs.data.ArcData;
Javier Costa's avatar
Javier Costa committed
import tfm.nodes.GraphNode;
Javier Costa's avatar
Javier Costa committed

import java.util.Objects;

Javier Costa's avatar
Javier Costa committed
public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, D> {

    @SuppressWarnings("unchecked")
Javier Costa's avatar
Javier Costa committed
    public Arc(GraphNode<?> from, GraphNode<?> to) {
Javier Costa's avatar
Javier Costa committed
        super((edg.graphlib.Vertex<String, D>) from, (edg.graphlib.Vertex<String, D>) to);
    }

    public abstract boolean isControlFlowArrow();

    public abstract boolean isControlDependencyArrow();

    public abstract boolean isDataDependencyArrow();

    @Override
    public String toString() {
        return String.format("Arc{data: %s, %s -> %s}",
                getData(),
                getFrom(),
                getTo()
        );
    }

    public String toGraphvizRepresentation() {
Javier Costa's avatar
Javier Costa committed
        GraphNode from = (GraphNode) getFrom();
        GraphNode to = (GraphNode) getTo();
Javier Costa's avatar
Javier Costa committed
        return String.format("%s -> %s",
                from.getId(),
                to.getId()
        );
Javier Costa's avatar
Javier Costa committed
    }
Javier Costa's avatar
Javier Costa committed
    public GraphNode<?> getFromNode() {
        return (GraphNode<?>) super.getFrom();
Javier Costa's avatar
Javier Costa committed
    }

Javier Costa's avatar
Javier Costa committed
    public GraphNode<?> getToNode() {
        return (GraphNode<?>) super.getTo();
Javier Costa's avatar
Javier Costa committed
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(getData()) + getFrom().hashCode() + getTo().hashCode();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;

        if (!(o instanceof Arc))
            return false;

        Arc arc = (Arc) o;

Javier Costa's avatar
Javier Costa committed
        GraphNode from = (GraphNode) arc.getFrom();
        GraphNode from2 = (GraphNode) getFrom();
        GraphNode to = (GraphNode) getTo();
        GraphNode to2 = (GraphNode) arc.getTo();
        return Objects.equals(arc.getData(), getData()) &&
Javier Costa's avatar
Javier Costa committed
                Objects.equals(from.getId(), from2.getId()) &&
                Objects.equals(to.getId(), to2.getId());
Javier Costa's avatar
Javier Costa committed
}