changeset 1233:3017ade24bbb

started work on directory cache. removed support for multiple FileClasses in one cache. incremented version to 2.3.
author robcast
date Fri, 03 Jan 2014 17:35:13 +0100
parents e5281d63f03f
children 6c1f198b292b
files common-bioformats/pom.xml common-imagej/pom.xml common-jai/pom.xml common/pom.xml common/src/main/java/digilib/conf/DigilibConfiguration.java common/src/main/java/digilib/io/AliasingDocuDirCache.java common/src/main/java/digilib/io/DocuDirCache.java common/src/main/java/digilib/io/DocuDirectory.java common/src/main/java/digilib/meta/IndexMetaDirMeta.java doc/pom.xml doc/src/site/markdown/digilib-config.md pdf/pom.xml pdf/src/main/java/digilib/conf/PDFServletConfiguration.java pdf/src/main/java/digilib/servlet/PDFCache.java pom.xml servlet/pom.xml servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java servlet/src/main/java/digilib/servlet/DocumentBean.java servlet2/pom.xml servlet2/src/main/java/digilib/servlet/Scaler.java servlet2/src/main/java/digilib/servlet/ScalerNoThread.java servlet3/pom.xml servlet3/src/main/java/digilib/conf/DigilibServlet3Configuration.java text/pom.xml text/src/main/java/digilib/conf/TextServletConfiguration.java text/src/main/java/digilib/servlet/Texter.java webapp/pom.xml webapp/src/main/webapp/WEB-INF/web-additional.xml
diffstat 28 files changed, 349 insertions(+), 203 deletions(-) [+]
line wrap: on
line diff
--- a/common-bioformats/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/common-bioformats/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
   <artifactId>digilib-common-bioformats</artifactId>
--- a/common-imagej/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/common-imagej/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
   <artifactId>digilib-common-imagej</artifactId>
--- a/common-jai/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/common-jai/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
     <relativePath>..</relativePath>
   </parent>
   <artifactId>digilib-common-jai</artifactId>
--- a/common/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
   </parent>
   <artifactId>digilib-common</artifactId>
   <name>digilib-common</name>
--- a/common/src/main/java/digilib/conf/DigilibConfiguration.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/src/main/java/digilib/conf/DigilibConfiguration.java	Fri Jan 03 17:35:13 2014 +0100
@@ -48,7 +48,7 @@
 
     /** digilib version */
     public static String getVersion() {
-        return "2.2.3";
+        return "2.3.0";
     }
     
     /**
--- a/common/src/main/java/digilib/io/AliasingDocuDirCache.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/src/main/java/digilib/io/AliasingDocuDirCache.java	Fri Jan 03 17:35:13 2014 +0100
@@ -44,15 +44,15 @@
 
 	/**
 	 * @param baseDirs
-	 * @param fcs
+	 * @param fc
 	 * @param confFileName
 	 * @throws FileOpException
 	 */
