]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop/src/org/simantics/interop/test/Path.java
More extensive search for comparable resources
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / test / Path.java
diff --git a/org.simantics.interop/src/org/simantics/interop/test/Path.java b/org.simantics.interop/src/org/simantics/interop/test/Path.java
new file mode 100644 (file)
index 0000000..b772267
--- /dev/null
@@ -0,0 +1,99 @@
+package org.simantics.interop.test;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Statement;\r
+\r
+public class Path {\r
+       private Resource begin;\r
+       private Resource end;\r
+       private List<Statement> statements = new ArrayList<Statement>(2);\r
+       \r
+       public Path(Statement s) {\r
+               begin = s.getSubject();\r
+               end = s.getObject();\r
+               statements.add(s);\r
+       }\r
+       \r
+       public Path(Path p) {\r
+               begin = p.begin;\r
+               end = p.end;\r
+               statements.addAll(p.statements);\r
+       }\r
+       \r
+       public Resource getBegin() {\r
+               return begin;\r
+       }\r
+       \r
+       public Resource getEnd() {\r
+               return end;\r
+       }\r
+       \r
+       public List<Statement> getStatements() {\r
+               return statements;\r
+       }\r
+       \r
+       public int getLength() {\r
+               return statements.size();\r
+       }\r
+       \r
+       public boolean add(Statement s) {\r
+               if (!statements.get(statements.size()-1).getObject().equals(s.getSubject()))\r
+                       //throw new RuntimeException("Non continuous path. " + s.getSubject() + " does not match " + statements.get(statements.size()-1).getObject());\r
+                       return false;\r
+               if (s.getObject().equals(begin))\r
+                       return false;\r
+               for (Statement stm : statements) {\r
+                       if (stm.getObject().equals(s.getObject()))\r
+                               return false;\r
+               }\r
+               end = s.getObject();\r
+               statements.add(s);\r
+               return true;\r
+       }\r
+       \r
+       public static Collection<Path> expand(Path path, Collection<Statement> statements) {\r
+               Collection<Path> result = new ArrayList<Path>(statements.size());\r
+               for (Statement s : statements) {\r
+                       Path p = new Path(path);\r
+                       p.add(s);\r
+                       result.add(p);\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       public static Collection<Path> create(Collection<Statement> statements) {\r
+               Collection<Path> result = new ArrayList<Path>(statements.size());\r
+               for (Statement s : statements) {\r
+                       Path p = new Path(s);\r
+                       result.add(p);\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       @Override\r
+       public boolean equals(Object arg0) {\r
+               if(!arg0.getClass().equals(getClass()))\r
+                       return false;\r
+               Path other = (Path)arg0;\r
+               if (!begin.equals(other.begin))\r
+                       return false;\r
+               if (!end.equals(other.end))\r
+                       return false;\r
+               if (statements.size() != other.statements.size())\r
+                       return false;\r
+               for (int i = 0; i < statements.size(); i++) {\r
+                       if (!statements.get(i).equals(other.statements.get(i)))\r
+                               return false;\r
+               }\r
+               return false;\r
+       }\r
+       \r
+       @Override\r
+       public int hashCode() {\r
+               return begin.hashCode() + end.hashCode();\r
+       }\r
+}\r