package models.deltaAlgebra;
import models.Edge;
import java.util.Objects;
public class ReferenceEdge extends Edge {
protected String name;
protected MultiplicityValue multiplicity;
protected String keyTypeName = null;
public ReferenceEdge(ObjectNode src, ObjectNode dst, String name) {
super(src, dst);
this.name = name;
this.multiplicity = MultiplicityValue.OneToOne;
}
public ReferenceEdge(ObjectNode src, ObjectNode dst, String name, MultiplicityValue multiplicity) {
super(src, dst);
this.name = name;
this.multiplicity = multiplicity;
}
public ReferenceEdge(ObjectNode src, ObjectNode dst, String name, String keyTypeName) {
super(src, dst);
this.name = name;
this.multiplicity = MultiplicityValue.OneToMany;
this.keyTypeName = keyTypeName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public MultiplicityValue getMultiplicity() {
return multiplicity;
}
public void setMultiplicity(MultiplicityValue multiplicity) {
this.multiplicity = multiplicity;
}
public boolean toMany() {
return multiplicity == MultiplicityValue.OneToMany || multiplicity == MultiplicityValue.ManyToMany;
}
public String getKeyTypeName() {
return keyTypeName;
}
public boolean isIdentical() {
return source.equals(destination);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || !(o instanceof ReferenceEdge)) return false;
ReferenceEdge another = (ReferenceEdge) o;
if (!(another.getSource() instanceof ObjectNode) || !(another.getDestination() instanceof ObjectNode))
return false;
ObjectNode src = (ObjectNode) another.getSource();
ObjectNode dst = (ObjectNode) another.getDestination();
return name.equals(another.name) && ((ObjectNode) source).getName().equals(src.getName()) && ((ObjectNode) destination).getName().equals(dst.getName());
}
@Override
public int hashCode() {
return Objects.hash(name.hashCode(), ((ObjectNode) source).getName().hashCode(), ((ObjectNode) destination).getName().hashCode());
}
}