diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java index dd25369b9..df1e29eee 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/VitroHttpServlet.java @@ -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 diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java index 71eeaf006..1530aaeee 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/freemarker/FreemarkerHttpServlet.java @@ -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, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java index 2e632159f..8c10623b2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualController.java @@ -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); diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java index 3b3c6d091..d89766164 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/controller/individual/IndividualRequestAnalyzer.java @@ -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