private int getMinResponseSize(Compression compression) { return (int) compression.getMinResponseSize().toBytes(); }
private static Function<Service<HttpRequest, HttpResponse>, HttpEncodingService> contentEncodingDecorator(Compression compression) { final Predicate<MediaType> encodableContentTypePredicate; final String[] mimeTypes = compression.getMimeTypes(); if (mimeTypes == null || mimeTypes.length == 0) { encodableContentTypePredicate = contentType -> true; } else { final List<MediaType> encodableContentTypes = Arrays.stream(mimeTypes).map(MediaType::parse).collect(toImmutableList()); encodableContentTypePredicate = contentType -> encodableContentTypes.stream().anyMatch(contentType::is); } final Predicate<HttpHeaders> encodableRequestHeadersPredicate; final String[] excludedUserAgents = compression.getExcludedUserAgents(); if (excludedUserAgents == null || excludedUserAgents.length == 0) { encodableRequestHeadersPredicate = headers -> true; } else { final List<Pattern> patterns = Arrays.stream(excludedUserAgents).map(Pattern::compile).collect(toImmutableList()); encodableRequestHeadersPredicate = headers -> { // No User-Agent header will be converted to an empty string. final String userAgent = headers.get(HttpHeaderNames.USER_AGENT, ""); return patterns.stream().noneMatch(pattern -> pattern.matcher(userAgent).matches()); }; } return delegate -> new HttpEncodingService(delegate, encodableContentTypePredicate, encodableRequestHeadersPredicate, compression.getMinResponseSize().toBytes()); }
private static Predicate[] getCompressionPredicates(Compression compression) { List<Predicate> predicates = new ArrayList<>(); predicates.add( new MaxSizePredicate((int) compression.getMinResponseSize().toBytes())); predicates.add(new CompressibleMimeTypePredicate(compression.getMimeTypes())); if (compression.getExcludedUserAgents() != null) { for (String agent : compression.getExcludedUserAgents()) { RequestHeaderAttribute agentHeader = new RequestHeaderAttribute( new HttpString(HttpHeaders.USER_AGENT)); predicates.add(Predicates.not(Predicates.regex(agentHeader, agent))); } } return predicates.toArray(new Predicate[0]); }
@Override public HttpServer apply(HttpServer server) { if (!this.compression.getMinResponseSize().isNegative()) { server = server .compress((int) this.compression.getMinResponseSize().toBytes()); } CompressionPredicate mimeTypes = getMimeTypesPredicate( this.compression.getMimeTypes()); CompressionPredicate excludedUserAgents = getExcludedUserAgentsPredicate( this.compression.getExcludedUserAgents()); server = server.compress(mimeTypes.and(excludedUserAgents)); return server; }
static HandlerWrapper createGzipHandlerWrapper(Compression compression) { GzipHandler handler = new GzipHandler(); handler.setMinGzipSize((int) compression.getMinResponseSize().toBytes()); handler.setIncludedMimeTypes(compression.getMimeTypes()); for (HttpMethod httpMethod : HttpMethod.values()) { handler.addIncludedMethods(httpMethod.name()); } if (compression.getExcludedUserAgents() != null) { handler.setExcludedAgentPatterns(compression.getExcludedUserAgents()); } return handler; }