]> gerrit.simantics Code Review - simantics/interop.git/commitdiff
Only pair non asserted property statements. 15/4615/1
authorMarko Luukkainen <marko.luukkainen@semantum.fi>
Thu, 19 Nov 2020 12:54:00 +0000 (14:54 +0200)
committerMarko Luukkainen <marko.luukkainen@semantum.fi>
Thu, 19 Nov 2020 12:54:00 +0000 (14:54 +0200)
gitlab #25

Change-Id: Idd59db98f9de5c68c55a1cf8dc7b218744e5dd62

org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java

index 15b8c2c7e3cb1ef764e8e5915db059d49cabfc90..d24509395633f7471114302a9815d2a66ed108eb 100644 (file)
@@ -797,8 +797,6 @@ public class GraphComparator {
        }
        
        private void addComparable(Resource left, Resource right) throws DatabaseException {
-               if (left.getResourceId() == 225745 || right.getResourceId() == 225745)
-                       System.out.println();
                if(!comparableResources.contains(left, right)) {
                        if (comparableResources.containsLeft(left)||comparableResources.containsRight(right)) {
                                throw new DatabaseException("Comparator error: Trying to map " + left + " to " + right + " while mappings " + left + " to " + comparableResources.getRight(left) + " and " + comparableResources.getLeft(right) + " to " + right + " exist.");
@@ -1254,23 +1252,32 @@ 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) {
                                                        // 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 {
                                                        // Non literal properties.
                                                        if (comparator.compare(g, s1.getObject(), s2.getObject()) != ResourceComparator.NO_MATCH) {
-                                                               if (!s1.getObject().equals(s1.getSubject()) && !s2.getObject().equals(s2.getSubject()))
-                                                                       // TODO compare props matches objects, so this is questionable. 
-                                                                       compareProps(s1.getObject(), s2.getObject());
-                                                               else
+                                                               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 {
                                                                addModification(r1,s1,r2,s2);
                                                        }