X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.interop%2Fsrc%2Forg%2Fsimantics%2Finterop%2Ftest%2FGraphComparator.java;h=aae895b7a5835ce068829e6e4dffbefe3b8158ea;hb=5a297dfbc9f7791873759b78ee61b3f3ec19c67a;hp=9f14ecdebe6fdc75dd76f377fc472e0818731cfa;hpb=6dc3a67a70066b374abba65faafca54db79991f6;p=simantics%2Finterop.git diff --git a/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java b/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java index 9f14ecd..aae895b 100644 --- a/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java +++ b/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java @@ -896,8 +896,8 @@ public class GraphComparator { } } - private void addModification(Resource sub1, Statement s1, Resource sub2, Statement s2) { - Modification mod = new Modification(sub1, sub2, s1, s2); + private void addModification(Resource left, Statement leftstm, Resource right, Statement rightstm) { + Modification mod = new Modification(left, right, leftstm, rightstm); if (!modificationsSet.contains(mod)) { modificationsSet.add(mod); modifications.add(mod); @@ -1252,25 +1252,41 @@ public class GraphComparator { case 0:{ boolean b1 = g.hasValue(s1.getObject()); boolean b2 = g.hasValue(s2.getObject()); + boolean a1 = s1.isAsserted(r1); + boolean a2 = s2.isAsserted(r2); if (b1 == b2) { if (b1) { -// Object v1 = g.getValue(s1.getObject()); -// Object v2 = g.getValue(s2.getObject()); -// boolean eq = compareValue(v1, v2); + // Literals boolean eq = compareValue(g,b,s1.getObject(), s2.getObject()); if (!eq) { addModification(r1,s1,r2,s2); - if (!s1.isAsserted(r1) && !s2.isAsserted(r2)) + if (!a1 && !a2) addComparable(s1, s2); } } else { - if (!s1.getObject().equals(s1.getSubject()) && !s2.getObject().equals(s2.getSubject())) - compareProps(s1.getObject(), s2.getObject()); + // Non literal properties. + int comp = comparator.compare(g, s1.getObject(), s2.getObject()); + if (comp == ResourceComparator.NO_MATCH) { + addModification(r1,s1,r2,s2); + } else if (comp != ResourceComparator.EXACT_MATCH) { + if (!s1.getObject().equals(s1.getSubject()) && !s2.getObject().equals(s2.getSubject())) { + if (!a1 && !a2) { + // compare props matches objects, so we can call that only for non asserted statements + compareProps(s1.getObject(), s2.getObject()); + } else if (a1 && a2) { + // TODO : compare asserted statements? + } else { + addModification(r1,s1,r2,s2); + } + } else { + addModification(r1,s1,r2,s2); + } + } else { + // Exact match, nothing to do. + } } } else { addModification(r1,s1,r2,s2); - if (!s1.isAsserted(r1) && !s2.isAsserted(r2)) - addComparable(s1, s2); } i1++; i2++; @@ -1278,14 +1294,18 @@ public class GraphComparator { } case -1:{ if (DEBUG) System.out.println("Compare Prop diff1s " + printStatement(g,s1)); - addDeletion(s1); + // Use modification, since deletions do not support asserted statements + addModification(r1,s1,r2,null); + //addDeletion(s1); i1++; break; } case 1:{ if (DEBUG) System.out.println("Compare Prop diff2s " + printStatement(g,s2)); - addAddition(s2); + // Use modification, since additions do not support asserted statements + addModification(r1,null,r2,s2); + //addAddition(s2); i2++; break; }