X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.interop%2Fsrc%2Forg%2Fsimantics%2Finterop%2Ftest%2FGraphComparator.java;h=e20c83e10b2ef021c1b8218e1ae7aab0e6ff6363;hb=954617febb489c628824343f08f41e1a0a047796;hp=58e2c0531cb41bec456b451663450b6a6a030881;hpb=624443b2a7c97a1808a42470dddf1437ed59cd21;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 58e2c05..e20c83e 100644 --- a/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java +++ b/org.simantics.interop/src/org/simantics/interop/test/GraphComparator.java @@ -30,10 +30,6 @@ import org.simantics.db.Statement; import org.simantics.db.common.request.ReadRequest; import org.simantics.db.common.utils.NameUtils; import org.simantics.db.exception.DatabaseException; -import org.simantics.db.exception.DoesNotContainValueException; -import org.simantics.db.exception.ManyObjectsForFunctionalRelationException; -import org.simantics.db.exception.ServiceException; -import org.simantics.db.exception.ValidationException; import org.simantics.layer0.Layer0; import org.simantics.utils.datastructures.BijectionMap; import org.simantics.utils.datastructures.MapList; @@ -52,6 +48,8 @@ import org.simantics.utils.datastructures.Pair; * */ public class GraphComparator { + + private static final boolean DEBUG = false; private Resource r1; private Resource r2; @@ -210,7 +208,7 @@ public class GraphComparator { comparator.setComparator(this); - comparableResources.map(r1, r2); + addComparable(r1, r2, false); final Stack objectsLeft = new Stack(); final Stack objectsRight = new Stack(); @@ -274,9 +272,10 @@ public class GraphComparator { processedResources.add(r1); - if(!comparableResources.contains(r1, r2) && (comparableResources.containsLeft(r1)||comparableResources.containsRight(r2))) { + if((comparableResources.containsLeft(r1)||comparableResources.containsRight(r2)) && !comparableResources.contains(r1, r2)) { throw new DatabaseException("Comparator error: Trying to map " + r1 + " to " + r2 + " while mappings " + r1 + " to " + comparableResources.getRight(r1) + " and " + comparableResources.getLeft(r2) + " to " + r2 + " exist."); } + addComparable(r1, r2, false); //System.out.println("test " + NameUtils.getSafeName(g, r1) + " " + NameUtils.getSafeName(g, r2)); compareProps(r1, r2); @@ -291,6 +290,7 @@ public class GraphComparator { ss1 = filterNonTested(ss1); ss2 = filterNonTested(ss2); + compareStatements(ss1, ss2, null, null,null,null); ss1.clear(); ss2.clear(); @@ -301,6 +301,8 @@ public class GraphComparator { ss2.addAll(g.getStatements(r2, rel)); ss1 = filterAsserted(r1, ss1); ss2 = filterAsserted(r2, ss2); + ss1 = filterNonTraversed(ss1); + ss2 = filterNonTraversed(ss2); compareStatements(ss1, ss2, objectsLeft, objectsRight,unreliableLeft,unreliableRight); ss1.clear(); ss2.clear(); @@ -587,10 +589,7 @@ public class GraphComparator { addComparable(left.getStatements().get(i),right.getStatements().get(i),false); } } - //System.out.println("Compare not implemented"); - } else { - //System.out.println("Compare not implemented"); - } + } } } @@ -603,7 +602,6 @@ public class GraphComparator { return false; BijectionMap map = getMatchingPaths(leftPaths, rightPaths); return map.size() == leftPaths.size(); - } private BijectionMap getMatchingPaths(Set leftPaths, Set rightPaths) { @@ -623,7 +621,7 @@ public class GraphComparator { return map; } - private void expand(Set paths) throws ManyObjectsForFunctionalRelationException, ServiceException { + private void expand(Set paths) throws DatabaseException { Set stepPathsLeft = new HashSet(); if (paths.size() == 0) return; @@ -640,7 +638,7 @@ public class GraphComparator { } } - private Collection findComparableRight(Path leftPath, Resource beginRight) throws ManyObjectsForFunctionalRelationException, ServiceException { + private Collection findComparableRight(Path leftPath, Resource beginRight) throws DatabaseException { Set rightPaths = new HashSet(); rightPaths.addAll(Path.create(g.getStatements(beginRight, getRight(leftPath.getStatements().get(0).getPredicate())))); for (int i = 1; i < leftPath.getLength(); i++) { @@ -671,6 +669,10 @@ public class GraphComparator { return comparableStatements; } + public BijectionMap getComparableResources() { + return comparableResources; + } + public GraphChanges getChanges() { return new GraphChanges(r1,r2,changes1,changes2,modifications,comparableResources); } @@ -678,21 +680,22 @@ public class GraphComparator { private void addComparable(Statement left, Statement right, boolean process) throws DatabaseException { addComparable(left.getObject(), right.getObject(), process); comparableStatements.map(left, right); - comparableResources.map(left.getObject(), right.getObject()); + //comparableResources.map(left.getObject(), right.getObject()); } private void addComparable(Resource left, Resource right, boolean process) throws DatabaseException { - if(!comparableResources.contains(r1, r2)) { - if (comparableResources.containsLeft(r1)||comparableResources.containsRight(r2)) { - throw new DatabaseException("Comparator error: Trying to map " + r1 + " to " + r2 + " while mappings " + r1 + " to " + comparableResources.getRight(r1) + " and " + comparableResources.getLeft(r2) + " to " + r2 + " exist."); + 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."); } else { + if (DEBUG) System.out.println(left + " = " + right); comparableResources.map(left, right); } } } - public List filterAsserted(Resource r, Collection in) throws ServiceException { + public List filterAsserted(Resource r, Collection in) throws DatabaseException { List out = new ArrayList(); for (Statement s : in) { if (!s.isAsserted(r)) @@ -701,20 +704,26 @@ public class GraphComparator { } return out; } + + - private String printStatement(ReadGraph graph, Statement s) throws ValidationException, ServiceException { + private String printStatement(ReadGraph graph, Statement s) throws DatabaseException { return NameUtils.getSafeName(graph, s.getSubject()) + " " + NameUtils.getSafeName(graph, s.getPredicate()) + " " + NameUtils.getSafeName(graph, s.getObject()); } - private List filterTraversed(List in) throws ServiceException { + private List filterTraversed(List in) throws DatabaseException { return filter(traversed, in); } - private List filterNonTested(List in) throws ServiceException { + private List filterNonTested(List in) throws DatabaseException { return filter(nonTested, in); } - private List filter(Collection toFilter, List in) throws ServiceException { + private List filterNonTraversed(List in) throws DatabaseException { + return filter(nonTraversed, in); + } + + private List filter(Collection toFilter, List in) throws DatabaseException { if (toFilter.size() == 0) return in; List out = new ArrayList(); @@ -847,7 +856,7 @@ public class GraphComparator { break; } else { while (i2 < ss2.size()) { - System.out.println("Compare Statements diff2 " + printStatement(g,ss2.get(i2))); + if (DEBUG) System.out.println("Compare Statements diff2 " + printStatement(g,ss2.get(i2))); addAddition(ss2.get(i2)); i2++; @@ -856,7 +865,7 @@ public class GraphComparator { } } else if (i2 >= ss2.size()) { while (i1 < ss1.size()) { - System.out.println("Compare Statements diff1 " + printStatement(g,ss1.get(i1))); + if (DEBUG) System.out.println("Compare Statements diff1 " + printStatement(g,ss1.get(i1))); addDeletion(ss1.get(i1)); i1++; } @@ -871,13 +880,13 @@ public class GraphComparator { i2+=same2; } else if (c < 0) { for (int i = 0; i < same1; i++) { - System.out.println("Compare Statements diff1 " + printStatement(g,ss1.get(i+i1))); + if (DEBUG) System.out.println("Compare Statements diff1 " + printStatement(g,ss1.get(i+i1))); addDeletion(ss1.get(i+i1)); } i1 += same1; } else { for (int i = 0; i < same2; i++) { - System.out.println("Compare Statements diff2 " + printStatement(g,ss2.get(i+i2))); + if (DEBUG) System.out.println("Compare Statements diff2 " + printStatement(g,ss2.get(i+i2))); addAddition(ss2.get(i+i2)); } @@ -979,8 +988,6 @@ public class GraphComparator { Statement s2 = ss2.get(i2+off2); if (objectsLeft != null) { - if (s1.getObject().getResourceId() == 52825217 || s1.getObject().getResourceId() == 52825127) - System.out.println(); objectsLeft.add(s1.getObject()); objectsRight.add(s2.getObject()); } @@ -1029,13 +1036,13 @@ public class GraphComparator { } for (int i1 = off1; i1 < off1 + len1; i1++) { if (!used1[i1-off1]) { - System.out.println("Compare Object diff1 " + printStatement(g,ss1.get(i1))); + if (DEBUG) System.out.println("Compare Object diff1 " + printStatement(g,ss1.get(i1))); addDeletion(ss1.get(i1)); } } for (int i2 = off2; i2 < off2 + len2; i2++) { if (!used2[i2-off2]) { - System.out.println("Compare Object diff2 " + printStatement(g,ss2.get(i2))); + if (DEBUG) System.out.println("Compare Object diff2 " + printStatement(g,ss2.get(i2))); addAddition(ss2.get(i2)); } } @@ -1052,7 +1059,7 @@ public class GraphComparator { * @throws ValidationException */ private void compareProps(Resource r1, Resource r2) throws DatabaseException { - System.out.println("compareProps " + r1 + " " + NameUtils.getSafeName(g, r1) + " " + r2 + " " + NameUtils.getSafeName(g, r2)); + if (DEBUG) System.out.println("compareProps " + r1 + " " + NameUtils.getSafeName(g, r1) + " " + r2 + " " + NameUtils.getSafeName(g, r2)); ArrayList ss1 = new ArrayList(); ArrayList ss2 = new ArrayList(); ss1.addAll(g.getStatements(r1, b.HasProperty)); @@ -1068,7 +1075,7 @@ public class GraphComparator { break; else { while (i2 < ss2.size()) { - System.out.println("Compare Prop diff2 " + printStatement(g,ss2.get(i2))); + if (DEBUG) System.out.println("Compare Prop diff2 " + printStatement(g,ss2.get(i2))); addAddition(ss2.get(i2)); i2++; } @@ -1076,7 +1083,7 @@ public class GraphComparator { } } else if (i2 >= ss2.size()) { while (i1 < ss1.size()) { - System.out.println("Compare Prop diff1 " + printStatement(g,ss1.get(i1))); + if (DEBUG) System.out.println("Compare Prop diff1 " + printStatement(g,ss1.get(i1))); addDeletion(ss1.get(i1)); i1++; } @@ -1116,14 +1123,14 @@ public class GraphComparator { break; } case -1:{ - System.out.println("Compare Prop diff1s " + printStatement(g,s1)); + if (DEBUG) System.out.println("Compare Prop diff1s " + printStatement(g,s1)); addDeletion(s1); i1++; break; } case 1:{ - System.out.println("Compare Prop diff2s " + printStatement(g,s2)); + if (DEBUG) System.out.println("Compare Prop diff2s " + printStatement(g,s2)); addAddition(s2); i2++; break;