return new GraphChanges(r1,r2,changes1,changes2,modifications,comparableResources);
}
+ public List<Statement> getChanges1() {
+ return changes1;
+ }
+
+ public List<Statement> getChanges2() {
+ return changes2;
+ }
+
private void addComparable(Statement left, Statement right) throws DatabaseException {
addComparable(left.getObject(), right.getObject());
comparableStatements.map(left, right);
}
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.");
out.add(s);
else {
boolean has = false;
- if (i > 1 && in.get(i-1).getPredicate().equals(s.getPredicate()))
+ if (i > 0 && in.get(i-1).getPredicate().equals(s.getPredicate()))
has = true;
else if (i < in.size()-1 && in.get(i+1).getPredicate().equals(s.getPredicate()))
has = true;
out.add(s);
}
- }
- for (Statement s : in) {
- if (!s.isAsserted(r))
- out.add(s);
-
}
return out;
}
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
+ 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 {
- addModification(r1,s1,r2,s2);
+ // Exact match, nothing to do.
}
}
} else {
}
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;
}