1 package org.simantics.interop.mapping.data;
\r
4 import org.simantics.utils.datastructures.hints.HintContext;
\r
6 public class Link <T> extends HintContext {
\r
7 private GraphNode<T> from;
\r
8 private GraphNode<T> to;
\r
11 private Link<T> inverseLink;
\r
12 private Link<T> mainLink;
\r
14 Link(GraphNode<T> from, String name, GraphNode<T> to) {
\r
20 public GraphNode<T> from() {
\r
24 public GraphNode<T> to() {
\r
28 public String getName() {
\r
32 void setInverseLink(Link<T> inverseLink) {
\r
33 this.inverseLink = inverseLink;
\r
36 void setMainLink(Link<T> mainLink) {
\r
37 this.mainLink = mainLink;
\r
40 public String getInverseName() {
\r
41 if (inverseLink != null)
\r
42 return inverseLink.getName();
\r
43 if (mainLink != null)
\r
44 return mainLink.getName();
\r
48 public boolean hasInverse() {
\r
49 return inverseLink != null || mainLink != null;
\r
52 public Link<T> getInverse() {
\r
53 if (inverseLink != null)
\r
55 if (mainLink != null)
\r
60 public boolean isInverse() {
\r
61 return mainLink != null;
\r
64 public boolean isMain() {
\r
65 return inverseLink != null;
\r
69 public boolean equals(Object obj) {
\r
70 if (!obj.getClass().equals(getClass()))
\r
72 Link<?> other = (Link<?>)obj;
\r
73 if (!from.equals(other.from))
\r
75 if (!to.equals(other.to))
\r
77 if (!GraphNode.equals(name,other.name))
\r
84 public int hashCode() {
\r
85 return from.hashCode() * to.hashCode() + name.hashCode();
\r
89 public void setHint(Key key, Object value) {
\r
92 super.setHint(key, value);
\r
96 public String toString() {
\r
97 return name + "/" + getInverseName() + " -> " + to.toString();
\r