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>