adobe / aio-lib-java

Adobe I/O - Java SDK
https://opensource.adobe.com/aio-lib-java/
Apache License 2.0
6 stars 18 forks source link

`aem.events_osgi_mapping` enrich xdm Asset to add DamAsset metadata #90

Open francoisledroff opened 2 years ago

francoisledroff commented 2 years ago

The challenge would be in white-listing the metadata, as it can be too large.

it could be like this:

package package com.adobe.aio.aem.event.xdm.aem;

import com.adobe.xdm.assets.Asset;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import org.apache.sling.api.resource.ValueMap;

@JsonInclude(Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class DamAsset extends Asset {

  Map<String, String> metadatas;

  @JsonIgnore
  public void setMetadata(ValueMap valueMap) {
    if (valueMap != null) {
      metadatas = new HashMap<>();
      for (String entry : valueMap.keySet()) {
        Object value = valueMap.get(entry);
        if (value != null && !entry.startsWith("jcr:") && !(value instanceof GregorianCalendar)
            && !(value.getClass().isArray())) {
          metadatas.put(entry, value.toString());
          //TODO better filtering with metadata whitelist configuration 
        }
      }
    }
  }

  @JsonProperty("xdmAsset:metadatas")
  public Map<String, String> getMetadata() {
    return metadatas;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    if (!super.equals(o)) {
      return false;
    }
    DamAsset damAsset = (DamAsset) o;
    return Objects.equals(metadatas, damAsset.metadatas);
  }

  @Override
  public int hashCode() {
    return Objects.hash(super.hashCode(), metadatas);
  }

  @Override
  public String toString() {
    return "DamAsset{id='" + this.id + '\'' + ", type='" + this.type + '\'' + ", assetId='"
        + this.getAssetId() + '\'' + ", assetName='" + this.getAssetName() + '\''
        + ", etag='" + this.getEtag()
        + '\'' + ", path='" + this.getPath() + '\'' + ", format='" + this.getFormat() + '\''
        + "metadatas=" + metadatas +
        '}';
  }
}