diff servlet3/src/main/java/digilib/servlet/DigilibServletConfiguration.java @ 1158:2ee261676828 default tip

better out-of-the box experience: * digilib works without config files using sensible defaults * new sample images folder used by default * config files moved to templates
author robcast
date Tue, 19 Feb 2013 17:32:25 +0100
parents 4e368c85cce4
children
line wrap: on
line diff
--- a/servlet3/src/main/java/digilib/servlet/DigilibServletConfiguration.java	Tue Feb 19 17:27:53 2013 +0100
+++ b/servlet3/src/main/java/digilib/servlet/DigilibServletConfiguration.java	Tue Feb 19 17:32:25 2013 +0100
@@ -27,7 +27,6 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
 
 import digilib.image.DocuImageImpl;
 import digilib.io.FileOps;
@@ -53,7 +52,7 @@
 
     /** time the webapp (i.e. this class) was loaded */
     public final Long webappStartTime = System.currentTimeMillis();
-    
+
     /** counter for HttpRequests (mostly for debugging) */
     public AtomicInteger webappRequestCnt = new AtomicInteger(0);
 
@@ -70,18 +69,15 @@
          */
 
         // digilib servlet version
-        newParameter("servlet.version", digilib.servlet.Scaler.getVersion(),
-                null, 's');
+        newParameter("servlet.version", digilib.servlet.Scaler.getVersion(), null, 's');
         // configuration file location
         newParameter("servlet.config.file", null, null, 's');
         // DocuDirCache instance
         newParameter("servlet.dir.cache", null, null, 's');
         // DocuImage class instance
-        newParameter("servlet.docuimage.class",
-                digilib.image.ImageLoaderDocuImage.class, null, 's');
+        newParameter("servlet.docuimage.class", digilib.image.ImageLoaderDocuImage.class, null, 's');
         // DocuImage version
-        newParameter("servlet.docuimage.version",
-                "?", null, 's');
+        newParameter("servlet.docuimage.version", "?", null, 's');
         // AuthOps instance for authentication
         newParameter("servlet.auth.op", null, null, 's');
         // Executor for image operations
@@ -96,16 +92,13 @@
          */
 
         // image file to send in case of error
-        newParameter("error-image", new File("img/digilib-error.png"), null,
-                'f');
+        newParameter("error-image", new File("img/digilib-error.png"), null, 'f');
         // image file to send if access is denied
-        newParameter("denied-image", new File("img/digilib-denied.png"), null,
-                'f');
+        newParameter("denied-image", new File("img/digilib-denied.png"), null, 'f');
         // image file to send if image file not found
-        newParameter("notfound-image", new File("img/digilib-notfound.png"),
-                null, 'f');
+        newParameter("notfound-image", new File("img/digilib-notfound.png"), null, 'f');
         // base directories in order of preference (prescaled versions last)
-        String[] bd = { "/docuserver/images", "/docuserver/scaled/small" };
+        String[] bd = { "sample-images" };
         newParameter("basedir-list", bd, null, 'f');
         // use authentication information
         newParameter("use-authorization", Boolean.FALSE, null, 'f');
@@ -120,7 +113,7 @@
         // degree of subsampling on image load
         newParameter("subsample-minimum", new Float(2f), null, 'f');
         // default scaling quality
-        newParameter("default-quality", new Integer(1), null, 'f');
+        newParameter("default-quality", new Integer(2), null, 'f');
         // use mapping file to translate paths
         newParameter("use-mapping", Boolean.FALSE, null, 'f');
         // mapping file location
@@ -142,8 +135,7 @@
         // number of pdf-image generation threads
         newParameter("pdf-image-worker-threads", new Integer(1), null, 'f');
         // max number of waiting pdf-image generation threads
-        newParameter("pdf-image-max-waiting-threads", new Integer(10), null,
-                'f');
+        newParameter("pdf-image-max-waiting-threads", new Integer(10), null, 'f');
         // PDF generation temp directory
         newParameter("pdf-temp-dir", "pdf_temp", null, 'f');
         // PDF generation cache directory
