private void internalResourceRemoved()

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();
                    }
                }
            }
        }
    }