package org.webpieces.router.impl.compression; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.util.Properties; import javax.inject.Inject; import org.webpieces.router.api.RouterConfig; public class MimeTypes { private Properties mimetypes; private RouterConfig config; @Inject public MimeTypes(RouterConfig config) { this.config = config; InputStream is = MimeTypes.class.getClassLoader().getResourceAsStream("mime-types.properties"); mimetypes = new Properties(); try { mimetypes.load(is); } catch (IOException e) { throw new RuntimeException("mime types failed to load", e); } } public MimeTypeResult extensionToContentType(String extension, String defaultContentType){ if(defaultContentType == null) throw new IllegalArgumentException("default content type must be provided"); String contentType = mimetypes.getProperty(extension); if (contentType == null){ contentType = defaultContentType; } if(contentType.contains(";")) { String[] split = contentType.split(";"); String encoding = split[1].trim(); String[] pair = encoding.split("="); String charSetStr = pair[1]; Charset charSet = Charset.forName(charSetStr); return new MimeTypeResult(contentType, charSet); } else if(contentType.startsWith("text/")) { String mime = contentType + "; charset=" + config.getDefaultResponseBodyEncoding().name().toLowerCase(); return new MimeTypeResult(mime, config.getDefaultResponseBodyEncoding()); } //otherwise default the encoding... return new MimeTypeResult(contentType, config.getDefaultResponseBodyEncoding()); } public static class MimeTypeResult { public String mime; public Charset htmlResponsePayloadEncoding; public MimeTypeResult(String mime, Charset htmlResponsePayloadEncoding) { this.mime = mime; this.htmlResponsePayloadEncoding = htmlResponsePayloadEncoding; } @Override public String toString() { return "MimeTypeResult [mime=" + mime + ", htmlResponsePayloadEncoding=" + htmlResponsePayloadEncoding + "]"; } } }