diff --git a/productMods/WEB-INF/web.xml b/productMods/WEB-INF/web.xml index 4eb53ebd..9a8f6d95 100644 --- a/productMods/WEB-INF/web.xml +++ b/productMods/WEB-INF/web.xml @@ -1413,6 +1413,16 @@ NONE --> + + + ExportQrCodeController + edu.cornell.mannlib.vitro.webapp.controller.ExportQrCodeController + + + ExportQrCodeController + /qrcode + + diff --git a/productMods/templates/freemarker/body/individual-exportQrCode.ftl b/productMods/templates/freemarker/body/individual-exportQrCode.ftl new file mode 100644 index 00000000..12c75be1 --- /dev/null +++ b/productMods/templates/freemarker/body/individual-exportQrCode.ftl @@ -0,0 +1,38 @@ +<#-- $This file is distributed under the terms of the license in /doc/license.txt$ --> + +<#-- Page providing options for disseminating QR codes --> + +<#include "individual-qrCodeFoafPerson.ftl"> + +<#assign qrCodeWidth = "150"> + +Export QR Code + + + <#assign thumbUrl = individual.thumbUrl! "${urls.images}/placeholders/person.thumbnail.jpg" > + + + + ${individual.nameStatement.value} + + + + + + VCard + <@qrCodeVCard qrCodeWidth="150" /> + + <img src="${getQrCodeUrlForVCard(qrCodeWidth)}" /><#t> + <#t> + + + + Hyperlink + <@qrCodeLink qrCodeWidth="150" /> + + <img src="${getQrCodeUrlForLink(qrCodeWidth)}" /><#t> + <#t> + + + + diff --git a/src/edu/cornell/mannlib/vitro/webapp/controller/ExportQrCodeController.java b/src/edu/cornell/mannlib/vitro/webapp/controller/ExportQrCodeController.java new file mode 100644 index 00000000..36cd4529 --- /dev/null +++ b/src/edu/cornell/mannlib/vitro/webapp/controller/ExportQrCodeController.java @@ -0,0 +1,51 @@ +/* $This file is distributed under the terms of the license in /doc/license.txt$ */ + +package edu.cornell.mannlib.vitro.webapp.controller; + +import java.util.HashMap; +import java.util.Map; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import edu.cornell.mannlib.vitro.webapp.beans.Individual; +import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.IndividualController; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.TemplateResponseValues; +import edu.cornell.mannlib.vitro.webapp.web.templatemodels.individual.IndividualTemplateModel; +import freemarker.ext.beans.BeansWrapper; +import freemarker.template.DefaultObjectWrapper; + +public class ExportQrCodeController extends FreemarkerHttpServlet { + + private static final long serialVersionUID = 1L; + private static final Log log = LogFactory.getLog(ExportQrCodeController.class); + private static final String TEMPLATE_DEFAULT = "individual-exportQrCode.ftl"; + + @Override + protected ResponseValues processRequest(VitroRequest vreq) { + try { + Individual individual = IndividualController.getIndividualFromRequest(vreq); + + DefaultObjectWrapper wrapper = new DefaultObjectWrapper(); + wrapper.setExposureLevel(BeansWrapper.EXPOSE_SAFE); + + Map body = new HashMap(); + body.put("individual", wrapper.wrap(new IndividualTemplateModel(individual, vreq))); + + return new TemplateResponseValues(TEMPLATE_DEFAULT, body); + } catch (Throwable e) { + log.error(e, e); + return new ExceptionResponseValues(e); + } + } + + @Override + protected String getTitle(String siteName, VitroRequest vreq) { + return "Export QR Code for " + IndividualController.getIndividualFromRequest(vreq).getRdfsLabel(); + } + +} diff --git a/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java index 8046bd92..9e831ef7 100644 --- a/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java +++ b/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/individual/IndividualTemplateModel.java @@ -20,6 +20,7 @@ import edu.cornell.mannlib.vitro.webapp.dao.WebappDaoFactory; public class IndividualTemplateModel extends BaseIndividualTemplateModel { private static final Log log = LogFactory.getLog(IndividualTemplateModel.class); + private Map qrData = null; public IndividualTemplateModel(Individual individual, VitroRequest vreq) { super(individual, vreq); @@ -75,6 +76,12 @@ public class IndividualTemplateModel extends BaseIndividualTemplateModel { public Map getQrData() { + if(qrData == null) + qrData = generateQrData(); + return qrData; + } + + private Map generateQrData() { String core = "http://vivoweb.org/ontology/core#"; String foaf = "http://xmlns.com/foaf/0.1/"; @@ -104,6 +111,10 @@ public class IndividualTemplateModel extends BaseIndividualTemplateModel { String externalUrl = tempUrl + profileUrl; qrData.put("externalUrl", externalUrl); + String individualUri = individual.getURI(); + String contextPath = vreq.getContextPath(); + qrData.put("exportQrCodeUrl", contextPath + "/qrcode?uri=" + UrlBuilder.urlEncode(individualUri)); + return qrData; } }