private void doOptimize()

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