From d317cb72607d993bb631a58b2f2ddd0580da946c Mon Sep 17 00:00:00 2001 From: Marko Luukkainen Date: Wed, 11 Nov 2020 18:57:02 +0200 Subject: [PATCH] Prevent TypeComparator from matching different type resources. gitlab #27 Change-Id: I7b92eb0eaacaa9377b6b67b4848e8f4bfcf62bef --- .../interop/test/TypeComparator.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/org.simantics.interop/src/org/simantics/interop/test/TypeComparator.java b/org.simantics.interop/src/org/simantics/interop/test/TypeComparator.java index 2ea03d3..a2a3722 100644 --- a/org.simantics.interop/src/org/simantics/interop/test/TypeComparator.java +++ b/org.simantics.interop/src/org/simantics/interop/test/TypeComparator.java @@ -40,6 +40,16 @@ public class TypeComparator extends ResourceComparator { return propsDiffCount(g,o1, o2); } + /** + * Compares resources based on L0.InstaceOf relations. + * If there are no L0.InstanceOf relations, uses ResourceComparator for comparison. + * + * @param g + * @param r1 + * @param r2 + * @return + * @throws DatabaseException + */ protected boolean compareType(ReadGraph g,Resource r1, Resource r2) throws DatabaseException { Layer0 l0 = Layer0.getInstance(g); rs1.addAll(g.getObjects(r1, l0.InstanceOf)); @@ -50,6 +60,10 @@ public class TypeComparator extends ResourceComparator { return false; } Comparator rcomp = getComparator().getResourceComparator(); + if (rs1.size() == 0) { + return rcomp.compare(r1, r2) == 0; + } + getComparator().sortResource(rs1, rs2); for (int i = 0; i < rs1.size(); i++) { @@ -77,6 +91,7 @@ public class TypeComparator extends ResourceComparator { return true; } + protected int propsDiffCount(ReadGraph g, Resource r1, Resource r2) throws DatabaseException { Layer0 l0 = Layer0.getInstance(g); ArrayList ss1 = new ArrayList(); @@ -128,15 +143,10 @@ public class TypeComparator extends ResourceComparator { boolean b2 = g.hasValue(s2.getObject()); if (b1 == b2) { if (b1) { -// Object v1 = g.getValue(s1.getObject()); -// Object v2 = g.getValue(s2.getObject()); -// boolean eq = GraphComparator.compareValue(v1, v2); boolean eq = GraphComparator.compareValue(g, l0 , s1.getObject(), s2.getObject()); - if (!eq) { count++; } - //System.out.println("Prop count values " + v1 + " " + v2); } else { count += propsDiffCount(g,s1.getObject(), s2.getObject()); } -- 2.47.1