in src/main/java/org/apache/sling/installer/core/impl/OsgiInstallerImpl.java [950:1000]
private void transformResources() {
boolean changed = false;
final List<ServiceReference<ResourceTransformer>> serviceRefs = this.transformerTracker
.getSortedServiceReferences();
if ( serviceRefs.size() > 0 ) {
synchronized ( this.resourcesLock ) {
// Walk the list of unknown resources and invoke all transformers
int index = 0;
final List<RegisteredResource> unknownList = this.persistentList.getUntransformedResources();
while ( index < unknownList.size() ) {
final RegisteredResource resource = unknownList.get(index);
for (final ServiceReference<ResourceTransformer> reference : serviceRefs) {
final Long id = (Long)reference.getProperty(Constants.SERVICE_ID);
// check if this transformer has already been invoked for the resource
final String transformers = (String)((RegisteredResourceImpl)resource).getAttribute(ResourceTransformer.class.getName());
if ( id == null ||
(transformers != null && transformers.contains(":" + id + ':'))) {
continue;
}
final ResourceTransformer transformer = this.transformerTracker.getService(reference);
if ( transformer != null ) {
try {
final TransformationResult[] result = transformer.transform(resource);
final String newTransformers = (transformers == null ? ":" + id + ':' : transformers + id + ':');
((RegisteredResourceImpl)resource).setAttribute(ResourceTransformer.class.getName(), newTransformers);
if ( logger.isDebugEnabled() ) {
logger.debug("Invoked transformer {} on {} : {}",
new Object[] {transformer, resource, Arrays.toString(result)});
}
if ( result != null && result.length > 0 ) {
this.persistentList.transform(resource, result);
changed = true;
index--;
break;
}
} catch (final Throwable t) {
logger.error("Uncaught exception during resource transformation!", t);
}
}
}
index++;
}
}
if ( changed ) {
this.persistentList.save();
printResources("Transformed");
}
}
}