-	public AliasingDocuDirCache(String[] baseDirs, FileClass[] fcs,
+	public AliasingDocuDirCache(String[] baseDirs, FileClass fc,
 			File confFile, DigilibConfiguration dlConfig)
 			throws FileOpException {
 		// create standard DocuDirCache
-		super(baseDirs, fcs, dlConfig);
+		super(baseDirs, fc, dlConfig);
 		Map<String,String> pathMap = null;
 		// read alias config file
 		try {
--- a/common/src/main/java/digilib/io/DocuDirCache.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/src/main/java/digilib/io/DocuDirCache.java	Fri Jan 03 17:35:13 2014 +0100
@@ -53,11 +53,11 @@
 	/** names of base directories */
 	protected String[] baseDirNames = null;
 
-	/** array of allowed file classes (image/text) */
-	protected FileClass[] fileClasses = null;
+	/** allowed file class (image/text) */
+	protected FileClass fileClass = null;
 
 	/** number of files in the whole cache (approximate) */
-	protected AtomicInteger numImgFiles = new AtomicInteger(0);
+	protected AtomicInteger numFiles = new AtomicInteger(0);
 
 	/** number of cache hits */
 	protected AtomicInteger hits = new AtomicInteger(0);
@@ -65,19 +65,18 @@
 	/** number of cache misses */
 	protected AtomicInteger misses = new AtomicInteger(0);
 
-	/** the root directory element */
-	public static Directory ROOT = null;
-
 	/**
-	 * Constructor with array of base directory names and file classes.
+	 * Constructor with array of base directory names and file class.
 	 * 
 	 * @param bd
 	 *            base directory names
+     * @param fc
+     * @param dlConfig
 	 */
-	public DocuDirCache(String[] bd, FileClass[] fcs,
+	public DocuDirCache(String[] bd, FileClass fc,
 			DigilibConfiguration dlConfig) {
 		baseDirNames = bd;
-		this.fileClasses = fcs;
+		this.fileClass = fc;
 	}
 
 	/**
@@ -89,7 +88,7 @@
 	public DocuDirCache(String[] bd) {
 		baseDirNames = bd;
 		// default file class is CLASS_IMAGE
-		fileClasses = new FileClass[] { FileClass.IMAGE };
+		fileClass = FileClass.IMAGE;
 	}
 
 	/**
@@ -117,7 +116,7 @@
 			logger.warn("Duplicate key in DocuDirCache.put -- ignoring!");
 			return olddir;
 		}
-		numImgFiles.addAndGet(newdir.size(FileClass.IMAGE));
+		numFiles.addAndGet(newdir.size());
 		return newdir;
 	}
 
@@ -176,7 +175,27 @@
 		return l;
 	}
 
-	/**
+    /**
+     * Returns the DocuDirent with the pathname <code>fn</code> and the index
+     * <code>in</code>.
+     * 
+     * If <code>fn</code> is a file then the corresponding DocuDirent is
+     * returned and the index is ignored.
+     * 
+     * @param fn
+     *            digilib pathname
+     * @param in
+     *            file index
+     * @param fc
+     *            file class
+     * @return
+     * @deprecated Use {@link #getFile(String fn, int in)} instead.
+     */
+    public DocuDirent getFile(String fn, int in, FileClass fc) {
+        return getFile(fn, in);
+    }
+    
+    /**
 	 * Returns the DocuDirent with the pathname <code>fn</code> and the index
 	 * <code>in</code> and the class <code>fc</code>.
 	 * 
@@ -191,7 +210,7 @@
 	 *            file class
 	 * @return
 	 */
-	public DocuDirent getFile(String fn, int in, FileClass fc) {
+	public DocuDirent getFile(String fn, int in) {
 		DocuDirectory dd;
 		// file number is 1-based, vector index is 0-based
 		int n = in - 1;
@@ -215,8 +234,7 @@
 				/*
 				 * maybe it's a file
 				 */
-				// get the parent directory string (like we store it in the
-				// cache)
+				// get the parent directory string (like we store it in the cache)
 				String d = FileOps.parent(fn);
 				// try it in the cache
                 // logger.debug(fn + " is a file in dir " + d);
@@ -237,7 +255,7 @@
 					misses.decrementAndGet();
 				}
 				// get the file's index
-				n = dd.indexOf(f.getName(), fc);
+				n = dd.indexOf(f.getName());
 			}
 		} else {
 			// cache hit
@@ -246,7 +264,7 @@
 		dd.refresh();
 		if (dd.isValid()) {
 			try {
-				return dd.get(n, fc);
+				return dd.get(n);
 			} catch (IndexOutOfBoundsException e) {
                 // logger.debug(fn + " not found in directory");
 			}
@@ -334,7 +352,7 @@
      * @return long
      */
     public int getNumFiles() {
-        return numImgFiles.get();
+        return numFiles.get();
     }
 
 	/**
@@ -354,15 +372,15 @@
 	/**
 	 * @return
 	 */
-	public FileClass[] getFileClasses() {
-		return fileClasses;
+	public FileClass getFileClass() {
+		return fileClass;
 	}
 
 	/**
 	 * @param fileClasses
 	 */
-	public void setFileClasses(FileClass[] fileClasses) {
-		this.fileClasses = fileClasses;
+	public void setFileClass(FileClass fileClass) {
+		this.fileClass = fileClass;
 	}
 
 }
--- a/common/src/main/java/digilib/io/DocuDirectory.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/src/main/java/digilib/io/DocuDirectory.java	Fri Jan 03 17:35:13 2014 +0100
@@ -42,7 +42,7 @@
 public class DocuDirectory extends Directory {
 
 	/** list of files (DocuDirent) */
-	private List<List<DocuDirent>> list = null;
+	private List<DocuDirent> list = null;
 
 	/** directory object is valid (exists on disk) */
 	private boolean isValid = false;
@@ -83,12 +83,7 @@
 		this.cache = cache;
 		String baseDirName = cache.getBaseDirNames()[0];
 		// clear directory list
-		FileClass[] fcs = FileClass.values();
-		list = new ArrayList<List<DocuDirent>>(fcs.length);
-		// create empty list for all classes
-		for (@SuppressWarnings("unused") FileClass fc: fcs) {
-		    list.add(null);
-		}
+		list = new ArrayList<DocuDirent>();
 		dirMTime = 0;
 		// the first directory has to exist
 		dir = new File(baseDirName, path);
@@ -98,11 +93,9 @@
 
 	/**
 	 * number of DocuFiles in this directory. 
-	 * Warning: this does mostly not give the right result!  
-	 * @deprecated Use {@link #size(FileClass)} instead.
 	 */
 	public int size() {
-		return ((list != null) && (list.get(0) != null)) ? list.get(0).size() : 0;
+		return (list != null) ? list.size() : 0;
 	}
 
 	/**
@@ -110,9 +103,10 @@
 	 * 
 	 * @param fc
 	 *            fileClass
+     * @deprecated Use {@link #size()} instead.
 	 */
 	public int size(FileClass fc) {
-		return ((list != null) && (list.get(fc.ordinal()) != null)) ? list.get(fc.ordinal()).size() : 0;
+		return size();
 	}
 
 	/**
@@ -122,10 +116,10 @@
 	 * @return
 	 */
 	public DocuDirent get(int index) {
-		if ((list == null) || (list.get(0) == null) || (index >= list.get(0).size())) {
+		if ((list == null) || (index >= list.size())) {
 			return null;
 		}
-		return list.get(0).get(index);
+		return list.get(index);
 	}
 
 	/**
@@ -135,12 +129,10 @@
 	 * @param fc
 	 *            fileClass
 	 * @return
+     * @deprecated Use {@link #get()} instead.
 	 */
 	public DocuDirent get(int index, FileClass fc) {
-		if ((list == null) || (list.get(fc.ordinal()) == null) || (index >= list.get(fc.ordinal()).size())) {
-			return null;
-		}
-		return (DocuDirent) list.get(fc.ordinal()).get(index);
+	    return get(index);
 	}
 
 	/**
@@ -194,29 +186,25 @@
 			}
 		}
 
-		// go through all file classes
-		for (FileClass fileClass : cache.getFileClasses()) {
-			File[] fileList = FileOps.listFiles(allFiles,
-					FileOps.filterForClass(fileClass));
-			// number of files in the directory
-			int numFiles = fileList.length;
-			if (numFiles > 0) {
-				// create new list
-				ArrayList<DocuDirent> dl = new ArrayList<DocuDirent>(numFiles);
-				list.set(fileClass.ordinal(), dl);
-				for (File f : fileList) {
-					DocuDirent df = FileOps.fileForClass(fileClass, f, dirs);
-					df.setParent(this);
-					// add the file to our list
-					dl.add(df);
-				}
-				/*
-				 * we sort the inner ArrayList (the list of files not the list
-				 * of file types) for binarySearch to work (DocuDirent's natural
-				 * sort order is by filename)
-				 */
-				Collections.sort(dl);
+		FileClass fileClass = cache.getFileClass();
+		File[] fileList = FileOps.listFiles(allFiles, FileOps.filterForClass(fileClass));
+		// number of files in the directory
+		int numFiles = fileList.length;
+		if (numFiles > 0) {
+			// create new list
+			ArrayList<DocuDirent> dl = new ArrayList<DocuDirent>(numFiles);
+			list = dl;
+			for (File f : fileList) {
+				DocuDirent df = FileOps.fileForClass(fileClass, f, dirs);
+				df.setParent(this);
+				// add the file to our list
+				dl.add(df);
 			}
+			/*
+			 * we sort the ArrayList (the list of files) for binarySearch to work 
+			 * (DocuDirent's natural sort order is by filename)
+			 */
+			Collections.sort(dl);
 		}
 		// clear the scaled directories
 		for (Directory d: dirs) {
@@ -226,7 +214,7 @@
 		}
 		// update number of cached files if this was the first time
 		if (dirMTime == 0) {
-			cache.numImgFiles.addAndGet(size(FileClass.IMAGE));
+			cache.numFiles.addAndGet(size());
 		}
 		dirMTime = dir.lastModified();
 		// read metadata as well
@@ -279,41 +267,41 @@
 		return t;
 	}
 
-	/**
-	 * Searches for the file with the name <code>fn</code>.
-	 * 
-	 * Searches the directory for the file with the name <code>fn</code> and
-	 * returns its index. Returns -1 if the file cannot be found.
-	 * 
-	 * @param fn
-	 *            filename
-	 * @param fc
-	 *            file class
-	 * @return int index of file <code>fn</code>
-	 */
-	public int indexOf(String fn) {
-		FileClass fc = FileOps.classForFilename(fn);
-		return indexOf(fn, fc);
+    /**
+     * Searches for the file with the name <code>fn</code> and class fc.
+     * 
+     * Searches the directory for the file with the name <code>fn</code> and
+     * returns its index. Returns -1 if the file cannot be found.
+     * 
+     * @param fn
+     *            filename
+     * @return int index of file <code>fn</code>
+     * @deprecated Use {@link #indexOf(String fn)} instead.
+     */
+	public int indexOf(String fn, FileClass fc) {
+		return indexOf(fn);
 	}
 
-	/**
-	 * Searches for the file with the name <code>fn</code> and class fc.
-	 * 
-	 * Searches the directory for the file with the name <code>fn</code> and
-	 * returns its index. Returns -1 if the file cannot be found.
-	 * 
-	 * @param fn
-	 *            filename
-	 * @return int index of file <code>fn</code>
-	 */
-	public int indexOf(String fn, FileClass fc) {
+    /**
+     * Searches for the file with the name <code>fn</code>.
+     * 
+     * Searches the directory for the file with the name <code>fn</code> and
+     * returns its index. Returns -1 if the file cannot be found.
+     * 
+     * @param fn
+     *            filename
+     * @param fc
+     *            file class
+     * @return int index of file <code>fn</code>
+     */
+	public int indexOf(String fn) {
 		if (!isRead()) {
 			// read directory now
 			if (!readDir()) {
 				return -1;
 			}
 		}
-		List<DocuDirent> fileList = list.get(fc.ordinal());
+		List<DocuDirent> fileList = list;
 		// empty directory?
 		if (fileList == null) {
 			return -1;
@@ -348,7 +336,7 @@
 
 	private boolean isBasenameInList(List<DocuDirent> fileList, int idx, String fn) {
 		String dfn = FileOps.basename((fileList.get(idx)).getName());
-		return (dfn.equals(fn)||dfn.equals(FileOps.basename(fn))); 
+		return (dfn.equals(fn) || dfn.equals(FileOps.basename(fn))); 
 	}
 	
 	
@@ -363,10 +351,9 @@
 	 * @return DocuDirent
 	 */
 	public DocuDirent find(String fn) {
-		FileClass fc = FileOps.classForFilename(fn);
-		int i = indexOf(fn, fc);
+		int i = indexOf(fn);
 		if (i >= 0) {
-			return list.get(0).get(i);
+			return list.get(i);
 		}
 		return null;
 	}
@@ -383,11 +370,7 @@
 	 * @return DocuDirent
 	 */
 	public DocuDirent find(String fn, FileClass fc) {
-		int i = indexOf(fn, fc);
-		if (i >= 0) {
-			return list.get(fc.ordinal()).get(i);
-		}
-		return null;
+		return find(fn);
 	}
 
 	/**
--- a/common/src/main/java/digilib/meta/IndexMetaDirMeta.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/common/src/main/java/digilib/meta/IndexMetaDirMeta.java	Fri Jan 03 17:35:13 2014 +0100
@@ -40,6 +40,10 @@
  * @author casties
  *
  */
+/**
+ * @author casties
+ *
+ */
 public class IndexMetaDirMeta implements DirMeta {
     /** Log4J logger */
     protected static Logger logger = Logger.getLogger(IndexMetaDirMeta.class);
@@ -119,29 +123,26 @@
     protected void readFileMeta(DocuDirectory dir, Map<String,MetadataMap> fileMeta, String relPath) {
         String path = (relPath != null) ? (relPath + "/") : "";
         // go through all file classes
-        for (FileClass fc: dir.getCache().getFileClasses()) {
-            int ds = dir.size(fc);
-            if (ds == 0) {
-                continue;
-            }
-            // iterate through the list of files in this directory
-            for (int i = 0; i < ds; ++i) {
-                DocuDirent f = dir.get(i, fc);
-                // prepend path to the filename
-                String fn = path + f.getName();
-                // look up meta for this file and remove from dir
-                MetadataMap meta = fileMeta.remove(fn);
-                if (meta != null) {
-                    // store meta in file
-                    f.getMeta().setFileMeta(meta);
-                }
+        int ds = dir.size();
+        if (ds == 0) {
+            return;
+        }
+        // iterate through the list of files in this directory
+        for (int i = 0; i < ds; ++i) {
+            DocuDirent f = dir.get(i);
+            // prepend path to the filename
+            String fn = path + f.getName();
+            // look up meta for this file and remove from dir
+            MetadataMap meta = fileMeta.remove(fn);
+            if (meta != null) {
+                // store meta in file
+                f.getMeta().setFileMeta(meta);
             }
         }
     }
 
-    /**
-     * Checks metadata
-     *  
+    /* (non-Javadoc)
+     * @see digilib.meta.DirMeta#checkMeta(digilib.io.DocuDirectory)
      */
     public void checkMeta(DocuDirectory dir) {
         if (metaChecked) {
@@ -151,27 +152,30 @@
         }
     }
 
-    /**
-     * @return Hashtable
+    /* (non-Javadoc)
+     * @see digilib.meta.DirMeta#getDirMeta()
      */
     public MetadataMap getDirMeta() {
         return dirMeta;
     }
 
-    /**
-     * Sets the dirMeta.
-     * 
-     * @param dirMeta
-     *            The dirMeta to set
+    /* (non-Javadoc)
+     * @see digilib.meta.DirMeta#setDirMeta(digilib.meta.MetadataMap)
      */
     public void setDirMeta(MetadataMap dirMeta) {
         this.dirMeta = dirMeta;
     }
 
+    /**
+     * @return
+     */
     protected boolean hasUnresolvedFileMeta() {
         return (this.unresolvedFileMeta != null);
     }
 
+    /**
+     * @return
+     */
     protected Map<String, MetadataMap> getUnresolvedFileMeta() {
         return this.unresolvedFileMeta;
     }
--- a/doc/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/doc/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -3,7 +3,7 @@
   <parent>
     <groupId>digilib</groupId>
     <artifactId>digilib</artifactId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
   </parent>
   <artifactId>digilib-doc</artifactId>
   <packaging>pom</packaging>
--- a/doc/src/site/markdown/digilib-config.md	Fri Nov 01 12:07:05 2013 +0100
+++ b/doc/src/site/markdown/digilib-config.md	Fri Jan 03 17:35:13 2014 +0100
@@ -19,7 +19,7 @@
 high-resolution images must be the first entry in the list.
 
 Documentation on the directory layout and on using pre-scaled images is 
-[here](image-directories.md).
+[here](image-directories.html).
 
 A minimal configuration looks like this:
 
--- a/pdf/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/pdf/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>digilib</artifactId>
 		<groupId>digilib</groupId>
-		<version>2.2-SNAPSHOT</version>
+		<version>2.3-SNAPSHOT</version>
 	</parent>
 	<artifactId>digilib-pdf</artifactId>
 	<name>digilib-pdf</name>
--- a/pdf/src/main/java/digilib/conf/PDFServletConfiguration.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/pdf/src/main/java/digilib/conf/PDFServletConfiguration.java	Fri Jan 03 17:35:13 2014 +0100
@@ -48,14 +48,14 @@
  */
 public class PDFServletConfiguration extends DigilibServletConfiguration {
 
-    public static final String PDFSERVLET_CONFIG_KEY = "digilib.pdfservlet.configuration";
-    public static final String PDFIMAGEEXECUTOR_KEY = "pdfservlet.worker.pdfimageexecutor";
-    public static final String PDFEXECUTOR_KEY = "pdfservlet.worker.pdfexecutor";
-    public static final String PDFWORKDIR_KEY = "pdfservlet.work.dir";
-    public static final String PDFCACHEDIR_KEY = "pdfservlet.cache.dir";
+    public static final String PDF_SERVLET_CONFIG_KEY = "digilib.pdf.servlet.configuration";
+    public static final String PDF_IMAGEEXECUTOR_KEY = "pdf.servlet.worker.imageexecutor";
+    public static final String PDF_EXECUTOR_KEY = "pdf.servlet.worker.pdfexecutor";
+    public static final String PDF_WORKDIR_KEY = "pdf.servlet.work.dir";
+    public static final String PDF_CACHEDIR_KEY = "pdf.servlet.cache.dir";
 
-    public String getVersion() {
-        return "2.2.0 pdf";
+    public static String getVersion() {
+        return "2.3.0 pdf";
     }
 
     /**
@@ -69,13 +69,13 @@
          */
 
         // Executor for PDF operations
-        newParameter(PDFEXECUTOR_KEY, null, null, 's');
+        newParameter(PDF_EXECUTOR_KEY, null, null, 's');
         // Executor for PDF-image operations
-        newParameter(PDFIMAGEEXECUTOR_KEY, null, null, 's');
+        newParameter(PDF_IMAGEEXECUTOR_KEY, null, null, 's');
         // working directory for PDF generation
-        newParameter(PDFWORKDIR_KEY, null, null, 's');
+        newParameter(PDF_WORKDIR_KEY, null, null, 's');
         // cache directory for PDF files
-        newParameter(PDFCACHEDIR_KEY, null, null, 's');
+        newParameter(PDF_CACHEDIR_KEY, null, null, 's');
 
         /*
          * parameters that can be read from config file have a type 'f'
@@ -115,12 +115,12 @@
         int pnt = config.getAsInt("pdf-worker-threads");
         int pmt = config.getAsInt("pdf-max-waiting-threads");
         DigilibJobCenter<OutputStream> pdfExecutor = new DigilibJobCenter<OutputStream>(pnt, pmt, false, "servlet.worker.pdfexecutor");
-        config.setValue(PDFEXECUTOR_KEY, pdfExecutor);
+        config.setValue(PDF_EXECUTOR_KEY, pdfExecutor);
         // PDF image worker threads
         int pint = config.getAsInt("pdf-image-worker-threads");
         int pimt = config.getAsInt("pdf-image-max-waiting-threads");
         DigilibJobCenter<DocuImage> pdfImageExecutor = new DigilibJobCenter<DocuImage>(pint, pimt, false, "servlet.worker.pdfimageexecutor");
-        config.setValue(PDFIMAGEEXECUTOR_KEY, pdfImageExecutor);
+        config.setValue(PDF_IMAGEEXECUTOR_KEY, pdfImageExecutor);
         /*
          * set up temporary directories
          */
@@ -133,19 +133,19 @@
             // rid the temporary directory of possible incomplete document files
             FileOps.emptyDirectory(temp_directory);
         }
-        config.setValue(PDFWORKDIR_KEY, temp_directory);
+        config.setValue(PDF_WORKDIR_KEY, temp_directory);
         String cache_fn = config.getAsString("pdf-cache-dir");
         File cache_directory = new File(cache_fn);
         if (!cache_directory.exists()) {
             // try to create
             cache_directory.mkdirs();
         }
-        config.setValue(PDFCACHEDIR_KEY, cache_directory);
+        config.setValue(PDF_CACHEDIR_KEY, cache_directory);
 
         /*
          * set as the PDF servlets main config
          */
-        context.setAttribute(PDFSERVLET_CONFIG_KEY, this);
+        context.setAttribute(PDF_SERVLET_CONFIG_KEY, this);
     }
 
     /**
@@ -194,7 +194,7 @@
         ServletContext context = sce.getServletContext();
         DigilibServletConfiguration config = PDFServletConfiguration.getCurrentConfig(context);
         @SuppressWarnings("unchecked")
-        DigilibJobCenter<DocuImage>  pdfExecutor = (DigilibJobCenter<DocuImage>) config.getValue(PDFEXECUTOR_KEY);
+        DigilibJobCenter<DocuImage>  pdfExecutor = (DigilibJobCenter<DocuImage>) config.getValue(PDF_EXECUTOR_KEY);
         if (pdfExecutor  != null) {
             // shut down pdf thread pool
             List<Runnable> rj = pdfExecutor.shutdownNow();
@@ -204,7 +204,7 @@
             }
         }
         @SuppressWarnings("unchecked")
-        DigilibJobCenter<DocuImage>  pdfImageExecutor = (DigilibJobCenter<DocuImage>) config.getValue(PDFIMAGEEXECUTOR_KEY);
+        DigilibJobCenter<DocuImage>  pdfImageExecutor = (DigilibJobCenter<DocuImage>) config.getValue(PDF_IMAGEEXECUTOR_KEY);
         if (pdfImageExecutor != null) {
             // shut down pdf image thread pool
             List<Runnable> rj = pdfImageExecutor.shutdownNow();
@@ -222,7 +222,8 @@
      * @return
      */
     public static DigilibServletConfiguration getCurrentConfig(ServletContext context) {
-        DigilibServletConfiguration config = (DigilibServletConfiguration) context.getAttribute(PDFServletConfiguration.PDFSERVLET_CONFIG_KEY);
+        DigilibServletConfiguration config = (DigilibServletConfiguration) context
+                .getAttribute(PDFServletConfiguration.PDF_SERVLET_CONFIG_KEY);
         return config;
     }
 
--- a/pdf/src/main/java/digilib/servlet/PDFCache.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/pdf/src/main/java/digilib/servlet/PDFCache.java	Fri Jan 03 17:35:13 2014 +0100
@@ -60,7 +60,7 @@
 @SuppressWarnings("serial")
 public class PDFCache extends HttpServlet {
 
-    public static String version = "2.2.0";
+    public static String version = PDFServletConfiguration.getVersion();
 
     /** logger for accounting requests */
     protected static Logger accountlog = Logger.getLogger("account.pdf.request");
@@ -110,16 +110,16 @@
             // no Configuration
             throw new ServletException("No Configuration!");
         }
-        workDir = dlConfig.getAsFile(PDFServletConfiguration.PDFWORKDIR_KEY);
-        cacheDir = dlConfig.getAsFile(PDFServletConfiguration.PDFCACHEDIR_KEY);
+        workDir = dlConfig.getAsFile(PDFServletConfiguration.PDF_WORKDIR_KEY);
+        cacheDir = dlConfig.getAsFile(PDFServletConfiguration.PDF_CACHEDIR_KEY);
         if (!workDir.isDirectory()) {
             throw new ServletException("Configuration error: problem with pdf-temp-dir=" + workDir);
         }
         if (!cacheDir.isDirectory()) {
             throw new ServletException("Configuration error: problem with pdf-cache-dir=" + cacheDir);
         }
-        pdfJobCenter = (DigilibJobCenter<File>) dlConfig.getValue(PDFServletConfiguration.PDFEXECUTOR_KEY);
-        pdfImageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig.getValue(PDFServletConfiguration.PDFIMAGEEXECUTOR_KEY);
+        pdfJobCenter = (DigilibJobCenter<File>) dlConfig.getValue(PDFServletConfiguration.PDF_EXECUTOR_KEY);
+        pdfImageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig.getValue(PDFServletConfiguration.PDF_IMAGEEXECUTOR_KEY);
         // register this instance globally
         context.setAttribute(instanceKey, this);
     }
--- a/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -5,7 +5,7 @@
 
   <groupId>digilib</groupId>
   <artifactId>digilib</artifactId>
-  <version>2.2-SNAPSHOT</version>
+  <version>2.3-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>digilib</name>
@@ -188,57 +188,57 @@
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-common</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-common-jai</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-common-imagej</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-common-bioformats</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-doc</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-pdf</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-text</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-servlet</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-servlet2</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-servlet3</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
       <dependency>
         <groupId>digilib</groupId>
         <artifactId>digilib-webapp</artifactId>
-        <version>2.2-SNAPSHOT</version>
+        <version>2.3-SNAPSHOT</version>
       </dependency>
     </dependencies>
   </dependencyManagement>
--- a/servlet/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -5,7 +5,7 @@
   <parent>
     <groupId>digilib</groupId>
     <artifactId>digilib</artifactId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
   </parent>
   <artifactId>digilib-servlet</artifactId>
   <name>digilib-servlet</name>
--- a/servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet/src/main/java/digilib/conf/DigilibServletConfiguration.java	Fri Jan 03 17:35:13 2014 +0100
@@ -83,7 +83,7 @@
     public final Long webappStartTime = System.currentTimeMillis();
 
     public static String getVersion() {
-        return "2.2.0 srv";
+        return "2.3.0 srv";
     }
     
     /**
@@ -271,16 +271,15 @@
         try {
             // directory cache
             String[] bd = (String[]) config.getValue("basedir-list");
-            FileClass[] fcs = { FileClass.IMAGE, FileClass.TEXT };
             DocuDirCache dirCache;
             if (config.getAsBoolean("use-mapping")) {
                 // with mapping file
                 File mapConf = ServletOps.getConfigFile((File) config.getValue("mapping-file"), context);
-                dirCache = new AliasingDocuDirCache(bd, fcs, mapConf, config);
+                dirCache = new AliasingDocuDirCache(bd, FileClass.IMAGE, mapConf, config);
                 config.setValue("mapping-file", mapConf);
             } else {
                 // without mapping
-                dirCache = new DocuDirCache(bd, fcs, this);
+                dirCache = new DocuDirCache(bd, FileClass.IMAGE, this);
             }
             config.setValue(DIR_CACHE_KEY, dirCache);
             // useAuthentication
@@ -302,7 +301,7 @@
             /*
              * set as the servlets main config
              */
-            context.setAttribute(SERVLET_CONFIG_KEY, this);
+            setCurrentConfig(context);
         } catch (Exception e) {
             logger.error("Error configuring digilib servlet:", e);
         }
@@ -351,6 +350,15 @@
         }
     }
 
+
+    /**
+     * Sets the current DigilibConfiguration in the context. 
+     * @param context
+     */
+    public void setCurrentConfig(ServletContext context) {
+        context.setAttribute(DigilibServletConfiguration.SERVLET_CONFIG_KEY, this);
+    }
+    
     /**
      * Returns the current DigilibConfiguration from the context.
      * 
@@ -358,7 +366,8 @@
      * @return
      */
     public static DigilibServletConfiguration getCurrentConfig(ServletContext context) {
-        DigilibServletConfiguration config = (DigilibServletConfiguration) context.getAttribute(DigilibServletConfiguration.SERVLET_CONFIG_KEY);
+        DigilibServletConfiguration config = (DigilibServletConfiguration) context
+                .getAttribute(DigilibServletConfiguration.SERVLET_CONFIG_KEY);
         return config;
     }
 
--- a/servlet/src/main/java/digilib/servlet/DocumentBean.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet/src/main/java/digilib/servlet/DocumentBean.java	Fri Jan 03 17:35:13 2014 +0100
@@ -90,8 +90,7 @@
 		// get our ServletContext
 		ServletContext context = conf.getServletContext();
 		// see if there is a Configuration instance
-		dlConfig = (DigilibServletConfiguration) context
-				.getAttribute("digilib.servlet.configuration");
+		dlConfig = DigilibServletConfiguration.getCurrentConfig(context);
 		if (dlConfig == null) {
 			// create new Configuration
 			throw new ServletException("ERROR: No configuration!");
@@ -186,8 +185,7 @@
 		}
 		String fn = dlRequest.getFilePath();
 		// get information about the file
-		ImageSet fileset = (ImageSet) dirCache.getFile(fn, dlRequest
-				.getAsInt("pn"), FileClass.IMAGE);
+		ImageSet fileset = (ImageSet) dirCache.getFile(fn, dlRequest.getAsInt("pn"));
 		if (fileset == null) {
 			return;
 		}
@@ -200,7 +198,7 @@
 		DocuDirectory dd = dirCache.getDirectory(fn);
 		if (dd != null) {
 			// add pt
-			dlRequest.setValue("pt", dd.size(FileClass.IMAGE));
+			dlRequest.setValue("pt", dd.size());
 		}
 		// get original pixel size
 		ImageInput origfile = fileset.getBiggest();
@@ -232,20 +230,20 @@
      * get the number of image pages/files in the directory
      */
     public int getNumPages(DigilibServletRequest request) throws Exception {
-        return getNumPages(request, FileClass.IMAGE);
+        logger.debug("getNumPages");
+        DocuDirectory dd = (dirCache != null) ? dirCache.getDirectory(request
+                .getFilePath()) : null;
+        if (dd != null) {
+            return dd.size();
+        }
+        return 0;
     }
 
 	/**
 	 * get the number of pages/files of type fc in the directory
 	 */
 	public int getNumPages(DigilibServletRequest request, FileClass fc) throws Exception {
-		logger.debug("getNumPages");
-		DocuDirectory dd = (dirCache != null) ? dirCache.getDirectory(request
-				.getFilePath()) : null;
-		if (dd != null) {
-			return dd.size(fc);
-		}
-		return 0;
+        return getNumPages(request);
 	}
 
 	/**
--- a/servlet2/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet2/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -5,7 +5,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
   </parent>
   <artifactId>digilib-servlet2</artifactId>
   <name>digilib-servlet2</name>
--- a/servlet2/src/main/java/digilib/servlet/Scaler.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet2/src/main/java/digilib/servlet/Scaler.java	Fri Jan 03 17:35:13 2014 +0100
@@ -61,7 +61,7 @@
     private static final long serialVersionUID = -5439198888139362735L;
 
     /** digilib servlet version (for all components) */
-    public static final String version = "2.2.0 noasync";
+    public static final String version = "2.3.0 noasync";
 
     /** servlet error codes */
     public static enum Error {
@@ -127,7 +127,7 @@
         // get our ServletContext
         ServletContext context = config.getServletContext();
         // see if there is a Configuration instance
-        dlConfig = (DigilibServletConfiguration) context.getAttribute("digilib.servlet.configuration");
+        dlConfig = DigilibServletConfiguration.getCurrentConfig(context);
         if (dlConfig == null) {
             // no Configuration
             throw new ServletException("No Configuration!");
--- a/servlet2/src/main/java/digilib/servlet/ScalerNoThread.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet2/src/main/java/digilib/servlet/ScalerNoThread.java	Fri Jan 03 17:35:13 2014 +0100
@@ -55,7 +55,7 @@
     private static final long serialVersionUID = 1450947819851623306L;
 
     /** digilib servlet version (for all components) */
-    public static final String version = "2.2.0 nothread";
+    public static final String version = "2.3.0 nothread";
 
     /** servlet error codes */
     public static enum Error {
@@ -117,7 +117,7 @@
         // get our ServletContext
         ServletContext context = config.getServletContext();
         // see if there is a Configuration instance
-        dlConfig = (DigilibServletConfiguration) context.getAttribute("digilib.servlet.configuration");
+        dlConfig = DigilibServletConfiguration.getCurrentConfig(context);
         if (dlConfig == null) {
             // no Configuration
             throw new ServletException("No Configuration!");
--- a/servlet3/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet3/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -3,7 +3,7 @@
   <parent>
     <artifactId>digilib</artifactId>
     <groupId>digilib</groupId>
-    <version>2.2-SNAPSHOT</version>
+    <version>2.3-SNAPSHOT</version>
   </parent>
   <artifactId>digilib-servlet3</artifactId>
   <name>digilib-servlet3</name>
--- a/servlet3/src/main/java/digilib/conf/DigilibServlet3Configuration.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/servlet3/src/main/java/digilib/conf/DigilibServlet3Configuration.java	Fri Jan 03 17:35:13 2014 +0100
@@ -42,7 +42,7 @@
 public class DigilibServlet3Configuration extends DigilibServletConfiguration {
 
     public static String getVersion() {
-        return "2.2.1 async";
+        return "2.3.0 async";
     }
 
     /**
--- a/text/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/text/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -4,7 +4,7 @@
 	<parent>
 		<artifactId>digilib</artifactId>
 		<groupId>digilib</groupId>
-		<version>2.2-SNAPSHOT</version>
+		<version>2.3-SNAPSHOT</version>
 	</parent>
 	<artifactId>digilib-text</artifactId>
 	<name>digilib-text</name>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/text/src/main/java/digilib/conf/TextServletConfiguration.java	Fri Jan 03 17:35:13 2014 +0100
@@ -0,0 +1,120 @@
+package digilib.conf;
+
+/*
+ * #%L
+ * 
+ * TextServletConfiguration -- Holding all parameters for text servlet.
+ * 
+ * Digital Image Library servlet components
+ * %%
+ * Copyright (C) 2003 - 2013 MPIWG Berlin
+ * %%
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as 
+ * published by the Free Software Foundation, either version 3 of the 
+ * License, or (at your option) any later version.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Lesser Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Lesser Public 
+ * License along with this program.  If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>.
+ * #L%
+ * Author: Robert Casties (robcast@berlios.de)
+ * Created on 3.1.2014
+ */
+
+import java.io.File;
+
+import javax.servlet.ServletContext;
+
+import digilib.io.AliasingDocuDirCache;
+import digilib.io.DocuDirCache;
+import digilib.io.FileOps.FileClass;
+import digilib.servlet.ServletOps;
+
+/**
+ * Class to hold the digilib servlet configuration parameters. The parameters
+ * can be read from the digilib-config file and be passed to other servlets or
+ * beans.
+ * 
+ * @author casties
+ * 
+ */
+public class TextServletConfiguration extends DigilibServletConfiguration {
+
+    public static final String TEXT_SERVLET_CONFIG_KEY = "digilib.text.servlet.configuration";
+    
+    public static final String TEXT_DIR_CACHE_KEY = "text.servlet.dir.cache";    
+    
+    public static String getVersion() {
+        return "2.3.0 txt";
+    }
+
+    /**
+     * Constructs DigilibServletConfiguration and defines all parameters and
+     * their default values.
+     */
+    public TextServletConfiguration() {
+        super();
+        // text cache instance
+        newParameter(TEXT_DIR_CACHE_KEY, null, null, 's');
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see digilib.conf.DigilibServletConfiguration#configure(javax.servlet.
+     * ServletContext)
+     */
+    @Override
+    public void configure(ServletContext context) {
+        super.configure(context);
+        DigilibServletConfiguration config = this;
+
+        // set version
+        setValue("servlet.version", TextServletConfiguration.getVersion());
+
+        try {
+            // directory cache for text files
+            String[] bd = (String[]) config.getValue("basedir-list");
+            DocuDirCache dirCache;
+            if (config.getAsBoolean("use-mapping")) {
+                // with mapping file
+                File mapConf = ServletOps.getConfigFile((File) config.getValue("mapping-file"), context);
+                dirCache = new AliasingDocuDirCache(bd, FileClass.TEXT, mapConf, config);
+                config.setValue("mapping-file", mapConf);
+            } else {
+                // without mapping
+                dirCache = new DocuDirCache(bd, FileClass.TEXT, this);
+            }
+            config.setValue(TEXT_DIR_CACHE_KEY, dirCache);
+        } catch (Exception e) {
+            logger.error("Error configuring digilib servlet:", e);
+        }
+    }
+
+    /**
+     * Sets the current DigilibConfiguration in the context. 
+     * @param context
+     */
+    public void setCurrentConfig(ServletContext context) {
+        context.setAttribute(TextServletConfiguration.TEXT_SERVLET_CONFIG_KEY, this);
+    }
+    
+    /**
+     * Returns the current TextServletConfiguration from the context.
+     * 
+     * @param context
+     * @return
+     */
+    public static DigilibServletConfiguration getCurrentConfig(ServletContext context) {
+        DigilibServletConfiguration config = (DigilibServletConfiguration) context
+                .getAttribute(TextServletConfiguration.TEXT_SERVLET_CONFIG_KEY);
+        return config;
+    }
+
+}
--- a/text/src/main/java/digilib/servlet/Texter.java	Fri Nov 01 12:07:05 2013 +0100
+++ b/text/src/main/java/digilib/servlet/Texter.java	Fri Jan 03 17:35:13 2014 +0100
@@ -41,6 +41,7 @@
 import digilib.auth.AuthOps;
 import digilib.conf.DigilibServletConfiguration;
 import digilib.conf.DigilibServletRequest;
+import digilib.conf.TextServletConfiguration;
 import digilib.image.ImageOpException;
 import digilib.io.DocuDirCache;
 import digilib.io.FileOps;
@@ -59,7 +60,7 @@
     private static final long serialVersionUID = 6678666342141409867L;
 
     /** Servlet version */
-	public static String tlVersion = "2.2.0";
+	public static String tlVersion = TextServletConfiguration.getVersion();
 
 	/** DigilibConfiguration instance */
 	DigilibServletConfiguration dlConfig = null;
@@ -100,7 +101,7 @@
 		ServletContext context = config.getServletContext();
 		// see if there is a Configuration instance
 		dlConfig = (DigilibServletConfiguration) context
-				.getAttribute("digilib.servlet.configuration");
+				.getAttribute(TextServletConfiguration.TEXT_SERVLET_CONFIG_KEY);
 		if (dlConfig == null) {
 			// no Configuration
 			throw new ServletException("No Configuration!");
@@ -113,7 +114,7 @@
 		useAuthentication = dlConfig.getAsBoolean("use-authorization");
 		authOp = (AuthOps) dlConfig.getValue("servlet.auth.op");
 		// DocuDirCache instance
-		dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+		dirCache = (DocuDirCache) dlConfig.getValue(TextServletConfiguration.TEXT_DIR_CACHE_KEY);
 	}
 
 	/*
--- a/webapp/pom.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/webapp/pom.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -6,7 +6,7 @@
 	<parent>
 		<artifactId>digilib</artifactId>
 		<groupId>digilib</groupId>
-		<version>2.2-SNAPSHOT</version>
+		<version>2.3-SNAPSHOT</version>
 	</parent>
 	<artifactId>digilib-webapp</artifactId>
 	<name>digilib-webapp</name>
--- a/webapp/src/main/webapp/WEB-INF/web-additional.xml	Fri Nov 01 12:07:05 2013 +0100
+++ b/webapp/src/main/webapp/WEB-INF/web-additional.xml	Fri Jan 03 17:35:13 2014 +0100
@@ -10,6 +10,12 @@
         <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>
@@ -25,6 +31,12 @@
         <servlet-name>PDFCache</servlet-name>
         <servlet-class>digilib.servlet.PDFCache</servlet-class>
     </servlet>
+    <!-- The Intialisation Listener -->
+    <listener>
+        <listener-class>
+            digilib.conf.PDFServletConfiguration
+        </listener-class>
+    </listener>
     <!-- The mapping for the PDFCache servlet -->
     <servlet-mapping>
         <servlet-name>PDFCache</servlet-name>