# HG changeset patch # User Robert Casties # Date 1521746162 -3600 # Node ID 53ba1e2ea3f695f129fb7bdaabbf2f6738317131 # Parent 6d5e04a548482a95aeb32ab03dab9faef6826d9f Manifester servlet sends manifest.json file from directory. Sends file instead of auto-generated manifest. Solution a) of issue #11. diff -r 6d5e04a54848 -r 53ba1e2ea3f6 common/src/main/java/digilib/io/Directory.java --- 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; } diff -r 6d5e04a54848 -r 53ba1e2ea3f6 iiif-presentation/src/main/java/digilib/servlet/Manifester.java --- 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 { diff -r 6d5e04a54848 -r 53ba1e2ea3f6 servlet/src/main/java/digilib/servlet/ServletOps.java --- 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", "*"); } diff -r 6d5e04a54848 -r 53ba1e2ea3f6 webapp/src/main/webapp/WEB-INF/web-iiif-pres.xml --- 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 @@ /Manifester/* + + +