in src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java [425:474]
public void updateResources(final String scheme,
final InstallableResource[] resources,
final String[] idsToRemove) {
this.listener.start();
try {
final List<InternalResource> updatedResources = createResources(scheme, resources);
synchronized ( this.resourcesLock ) {
if ( updatedResources != null && updatedResources.size() > 0 ) {
this.newResources.addAll(updatedResources);
final Set<String> newUrls = new HashSet<>();
for(final InternalResource rsrc : updatedResources) {
newUrls.add(rsrc.getURL());
}
// now remove this from urlsToRemove
final Iterator<String> urlIter = this.urlsToRemove.iterator();
while ( urlIter.hasNext() && !newUrls.isEmpty() ) {
final String url = urlIter.next();
if ( newUrls.remove(url) ) {
urlIter.remove();
}
}
}
if ( idsToRemove != null && idsToRemove.length > 0 ) {
final Set<String> removedUrls = new HashSet<>();
for(final String id : idsToRemove) {
final String url = scheme + ':' + id;
// Will mark all resources which have r's URL as uninstallable
this.urlsToRemove.add(url);
removedUrls.add(url);
}
// now update newResources
final Iterator<InternalResource> rsrcIter = this.newResources.iterator();
while ( rsrcIter.hasNext() && !removedUrls.isEmpty() ) {
final InternalResource rsrc = rsrcIter.next();
if ( removedUrls.remove(rsrc.getURL()) ) {
if ( rsrc.getPrivateCopyOfFile() != null ) {
rsrc.getPrivateCopyOfFile().delete();
}
rsrcIter.remove();
}
}
}
}
this.wakeUp();
} finally {
// we simply close all input streams now
this.closeInputStreams(resources);
}
}