private static void computeUnchangedObject(final Map<JsonPointer, JsonNode> ret, final JsonPointer pointer, final JsonNode source, final JsonNode target) { final Iterator<String> sourceFields = source.fieldNames(); while (sourceFields.hasNext()) { final String name = sourceFields.next(); if (!target.has(name)) { continue; } computeUnchanged(ret, pointer.append(JsonPointer.valueOf(encodeSegment(name))), source.get(name), target.get(name)); } }
private static void computeUnchangedObject(final Map<JsonPointer, JsonNode> ret, final JsonPointer pointer, final JsonNode source, final JsonNode target) { final Iterator<String> sourceFields = source.fieldNames(); while (sourceFields.hasNext()) { final String name = sourceFields.next(); if (!target.has(name)) { continue; } computeUnchanged(ret, pointer.append(JsonPointer.valueOf(encodeSegment(name))), source.get(name), target.get(name)); } }
@Override public JsonPointer getChildPointer() { if (currentProp != null) { JsonPointer child = JsonPointer.compile("/" + encode(currentProp)); return ptr.append(child); } else { throw new IllegalStateException(); } }
private static void generateObjectDiffs(final DiffProcessor processor, final JsonPointer pointer, final ObjectNode source, final ObjectNode target) { final Set<String> sourceFields = new TreeSet<>(); Iterators.addAll(sourceFields, source.fieldNames()); final Set<String> targetFields = new TreeSet<>(); Iterators.addAll(targetFields, target.fieldNames()); for (final String field : Sets.difference(sourceFields, targetFields)) { processor.valueRemoved(pointer.append(JsonPointer.valueOf(encodeSegment(field)))); } for (final String field : Sets.difference(targetFields, sourceFields)) { processor.valueAdded(pointer.append(JsonPointer.valueOf(encodeSegment(field))), target.get(field)); } for (final String field : Sets.intersection(sourceFields, targetFields)) { generateDiffs(processor, pointer.append(JsonPointer.valueOf(encodeSegment(field))), source.get(field), target.get(field)); } }
private static void generateArrayDiffs(final DiffProcessor processor, final JsonPointer pointer, final ArrayNode source, final ArrayNode target) { final int sourceSize = source.size(); final int targetSize = target.size(); final int size = Math.min(sourceSize, targetSize); /* * Source array is larger; in this case, elements are removed from the * target; the index of removal is always the original arrays's length. */ for (int index = size; index < sourceSize; index++) { processor.valueRemoved(pointer.append(JsonPointer.valueOf("/" + size))); } for (int index = 0; index < size; index++) { generateDiffs(processor, pointer.append(JsonPointer.valueOf("/" + index)), source.get(index), target.get(index)); } // Deal with the destination array being larger... for (int index = size; index < targetSize; index++) { processor.valueAdded(pointer.append(END_OF_ARRAY_POINTER), target.get(index)); } }
private static void generateArrayDiffs(final DiffProcessor processor, final JsonPointer pointer, final ArrayNode source, final ArrayNode target) { final int sourceSize = source.size(); final int targetSize = target.size(); final int size = Math.min(sourceSize, targetSize); /* * Source array is larger; in this case, elements are removed from the * target; the index of removal is always the original arrays's length. */ for (int index = size; index < sourceSize; index++) { processor.valueRemoved(pointer.append(JsonPointer.valueOf("/" + size))); } for (int index = 0; index < size; index++) { generateDiffs(processor, pointer.append(JsonPointer.valueOf("/" + index)), source.get(index), target.get(index)); } // Deal with the destination array being larger... for (int index = size; index < targetSize; index++) { processor.valueAdded(pointer.append(END_OF_ARRAY_POINTER), target.get(index)); } }
private static void generateArrayDiffs(final DiffProcessor processor, final JsonPointer pointer, final ArrayNode source, final ArrayNode target) { final int sourceSize = source.size(); final int targetSize = target.size(); final int size = Math.min(sourceSize, targetSize); /* * Source array is larger; in this case, elements are removed from the * target; the index of removal is always the original arrays's length. */ for (int index = size; index < sourceSize; index++) { processor.valueRemoved(pointer.append(JsonPointer.valueOf("/" + size))); } for (int index = 0; index < size; index++) { generateDiffs(processor, pointer.append(JsonPointer.valueOf("/" + index)), source.get(index), target.get(index)); } // Deal with the destination array being larger... for (int index = size; index < targetSize; index++) { processor.valueAdded(pointer.append(END_OF_ARRAY_POINTER), target.get(index)); } }
private static void generateObjectDiffs(final DiffProcessor processor, final JsonPointer pointer, final ObjectNode source, final ObjectNode target) { final Set<String> sourceFields = new TreeSet<>(); Iterators.addAll(sourceFields, source.fieldNames()); final Set<String> targetFields = new TreeSet<>(); Iterators.addAll(targetFields, target.fieldNames()); for (final String field : Sets.difference(sourceFields, targetFields)) { processor.valueRemoved(pointer.append(JsonPointer.valueOf(encodeSegment(field)))); } for (final String field : Sets.difference(targetFields, sourceFields)) { processor.valueAdded(pointer.append(JsonPointer.valueOf(encodeSegment(field))), target.get(field)); } for (final String field : Sets.intersection(sourceFields, targetFields)) { generateDiffs(processor, pointer.append(JsonPointer.valueOf(encodeSegment(field))), source.get(field), target.get(field)); } }