Hi @vodjakxa ,
I found that OOTB there is a Dam Event.

So, you can build your logic around this event.
import com.day.cq.dam.api.DamEvent;
import lombok.extern.slf4j.Slf4j;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventConstants;
import org.osgi.service.event.EventHandler;
@Slf4j
@Component(
service = EventHandler.class,
property = {
EventConstants.EVENT_TOPIC + "=" + DamEvent.EVENT_TOPIC
},
immediate = true
)
public class DamTagAssignEventListener implements EventHandler {
@Override
public void handleEvent(Event event) {
log.info(event.toString());
DamEvent damEvent = DamEvent.fromEvent(event);
if (damEvent == null) {
return;
}
if (DamEvent.Type.METADATA_UPDATED != damEvent.getType()) {
return;
}
String additionalInfo = damEvent.getAdditionalInfo();
if (additionalInfo == null || !additionalInfo.contains("jcr:content/metadata/cq:tags")) {
return;
}
String tags = additionalInfo.substring(additionalInfo.indexOf("=") + 1);
log.info("{} : {}", damEvent.getAssetPath(), tags);
}
}
However, I noticed that additionalInfo always contains only 1st tag even if you assigned 2+ tags. Most likely you need to cache previous state of asset tag by extra call before saving of asset.
In addition, processing of Event Handler should not take more than 5 sec, otherwise it will be black-listed. If you have complex calculation, you need to start Sling Jobs immediately in Event Handler to outsource handing of event in another thread.
Best regards,
Kostiantyn Diachenko.
Kostiantyn Diachenko, Community Advisor, Certified Senior AEM Developer, creator of free AEM VLT Tool, maintainer of AEM Tools plugin.