package org.simantics.interop.test;\r
\r
import java.util.ArrayList;\r
-import java.util.Collections;\r
import java.util.Comparator;\r
\r
import org.simantics.db.ReadGraph;\r
import org.simantics.db.exception.ManyObjectsForFunctionalRelationException;\r
import org.simantics.db.exception.ServiceException;\r
import org.simantics.db.exception.ValidationException;\r
-import org.simantics.interop.test.GraphComparator.PredicateComparator;\r
-import org.simantics.interop.test.GraphComparator.ResourceComparator;\r
import org.simantics.layer0.Layer0;\r
\r
/**\r
* Object comparator that uses type of objects to check if objects are comparable. \r
* \r
- * Difference value is amount of properties that have different values.\r
+ * Difference value is amount of properties that have different values. If objects have no properties, the result is 0 (unreliable).\r
+ * \r
* \r
* @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
*\r
*/\r
-public class TypeComparator implements ObjectComparator {\r
+public class TypeComparator extends ResourceComparator {\r
\r
- Comparator<Statement> scomp = new PredicateComparator();\r
- Comparator<Resource> rcomp = new ResourceComparator();\r
\r
ArrayList<Resource> rs1 = new ArrayList<Resource>();\r
ArrayList<Resource> rs2 = new ArrayList<Resource>();\r
rs2.clear();\r
return false;\r
}\r
- Collections.sort(rs1, rcomp);\r
- Collections.sort(rs2, rcomp);\r
+ Comparator<Resource> rcomp = getComparator().getResourceComparator();\r
+ getComparator().sortResource(rs1, rs2);\r
+\r
for (int i = 0; i < rs1.size(); i++) {\r
int c = rcomp.compare(rs1.get(i), rs2.get(i));\r
if (c != 0) {\r
ArrayList<Statement> ss2 = new ArrayList<Statement>();\r
ss1.addAll(g.getStatements(r1, l0.HasProperty));\r
ss2.addAll(g.getStatements(r2, l0.HasProperty));\r
- Collections.sort(ss1, scomp);\r
- Collections.sort(ss2, scomp);\r
\r
- int count = 0;\r
+ if (ss1.size() == 0 && ss2.size() == 0)\r
+ return 0;\r
+ \r
+ Comparator<Statement> scomp = getComparator().getStatementComparator();\r
+ \r
+ getComparator().sortStatement(ss1, ss2);\r
+ \r
+ int count = 1;\r
\r
int i1 = 0; \r
int i2 = 0;\r
}\r
Statement s1 = ss1.get(i1);\r
Statement s2 = ss2.get(i2);\r
+ if (s1.isAsserted(r1) && s2.isAsserted(r2)) {\r
+ i1++;\r
+ i2++;\r
+ continue;\r
+ }\r
int c = scomp.compare(s1, s2);\r
switch (c) {\r
case 0:{\r