001package org.apache.tapestry5.internal.services.assets;
002
003import java.util.Map;
004
005import org.apache.tapestry5.http.services.CompressionAnalyzer;
006
007public class CompressionAnalyzerImpl implements CompressionAnalyzer
008{
009    private final Map<String, Boolean> configuration;
010
011    public CompressionAnalyzerImpl(Map<String, Boolean> configuration)
012    {
013        this.configuration = configuration;
014    }
015
016    public boolean isCompressable(String contentType)
017    {
018        if (contentType == null) {
019            throw new IllegalStateException("Content type provided to CompressionAnalyzer is null, which is not allowed.");
020        }
021
022        int x = contentType.indexOf(';');
023
024        String key = x < 0 ? contentType : contentType.substring(0, x);
025
026        Boolean result = configuration.get(key);
027
028        if (result != null) {
029            return result;
030        }
031
032        // Now look for a wild card.
033
034        x = contentType.indexOf('/');
035
036        String wildKey = contentType.substring(0, x) + "/*";
037
038        result = configuration.get(wildKey);
039
040        return result == null ? true : result;
041    }
042}