in scim-core/src/main/java/org/apache/directory/scim/core/repository/DefaultPatchHandler.java [95:126]
public <T extends ScimResource> T apply(final T original, final List<PatchOperation> patchOperations) {
if (original == null) {
throw new UnsupportedFilterException("Original resource is null. Cannot apply patch.");
}
if (patchOperations == null) {
throw new UnsupportedFilterException("patchOperations is null. Cannot apply patch.");
}
Map<String, Object> sourceAsMap = objectAsMap(original);
for (PatchOperation patchOperation : patchOperations) {
if (patchOperation.getPath() == null) {
if (!(patchOperation.getValue() instanceof Map)) {
throw new UnsupportedFilterException("Cannot apply patch. value is required");
}
Map<String, Object> properties = (Map<String, Object>) patchOperation.getValue();
for (Map.Entry<String, Object> entry : properties.entrySet()) {
// convert SCIM patch to RFC-6902 patch
PatchOperation newPatchOperation = new PatchOperation();
newPatchOperation.setOperation(patchOperation.getOperation());
newPatchOperation.setPath(tryGetOperationPath(entry.getKey()));
newPatchOperation.setValue(entry.getValue());
apply(original, sourceAsMap, newPatchOperation);
}
} else {
apply(original, sourceAsMap, patchOperation);
}
}
return (T) objectMapper.convertValue(sourceAsMap, original.getClass());
}