001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.http.commons.domain;
007
008import static javax.ws.rs.core.Variant.mediaTypes;
009import static org.apache.jena.riot.WebContent.contentTypeJSONLD;
010import static org.apache.jena.riot.WebContent.contentTypeN3;
011import static org.apache.jena.riot.WebContent.contentTypeN3Alt2;
012import static org.apache.jena.riot.WebContent.contentTypeNTriples;
013import static org.apache.jena.riot.WebContent.contentTypeRDFXML;
014import static org.apache.jena.riot.WebContent.contentTypeTurtle;
015
016import java.util.List;
017
018import javax.ws.rs.core.MediaType;
019import javax.ws.rs.core.Variant;
020
021/**
022 * This is a convenience class carrying the various RDF content-type values as
023 * Strings and MediaTypes, after the fashion of the constants available on
024 * javax.ws.rs.core.MediaType
025 *
026 * @author ba2213
027 */
028public abstract class RDFMediaType extends MediaType {
029
030    private static final String CHARSET_UTF8 = ";charset=utf-8";
031
032    public static final String N3 = contentTypeN3;
033
034    public static final MediaType N3_TYPE = typeFromString(N3);
035
036    public static final String N3_WITH_CHARSET = N3 + CHARSET_UTF8;
037
038    public static final String N3_ALT2 = contentTypeN3Alt2;
039
040    public static final MediaType N3_ALT2_TYPE = typeFromString(N3_ALT2);
041
042    public static final String N3_ALT2_WITH_CHARSET = N3_ALT2 + CHARSET_UTF8;
043
044    public static final String TURTLE = contentTypeTurtle;
045
046    public static final MediaType TURTLE_TYPE = typeFromString(TURTLE);
047
048    public static final String TURTLE_WITH_CHARSET = TURTLE + CHARSET_UTF8;
049
050    public static final String RDF_XML = contentTypeRDFXML;
051
052    public static final MediaType RDF_XML_TYPE = typeFromString(RDF_XML);
053
054    public static final String NTRIPLES = contentTypeNTriples;
055
056    public static final MediaType NTRIPLES_TYPE = typeFromString(NTRIPLES);
057
058    public final static String JSON_LD = contentTypeJSONLD;
059
060    public final static MediaType JSON_LD_TYPE = typeFromString(JSON_LD);
061
062    public final static String TEXT_PLAIN_WITH_CHARSET = TEXT_PLAIN + CHARSET_UTF8;
063
064    public final static String TEXT_HTML_WITH_CHARSET = TEXT_HTML + CHARSET_UTF8;
065
066    public static final String APPLICATION_LINK_FORMAT = "application/link-format";
067
068    public static final List<Variant> POSSIBLE_RDF_VARIANTS = mediaTypes(
069            RDF_XML_TYPE, TURTLE_TYPE, N3_TYPE, N3_ALT2_TYPE, NTRIPLES_TYPE,
070            TEXT_PLAIN_TYPE, JSON_LD_TYPE).add().build();
071
072    public static final String[] POSSIBLE_RDF_RESPONSE_VARIANTS_STRING = {
073        TURTLE_WITH_CHARSET, N3_WITH_CHARSET, N3_ALT2_WITH_CHARSET, RDF_XML, NTRIPLES,
074        TEXT_PLAIN_WITH_CHARSET, JSON_LD };
075
076    private static MediaType typeFromString(final String type) {
077        return new MediaType(type.split("/")[0], type.split("/")[1]);
078    }
079
080}