@Override
public int compare(ReadGraph g, Resource o1, Resource o2, boolean local) throws DatabaseException {
if (o1.equals(o2)) {
- return 1;
+ return EXACT_MATCH;
}
return compare(g, o1, o2);
}
@Override
public int compare(ReadGraph g, Resource o1, Resource o2) throws DatabaseException{
if (!compareType(g,o1, o2)) {
- return (Integer.MAX_VALUE);
+ return NO_MATCH;
}
return propsDiffCount(g,o1, o2);
}
+ /**
+ * Compares resources based on L0.InstaceOf relations.
+ * If there are no L0.InstanceOf relations, uses ResourceComparator for comparison.
+ *
+ * @param g
+ * @param r1
+ * @param r2
+ * @return
+ * @throws DatabaseException
+ */
protected boolean compareType(ReadGraph g,Resource r1, Resource r2) throws DatabaseException {
Layer0 l0 = Layer0.getInstance(g);
rs1.addAll(g.getObjects(r1, l0.InstanceOf));
return false;
}
Comparator<Resource> rcomp = getComparator().getResourceComparator();
+ if (rs1.size() == 0) {
+ return rcomp.compare(r1, r2) == 0;
+ }
+
getComparator().sortResource(rs1, rs2);
for (int i = 0; i < rs1.size(); i++) {
return false;
}
}
+ if (rs1.size() == 1) {
+ // Check for enumeration type. Without this enumeration instances could be mixed together.
+ if (g.hasStatement(rs1.get(0), l0.Enumeration, rs1.get(0))) {
+ if (!r1.equals(r2)) {
+ rs1.clear();
+ rs2.clear();
+ return false;
+ }
+ }
+ }
rs1.clear();
rs2.clear();
return true;
}
+
protected int propsDiffCount(ReadGraph g, Resource r1, Resource r2) throws DatabaseException {
Layer0 l0 = Layer0.getInstance(g);
ArrayList<Statement> ss1 = new ArrayList<Statement>();
boolean b2 = g.hasValue(s2.getObject());
if (b1 == b2) {
if (b1) {
-// Object v1 = g.getValue(s1.getObject());
-// Object v2 = g.getValue(s2.getObject());
-// boolean eq = GraphComparator.compareValue(v1, v2);
boolean eq = GraphComparator.compareValue(g, l0 , s1.getObject(), s2.getObject());
-
if (!eq) {
count++;
}
- //System.out.println("Prop count values " + v1 + " " + v2);
} else {
count += propsDiffCount(g,s1.getObject(), s2.getObject());
}