private Set processAttribute()

in scim-tools/src/main/java/org/apache/directory/scim/tools/diff/PatchGenerator.java [124:154]


  private Set<PatchOperation> processAttribute(Schema prefixSchema, List<Schema.Attribute> parentAttributes, Schema.Attribute attribute, Object left, Object right) {

    Set<PatchOperation> patchOperations = new HashSet<>();

    Object leftTemp = left != null ? attribute.getAccessor().get(left) : null;
    Object rightTemp = right != null ? attribute.getAccessor().get(right) : null;

    if (attribute.getType() == Schema.Attribute.Type.COMPLEX) {

      if (attribute.isMultiValued()) {
        patchOperations.addAll(processMultiValuedComplexAttribute(prefixSchema, parentAttributes, attribute, leftTemp, rightTemp));
      } else {
        // Check if the whole object has been removed
        if (leftTemp != null && rightTemp == null) {
          patchOperations.add(new PatchOperation()
            .setOperation(PatchOperation.Type.REMOVE)
            .setPath(new PatchOperationPath(attributeExpression(prefixSchema, parentAttributes, attribute))));
        } else {
          // loop through sub attributes
          attribute.getAttributes().forEach(subAttribute -> {
            List<Schema.Attribute> subAttributeParents = new ArrayList<>(parentAttributes);
            subAttributeParents.add(attribute);
            patchOperations.addAll(processAttribute(prefixSchema, subAttributeParents, subAttribute, leftTemp, rightTemp));
          });
        }
      }
    } else { // primitive types (and collections of primitive types)
      patchOperations.addAll(processPrimitiveAttribute(prefixSchema, parentAttributes, attribute, leftTemp, rightTemp));
    }
    return patchOperations;
  }