Mercurial > hg > digilib
changeset 1683:53ba1e2ea3f6
Manifester servlet sends manifest.json file from directory.
Sends file instead of auto-generated manifest.
Solution a) of issue #11.
author | Robert Casties <casties@mpiwg-berlin.mpg.de> |
---|---|
date | Thu, 22 Mar 2018 20:16:02 +0100 |
parents | 6d5e04a54848 |
children | 3994f0ebf576 |
files | common/src/main/java/digilib/io/Directory.java iiif-presentation/src/main/java/digilib/servlet/Manifester.java servlet/src/main/java/digilib/servlet/ServletOps.java webapp/src/main/webapp/WEB-INF/web-iiif-pres.xml |
diffstat | 4 files changed, 62 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/common/src/main/java/digilib/io/Directory.java Wed Mar 14 19:43:12 2018 +0100 +++ b/common/src/main/java/digilib/io/Directory.java Thu Mar 22 20:16:02 2018 +0100 @@ -100,6 +100,8 @@ } /** + * Returns the directory File object. + * * @return */ public File getDir() { @@ -107,6 +109,7 @@ } /** + * Sets the directory File object. * @param dir */ public void setDir(File dir) { @@ -114,6 +117,7 @@ } /** + * Returns the parent Directory object. * @return */ public Directory getParent() { @@ -121,6 +125,7 @@ } /** + * Sets the parent Directory object. * @param parent */ public void setParent(Directory parent) { @@ -129,19 +134,24 @@ /** - * @return Returns the filenames. + * Returns the filenames. + * @return */ public String[] getFilenames() { return list; } /** - * @param filenames The filenames to set. + * Sets the filenames. + * @param filenames */ public void setFilenames(String[] filenames) { this.list = filenames; } + /** + * Resets the filenames. + */ public void clearFilenames() { this.list = null; }
--- a/iiif-presentation/src/main/java/digilib/servlet/Manifester.java Wed Mar 14 19:43:12 2018 +0100 +++ b/iiif-presentation/src/main/java/digilib/servlet/Manifester.java Thu Mar 22 20:16:02 2018 +0100 @@ -1,5 +1,7 @@ package digilib.servlet; +import java.io.File; + /* * #%L * @@ -49,6 +51,7 @@ import digilib.conf.DigilibServletConfiguration; import digilib.conf.DigilibServletRequest; import digilib.conf.ManifestServletConfiguration; +import digilib.image.ImageOpException; import digilib.io.DocuDirCache; import digilib.io.DocuDirectory; import digilib.io.DocuDirent; @@ -153,6 +156,7 @@ dlRequest.setValueFromString("fn", dlRequest.decodeIiifIdentifier(identifier)); DocuDirectory dd = dirCache.getDirectory(dlRequest.getFilePath()); if (dd != null) { + // return rounded modification date of directory mtime = dd.getDirMTime() / 1000 * 1000; } } catch (Exception e) { @@ -217,7 +221,10 @@ response.sendError(HttpServletResponse.SC_NOT_FOUND); return; } - if (dlDir.size() == 0) { + // check for existing manifest file + File mfFile = new File(dlDir.getDir(), "manifest.json"); + // check for image files + if ((dlDir.size() == 0) && !mfFile.canRead()) { logger.debug("Directory has no files: " + dlFn); response.sendError(HttpServletResponse.SC_NOT_FOUND); return; @@ -255,6 +262,12 @@ response.setContentType("application/json"); } + if (mfFile.canRead()) { + // send manifest file + ServletOps.sendFile(mfFile, "", "", response); + return; + } + /* * configure base URLs for manifest */ @@ -300,6 +313,8 @@ } catch (IOException e) { logger.error("ERROR sending manifest: ", e); + } catch (ImageOpException e) { + logger.error("ERROR sending manifest: ", e); } catch (AuthOpException e) { logger.debug("Permission denied."); try {
--- a/servlet/src/main/java/digilib/servlet/ServletOps.java Wed Mar 14 19:43:12 2018 +0100 +++ b/servlet/src/main/java/digilib/servlet/ServletOps.java Thu Mar 22 20:16:02 2018 +0100 @@ -285,26 +285,29 @@ throw new ImageOpException("Unknown file type."); } } - response.setContentType(mt); + if (!mt.isEmpty()) { + response.setContentType(mt); + } /* - * set content-disposition with filename. - * uses image filename. + * set content-disposition with filename unless name="". */ if (name == null) { // no download name -- use filename name = f.getName(); } - if (mt.startsWith("application")) { - response.addHeader("Content-Disposition", "attachment; filename=\"" + name + "\""); - } else { - response.addHeader("Content-Disposition", "inline; filename=\"" + name + "\""); - } + if (!name.isEmpty()) { + if (mt.startsWith("application")) { + response.addHeader("Content-Disposition", "attachment; filename=\"" + name + "\""); + } else { + response.addHeader("Content-Disposition", "inline; filename=\"" + name + "\""); + } + } /* - * set CORS header ACAO "*" for image response + * set CORS header ACAO "*" for image or info response */ - if (corsForImageRequests) { + if (corsForImageRequests && !mt.isEmpty()) { // TODO: would be nice to check request for Origin header response.setHeader("Access-Control-Allow-Origin", "*"); }
--- a/webapp/src/main/webapp/WEB-INF/web-iiif-pres.xml Wed Mar 14 19:43:12 2018 +0100 +++ b/webapp/src/main/webapp/WEB-INF/web-iiif-pres.xml Thu Mar 22 20:16:02 2018 +0100 @@ -72,6 +72,27 @@ <url-pattern>/Manifester/*</url-pattern> </servlet-mapping> + <!-- The Texter servlet - + <servlet> + <servlet-name>Texter</servlet-name> + <servlet-class>digilib.servlet.Texter</servlet-class> + </servlet> --> + <!-- The Intialisation Listener - + <listener> + <listener-class> + digilib.conf.TextServletConfiguration + </listener-class> + </listener> --> + <!-- The mapping for the Texter servlet - + <servlet-mapping> + <servlet-name>Texter</servlet-name> + <url-pattern>/servlet/Texter/*</url-pattern> + </servlet-mapping> + <servlet-mapping> + <servlet-name>Texter</servlet-name> + <url-pattern>/Texter/*</url-pattern> + </servlet-mapping> +--> </web-app>