changeset 1651:03cc8daf39ea

8: Manifester Servlet creates wrong image-URLs with some slash-replacement characters Task-Url: http://github.com/robcast/digilib/issues/8
author Robert Casties <casties@mpiwg-berlin.mpg.de>
date Sun, 05 Nov 2017 21:04:51 +0100
parents bfae6ac92fc9
children f41cee9bc61b
files iiif-presentation/src/main/java/digilib/conf/ManifestServletConfiguration.java iiif-presentation/src/main/java/digilib/servlet/Manifester.java
diffstat 2 files changed, 28 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/iiif-presentation/src/main/java/digilib/conf/ManifestServletConfiguration.java	Fri Oct 06 13:20:11 2017 +0200
+++ b/iiif-presentation/src/main/java/digilib/conf/ManifestServletConfiguration.java	Sun Nov 05 21:04:51 2017 +0100
@@ -59,8 +59,14 @@
     public ManifestServletConfiguration() {
         super();
 
+        // base URL used in constructing IIIF manifests including servlet name and iiif-prefix (optional)
+        newParameter("iiif-manifest-base-url", null, null, 'f');
+        // base URL used in constructing IIIF manifests including servlet name and iiif-prefix (optional)
+        newParameter("iiif-image-base-url", null, null, 'f');
+        // web-application base URL used in constructing API paths (optional)
+        newParameter("webapp-base-url", null, null, 'f');
         // Scaler servlet name used in constructing IIIF image API paths
-        newParameter("scaler-servlet-path", "Scaler", null, 'f');
+        newParameter("scaler-servlet-name", "Scaler", null, 'f');
     }
 
     /*
--- a/iiif-presentation/src/main/java/digilib/servlet/Manifester.java	Fri Oct 06 13:20:11 2017 +0200
+++ b/iiif-presentation/src/main/java/digilib/servlet/Manifester.java	Sun Nov 05 21:04:51 2017 +0100
@@ -125,7 +125,7 @@
 		// DocuDirCache instance
 		dirCache = (DocuDirCache) dlConfig.getValue(DigilibServletConfiguration.DIR_CACHE_KEY);
 		// Scaler path
-		scalerServletPath = dlConfig.getAsString("scaler-servlet-path");
+		scalerServletPath = dlConfig.getAsString("scaler-servlet-name");
 		// IIIF path separator
 		iiifPathSep = dlConfig.getAsString("iiif-slash-replacement");
 		// CORS for info requests
@@ -256,17 +256,27 @@
 			}
 
 			/*
-			 * get manifest base URL
+			 * configure base URLs for manifest
 			 */
-			String url = request.getRequestURL().toString();
-			// get base URL for Servlets
-			int srvPathLen = request.getServletPath().length() + request.getPathInfo().length();
-			String servletBaseUrl = url.substring(0, url.length() - srvPathLen);
-			// manifest base URL
-			String baseurl = servletBaseUrl + request.getServletPath() + "/" + dlConfig.getAsString("iiif-prefix") + "/" + identifier;
-			
-			params.manifestUrl = baseurl;
-			params.imgApiUrl = servletBaseUrl +"/" + this.scalerServletPath + "/" + dlConfig.getAsString("iiif-prefix");
+			params.imgApiUrl = dlConfig.getAsString("iiif-image-base-url");
+			String manifestBaseUrl = dlConfig.getAsString("iiif-manifest-base-url");
+			if ("".equals(params.imgApiUrl) || "".equals(manifestBaseUrl)) {
+				// try to figure out base URLs
+				String servletBaseUrl = dlConfig.getAsString("webapp-base-url");
+				if ("".equals(servletBaseUrl)) {
+					String url = request.getRequestURL().toString();
+					// get base URL for web application by last occurrence of Servlet path
+					int srvPathLen = url.lastIndexOf(request.getServletPath());
+					servletBaseUrl = url.substring(0, srvPathLen);
+				}
+				// manifest base URL
+				manifestBaseUrl = servletBaseUrl + request.getServletPath() + "/" + dlConfig.getAsString("iiif-prefix");
+				// Image API base URL
+				params.imgApiUrl = servletBaseUrl + "/" + this.scalerServletPath + "/"
+						+ dlConfig.getAsString("iiif-prefix");
+			}
+			// full manifest URL with identifier
+			params.manifestUrl = manifestBaseUrl + "/" + identifier;
 			params.identifier = identifier;
 			params.docuDir = dlDir;