Adding serialization support or JSON-LD to indivdiual controller. VIVO-255

This commit is contained in:
Brian Caruso 2013-08-28 11:18:33 -04:00
parent 22d7e04573
commit ab11fff370
4 changed files with 38 additions and 12 deletions

View file

@ -45,6 +45,7 @@ public class VitroHttpServlet extends HttpServlet {
public final static String HTML_MIMETYPE = "text/html";
public final static String RDFXML_MIMETYPE = "application/rdf+xml";
public final static String JSON_MIMETYPE = "application/json";
public final static String N3_MIMETYPE = "text/n3"; // unofficial and unregistered
public final static String TTL_MIMETYPE = "text/turtle"; // unofficial and unregistered

View file

@ -20,10 +20,14 @@ import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.github.jsonldjava.core.JSONLD;
import com.github.jsonldjava.core.JSONLDProcessingError;
import com.github.jsonldjava.impl.JenaRDFParser;
import com.github.jsonldjava.utils.JSONUtils;
import edu.cornell.mannlib.vitro.webapp.auth.permissions.SimplePermission;
import edu.cornell.mannlib.vitro.webapp.auth.policy.PolicyHelper;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.Actions;
import edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequiresActions;
import edu.cornell.mannlib.vitro.webapp.beans.ApplicationBean;
import edu.cornell.mannlib.vitro.webapp.beans.DisplayMessage;
import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
@ -39,6 +43,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.Tem
import edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailFactory;
import edu.cornell.mannlib.vitro.webapp.email.FreemarkerEmailMessage;
import edu.cornell.mannlib.vitro.webapp.freemarker.config.FreemarkerConfiguration;
import edu.cornell.mannlib.vitro.webapp.rdfservice.RDFServiceException;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.Tags;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.User;
import edu.cornell.mannlib.vitro.webapp.web.templatemodels.menu.MainMenu;
@ -308,17 +313,29 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
String mediaType = values.getContentType().getMediaType();
response.setContentType(mediaType);
String format = "";
if ( RDFXML_MIMETYPE.equals(mediaType)) {
format = "RDF/XML";
} else if( N3_MIMETYPE.equals(mediaType)) {
format = "N3";
} else if ( TTL_MIMETYPE.equals(mediaType)) {
format ="TTL";
if ( JSON_MIMETYPE.equals(mediaType)){
//json-ld is not supported by jena v2.6.4
try {
JenaRDFParser parser = new JenaRDFParser();
Object json = JSONLD.fromRDF( values.getModel() , parser);
JSONUtils.write(response.getWriter(), json);
} catch (JSONLDProcessingError e) {
throw new IOException("Could not convert from Jena model to JSON-LD", e);
}
}else{
String format = "";
if ( RDFXML_MIMETYPE.equals(mediaType)) {
format = "RDF/XML";
} else if( N3_MIMETYPE.equals(mediaType)) {
format = "N3";
} else if ( TTL_MIMETYPE.equals(mediaType)) {
format ="TTL";
}
values.getModel().write( response.getOutputStream(), format );
}
values.getModel().write( response.getOutputStream(), format );
}
protected void doException(VitroRequest vreq, HttpServletResponse response,

View file

@ -39,6 +39,8 @@ public class IndividualController extends FreemarkerHttpServlet {
map.put(HTML_MIMETYPE, 0.5f);
map.put(XHTML_MIMETYPE, 0.5f);
map.put("application/xml", 0.5f);
map.put(JSON_MIMETYPE, 1.0f);
map.put(RDFXML_MIMETYPE, 1.0f);
map.put(RDFXML_MIMETYPE, 1.0f);
map.put(N3_MIMETYPE, 1.0f);
map.put(TTL_MIMETYPE, 1.0f);

View file

@ -5,6 +5,7 @@ package edu.cornell.mannlib.vitro.webapp.controller.individual;
import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.N3_MIMETYPE;
import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.RDFXML_MIMETYPE;
import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.TTL_MIMETYPE;
import static edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet.JSON_MIMETYPE;
import java.util.Map;
import java.util.regex.Matcher;
@ -117,7 +118,9 @@ public class IndividualRequestAnalyzer {
return "/individual/" + m.group(1) + "/" + m.group(1) + ".n3";
} else if (TTL_MIMETYPE.equals(mediaType)) {
return "/individual/" + m.group(1) + "/" + m.group(1) + ".ttl";
}
} else if (JSON_MIMETYPE.equals(mediaType)){
return "/individual/" + m.group(1) + "/" + m.group(1) + ".jsonld";
}
}
// or redirect to the canonical URL for HTML representation.
return "/display/" + m.group(1);
@ -244,7 +247,10 @@ public class IndividualRequestAnalyzer {
if (formatParam.contains("ttl")) {
return ContentType.TURTLE;
}
if (formatParam.contains("jsonld") || formatParam.contains("json")){
return ContentType.JSON;
}
/*
* Check for parts of URL that indicate request for RDF. Examples:
* http://vivo.cornell.edu/individual/n23/n23.rdf