in src/main/java/org/apache/sling/resourceresolver/impl/observation/OsgiObservationBridge.java [113:176]
private void sendOsgiEvent(ResourceChange change) {
Dictionary<String, Object> props = new Hashtable<String, Object>();
String topic;
switch (change.getType()) {
case ADDED:
topic = SlingConstants.TOPIC_RESOURCE_ADDED;
break;
case CHANGED:
topic = SlingConstants.TOPIC_RESOURCE_CHANGED;
break;
case REMOVED:
topic = SlingConstants.TOPIC_RESOURCE_REMOVED;
break;
default:
return;
}
props.put(SlingConstants.PROPERTY_PATH, change.getPath());
if (change.getUserId() != null) {
props.put(SlingConstants.PROPERTY_USERID, change.getUserId());
}
if (change.getAddedPropertyNames() != null) {
props.put(
SlingConstants.PROPERTY_ADDED_ATTRIBUTES,
change.getAddedPropertyNames()
.toArray(new String[change.getAddedPropertyNames().size()]));
}
if (change.getChangedPropertyNames() != null) {
props.put(
SlingConstants.PROPERTY_CHANGED_ATTRIBUTES,
change.getChangedPropertyNames()
.toArray(new String[change.getChangedPropertyNames().size()]));
}
if (change.getRemovedPropertyNames() != null) {
props.put(
SlingConstants.PROPERTY_REMOVED_ATTRIBUTES,
change.getRemovedPropertyNames()
.toArray(new String[change.getRemovedPropertyNames().size()]));
}
if (change.getType() != ChangeType.REMOVED) {
Resource resource = resolver.getResource(change.getPath());
if (resource == null) {
resolver.refresh();
resource = resolver.getResource(change.getPath());
}
if (resource != null) {
if (resource.getResourceType() != null) {
props.put(SlingConstants.PROPERTY_RESOURCE_TYPE, resource.getResourceType());
}
if (resource.getResourceSuperType() != null) {
props.put(SlingConstants.PROPERTY_RESOURCE_SUPER_TYPE, resource.getResourceSuperType());
}
}
}
if (change.isExternal()) {
props.put("event.application", "unknown");
}
final Event event = new Event(topic, props);
eventAdmin.sendEvent(event);
}