]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/Link.java
refs #3483
[simantics/interop.git] / org.simantics.interop.mapping / src / org / simantics / interop / mapping / data / Link.java
diff --git a/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/Link.java b/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/Link.java
new file mode 100644 (file)
index 0000000..f03f10f
--- /dev/null
@@ -0,0 +1,95 @@
+package org.simantics.interop.mapping.data;\r
+\r
+\r
+import org.simantics.utils.datastructures.hints.HintContext;\r
+\r
+public class Link <T> extends HintContext {\r
+       private GraphNode<T> from;\r
+       private GraphNode<T> to;\r
+       private String name;\r
+       \r
+       private Link<T> inverseLink;\r
+       private Link<T> mainLink;\r
+\r
+       Link(GraphNode<T> from, String name, GraphNode<T> to) {\r
+               this.from = from;\r
+               this.to = to;\r
+               this.name = name;\r
+       }\r
+       \r
+       public GraphNode<T> from() {\r
+               return from;\r
+       }\r
+       \r
+       public GraphNode<T> to() {\r
+               return to;\r
+       }\r
+       \r
+       public String getName() {\r
+               return name;\r
+       }\r
+       \r
+       void setInverseLink(Link<T> inverseLink) {\r
+               this.inverseLink = inverseLink;\r
+       }\r
+       \r
+       void setMainLink(Link<T> mainLink) {\r
+               this.mainLink = mainLink;\r
+       }\r
+       \r
+       public String getInverseName() {\r
+               if (inverseLink != null)\r
+                       return inverseLink.getName();\r
+               if (mainLink != null)\r
+                       return mainLink.getName();\r
+               return null;\r
+       }\r
+       \r
+       public boolean hasInverse() {\r
+               return inverseLink != null || mainLink != null;\r
+       }\r
+       \r
+       public Link<T> getInverse() {\r
+               if (inverseLink != null)\r
+                       return inverseLink;\r
+               if (mainLink != null)\r
+                       return mainLink;\r
+               return null;\r
+       }\r
+       \r
+       public boolean isInverse() {\r
+               return mainLink != null;\r
+       }\r
+       \r
+       public boolean isMain() {\r
+               return inverseLink != null;\r
+       }\r
+       \r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if (!obj.getClass().equals(getClass()))\r
+                       return false;\r
+               Link<?> other = (Link<?>)obj;\r
+               if (!from.equals(other.from))\r
+                       return false;\r
+               if (!to.equals(other.to))\r
+                       return false;\r
+               if (!GraphNode.equals(name,other.name))\r
+                       return false;\r
+               return true;\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public int hashCode() {\r
+               return from.hashCode() * to.hashCode() + name.hashCode();\r
+       }\r
+       \r
+       @Override\r
+    public void setHint(Key key, Object value) {\r
+               if (value == null)\r
+                       return;\r
+               super.setHint(key, value);\r
+       }\r
+\r
+}\r