in src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java [551:605]
private void mergeNewlyRegisteredResources() {
synchronized ( this.resourcesLock ) {
for(final Map.Entry<String, List<InternalResource>> entry : this.newResourcesSchemes.entrySet()) {
final String scheme = entry.getKey();
final List<InternalResource> registeredResources = entry.getValue();
logger.debug("Processing set of new resources with scheme {}", scheme);
// set all previously found resources that are not available anymore to uninstall
// if they have been installed - remove resources with a different state
for(final String entityId : this.persistentList.getEntityIds()) {
final EntityResourceList group = this.persistentList.getEntityResourceList(entityId);
final List<TaskResource> toRemove = new ArrayList<>();
boolean first = true;
for(final TaskResource r : group.listResources()) {
if ( r.getScheme().equals(scheme) ) {
logger.debug("Checking {}", r);
// search if we have a new entry with the same url
boolean found = false;
if ( registeredResources != null ) {
final Iterator<InternalResource> m = registeredResources.iterator();
while ( !found && m.hasNext() ) {
final InternalResource testResource = m.next();
found = testResource.getURL().equals(r.getURL());
}
}
if ( !found) {
logger.debug("Resource {} seems to be removed.", r);
if ( first && (r.getState() == ResourceState.INSTALLED
|| r.getState() == ResourceState.INSTALL) ) {
((RegisteredResourceImpl)r).setState(ResourceState.UNINSTALL, null);
} else {
toRemove.add(r);
}
}
}
first = false;
}
for(final TaskResource rr : toRemove) {
this.persistentList.remove(rr.getURL());
}
}
if ( registeredResources != null ) {
this.newResources.addAll(registeredResources);
}
}
this.newResourcesSchemes.clear();
this.mergeNewResources();
printResources("Merged");
// persist list
this.persistentList.save();
}
}