in src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java [1319:1367]
private void internalResourceRemoved(final String resourceType, final String entityId) {
String key = resourceType + ':' + entityId;
synchronized ( this.resourcesLock ) {
final EntityResourceList erl = this.persistentList.getEntityResourceList(key);
logger.debug("Removed {} : {}", key, erl);
// if this is not registered at all, we can simply ignore this
if ( erl != null ) {
final String resourceId = erl.getResourceId();
key = resourceType + ':' + resourceId;
final TaskResource tr = erl.getFirstResource();
if ( tr != null ) {
if ( tr.getState() == ResourceState.IGNORED ) {
// if it has been ignored before, we activate it now again!
// but only if it is not a template
if ( tr.getDictionary() == null
|| tr.getDictionary().get(InstallableResource.RESOURCE_IS_TEMPLATE) == null ) {
((RegisteredResourceImpl)tr).setState(ResourceState.INSTALL, null);
this.persistentList.save();
}
} else if ( tr.getState() == ResourceState.UNINSTALLED ) {
// it has already been removed - nothing do to
} else {
final UpdateHandler handler = findHandler(tr.getScheme());
if ( handler == null ) {
// set to ignored
String message = MessageFormat.format("No handler found to handle resource with scheme {0}",
tr.getScheme());
logger.debug(message);
((RegisteredResourceImpl) tr).setState(ResourceState.IGNORED, message);
} else {
// we don't need to check the result, we just check if a result is returned
if ( handler.handleRemoval(resourceType, resourceId, tr.getURL()) != null ) {
erl.setForceFinishState(ResourceState.UNINSTALLED, null);
erl.compact();
} else {
// set to ignored
String message = MessageFormat
.format("No handler found to handle removal of resource with scheme {0}", tr.getScheme());
logger.debug(message);
((RegisteredResourceImpl) tr).setState(ResourceState.IGNORED, message);
}
}
this.persistentList.save();
}
}
}
}
}