X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop%2Fsrc%2Forg%2Fsimantics%2Finterop%2Ftest%2FPath.java;fp=org.simantics.interop%2Fsrc%2Forg%2Fsimantics%2Finterop%2Ftest%2FPath.java;h=b772267caa349b0a218e2cda22c5a299d8f8c9c8;hb=1f360dfa6505e971658bad416214f5f358305fba;hp=0000000000000000000000000000000000000000;hpb=499167aa0bcc2cab0066b87ef4a690c16ea92754;p=simantics%2Finterop.git 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 index 0000000..b772267 --- /dev/null +++ b/org.simantics.interop/src/org/simantics/interop/test/Path.java @@ -0,0 +1,99 @@ +package org.simantics.interop.test; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import org.simantics.db.Resource; +import org.simantics.db.Statement; + +public class Path { + private Resource begin; + private Resource end; + private List statements = new ArrayList(2); + + public Path(Statement s) { + begin = s.getSubject(); + end = s.getObject(); + statements.add(s); + } + + public Path(Path p) { + begin = p.begin; + end = p.end; + statements.addAll(p.statements); + } + + public Resource getBegin() { + return begin; + } + + public Resource getEnd() { + return end; + } + + public List getStatements() { + return statements; + } + + public int getLength() { + return statements.size(); + } + + public boolean add(Statement s) { + if (!statements.get(statements.size()-1).getObject().equals(s.getSubject())) + //throw new RuntimeException("Non continuous path. " + s.getSubject() + " does not match " + statements.get(statements.size()-1).getObject()); + return false; + if (s.getObject().equals(begin)) + return false; + for (Statement stm : statements) { + if (stm.getObject().equals(s.getObject())) + return false; + } + end = s.getObject(); + statements.add(s); + return true; + } + + public static Collection expand(Path path, Collection statements) { + Collection result = new ArrayList(statements.size()); + for (Statement s : statements) { + Path p = new Path(path); + p.add(s); + result.add(p); + } + return result; + } + + public static Collection create(Collection statements) { + Collection result = new ArrayList(statements.size()); + for (Statement s : statements) { + Path p = new Path(s); + result.add(p); + } + return result; + } + + @Override + public boolean equals(Object arg0) { + if(!arg0.getClass().equals(getClass())) + return false; + Path other = (Path)arg0; + if (!begin.equals(other.begin)) + return false; + if (!end.equals(other.end)) + return false; + if (statements.size() != other.statements.size()) + return false; + for (int i = 0; i < statements.size(); i++) { + if (!statements.get(i).equals(other.statements.get(i))) + return false; + } + return false; + } + + @Override + public int hashCode() { + return begin.hashCode() + end.hashCode(); + } +}