Introducing new ResponseValues subclass for serving File downloads, mainly for Visualizations. Also modified FreemarkerHttpServlet & BaseResponseValues to handle the new methods pertaining to file download response.
This commit is contained in:
parent
838713d669
commit
efc48a3054
4 changed files with 68 additions and 0 deletions
|
@ -26,6 +26,7 @@ import edu.cornell.mannlib.vitro.webapp.controller.VitroHttpServlet;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Route;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ExceptionResponseValues;
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.FileResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ForwardResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ForwardResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RdfResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RdfResponseValues;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RedirectResponseValues;
|
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RedirectResponseValues;
|
||||||
|
@ -153,6 +154,8 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
|
||||||
doForward(vreq, response, values);
|
doForward(vreq, response, values);
|
||||||
} else if (values instanceof RdfResponseValues) {
|
} else if (values instanceof RdfResponseValues) {
|
||||||
doRdf(vreq, response, values);
|
doRdf(vreq, response, values);
|
||||||
|
} else if (values instanceof FileResponseValues) {
|
||||||
|
doFile(vreq, response, values);
|
||||||
}
|
}
|
||||||
} catch (ServletException e) {
|
} catch (ServletException e) {
|
||||||
log.error("ServletException in doResponse()", e);
|
log.error("ServletException in doResponse()", e);
|
||||||
|
@ -239,6 +242,26 @@ public class FreemarkerHttpServlet extends VitroHttpServlet {
|
||||||
|
|
||||||
values.getModel().write( response.getOutputStream(), format );
|
values.getModel().write( response.getOutputStream(), format );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void doFile(HttpServletRequest request, HttpServletResponse response, ResponseValues values)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
String mediaType = values.getContentType().getMediaType();
|
||||||
|
response.setContentType(mediaType);
|
||||||
|
|
||||||
|
Map<String, String> headerKeyToValue = values.getHeader();
|
||||||
|
|
||||||
|
for (Map.Entry<String, String> currentHeaderPair : headerKeyToValue.entrySet()) {
|
||||||
|
response.setHeader(currentHeaderPair.getKey(), currentHeaderPair.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
PrintWriter responseWriter = response.getWriter();
|
||||||
|
|
||||||
|
String rawFileContent = (String) values.getMap().get("fileContent");
|
||||||
|
responseWriter.append(rawFileContent);
|
||||||
|
responseWriter.close();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
protected void doException(VitroRequest vreq, HttpServletResponse response, ResponseValues values) {
|
protected void doException(VitroRequest vreq, HttpServletResponse response, ResponseValues values) {
|
||||||
// Log the error, and display an error message on the page.
|
// Log the error, and display an error message on the page.
|
||||||
|
|
|
@ -60,6 +60,12 @@ public abstract class BaseResponseValues implements ResponseValues {
|
||||||
"This is not a redirect response.");
|
"This is not a redirect response.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getHeader() {
|
||||||
|
throw new UnsupportedOperationException(
|
||||||
|
"This is not a header response.");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getForwardUrl() {
|
public String getForwardUrl() {
|
||||||
throw new UnsupportedOperationException(
|
throw new UnsupportedOperationException(
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/* $This file is distributed under the terms of the license in /doc/license.txt$ */
|
||||||
|
|
||||||
|
package edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import edu.cornell.mannlib.vitro.webapp.web.ContentType;
|
||||||
|
|
||||||
|
public class FileResponseValues extends BaseResponseValues {
|
||||||
|
|
||||||
|
private String outputFileName;
|
||||||
|
private String DEFAULT_HEADER_KEY = "Content-Disposition";
|
||||||
|
private String DEFAULT_HEADER_VALUE_PREFIX = "attachment;filename=";
|
||||||
|
private final Map<String, Object> map;
|
||||||
|
|
||||||
|
|
||||||
|
public FileResponseValues(ContentType contentType, String outputFileName, Map<String, Object> map) {
|
||||||
|
super(contentType);
|
||||||
|
this.outputFileName = outputFileName;
|
||||||
|
this.map = map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, String> getHeader() {
|
||||||
|
Map<String, String> headerKeyToValue = new HashMap<String, String>();
|
||||||
|
headerKeyToValue.put(DEFAULT_HEADER_KEY, DEFAULT_HEADER_VALUE_PREFIX + outputFileName);
|
||||||
|
return headerKeyToValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getMap() {
|
||||||
|
return Collections.unmodifiableMap(this.map);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -20,6 +20,8 @@ public interface ResponseValues {
|
||||||
|
|
||||||
public String getRedirectUrl();
|
public String getRedirectUrl();
|
||||||
|
|
||||||
|
public Map<String, String> getHeader();
|
||||||
|
|
||||||
public String getForwardUrl();
|
public String getForwardUrl();
|
||||||
|
|
||||||
public Throwable getException();
|
public Throwable getException();
|
||||||
|
|
Loading…
Add table
Reference in a new issue