package org.datacite.conres.view;
import com.sun.jersey.api.view.Viewable;
import org.datacite.conres.model.Model;
import org.datacite.conres.service.CslFormatterService;
import org.datacite.conres.service.CslFormatterServiceFactory;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Variant;
public enum Representation {
TEXT_HTML("text","html", new Transformer() {
@Override public Object transform(Model mr) {
return new Viewable("/doi_html", mr);
}
}),
APPLICATION_DATACITE_XML ("application","x-datacite+xml", new Transformer() {
@Override public Object transform(Model mr) {
return mr.getXml();
}
}),
APPLICATION_VND_DATACITE_XML ("application","vnd.datacite.datacite+xml", new Transformer() {
@Override public Object transform(Model mr) {
return mr.getXml();
}
}),
DATACITE_TEXT ("application","x-datacite+text", new Transformer() {
@Override
public Object transform(Model mr) {
return new Viewable("/doi_text", mr);
}
}),
DATACITE_VND_TEXT ("application","vnd.datacite.datacite+text", new Transformer() {
@Override
public Object transform(Model mr) {
return new Viewable("/doi_text", mr);
}
}),
APPLICATION_RDF_XML ("application","rdf+xml", new Transformer() {
@Override public Object transform(Model mr) {
return RdfRepresentation.writeXML(mr);
}
}),
RDF_TURTLE ("text","turtle", new Transformer() {
@Override
public Object transform(Model mr) {
return RdfRepresentation.writeTurtle(mr);
}
}),
BIBTEX ("application","x-bibtex", new Transformer() {
@Override
public Object transform(Model mr) {
return new Viewable("/doi_bibtex", mr);
}
}),
RIS ("application","x-research-info-systems", new Transformer() {
@Override
public Object transform(Model mr) {
return new Viewable("/doi_ris", mr);
}
}),
CITEPROC_JSON("application", "citeproc+json", new Transformer() {
@Override
public Object transform(Model mr) {
return CslJsonRepresentation.writeJSON(mr);
}
}),
CSL_JSON("application", "vnd.citationstyles.csl+json", new Transformer() {
@Override
public Object transform(Model mr) {
return CslJsonRepresentation.writeJSON(mr);
}
}),
SCHEMA_JSON_LD("application", "vnd.schemaorg.ld+json", new Transformer() {
@Override
public Object transform(Model mr) {
return JsonLdRepresentation.writeJSON(mr);
}
}),
TEXT_BIBLIOGRAPHY("text", "x-bibliography", new Transformer() {
@Override
public Object transform(Model mr) {
return cslFormatterService.format(CslJsonRepresentation.writeJSON(mr),
mr.getCslStyle(),
mr.getCslLocale());
}
});
private final String type;
private final String subtype;
private final MediaType mediaType;
private final Transformer transformer;
private static CslFormatterService cslFormatterService = CslFormatterServiceFactory.getInstance();
Representation(String type, String subtype, Transformer mt) {
this.type = type;
this.subtype = subtype;
this.mediaType = new MediaType(type, subtype);
this.transformer = mt;
}
public Object render(Model mr){
return transformer.transform(mr);
}
public MediaType asMediaType() {
return mediaType;
}
public static Representation valueOf(Variant v){
for (Representation representation : values()) {
if(representation.asMediaType().equals(v.getMediaType()))
return representation;
}
return null;
}
@Override
public String toString() {
return type + "/" + subtype;
}
}