public T apply()

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());
  }