in src/main/java/org/apache/sling/fileoptim/impl/FileOptimizerServiceImpl.java [170:196]
private void doOptimize(Resource fileResource, OptimizationResult result, OptimizedFile optim, byte[] original) {
log.debug("Optimizing file resource {}", fileResource);
List<ServiceReference<FileOptimizer>> optimizers = fileOptimizers.get(optim.getMimeType());
for (ServiceReference<FileOptimizer> ref : optimizers) {
FileOptimizer optimizer = bundleContext.getService(ref);
if (optimizer == null) {
log.warn("No service retrieved for service reference {}", ref);
continue;
}
byte[] optimized = optimizer.optimizeFile(original, optim.getMimeType());
if (optimized != null && optimized.length < original.length) {
double savings = 1.0 - ((double) optimized.length / (double) original.length);
log.debug("Optimized file with {} saving {}%", optimizer.getName(), Math.round(savings * 100));
result.setAlgorithm(optimizer.getName());
result.setSavings(savings);
result.setOptimized(true);
result.setOptimizedSize(optimized.length);
result.setOriginalSize(original.length);
result.setOptimizedContents(optimized);
} else {
log.debug("Optimizer {} was not able to optimize the file", optimizer.getName());
}
}
}