@@ -182,59 +174,66 @@
         }
         String fn = c.getInitParameter("config-file");
         if (fn == null) {
+            logger.debug("readConfig: no param config-file");
             fn = ServletOps.getConfigFile("digilib-config.xml", c);
-            if (fn == null) {
-                logger.fatal("readConfig: no param config-file");
-                throw new ServletException("ERROR: no digilib config file!");
-            }
         }
         File f = new File(fn);
-        // setup config file list reader
-        XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter",
-                "name", "value");
-        // read config file into HashMap
-        Map<String, String> confTable = lilo.loadURL(f.toURL().toString());
+        if (f.canRead()) {
+            // setup config file list reader
+            XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", "name", "value");
+            // read config file into HashMap
+            Map<String, String> confTable = lilo.loadURL(f.toURL().toString());
 
-        // set config file path parameter
-        setValue("servlet.config.file", f.getCanonicalPath());
+            // set config file path parameter
+            setValue("servlet.config.file", f.getCanonicalPath());
 
-        /*
-         * read parameters
-         */
+            /*
+             * read parameters
+             */
 
-        for (Entry<String, String> confEntry : confTable.entrySet()) {
-            Parameter p = get(confEntry.getKey());
-            if (p != null) {
-                if (p.getType() == 's') {
-                    // type 's' Parameters are not overwritten.
-                    continue;
-                }
-                if (!p.setValueFromString(confEntry.getValue())) {
-                    /*
-                     * automatic conversion failed -- try special cases
-                     */
+            for (Entry<String, String> confEntry : confTable.entrySet()) {
+                Parameter p = get(confEntry.getKey());
+                if (p != null) {
+                    if (p.getType() == 's') {
+                        // type 's' Parameters are not overwritten.
+                        continue;
+                    }
+                    if (!p.setValueFromString(confEntry.getValue())) {
+                        /*
+                         * automatic conversion failed -- try special cases
+                         */
 
-                    // basedir-list
-                    if (confEntry.getKey().equals("basedir-list")) {
-                        // split list into directories
-                        String[] dirs = FileOps.pathToArray(confEntry.getValue());
-                        for (int j = 0; j < dirs.length; j++) {
-                            // make relative directory paths be inside the webapp
-                            dirs[j] = ServletOps.getFile(dirs[j], c);
-                        }
-                        if (dirs != null) {
-                            p.setValue(dirs);
+                        // basedir-list
+                        if (confEntry.getKey().equals("basedir-list")) {
+                            // split list into directories
+                            String[] dirs = FileOps.pathToArray(confEntry.getValue());
+                            for (int j = 0; j < dirs.length; j++) {
+                                // make relative directory paths be inside the
+                                // webapp
+                                dirs[j] = ServletOps.getFile(dirs[j], c);
+                            }
+                            if (dirs != null) {
+                                p.setValue(dirs);
+                            }
                         }
                     }
+                } else {
+                    // parameter unknown -- just add
+                    newParameter(confEntry.getKey(), null, confEntry.getValue(), 'f');
                 }
-            } else {
-                // parameter unknown -- just add
-                newParameter(confEntry.getKey(), null, confEntry.getValue(), 'f');
+            }
+        } else {
+            logger.warn("No digilib config file! Using defaults!");
+            // update basedir-list
+            String[] dirs = (String[]) this.getValue("basedir-list");
+            for (int j = 0; j < dirs.length; j++) {
+                // make relative directory paths be inside the
+                // webapp
+                dirs[j] = ServletOps.getFile(dirs[j], c);
             }
         }
         // initialise static DocuImage class instance
-        DigilibServletConfiguration.docuImageClass = (Class<DocuImageImpl>) Class
-                .forName(getAsString("docuimage-class"));
+        DigilibServletConfiguration.docuImageClass = (Class<DocuImageImpl>) Class.forName(getAsString("docuimage-class"));
         setValue("servlet.docuimage.version", getDocuImageInstance().getVersion());
     }