import org.simantics.db.common.request.ReadRequest;
import org.simantics.db.common.utils.NameUtils;
import org.simantics.db.exception.DatabaseException;
+import org.simantics.interop.test.GraphChanges.Modification;
import org.simantics.layer0.Layer0;
import org.simantics.utils.datastructures.BijectionMap;
import org.simantics.utils.datastructures.MapList;
private Resource r1;
private Resource r2;
- private Set<Resource> strong = new HashSet<Resource>(); // List of relations that identify object, if subject is already identified.
- private List<Resource> traversed = new ArrayList<Resource>(); // list of relations that are traversed (and tested)
- private List<Resource> tested = new ArrayList<Resource>(); // list of relations that are tested, but not traversed
- private List<Resource> nonTraversed = new ArrayList<Resource>(); // list of relations that are not traversed
- private List<Resource> nonTested = new ArrayList<Resource>(); // list of relations that are not tested
-
- private List<Statement> changes1 = new ArrayList<Statement>();
- private List<Statement> changes2 = new ArrayList<Statement>();
- private List<Pair<Statement,Statement>> modifications = new ArrayList<Pair<Statement,Statement>>();
- private Set<Statement> changes1Set = new HashSet<Statement>();
- private Set<Statement> changes2Set = new HashSet<Statement>();
- private Set<Pair<Statement,Statement>> modificationsSet = new HashSet<Pair<Statement,Statement>>();
+ private Set<Resource> strong = new HashSet<>(); // List of relations that identify object, if subject is already identified.
+ private List<Resource> traversed = new ArrayList<>(); // list of relations that are traversed (and tested)
+ private List<Resource> tested = new ArrayList<>(); // list of relations that are tested, but not traversed
+ private List<Resource> nonTraversed = new ArrayList<>(); // list of relations that are not traversed
+ private List<Resource> nonTested = new ArrayList<>(); // list of relations that are not tested
+
+ private List<Statement> changes1 = new ArrayList<>();
+ private List<Statement> changes2 = new ArrayList<>();
+ private List<Modification> modifications = new ArrayList<>();
+ private Set<Statement> changes1Set = new HashSet<>();
+ private Set<Statement> changes2Set = new HashSet<>();
+ private Set<Modification> modificationsSet = new HashSet<>();
- private BijectionMap<Statement, Statement> comparableStatements = new BijectionMap<Statement, Statement>();
- private BijectionMap<Resource, Resource> comparableResources = new BijectionMap<Resource, Resource>();
+ private BijectionMap<Statement, Statement> comparableStatements = new BijectionMap<>();
+ private BijectionMap<Resource, Resource> comparableResources = new BijectionMap<>();
private Set<Resource> processedResources = new HashSet<Resource>();
comparator.setComparator(this);
+ session.syncRequest(new ReadRequest() {
+
+ @Override
+ public void run(ReadGraph graph) throws DatabaseException {
+ comparator.initialize(graph, r1, r2);
+ }
+ });
+
addComparable(r1, r2);
final Stack<Resource> objectsLeft = new Stack<Resource>();
}
}
- private void addModification(Statement s1, Statement s2) {
- Pair<Statement, Statement> mod = new Pair<Statement, Statement>(s1,s2);
+ private void addModification(Resource sub1, Statement s1, Resource sub2, Statement s2) {
+ Modification mod = new Modification(sub1, sub2, s1, s2);
if (!modificationsSet.contains(mod)) {
modificationsSet.add(mod);
modifications.add(mod);
// boolean eq = compareValue(v1, v2);
boolean eq = compareValue(g,b,s1.getObject(), s2.getObject());
if (!eq) {
- addModification(s1, s2);
- addComparable(s1, s2);
+ addModification(r1,s1,r2,s2);
+ if (!s1.isAsserted(r1) && !s2.isAsserted(r2))
+ addComparable(s1, s2);
}
} else {
if (!s1.getObject().equals(s1.getSubject()) && !s2.getObject().equals(s2.getSubject()))
compareProps(s1.getObject(), s2.getObject());
}
} else {
- addModification(s1, s2);
- addComparable(s1, s2);
+ addModification(r1,s1,r2,s2);
+ if (!s1.isAsserted(r1) && !s2.isAsserted(r2))
+ addComparable(s1, s2);
}
i1++;
i2++;