]> gerrit.simantics Code Review - simantics/interop.git/blob - 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
1 package org.simantics.interop.test;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.List;\r
6 \r
7 import org.simantics.db.Resource;\r
8 import org.simantics.db.Statement;\r
9 \r
10 public class Path {\r
11         private Resource begin;\r
12         private Resource end;\r
13         private List<Statement> statements = new ArrayList<Statement>(2);\r
14         \r
15         public Path(Statement s) {\r
16                 begin = s.getSubject();\r
17                 end = s.getObject();\r
18                 statements.add(s);\r
19         }\r
20         \r
21         public Path(Path p) {\r
22                 begin = p.begin;\r
23                 end = p.end;\r
24                 statements.addAll(p.statements);\r
25         }\r
26         \r
27         public Resource getBegin() {\r
28                 return begin;\r
29         }\r
30         \r
31         public Resource getEnd() {\r
32                 return end;\r
33         }\r
34         \r
35         public List<Statement> getStatements() {\r
36                 return statements;\r
37         }\r
38         \r
39         public int getLength() {\r
40                 return statements.size();\r
41         }\r
42         \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
46                         return false;\r
47                 if (s.getObject().equals(begin))\r
48                         return false;\r
49                 for (Statement stm : statements) {\r
50                         if (stm.getObject().equals(s.getObject()))\r
51                                 return false;\r
52                 }\r
53                 end = s.getObject();\r
54                 statements.add(s);\r
55                 return true;\r
56         }\r
57         \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
62                         p.add(s);\r
63                         result.add(p);\r
64                 }\r
65                 return result;\r
66         }\r
67         \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
72                         result.add(p);\r
73                 }\r
74                 return result;\r
75         }\r
76         \r
77         @Override\r
78         public boolean equals(Object arg0) {\r
79                 if(!arg0.getClass().equals(getClass()))\r
80                         return false;\r
81                 Path other = (Path)arg0;\r
82                 if (!begin.equals(other.begin))\r
83                         return false;\r
84                 if (!end.equals(other.end))\r
85                         return false;\r
86                 if (statements.size() != other.statements.size())\r
87                         return false;\r
88                 for (int i = 0; i < statements.size(); i++) {\r
89                         if (!statements.get(i).equals(other.statements.get(i)))\r
90                                 return false;\r
91                 }\r
92                 return false;\r
93         }\r
94         \r
95         @Override\r
96         public int hashCode() {\r
97                 return begin.hashCode() + end.hashCode();\r
98         }\r
99 }\r