/*
* Copyright (C) 2015 SoftIndex LLC.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.datakernel.http;
import io.datakernel.bytebuf.ByteBuf;
import java.util.HashMap;
import java.util.Map;
@SuppressWarnings("unused")
public final class MediaTypes {
static final CaseInsensitiveTokenMap<MediaType> mimes = new CaseInsensitiveTokenMap<MediaType>(2048, 2, MediaType.class) {
@Override
protected MediaType create(byte[] bytes, int offset, int length, byte[] lowerCaseBytes, int lowerCaseHashCode) {
return new MediaType(bytes, offset, length, lowerCaseBytes, lowerCaseHashCode);
}
};
private final static Map<String, MediaType> ext2mime = new HashMap<>();
public static final MediaType ANY = register("*/*");
public static final MediaType ANY_APPLICATION = register("application/*");
public static final MediaType ANY_TEXT = register("text/*");
public static final MediaType ANY_IMAGE = register("image/*");
public static final MediaType ANY_AUDIO = register("audio/*");
public static final MediaType ANY_VIDEO = register("video/*");
public static final MediaType X_WWW_FORM_URLENCODED = register("application/x-www-form-urlencoded");
public static final MediaType ATOM = register("application/atom+xml", "atom");
public static final MediaType EDI_X12 = register("application/EDI-X12");
public static final MediaType EDI_EDIFACT = register("application/EDIFACT");
public static final MediaType JSON = register("application/json", "json");
public static final MediaType JAVASCRIPT = register("application/javascript", "js");
public static final MediaType OCTET_STREAM = register("application/octet-stream", "com", "exe", "bin");
public static final MediaType ZIP = register("application/zip", "zip", "zipx");
public static final MediaType GZIP = register("application/gzip", "gzip", "gz");
public static final MediaType BZIP2 = register("application/x-bzip2", "bz2");
public static final MediaType FLASH = register("application/x-shockwave-flash");
public static final MediaType TEX = register("application/x-tex");
public static final MediaType PDF = register("application/pdf", "pdf");
public static final MediaType OGG_APP = register("application/ogg", "ogg");
public static final MediaType POSTSCRIPT = register("application/postscript", "ai");
public static final MediaType BINARY = register("application/binary");
public static final MediaType TAR = register("application/x-tar", "tar");
public static final MediaType KEY_ARCHIVE = register("application/pkcs12", "p12", "pfx");
public static final MediaType PROTOBUF = register("application/protobuf", "proto");
public static final MediaType EPUB = register("application/epub+zip", "epub");
public static final MediaType RDF = register("application/rdf+xml", "rdf");
public static final MediaType XRD = register("application/xrd+xml", "xrd");
public static final MediaType JAVA_ARCHIVE = register("application/java-archive", "jar", "war", "ear");
public static final MediaType WOFF = register("application/font-woff", "woff");
public static final MediaType EOT = register("application/vnd.ms-fontobject", "eot");
public static final MediaType SFNT = register("application/font-sfnt", "sfnt");
public static final MediaType XML_APP = register("application/xml");
public static final MediaType XHTML_APP = register("application/xhtml+xml");
public static final MediaType CSS = register("text/css", "css");
public static final MediaType CSV = register("text/csv", "csv");
public static final MediaType HTML = register("text/html", "html", "htm");
public static final MediaType PLAIN_TEXT = register("text/plain", "txt");
public static final MediaType RTF = register("text/rtf", "rtf");
public static final MediaType XML = register("text/xml", "xml");
public static final MediaType XHTML = register("text/xhtml+xml", "xhtml");
@Deprecated
public static final MediaType JAVASCRIPT_TXT = register("text/javascript");
public static final MediaType BMP = register("image/bmp", "bmp");
public static final MediaType ICO = register("image/vnd.microsoft.icon", "ico");
public static final MediaType CRW = register("image/x-canon-crw", "crw");
public static final MediaType PSD = register("image/vnd.adobe.photoshop", "psd");
public static final MediaType WEBP = register("image/webp", "webp");
public static final MediaType GIF = register("image/gif", "gif");
public static final MediaType JPEG = register("image/jpeg", "jpeg", "jpg");
public static final MediaType PNG = register("image/png", "png");
public static final MediaType SVG = register("image/svg+xml", ", g");
public static final MediaType TIFF = register("image/tiff", "tiff", "tif");
public static final MediaType OGG_AUDIO = register("audio/ogg", "oga");
public static final MediaType MP4_AUDIO = register("audio/mp4", "mp4a");
public static final MediaType MPEG_AUDIO = register("audio/mpeg", "mpga");
public static final MediaType WEBM_AUDIO = register("audio/webm", "weba");
public static final MediaType FLAC = register("audio/x-flac", "flac");
public static final MediaType MP3 = register("audio/mp3", "mp3");
public static final MediaType AAC = register("audio/aac", "aac");
public static final MediaType WMA = register("audio/x-ms-wma", "wma");
public static final MediaType REALAUDIO = register("audio/vnd.rn-realaudio", "rm");
public static final MediaType WAVE = register("audio/vnd.wave", "wave", "wav");
public static final MediaType MPEG = register("video/mpeg", "mpeg", "mpg");
public static final MediaType MP4 = register("video/mp4", "mp4");
public static final MediaType QUICKTIME = register("video/quicktime", "mov", "moov", "qt", "qtvr");
public static final MediaType OGG_VIDEO = register("video/ogg", "ogv");
public static final MediaType WEBM = register("video/webm", "webm");
public static final MediaType WMV = register("video/x-ms-wmv", "wmv");
public static final MediaType FLV = register("video/x-flv", "flv");
public static final MediaType AVI = register("video/avi", "avi");
private MediaTypes() {
throw new AssertionError();
}
static MediaType of(byte[] bytes, int offset, int length, int lowerCaseHashCode) {
return mimes.getOrCreate(bytes, offset, length, lowerCaseHashCode);
}
static void render(MediaType mime, ByteBuf buf) {
int len = render(mime, buf.array(), buf.writePosition());
buf.moveWritePosition(len);
}
static int render(MediaType mime, byte[] container, int pos) {
System.arraycopy(mime.bytes, mime.offset, container, pos, mime.length);
return mime.length;
}
public static MediaType getByExtension(String ext) {
return ext2mime.get(ext);
}
private static MediaType register(String name, String... ext) {
MediaType mime = mimes.register(name);
bindExts2mime(mime, ext);
return mime;
}
private static void bindExts2mime(MediaType mime, String... exts) {
for (String ext : exts) {
ext2mime.put(ext, mime);
}
}
}