in scim-core/src/main/java/org/apache/directory/scim/core/repository/UpdateRequest.java [217:265]
private List<PatchOperation> createPatchOperations() throws IllegalArgumentException, IllegalAccessException, JsonProcessingException {
sortMultiValuedCollections(this.original, this.resource, schema);
Map<String, ScimExtension> originalExtensions = this.original.getExtensions();
Map<String, ScimExtension> resourceExtensions = this.resource.getExtensions();
Set<String> keys = new HashSet<>();
keys.addAll(originalExtensions.keySet());
keys.addAll(resourceExtensions.keySet());
for(String key: keys) {
Schema extSchema = schemaRegistry.getSchema(key);
ScimExtension originalExtension = originalExtensions.get(key);
ScimExtension resourceExtension = resourceExtensions.get(key);
sortMultiValuedCollections(originalExtension, resourceExtension, extSchema);
}
JsonNode node1 = objectMapper.valueToTree(original);
nullEmptyLists(node1);
JsonNode node2 = objectMapper.valueToTree(resource);
nullEmptyLists(node2);
JsonNode differences = JsonDiff.asJson(node1, node2, DiffFlags.dontNormalizeOpIntoMoveAndCopy());
/*
Commenting out debug statement to prevent PII from appearing in log
ObjectWriter writer = objMapper.writerWithDefaultPrettyPrinter();
try {
log.debug("Original: "+writer.writeValueAsString(node1));
log.debug("Resource: "+writer.writeValueAsString(node2));
} catch (IOException e) {
}*/
/*try {
log.debug("Differences: " + objMapper.writerWithDefaultPrettyPrinter().writeValueAsString(differences));
} catch (JsonProcessingException e) {
log.debug("Unable to debug differences: ", e);
}*/
List<PatchOperation> patchOps = convertToPatchOperations(differences);
/*try {
log.debug("Patch Ops: " + objMapper.writerWithDefaultPrettyPrinter().writeValueAsString(patchOps));
} catch (JsonProcessingException e) {
log.debug("Unable to debug patch ops: ", e);
}*/
return patchOps;
}