Mercurial > hg > digilib
changeset 1233:3017ade24bbb
started work on directory cache.
removed support for multiple FileClasses in one cache.
incremented version to 2.3.
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>