1 package org.simantics.interop.test;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collection;
\r
5 import java.util.List;
\r
7 import org.simantics.db.Resource;
\r
8 import org.simantics.db.Statement;
\r
11 private Resource begin;
\r
12 private Resource end;
\r
13 private List<Statement> statements = new ArrayList<Statement>(2);
\r
15 public Path(Statement s) {
\r
16 begin = s.getSubject();
\r
17 end = s.getObject();
\r
21 public Path(Path p) {
\r
24 statements.addAll(p.statements);
\r
27 public Resource getBegin() {
\r
31 public Resource getEnd() {
\r
35 public List<Statement> getStatements() {
\r
39 public int getLength() {
\r
40 return statements.size();
\r
43 public boolean add(Statement s) {
\r
44 if (!statements.get(statements.size()-1).getObject().equals(s.getSubject()))
\r
45 //throw new RuntimeException("Non continuous path. " + s.getSubject() + " does not match " + statements.get(statements.size()-1).getObject());
\r
47 if (s.getObject().equals(begin))
\r
49 for (Statement stm : statements) {
\r
50 if (stm.getObject().equals(s.getObject()))
\r
53 end = s.getObject();
\r
58 public static Collection<Path> expand(Path path, Collection<Statement> statements) {
\r
59 Collection<Path> result = new ArrayList<Path>(statements.size());
\r
60 for (Statement s : statements) {
\r
61 Path p = new Path(path);
\r
68 public static Collection<Path> create(Collection<Statement> statements) {
\r
69 Collection<Path> result = new ArrayList<Path>(statements.size());
\r
70 for (Statement s : statements) {
\r
71 Path p = new Path(s);
\r
78 public boolean equals(Object arg0) {
\r
79 if(!arg0.getClass().equals(getClass()))
\r
81 Path other = (Path)arg0;
\r
82 if (!begin.equals(other.begin))
\r
84 if (!end.equals(other.end))
\r
86 if (statements.size() != other.statements.size())
\r
88 for (int i = 0; i < statements.size(); i++) {
\r
89 if (!statements.get(i).equals(other.statements.get(i)))
\r
96 public int hashCode() {
\r
97 return begin.hashCode() + end.hashCode();
\r