- private int propsDiffCount(Resource r1, Resource r2) throws ServiceException, DoesNotContainValueException, ValidationException {\r
- ArrayList<Statement> ss1 = new ArrayList<Statement>();\r
- ArrayList<Statement> ss2 = new ArrayList<Statement>();\r
- ss1.addAll(g.getStatements(r1, b.HasProperty));\r
- ss2.addAll(g.getStatements(r2, b.HasProperty));\r
- //System.out.println("Props count " + GraphUtils.getReadableName(g, r1) + " " + GraphUtils.getReadableName(g, r2));\r
- Collections.sort(ss1, scomp);\r
- Collections.sort(ss2, scomp);\r
- \r
- int count = 0;\r
- \r
- int i1 = 0; \r
- int i2 = 0;\r
- \r
- while (true) {\r
- if (i1 >= ss1.size()) {\r
- if (i2 >= ss2.size())\r
- break;\r
- else {\r
- while (i2 < ss2.size()) {\r
- count++;\r
- i2++;\r
- }\r
- break;\r
- }\r
- } else if (i2 >= ss2.size()) {\r
- while (i1 < ss1.size()) {\r
- count++;\r
- i1++;\r
- }\r
- break;\r
- }\r
- Statement s1 = ss1.get(i1);\r
- Statement s2 = ss2.get(i2);\r
- int c = scomp.compare(s1, s2);\r
- switch (c) {\r
- case 0:{\r
- boolean b1 = g.hasValue(s1.getObject());\r
- boolean b2 = g.hasValue(s2.getObject());\r
- if (b1 == b2) {\r
- if (b1) {\r
- Object v1 = g.getValue(s1.getObject());\r
- Object v2 = g.getValue(s2.getObject());\r
- boolean eq = false;\r
- if (v1 instanceof Object[] && v2 instanceof Object[])\r
- eq = Arrays.deepEquals((Object[])v1, (Object[])v2);\r
- else if (v1 instanceof int[] && v2 instanceof int[]) \r
- eq = Arrays.equals((int[])v1, (int[])v2);\r
- else if (v1 instanceof float[] && v2 instanceof float[]) \r
- eq = Arrays.equals((float[])v1, (float[])v2);\r
- else if (v1 instanceof double[] && v2 instanceof double[]) \r
- eq = Arrays.equals((double[])v1, (double[])v2);\r
- else if (v1 instanceof long[] && v2 instanceof long[]) \r
- eq = Arrays.equals((long[])v1, (long[])v2);\r
- else if (v1 instanceof byte[] && v2 instanceof byte[]) \r
- eq = Arrays.equals((byte[])v1, (byte[])v2);\r
- else if (v1 instanceof boolean[] && v2 instanceof boolean[]) \r
- eq = Arrays.equals((boolean[])v1, (boolean[])v2);\r
- else\r
- eq = v1.equals(v2);\r
- if (!eq) {\r
- count++;\r
- }\r
- //System.out.println("Prop count values " + v1 + " " + v2);\r
- } else {\r
- count += propsDiffCount(s1.getObject(), s2.getObject());\r
- }\r
- } else {\r
- //System.out.println("Props count structural vs literal");\r
- count++;\r
- }\r
- i1++;\r
- i2++;\r
- break;\r
- }\r
- case -1:{\r
- count++;\r
- i1++;\r
- break;\r
- }\r
- \r
- case 1:{\r
- count++;\r
- i2++;\r
- break;\r
- }\r
- }\r
-\r
- }\r
- \r
- ss1.clear();\r
- ss2.clear();\r
- return count;\r
+ \r
+ public static boolean compareValue(Object v1, Object v2) {\r
+ if (v1 instanceof Object[] && v2 instanceof Object[])\r
+ return Arrays.deepEquals((Object[])v1, (Object[])v2);\r
+ else if (v1 instanceof int[] && v2 instanceof int[]) \r
+ return Arrays.equals((int[])v1, (int[])v2);\r
+ else if (v1 instanceof float[] && v2 instanceof float[]) \r
+ return Arrays.equals((float[])v1, (float[])v2);\r
+ else if (v1 instanceof double[] && v2 instanceof double[]) \r
+ return Arrays.equals((double[])v1, (double[])v2);\r
+ else if (v1 instanceof long[] && v2 instanceof long[]) \r
+ return Arrays.equals((long[])v1, (long[])v2);\r
+ else if (v1 instanceof byte[] && v2 instanceof byte[]) \r
+ return Arrays.equals((byte[])v1, (byte[])v2);\r
+ else if (v1 instanceof boolean[] && v2 instanceof boolean[]) \r
+ return Arrays.equals((boolean[])v1, (boolean[])v2);\r
+ else\r
+ return v1.equals(v2);\r