Mercurial > hg > digilib-old
changeset 181:afe7ff98bb71
Servlet version 1.18b1
- new transfer mode "rawfile" with mime-type application/octet-stream
- finally proper logging with Log4J!
- therefore a lot of debugging-prints changed
- the Util class is now useless
- ServletOps and FileOps are now purely static
line wrap: on
line diff
--- a/servlet/src/digilib/Utils.java Fri Nov 21 00:11:18 2003 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -/* Utils -- general utility classes for scaler servlet - - Digital Image Library servlet components - - Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - Please read license.txt for the full details. A copy of the GPL - may be found at http://www.gnu.org/copyleft/lgpl.html - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -package digilib; - -public class Utils { - - private int debugLevel = 10; - - public Utils() { - } - - public Utils(int dbg) { - debugLevel = dbg; - } - - public void setDebugLevel(int lvl) { - debugLevel = lvl; - } - public int getDebugLevel() { - return debugLevel; - } - - /** - * Debugging help - * dprintln(1, "blabla"); - * will be printed on stdout if debug >= 1 - */ - public void dprintln(int dbg, String s) { - if (debugLevel >= dbg) { - String ind = ""; - // indent by debuglevel - for (int i = 0; i < dbg; i++) { - ind += " "; - } - System.out.println(ind+s); - } - } -}
--- a/servlet/src/digilib/auth/AuthOpsImpl.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/auth/AuthOpsImpl.java Fri Nov 21 00:17:31 2003 +0100 @@ -20,10 +20,14 @@ package digilib.auth; +import java.util.List; +import java.util.ListIterator; + import javax.servlet.http.HttpServletRequest; -import java.util.*; -import digilib.*; +import org.apache.log4j.Logger; + +import digilib.Utils; import digilib.servlet.DigilibRequest; /** Basic implementation of AuthOps interface. @@ -33,12 +37,11 @@ */ public abstract class AuthOpsImpl implements AuthOps { - /** Local utils object. */ - protected Utils util; - + /** general logger for this class */ + protected Logger logger = Logger.getLogger(this.getClass()); + /** Default constructor. */ public AuthOpsImpl() { - util = new Utils(); try { init(); } catch (AuthOpException e) { @@ -49,7 +52,6 @@ * @param u utils object. */ public AuthOpsImpl(Utils u) { - util = u; try { init(); } catch (AuthOpException e) { @@ -111,9 +113,9 @@ String s = ""; while (r.hasNext()) { s = (String)r.next(); - util.dprintln(5, "Testing role: "+s); + logger.debug("Testing role: "+s); if (request.isUserInRole(s)) { - util.dprintln(5, "Role Authorized"); + logger.debug("Role Authorized"); return true; } } @@ -128,9 +130,9 @@ String s = ""; while (r.hasNext()) { s = (String)r.next(); - util.dprintln(5, "Testing role: "+s); + logger.debug("Testing role: "+s); if (((HttpServletRequest)request.getServletRequest()).isUserInRole(s)) { - util.dprintln(5, "Role Authorized"); + logger.debug("Role Authorized"); return true; } }
--- a/servlet/src/digilib/auth/HashTree.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/auth/HashTree.java Fri Nov 21 00:17:31 2003 +0100 @@ -57,7 +57,6 @@ b += twigSep + twig.nextToken(); } m = (String)table.get(b); - //System.out.println("CHECK: "+b+" = "+m); if (m != null) { if (m.indexOf(leafSep) < 0) { // single leaf
--- a/servlet/src/digilib/auth/XMLAuthOps.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/auth/XMLAuthOps.java Fri Nov 21 00:17:31 2003 +0100 @@ -20,12 +20,13 @@ package digilib.auth; +import java.io.File; +import java.util.HashMap; +import java.util.List; + import javax.servlet.http.HttpServletRequest; -import java.util.*; -import java.io.*; -import digilib.*; -import digilib.io.*; +import digilib.io.XMLListLoader; import digilib.servlet.DigilibRequest; /** Implementation of AuthOps using XML files. @@ -46,8 +47,7 @@ * @param confFile Configuration file name. * @throws AuthOpException Exception thrown on error. */ - public XMLAuthOps(Utils u, String confFile) throws AuthOpException { - util = u; + public XMLAuthOps(String confFile) throws AuthOpException { configFile = confFile; init(); } @@ -69,7 +69,7 @@ * @throws AuthOpException Exception thrown on error. */ public void init() throws AuthOpException { - util.dprintln(10, "xmlauthops.init (" + configFile + ")"); + logger.debug("xmlauthops.init (" + configFile + ")"); HashMap pathList = null; HashMap ipList = null; try { @@ -110,9 +110,7 @@ */ public List rolesForPath(String filepath, HttpServletRequest request) throws digilib.auth.AuthOpException { - util.dprintln( - 4, - "rolesForPath (" + logger.debug("rolesForPath (" + filepath + ") by [" + request.getRemoteAddr() @@ -142,9 +140,7 @@ * @see digilib.auth.AuthOps#rolesForPath(digilib.servlet.DigilibRequest) */ public List rolesForPath(DigilibRequest request) throws AuthOpException { - util.dprintln( - 4, - "rolesForPath (" + logger.debug("rolesForPath (" + request.getFilePath() + ") by [" + request.getServletRequest().getRemoteAddr()
--- a/servlet/src/digilib/image/DocuImageImpl.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/DocuImageImpl.java Fri Nov 21 00:17:31 2003 +0100 @@ -22,9 +22,11 @@ import java.awt.Rectangle; +import org.apache.log4j.Logger; + import digilib.Utils; +import digilib.io.FileOpException; import digilib.io.ImageFile; -import digilib.io.FileOpException; /** Simple abstract implementation of the <code>DocuImage</code> interface. * @@ -36,6 +38,9 @@ */ public abstract class DocuImageImpl implements DocuImage { + /** logger */ + protected Logger logger = Logger.getLogger(this.getClass()); + /** Internal utils object. */ protected Utils util = null;
--- a/servlet/src/digilib/image/ImageLoaderDocuImage.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/ImageLoaderDocuImage.java Fri Nov 21 00:17:31 2003 +0100 @@ -43,7 +43,7 @@ /** Implementation of DocuImage using the ImageLoader API of Java 1.4 and Java2D. */ public class ImageLoaderDocuImage extends DocuImageImpl { - + /** image object */ protected BufferedImage img; /** interpolation type */ @@ -62,10 +62,10 @@ quality = qual; // setup interpolation quality if (qual > 0) { - util.dprintln(4, "quality q1"); + logger.debug("quality q1"); interpol = AffineTransformOp.TYPE_BILINEAR; } else { - util.dprintln(4, "quality q0"); + logger.debug("quality q0"); interpol = AffineTransformOp.TYPE_NEAREST_NEIGHBOR; } } @@ -79,7 +79,7 @@ h = img.getHeight(); } } catch (IOException e) { - e.printStackTrace(); + logger.debug("error in getHeight", e); } return h; } @@ -93,19 +93,18 @@ w = img.getWidth(); } } catch (IOException e) { - e.printStackTrace(); + logger.debug("error in getHeight", e); } return w; } /* load image file */ public void loadImage(ImageFile f) throws FileOpException { - util.dprintln(10, "loadImage!"); + logger.debug("loadImage!"); //System.gc(); try { img = ImageIO.read(f.getFile()); if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } } catch (IOException e) { @@ -129,14 +128,13 @@ Iterator readers = ImageIO.getImageReadersByMIMEType(f.getMimetype()); reader = (ImageReader) readers.next(); /* are there more readers? */ - System.out.println("this reader: " + reader.getClass()); + logger.debug("this reader: " + reader.getClass()); while (readers.hasNext()) { - System.out.println("next reader: " + readers.next().getClass()); + logger.debug("next reader: " + readers.next().getClass()); } //*/ reader.setInput(istream); if (reader == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } imgFile = f.getFile(); @@ -157,11 +155,9 @@ // read image img = reader.read(0, readParam); } catch (IOException e) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } } @@ -169,7 +165,7 @@ /* write image of type mt to Stream */ public void writeImage(String mt, OutputStream ostream) throws FileOpException { - util.dprintln(10, "writeImage!"); + logger.debug("writeImage!"); try { // setup output String type = "png"; @@ -179,7 +175,6 @@ type = "png"; } else { // unknown mime type - util.dprintln(2, "ERROR(writeImage): Unknown mime type " + mt); throw new FileOpException("Unknown mime type: " + mt); } @@ -188,7 +183,7 @@ * image to RGB :-( *Java2D BUG* */ if ((type == "jpeg") && (img.getColorModel().hasAlpha())) { - util.dprintln(2, "BARF: JPEG with transparency!!"); + logger.debug("BARF: JPEG with transparency!!"); int w = img.getWidth(); int h = img.getHeight(); // BufferedImage.TYPE_INT_RGB seems to be fastest (JDK1.4.1, @@ -207,7 +202,6 @@ throw new FileOpException("Error writing image: Unknown image format!"); } } catch (IOException e) { - // e.printStackTrace(); throw new FileOpException("Error writing image."); } } @@ -236,16 +230,13 @@ } scaledImg = scaleOp.filter(img, scaledImg); //DEBUG - util.dprintln( - 3, - "SCALE: " + logger.debug("SCALE: " + scale + " ->" + scaledImg.getWidth() + "x" + scaledImg.getHeight()); if (scaledImg == null) { - util.dprintln(2, "ERROR(cropAndScale): error in scale"); throw new ImageOpException("Unable to scale"); } img = scaledImg; @@ -253,7 +244,7 @@ public void blur(int radius) throws ImageOpException { //DEBUG - util.dprintln(4, "blur: " + radius); + logger.debug("blur: " + radius); // minimum radius is 2 int klen = Math.max(radius, 2); int ksize = klen * klen; @@ -277,7 +268,6 @@ } blurredImg = blurOp.filter(img, blurredImg); if (blurredImg == null) { - util.dprintln(2, "ERROR(cropAndScale): error in scale"); throw new ImageOpException("Unable to scale"); } img = blurredImg; @@ -287,14 +277,11 @@ throws ImageOpException { // setup Crop BufferedImage croppedImg = img.getSubimage(x_off, y_off, width, height); - util.dprintln( - 3, - "CROP:" + croppedImg.getWidth() + "x" + croppedImg.getHeight()); + logger.debug("CROP:" + croppedImg.getWidth() + "x" + croppedImg.getHeight()); //DEBUG // util.dprintln(2, " time // "+(System.currentTimeMillis()-startTime)+"ms"); if (croppedImg == null) { - util.dprintln(2, "ERROR(cropAndScale): error in crop"); throw new ImageOpException("Unable to crop"); } img = croppedImg; @@ -330,9 +317,7 @@ int ncol = img.getColorModel().getNumColorComponents(); if ((ncol != 3) || (rgbm.length != 3) || (rgba.length != 3)) { - util.dprintln( - 2, - "ERROR(enhance): unknown number of color bands or coefficients (" + logger.debug("ERROR(enhance): unknown number of color bands or coefficients (" + ncol + ")"); return; @@ -410,7 +395,6 @@ // calculate new bounding box //Rectangle2D bounds = rotOp.getBounds2D(img); if (rotImg == null) { - util.dprintln(2, "ERROR: error in rotate"); throw new ImageOpException("Unable to rotate"); } img = rotImg; @@ -450,7 +434,6 @@ interpol); BufferedImage mirImg = mirOp.filter(img, null); if (mirImg == null) { - util.dprintln(2, "ERROR: error in mirror"); throw new ImageOpException("Unable to mirror"); } img = mirImg; @@ -458,7 +441,6 @@ /* (non-Javadoc) @see java.lang.Object#finalize() */ protected void finalize() throws Throwable { - //System.out.println("FIN de ImageLoaderDocuImage!"); // we must dispose the ImageReader because it keeps the filehandle // open! reader.dispose();
--- a/servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/ImageLoaderImageInfoDocuInfo.java Fri Nov 21 00:17:31 2003 +0100 @@ -29,6 +29,7 @@ import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; +import org.apache.log4j.Logger; import org.marcoschmidt.image.ImageInfo; import digilib.io.FileOpException; @@ -41,6 +42,8 @@ * */ public class ImageLoaderImageInfoDocuInfo implements DocuInfo { + + private Logger logger = Logger.getLogger(this.getClass()); /* check image size and type and store in ImageFile f */ public boolean checkFile(ImageFile imgf) throws IOException { @@ -76,9 +79,9 @@ } ImageReader reader = (ImageReader) readers.next(); /* are there more readers? */ - System.out.println("this reader: " + reader.getClass()); + logger.debug("this reader: " + reader.getClass()); while (readers.hasNext()) { - System.out.println("next reader: " + readers.next().getClass()); + logger.debug("next reader: " + readers.next().getClass()); } reader.setInput(istream); ImageSize d =
--- a/servlet/src/digilib/image/JAIDocuImage.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/JAIDocuImage.java Fri Nov 21 00:17:31 2003 +0100 @@ -60,7 +60,6 @@ System.gc(); img = JAI.create("fileload", f.getFile().getAbsolutePath()); if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } } @@ -79,7 +78,6 @@ pb3.add("PNG"); } else { // unknown mime type - util.dprintln(2, "ERROR(writeImage): Unknown mime type " + mt); throw new FileOpException("Unknown mime type: " + mt); } // render output @@ -97,13 +95,13 @@ quality = qual; // setup interpolation quality if (qual > 1) { - util.dprintln(4, "quality q2"); + logger.debug("quality q2"); interpol = Interpolation.getInstance(Interpolation.INTERP_BICUBIC); } else if (qual == 1) { - util.dprintln(4, "quality q1"); + logger.debug("quality q1"); interpol = Interpolation.getInstance(Interpolation.INTERP_BILINEAR); } else { - util.dprintln(4, "quality q0"); + logger.debug("quality q0"); interpol = Interpolation.getInstance(Interpolation.INTERP_NEAREST); } } @@ -152,16 +150,14 @@ } //DEBUG - util.dprintln( - 3, - "SCALE: " + scale + " ->" + img.getWidth() + "x" + img.getHeight()); + logger.debug("SCALE: " + scale + " ->" + img.getWidth() + "x" + img.getHeight()); } public void scaleAll(float scale) throws ImageOpException { RenderedImage scaledImg; //DEBUG - util.dprintln(4, "scaleAll: " + scale); + logger.debug("scaleAll: " + scale); ParameterBlockJAI param = new ParameterBlockJAI("Scale"); param.addSource(img); param.setParameter("xScale", scale); @@ -176,7 +172,6 @@ scaledImg = JAI.create("Scale", param, hint); if (scaledImg == null) { - util.dprintln(2, "ERROR(scale): error in scale"); throw new ImageOpException("Unable to scale"); } img = scaledImg; @@ -185,7 +180,7 @@ public void blur(int radius) throws ImageOpException { RenderedImage blurredImg; //DEBUG - util.dprintln(4, "blur: " + radius); + logger.debug("blur: " + radius); int klen = Math.max(radius, 2); int ksize = klen * klen; float f = 1f / ksize; @@ -204,7 +199,6 @@ BorderExtender.createInstance(BorderExtender.BORDER_COPY)); blurredImg = JAI.create("Convolve", param, hint); if (blurredImg == null) { - util.dprintln(2, "ERROR(scale): error in scale"); throw new ImageOpException("Unable to scale"); } img = blurredImg; @@ -213,7 +207,7 @@ public void scaleBinary(float scale) throws ImageOpException { RenderedImage scaledImg; //DEBUG - util.dprintln(4, "scaleBinary: " + scale); + logger.debug("scaleBinary: " + scale); ParameterBlockJAI param = new ParameterBlockJAI("SubsampleBinaryToGray"); param.addSource(img); @@ -227,7 +221,6 @@ // scale scaledImg = JAI.create("SubsampleBinaryToGray", param, hint); if (scaledImg == null) { - util.dprintln(2, "ERROR(scale): error in scale"); throw new ImageOpException("Unable to scale"); } img = scaledImg; @@ -245,9 +238,7 @@ param.add((float) height); RenderedImage croppedImg = JAI.create("crop", param); - util.dprintln( - 3, - "CROP: " + logger.debug("CROP: " + x_off + "," + y_off @@ -262,7 +253,6 @@ //DEBUG if (croppedImg == null) { - util.dprintln(2, "ERROR(crop): error in crop"); throw new ImageOpException("Unable to crop"); } img = croppedImg; @@ -312,9 +302,7 @@ rotImg = JAI.create("rotate", param); } - util.dprintln( - 3, - "ROTATE: " + logger.debug("ROTATE: " + x + "," + y @@ -330,7 +318,6 @@ //DEBUG if (rotImg == null) { - util.dprintln(2, "ERROR: error in rotate"); throw new ImageOpException("Unable to rotate"); } img = rotImg; @@ -366,7 +353,6 @@ mirImg = JAI.create("transpose", param); if (mirImg == null) { - util.dprintln(2, "ERROR(mirror): error in flip"); throw new ImageOpException("Unable to flip"); } img = mirImg; @@ -384,9 +370,7 @@ param.add(aa); enhImg = JAI.create("rescale", param); - util.dprintln( - 3, - "ENHANCE: *" + logger.debug("ENHANCE: *" + mult + ", +" + add @@ -397,7 +381,6 @@ //DEBUG if (enhImg == null) { - util.dprintln(2, "ERROR(enhance): error in enhance"); throw new ImageOpException("Unable to enhance"); } img = enhImg; @@ -423,9 +406,7 @@ param.add(aa); enhImg = JAI.create("rescale", param); - util.dprintln( - 3, - "ENHANCE_RGB: *" + logger.debug("ENHANCE_RGB: *" + rgbm + ", +" + rgba @@ -436,7 +417,6 @@ //DEBUG if (enhImg == null) { - util.dprintln(2, "ERROR(enhance): error in enhanceRGB"); throw new ImageOpException("Unable to enhanceRGB"); } img = enhImg;
--- a/servlet/src/digilib/image/JAIImageLoaderDocuImage.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/JAIImageLoaderDocuImage.java Fri Nov 21 00:17:31 2003 +0100 @@ -61,7 +61,7 @@ h = img.getHeight(); } } catch (IOException e) { - e.printStackTrace(); + logger.debug("error in getHeight", e); } return h; } @@ -75,7 +75,7 @@ w = img.getWidth(); } } catch (IOException e) { - e.printStackTrace(); + logger.debug("error in getHeight", e); } return w; } @@ -85,7 +85,6 @@ System.gc(); img = JAI.create("ImageRead", f.getFile().getAbsolutePath()); if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } } @@ -100,7 +99,6 @@ reader = (ImageReader) readers.next(); reader.setInput(istream); if (reader == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } } @@ -126,11 +124,9 @@ img = JAI.create("imageread", pb); */ } catch (IOException e) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } imgFile = f.getFile(); @@ -151,7 +147,6 @@ pb3.add("PNG"); } else { // unknown mime type - util.dprintln(2, "ERROR(writeImage): Unknown mime type " + mt); throw new FileOpException("Unknown mime type: " + mt); } // render output @@ -165,7 +160,6 @@ * @see java.lang.Object#finalize() */ protected void finalize() throws Throwable { - //System.out.println("FIN de JAIImageLoaderDocuImage!"); // we must dispose the ImageReader because it keeps the filehandle open! reader.dispose(); reader = null;
--- a/servlet/src/digilib/image/JIMIDocuImage.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/image/JIMIDocuImage.java Fri Nov 21 00:17:31 2003 +0100 @@ -58,13 +58,13 @@ try { img = Jimi.getRasterImage(f.getFile().toURL()); } catch (java.net.MalformedURLException e) { - util.dprintln(3, "ERROR(loadImage): MalformedURLException"); + logger.debug("ERROR(loadImage): MalformedURLException"); } catch (JimiException e) { - util.dprintln(3, "ERROR(loadImage): JIMIException"); + logger.debug("ERROR(loadImage): JIMIException"); throw new FileOpException("Unable to load File!" + e); } if (img == null) { - util.dprintln(3, "ERROR(loadImage): unable to load file"); + logger.debug("ERROR(loadImage): unable to load file"); throw new FileOpException("Unable to load File!"); } imgp = img.getImageProducer(); @@ -102,17 +102,16 @@ // setup scale and interpolation quality if (quality > 0) { - util.dprintln(4, "quality q1"); + logger.debug("quality q1"); scaleFilter = new AreaAverageScaleFilter(destWidth, destHeight); } else { - util.dprintln(4, "quality q0"); + logger.debug("quality q0"); scaleFilter = new ReplicatingScaleFilter(destWidth, destHeight); } ImageProducer scaledImg = new FilteredImageSource(imgp, scaleFilter); if (scaledImg == null) { - util.dprintln(2, "ERROR(cropAndScale): error in scale"); throw new ImageOpException("Unable to scale"); } @@ -126,10 +125,8 @@ // setup Crop ImageProducer croppedImg = img.getCroppedImageProducer(x_off, y_off, width, height); - //util.dprintln(3, "CROP:"+croppedImg.getWidth()+"x"+croppedImg.getHeight()); //DEBUG if (croppedImg == null) { - util.dprintln(2, "ERROR(cropAndScale): error in crop"); throw new ImageOpException("Unable to crop"); } imgp = croppedImg;
--- a/servlet/src/digilib/io/AliasingDocuDirCache.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/AliasingDocuDirCache.java Fri Nov 21 00:17:31 2003 +0100 @@ -85,7 +85,7 @@ */ public void putName(String name, DocuDirectory newdir) { if (map.containsKey(name)) { - System.out.println("Baah, duplicate key in AliasingDocuDirCache.put!"); + logger.warn("Baah, duplicate key in AliasingDocuDirCache.put!"); } else { map.put(name, newdir); }
--- a/servlet/src/digilib/io/DocuDirCache.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/DocuDirCache.java Fri Nov 21 00:17:31 2003 +0100 @@ -28,11 +28,15 @@ import java.util.LinkedList; import java.util.List; +import org.apache.log4j.Logger; + /** * @author casties */ public class DocuDirCache { + /** general logger for this class */ + protected Logger logger = Logger.getLogger(this.getClass()); /** HashMap of directories */ protected HashMap map = null; /** names of base directories */ @@ -88,7 +92,7 @@ public void put(DocuDirectory newdir) { String s = newdir.getDirName(); if (map.containsKey(s)) { - System.out.println("Baah, duplicate key in DocuDirCache.put!"); + logger.warn("Baah, duplicate key in DocuDirCache.put!"); } else { map.put(s, newdir); numFiles += newdir.size();
--- a/servlet/src/digilib/io/DocuDirectory.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/DocuDirectory.java Fri Nov 21 00:17:31 2003 +0100 @@ -255,11 +255,13 @@ unresolvedFileMeta = fileMeta; } } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + if (cache != null) { + cache.logger.warn("error parsing index.meta", e); + } } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + if (cache != null) { + cache.logger.warn("error reading index.meta", e); + } } } readParentMeta();
--- a/servlet/src/digilib/io/DocuDirent.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/DocuDirent.java Fri Nov 21 00:17:31 2003 +0100 @@ -1,38 +1,42 @@ -/* DocuDirent.java -- Abstract directory entry in a DocuDirectory - - Digital Image Library servlet components - - Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - Please read license.txt for the full details. A copy of the GPL - may be found at http://www.gnu.org/copyleft/lgpl.html - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - +/* + * DocuDirent.java -- Abstract directory entry in a DocuDirectory + * + * Digital Image Library servlet components + * + * Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * Please read license.txt for the full details. A copy of the GPL may be found + * at http://www.gnu.org/copyleft/lgpl.html + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + * * Created on 15.09.2003 by casties - * + * */ package digilib.io; import java.io.File; import java.util.HashMap; -/** Abstract directory entry in a DocuDirectory. +import org.apache.log4j.Logger; + +/** + * Abstract directory entry in a DocuDirectory. * * @author casties - * + * */ public abstract class DocuDirent { /** the file class of this file */ - protected static int fileClass = FileOps.CLASS_NONE; + protected static int fileClass = FileOps.CLASS_NONE; /** HashMap with metadata */ protected HashMap fileMeta = null; /** Is the Metadata valid */ @@ -40,19 +44,22 @@ /** the parent directory */ protected Directory parent = null; - /** Checks metadata and does something with it. - * + /** + * Checks metadata and does something with it. + * */ public abstract void checkMeta(); /** * gets the (default) File + * * @return */ public abstract File getFile(); - /** Reads meta-data for this Fileset if there is any. - * + /** + * Reads meta-data for this Fileset if there is any. + * */ public void readMeta() { if ((fileMeta != null) || (getFile() != null)) { @@ -72,15 +79,15 @@ } fileMeta = (HashMap) meta.get(getName()); } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); + Logger.getLogger(this.getClass()).warn("error reading index.meta", e); } } } - /** The name of the file. + /** + * The name of the file. * - * If this is a Fileset, the method returns the name of the default file + * If this is a Fileset, the method returns the name of the default file * (for image filesets the highest resolution file). * * @return @@ -88,62 +95,55 @@ public String getName() { File f = getFile(); return (f != null) ? f.getName() : null; - } - - /** The filename sans extension. - * - * @return - */ + } /** + * The filename sans extension. + * + * @return + */ public String getBasename() { File f = getFile(); if (f == null) { return null; } return FileOps.basename(f.getName()); - } - - /** Returns the parent Directory. - * - * @return DocuDirectory - */ + } /** + * Returns the parent Directory. + * + * @return DocuDirectory + */ public Directory getParent() { return parent; - } - - /** Sets the parent Directory. - * - * @param parent The parent to set - */ + } /** + * Sets the parent Directory. + * + * @param parent + * The parent to set + */ public void setParent(Directory parent) { this.parent = parent; - } - - /** Returns the meta-data for this file(set). - * - * @return HashMap - */ + } /** + * Returns the meta-data for this file(set). + * + * @return HashMap + */ public HashMap getFileMeta() { return fileMeta; - } - - /** Sets the meta-data for this file(set) - * . - * @param fileMeta The fileMeta to set - */ + } /** + * Sets the meta-data for this file(set) . + * + * @param fileMeta + * The fileMeta to set + */ public void setFileMeta(HashMap fileMeta) { this.fileMeta = fileMeta; - } - - /** - * @return - */ + } /** + * @return + */ public boolean isMetaChecked() { return metaChecked; - } - - /** - * @return - */ + } /** + * @return + */ public static int getFileClass() { return fileClass; }
--- a/servlet/src/digilib/io/FileOps.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/FileOps.java Fri Nov 21 00:17:31 2003 +0100 @@ -69,18 +69,6 @@ public static final int NUM_CLASSES = 2; - public FileOps() { - util = new Utils(); - } - - public FileOps(Utils u) { - util = u; - } - - public void setUtils(Utils u) { - util = u; - } - /** * get the mime type for a file format (by extension) */
--- a/servlet/src/digilib/io/ImageFileset.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/ImageFileset.java Fri Nov 21 00:17:31 2003 +0100 @@ -145,8 +145,6 @@ return f; } } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } return null; @@ -175,8 +173,6 @@ return f; } } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } return null;
--- a/servlet/src/digilib/io/XMLListLoader.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/XMLListLoader.java Fri Nov 21 00:17:31 2003 +0100 @@ -29,6 +29,7 @@ import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.apache.log4j.Logger; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; @@ -47,6 +48,7 @@ */ public class XMLListLoader { + private Logger logger = Logger.getLogger(this.getClass()); private String listTag = "list"; private String entryTag = "entry"; private String keyAtt = "key"; @@ -60,7 +62,7 @@ String entry_tag, String key_att, String value_att) { - //System.out.println("xmlListLoader("+list_tag+","+entry_tag+","+key_att+","+value_att+")"); + logger.debug("xmlListLoader("+list_tag+","+entry_tag+","+key_att+","+value_att+")"); listTag = list_tag; entryTag = entry_tag; keyAtt = key_att; @@ -100,8 +102,7 @@ if (qName.equals(entryTag)) { // is it inside a list tag? if ((listTag.length() > 0) && (!tagSpace.contains(listTag))) { - System.out.println( - "BOO: Entry " + logger.error("BOO: Entry " + entryTag + " not inside list " + listTag); @@ -113,8 +114,7 @@ String key = atts.getValue(keyAtt); String val = atts.getValue(valueAtt); if ((key == null) || (val == null)) { - System.out.println( - "BOO: Entry " + logger.error("BOO: Entry " + entryTag + " does not have Attributes " + keyAtt
--- a/servlet/src/digilib/io/XMLMetaLoader.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/io/XMLMetaLoader.java Fri Nov 21 00:17:31 2003 +0100 @@ -28,12 +28,14 @@ import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.apache.log4j.Logger; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class XMLMetaLoader { + private Logger logger = Logger.getLogger(this.getClass()); private String outerTag = "resource"; private String metaTag = "meta"; private String fileTag = "file";
--- a/servlet/src/digilib/servlet/DigilibConfiguration.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/DigilibConfiguration.java Fri Nov 21 00:17:31 2003 +0100 @@ -1,22 +1,23 @@ -/* DigilibConfiguration -- Holding all parameters for digilib servlet. - - Digital Image Library servlet components - - Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - Please read license.txt for the full details. A copy of the GPL - may be found at http://www.gnu.org/copyleft/lgpl.html - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ +/* + * DigilibConfiguration -- Holding all parameters for digilib servlet. + * + * Digital Image Library servlet components + * + * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * Please read license.txt for the full details. A copy of the GPL may be found + * at http://www.gnu.org/copyleft/lgpl.html + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + * + */ package digilib.servlet; @@ -27,7 +28,10 @@ import javax.servlet.ServletConfig; import javax.servlet.ServletException; -import digilib.Utils; +import org.apache.log4j.BasicConfigurator; +import org.apache.log4j.Logger; +import org.apache.log4j.xml.DOMConfigurator; + import digilib.auth.AuthOps; import digilib.auth.XMLAuthOps; import digilib.image.DocuImage; @@ -37,52 +41,58 @@ import digilib.io.FileOps; import digilib.io.XMLListLoader; -/** 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.<br> - * errorImgFileName: image file to send in case of error.<br> - * denyImgFileName: image file to send if access is denied.<br> - * baseDirs: array of base directories in order of preference (prescaled - * versions first).<br> - * useAuth: use authentication information.<br> - * authConfPath: authentication configuration file.<br> - * authOp: AuthOps instance for authentication.<br> - * ...<br> +/** + * 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. <br>errorImgFileName: image file to send in case of error. <br> + * denyImgFileName: image file to send if access is denied. <br>baseDirs: + * array of base directories in order of preference (prescaled versions first). + * <br>useAuth: use authentication information. <br>authConfPath: + * authentication configuration file. <br>authOp: AuthOps instance for + * authentication. <br>... <br> * * @author casties - * + * */ public class DigilibConfiguration extends ParameterMap { - + /** DocuImage class instance */ private Class docuImageClass = null; - - /** Utils instance */ - private Utils util = new Utils(5); + + /** Log4J logger */ + private Logger logger = Logger.getLogger("digilib.config"); - - /** Default constructor defines all parameters and their default values. - * + /** + * Default constructor defines all parameters and their default values. + * */ public DigilibConfiguration() { // create HashMap(20) super(20); - + // we start with a default logger config + BasicConfigurator.configure(); + /* - * Definition of parameters and default values. - * System parameters that are not read from config file have a type 's'. + * Definition of parameters and default values. System parameters that + * are not read from config file have a type 's'. */ - + // digilib servlet version - putParameter("servlet.version", digilib.servlet.Scaler.dlVersion, null, 's'); + putParameter( + "servlet.version", + digilib.servlet.Scaler.dlVersion, + null, + 's'); // configuration file location putParameter("servlet.config.file", null, null, 's'); - // Utils instance - putParameter("servlet.util", util, null, 's'); // DocuDirCache instance putParameter("servlet.dir.cache", null, null, 's'); // DocuImage class instance - putParameter("servlet.docuimage.class", digilib.image.JAIDocuImage.class, null, 's'); + putParameter( + "servlet.docuimage.class", + digilib.image.JAIDocuImage.class, + null, + 's'); // AuthOps instance for authentication putParameter("servlet.auth.op", null, null, 's'); @@ -91,9 +101,17 @@ */ // image file to send in case of error - putParameter("error-image", "/docuserver/images/icons/scalerror.gif", null, 'f'); + putParameter( + "error-image", + "/docuserver/images/icons/scalerror.gif", + null, + 'f'); // image file to send if access is denied - putParameter("denied-image", "/docuserver/images/icons/denied.gif", null, 'f'); + putParameter( + "denied-image", + "/docuserver/images/icons/denied.gif", + null, + 'f'); // base directories in order of preference (prescaled versions last) String[] bd = { "/docuserver/images", "/docuserver/scaled/small" }; putParameter("basedir-list", bd, null, 'f'); @@ -106,7 +124,11 @@ // Debug level putParameter("debug-level", new Integer(5), null, 'f'); // Type of DocuImage instance - putParameter("docuimage-class", "digilib.image.JAIDocuImage", null, 'f'); + putParameter( + "docuimage-class", + "digilib.image.JAIDocuImage", + null, + 'f'); // part of URL used to indicate authorized access putParameter("auth-url-path", "authenticated/", null, 'f'); // degree of subsampling on image load @@ -117,11 +139,14 @@ putParameter("use-mapping", Boolean.FALSE, null, 'f'); // mapping file location putParameter("mapping-file", "digilib-map.xml", null, 'f'); + // log4j config file location + putParameter("log-config-file", "log4j-config.xml", null, 'f'); + } - /** Constructor taking a ServletConfig. - * Reads the config file location from an init parameter and loads the - * config file. Calls <code>readConfig()</code>. + /** + * Constructor taking a ServletConfig. Reads the config file location from + * an init parameter and loads the config file. Calls <code>readConfig()</code>. * * @see readConfig() */ @@ -129,16 +154,15 @@ this(); readConfig(c); } - + /** * read parameter list from the XML file in init parameter "config-file" */ public void readConfig(ServletConfig c) throws Exception { - + /* - * Get config file name. - * The file name is first looked for as an init parameter, then in a fixed location - * in the webapp. + * Get config file name. The file name is first looked for as an init + * parameter, then in a fixed location in the webapp. */ if (c == null) { // no config no file... @@ -146,10 +170,11 @@ } String fn = c.getInitParameter("config-file"); if (fn == null) { - fn = c.getServletContext().getRealPath("WEB-INF/digilib-config.xml"); + fn = + c.getServletContext().getRealPath("WEB-INF/digilib-config.xml"); if (fn == null) { - util.dprintln(4, "setConfig: no param config-file"); - throw new ServletException("ERROR no digilib config file!"); + logger.fatal("readConfig: no param config-file"); + throw new ServletException("ERROR: no digilib config file!"); } } File f = new File(fn); @@ -158,11 +183,11 @@ new XMLListLoader("digilib-config", "parameter", "name", "value"); // read config file into HashMap HashMap confTable = lilo.loadURL(f.toURL().toString()); - + // set config file path parameter setValue("servlet.config.file", f.getCanonicalPath()); - /* + /* * read parameters */ @@ -175,11 +200,11 @@ // type 's' Parameters are not overwritten. continue; } - if (! p.setValueFromString(val)) { + if (!p.setValueFromString(val)) { /* * automatic conversion failed -- try special cases */ - + // basedir-list if (key.equals("basedir-list")) { // split list into directories @@ -188,7 +213,7 @@ p.setValue(sa); } } - + } } else { // parameter unknown -- just add @@ -200,18 +225,25 @@ * further initialization */ - // debugLevel - util.setDebugLevel(getAsInt("debug-level")); + // set up logger + String logConfPath = getAsString("log-config-file"); + if (!logConfPath.startsWith("/")) { + // relative path -> use getRealPath to resolve in WEB-INF + logConfPath = + c.getServletContext().getRealPath("WEB-INF/" + logConfPath); + } + DOMConfigurator.configure(logConfPath); // directory cache String[] bd = (String[]) getValue("basedir-list"); - int[] fcs = { FileOps.CLASS_IMAGE, FileOps.CLASS_TEXT}; + int[] fcs = { FileOps.CLASS_IMAGE, FileOps.CLASS_TEXT }; DocuDirCache dirCache; if (getAsBoolean("use-mapping")) { // with mapping file String mapConfPath = getAsString("mapping-file"); - if (! mapConfPath.startsWith("/")) { + if (!mapConfPath.startsWith("/")) { // relative path -> use getRealPath to resolve in WEB-INF - mapConfPath = c.getServletContext().getRealPath("WEB-INF/"+mapConfPath); + mapConfPath = + c.getServletContext().getRealPath("WEB-INF/" + mapConfPath); } dirCache = new AliasingDocuDirCache(bd, fcs, mapConfPath); } else { @@ -225,11 +257,13 @@ //authOp = new DBAuthOpsImpl(util); // XML version String authConfPath = getAsString("auth-file"); - if (! authConfPath.startsWith("/")) { + if (!authConfPath.startsWith("/")) { // relative path -> use getRealPath to resolve in WEB-INF - authConfPath = c.getServletContext().getRealPath("WEB-INF/"+authConfPath); + authConfPath = + c.getServletContext().getRealPath( + "WEB-INF/" + authConfPath); } - AuthOps authOp = new XMLAuthOps(util, authConfPath); + AuthOps authOp = new XMLAuthOps(authConfPath); setValue("servlet.auth.op", authOp); } // DocuImage class @@ -239,7 +273,8 @@ setValue("servlet.docuimage.class", docuImageClass); } - /** Creates a new DocuImage instance. + /** + * Creates a new DocuImage instance. * * The type of DocuImage is specified by docuImageType. * @@ -252,17 +287,9 @@ docuImageClass = Class.forName(getAsString("docuimage-class")); } di = (DocuImageImpl) docuImageClass.newInstance(); - di.setUtils(util); } catch (Exception e) { } return di; } - /** - * @return - */ - public Utils getUtil() { - return util; - } - }
--- a/servlet/src/digilib/servlet/DigilibRequest.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/DigilibRequest.java Fri Nov 21 00:17:31 2003 +0100 @@ -36,6 +36,8 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; +import org.apache.log4j.Logger; + import com.hp.hpl.mesa.rdf.jena.common.SelectorImpl; import com.hp.hpl.mesa.rdf.jena.mem.ModelMem; import com.hp.hpl.mesa.rdf.jena.model.Model; @@ -65,6 +67,7 @@ */ public class DigilibRequest extends ParameterMap { + private Logger logger = Logger.getLogger(this.getClass()); private boolean boolRDF = false; // use RDF Parameters private DocuImage image; // internal DocuImage instance for this request private ServletRequest servletRequest; // internal ServletRequest @@ -373,9 +376,7 @@ String strRDF; strRDF = request.getParameter("rdf"); if (strRDF != null) { - //System.out.println(strRDF); Hashtable hashRDF = rdf2hash(strRDF); - //System.out.println(hashRDF.toString()); // go through all parameters for (Iterator i = hashRDF.keySet().iterator(); i.hasNext();) { String name = (String) i.next(); @@ -404,7 +405,6 @@ // get Property fn -> digilib Property p = model.getProperty("http://echo.unibe.ch/digilib/rdf#", "fn"); - //System.out.println(p.toString()); if (p != null) { // get URI String strURI = null; @@ -412,7 +412,6 @@ if (i.hasNext()) { strURI = "urn:echo:" + i.next().toString(); Resource r = model.getResource(strURI); - //System.out.println(r.toString()); Selector selector = new SelectorImpl(r, null, (RDFNode) null); // list the statements in the graph @@ -444,7 +443,7 @@ } } } catch (Exception e) { - System.out.println("Failed: " + e); + logger.warn("rdf3hash failed", e); } return hashParams; }
--- a/servlet/src/digilib/servlet/DocumentBean.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/DocumentBean.java Fri Nov 21 00:17:31 2003 +0100 @@ -28,21 +28,19 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import digilib.Utils; +import org.apache.log4j.Logger; + import digilib.auth.AuthOpException; import digilib.auth.AuthOps; import digilib.io.DocuDirCache; import digilib.io.DocuDirectory; -import digilib.io.FileOps; public class DocumentBean { - // Utils object for logging - private Utils util = new Utils(0); + // general logger + Logger logger = Logger.getLogger("digilib.docubean"); // AuthOps object to check authorization private AuthOps authOp; - // FileOps object - private FileOps fileOp = new FileOps(util); // use authorization database private boolean useAuthentication = true; // path to add for authenticated access @@ -64,12 +62,12 @@ try { setConfig(conf); } catch (Exception e) { - util.dprintln(2, "ERROR: Unable to read config: " + e.toString()); + logger.fatal("ERROR: Unable to read config: ", e); } } public void setConfig(ServletConfig conf) throws ServletException { - util.dprintln(10, "setConfig"); + logger.debug("setConfig"); // get our ServletContext ServletContext context = conf.getServletContext(); // see if there is a Configuration instance @@ -86,8 +84,6 @@ } } - // get util - util = dlConfig.getUtil(); // get cache dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache"); @@ -104,7 +100,7 @@ */ public boolean isAuthRequired(DigilibRequest request) throws AuthOpException { - util.dprintln(10, "isAuthRequired"); + logger.debug("isAuthRequired"); return useAuthentication ? authOp.isAuthRequired(request) : false; } @@ -113,7 +109,7 @@ */ public boolean isAuthorized(DigilibRequest request) throws AuthOpException { - util.dprintln(10, "isAuthorized"); + logger.debug("isAuthorized"); return useAuthentication ? authOp.isAuthorized(request) : true; } @@ -122,7 +118,7 @@ * to access the specified path */ public List rolesForPath(DigilibRequest request) throws AuthOpException { - util.dprintln(10, "rolesForPath"); + logger.debug("rolesForPath"); return useAuthentication ? authOp.rolesForPath(request) : null; } @@ -130,7 +126,7 @@ * check request authorization against a list of roles */ public boolean isRoleAuthorized(List roles, DigilibRequest request) { - util.dprintln(10, "isRoleAuthorized"); + logger.debug("isRoleAuthorized"); return useAuthentication ? authOp.isRoleAuthorized(roles, request) : true; @@ -143,7 +139,7 @@ DigilibRequest request, HttpServletResponse response) throws Exception { - util.dprintln(10, "doAuthentication"); + logger.debug("doAuthentication"); if (!useAuthentication) { // shortcut if no authentication return true; @@ -151,10 +147,10 @@ // check if we are already authenticated if (((HttpServletRequest) request.getServletRequest()).getRemoteUser() == null) { - util.dprintln(3, "unauthenticated so far"); + logger.debug("unauthenticated so far"); // if not maybe we must? if (isAuthRequired(request)) { - util.dprintln(3, "auth required, redirect"); + logger.debug("auth required, redirect"); // we are not yet authenticated -> redirect response.sendRedirect( authURLPath @@ -173,7 +169,7 @@ * (not yet functional) */ public int getFirstPage(DigilibRequest request) { - util.dprintln(10, "getFirstPage"); + logger.debug("getFirstPage"); return 1; } @@ -181,7 +177,7 @@ * get the number of pages/files in the directory */ public int getNumPages(DigilibRequest request) throws Exception { - util.dprintln(10, "getNumPages"); + logger.debug("getNumPages"); DocuDirectory dd = (dirCache != null) ? dirCache.getDirectory(request.getFilePath())
--- a/servlet/src/digilib/servlet/Parameter.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/Parameter.java Fri Nov 21 00:17:31 2003 +0100 @@ -183,7 +183,6 @@ fa[i] = f; } } catch (Exception e) { - //System.out.println("ERROR: trytoGetParam(int) failed on param "+name); } return fa;
--- a/servlet/src/digilib/servlet/Scaler.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/Scaler.java Fri Nov 21 00:17:31 2003 +0100 @@ -1,22 +1,23 @@ -/* Scaler -- Scaler servlet main class - - Digital Image Library servlet components - - Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - Please read license.txt for the full details. A copy of the GPL - may be found at http://www.gnu.org/copyleft/lgpl.html - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ +/* + * Scaler -- Scaler servlet main class + * + * Digital Image Library servlet components + * + * Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * Please read license.txt for the full details. A copy of the GPL may be found + * at http://www.gnu.org/copyleft/lgpl.html + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + * + */ package digilib.servlet; @@ -34,7 +35,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import digilib.Utils; +import org.apache.log4j.Logger; + import digilib.auth.AuthOpException; import digilib.auth.AuthOps; import digilib.image.DocuImage; @@ -43,23 +45,30 @@ import digilib.image.ImageOpException; import digilib.image.ImageSize; import digilib.io.DocuDirCache; +import digilib.io.FileOpException; +import digilib.io.FileOps; import digilib.io.ImageFile; import digilib.io.ImageFileset; -import digilib.io.FileOpException; -import digilib.io.FileOps; //import tilecachetool.*; /** - * @author casties */ + * @author casties + */ //public class Scaler extends HttpServlet implements SingleThreadModel { public class Scaler extends HttpServlet { // digilib servlet version (for all components) - public static final String dlVersion = "1.17b2"; + public static final String dlVersion = "1.18b1"; - // Utils instance with debuglevel - Utils util; + // logger for accounting requests + Logger accountlog = Logger.getLogger("account.request"); + // gengeral logger for this class + Logger logger = Logger.getLogger("digilib.servlet"); + // logger for authentication related + Logger authlog = Logger.getLogger("digilib.auth"); + + // FileOps instance FileOps fileOp; // AuthOps instance @@ -121,15 +130,15 @@ throw new ServletException(e); } } - // first we need an Utils - util = dlConfig.getUtil(); + // say hello in the log file + logger.info("***** Digital Image Library Servlet (version " + + dlVersion + + ") *****"); // set our AuthOps useAuthentication = dlConfig.getAsBoolean("use-authorization"); + // AuthOps instance authOp = (AuthOps) dlConfig.getValue("servlet.auth.op"); - // FileOps instance - fileOp = new FileOps(util); - // AuthOps instance - servletOp = new ServletOps(util); + // DocuDirCache instance dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache"); denyImgFile = new File(dlConfig.getAsString("denied-image")); @@ -139,10 +148,10 @@ defaultQuality = dlConfig.getAsInt("default-quality"); } - /** Process the HTTP Get request*/ + /** Process the HTTP Get request */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - util.dprintln(1, "The servlet has received a GET!"); + accountlog.info("GET from "+request.getRemoteAddr()); // create new request with defaults DigilibRequest dlReq = new DigilibRequest(); // set with request parameters @@ -153,12 +162,12 @@ processRequest(request, response); } - /**Process the HTTP Post request*/ + /** Process the HTTP Post request */ public void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - util.dprintln(1, "The servlet has received a POST!"); + accountlog.info("POST from "+request.getRemoteAddr()); // create new request with defaults DigilibRequest dlReq = new DigilibRequest(); // set with request parameters @@ -175,6 +184,8 @@ HttpServletResponse response) throws ServletException, IOException { + accountlog.debug("request: "+request.getQueryString()); + // time for benchmarking long startTime = System.currentTimeMillis(); // output mime/type @@ -273,18 +284,6 @@ cropToFit = false; sendFile = false; hiresOnly = true; - } else if (dlRequest.hasOption("mo", "file")) { - scaleToFit = false; - absoluteScale = false; - if (sendFileAllowed) { - cropToFit = false; - sendFile = true; - } else { - // crop to fit if send file not allowed - cropToFit = true; - sendFile = false; - } - hiresOnly = true; } // operation mode: "lores": try to use scaled image, "hires": use // unscaled image @@ -334,18 +333,18 @@ // get a list of required roles (empty if no restrictions) List rolesRequired = authOp.rolesForPath(loadPathName, request); if (rolesRequired != null) { - util.dprintln(1, "Role required: " + rolesRequired); - util.dprintln(2, "User: " + request.getRemoteUser()); + authlog.info("Role required: " + rolesRequired); + authlog.info("User: " + request.getRemoteUser()); // is the current request/user authorized? if (!authOp.isRoleAuthorized(rolesRequired, request)) { // send deny answer and abort - util.dprintln(1, "ERROR: access denied!"); + authlog.error("ERROR: access denied!"); if (errorMsgHtml) { ServletOps.htmlMessage( "ERROR: Unauthorized access!", response); } else { - servletOp.sendFile(denyImgFile, response); + ServletOps.sendFile(denyImgFile, null, response); } return; } @@ -367,7 +366,7 @@ + dlRequest.getAsInt("pn") + ") not found."); } - + /* calculate expected source image size */ ImageSize expectedSourceSize = new ImageSize(); if (scaleToFit) { @@ -402,8 +401,25 @@ fileToLoad = fileset.getBiggest(); } } - util.dprintln(1, "Loading: " + fileToLoad.getFile()); + logger.info("Loading: " + fileToLoad.getFile()); + /* + * send the image if its mo=(raw)file + */ + if (dlRequest.hasOption("mo", "file") + || dlRequest.hasOption("mo", "rawfile")) { + if (sendFileAllowed) { + String mt = null; + if (dlRequest.hasOption("mo", "rawfile")) { + mt = "application/octet-stream"; + } + ServletOps.sendFile(fileToLoad.getFile(), mt, response); + } + } + + /* + * prepare resolution for original size + */ if (absoluteScale) { // get original resolution from metadata fileset.checkMeta(); @@ -448,20 +464,17 @@ * if not autoScale and not scaleToFit nor cropToFit then send as * is (mo=file) */ - if ((loresOnly - && imageSendable - && fileToLoad.getSize().isSmallerThan(expectedSourceSize)) - || (!(loresOnly || hiresOnly) - && fileToLoad.getSize().fitsIn(expectedSourceSize)) - || sendFile) { + if (imageSendable + && ((loresOnly + && fileToLoad.getSize().isSmallerThan(expectedSourceSize)) + || (!(loresOnly || hiresOnly) + && fileToLoad.getSize().fitsIn(expectedSourceSize)))) { - util.dprintln(1, "Sending File as is."); - - servletOp.sendFile(fileToLoad.getFile(), response); + logger.debug("Sending File as is."); - util.dprintln( - 1, - "Done in " + ServletOps.sendFile(fileToLoad.getFile(), null, response); + + logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms"); return; @@ -475,7 +488,7 @@ // set interpolation quality docuImage.setQuality(scaleQual); - + // set missing dw or dh from aspect ratio double imgAspect = fileToLoad.getAspect(); if (paramDW == 0) { @@ -486,12 +499,8 @@ /* crop and scale the image */ - util.dprintln( - 2, - "IMG: " + imgSize.getWidth() + "x" + imgSize.getHeight()); - util.dprintln( - 2, - "time " + (System.currentTimeMillis() - startTime) + "ms"); + logger.debug("IMG: " + imgSize.getWidth() + "x" + imgSize.getHeight()); + logger.debug("time " + (System.currentTimeMillis() - startTime) + "ms"); // coordinates and scaling double areaXoff; @@ -589,9 +598,7 @@ } } - util.dprintln( - 1, - "Scale " + logger.debug("Scale " + scaleXY + "(" + scaleX @@ -608,9 +615,7 @@ areaXoff = outerUserImgArea.getX(); areaYoff = outerUserImgArea.getY(); - util.dprintln( - 2, - "crop: " + logger.debug("crop: " + areaXoff + "," + areaYoff @@ -624,7 +629,7 @@ || (areaHeight < 1) || (scaleXY * areaWidth < 2) || (scaleXY * areaHeight < 2)) { - util.dprintln(1, "ERROR: invalid scale parameter set!"); + logger.error("ERROR: invalid scale parameter set!"); throw new ImageOpException("Invalid scale parameter set!"); } @@ -632,8 +637,7 @@ // use subimage loading if possible if (docuImage.isSubimageSupported()) { - System.out.println( - "Subimage: scale " + scaleXY + " = " + (1 / scaleXY)); + logger.debug("Subimage: scale " + scaleXY + " = " + (1 / scaleXY)); double subf = 1d; double subsamp = 1d; if (scaleXY < 1) { @@ -646,8 +650,7 @@ subsamp = Math.floor(subf); } scaleXY = subsamp / subf; - System.out.println( - "Using subsampling: " + subsamp + " rest " + scaleXY); + logger.debug("Using subsampling: " + subsamp + " rest " + scaleXY); } docuImage.loadSubimage( @@ -655,8 +658,7 @@ outerUserImgArea.getBounds(), (int) subsamp); - System.out.println( - "SUBSAMP: " + logger.debug("SUBSAMP: " + subsamp + " -> " + docuImage.getWidth() @@ -736,9 +738,7 @@ docuImage.enhance((float) mult, (float) paramBRGT); } - util.dprintln( - 2, - "time " + (System.currentTimeMillis() - startTime) + "ms"); + logger.debug("time " + (System.currentTimeMillis() - startTime) + "ms"); /* write the resulting image */ @@ -755,59 +755,57 @@ // write the image docuImage.writeImage(mimeType, response.getOutputStream()); - util.dprintln( - 1, - "Done in " + (System.currentTimeMillis() - startTime) + "ms"); + logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms"); /* error handling */ } // end of "big" try catch (IOException e) { - util.dprintln(1, "ERROR: File IO Error: " + e); + logger.fatal("ERROR: File IO Error: ", e); try { if (errorMsgHtml) { ServletOps.htmlMessage( "ERROR: File IO Error: " + e, response); } else { - servletOp.sendFile(errorImgFile, response); + ServletOps.sendFile(errorImgFile, null, response); } } catch (FileOpException ex) { } // so we don't get a loop } catch (AuthOpException e) { - util.dprintln(1, "ERROR: Authorization error: " + e); + logger.fatal("ERROR: Authorization error: ", e); try { if (errorMsgHtml) { ServletOps.htmlMessage( "ERROR: Authorization error: " + e, response); } else { - servletOp.sendFile(errorImgFile, response); + ServletOps.sendFile(errorImgFile, null, response); } } catch (FileOpException ex) { } // so we don't get a loop } catch (ImageOpException e) { - util.dprintln(1, "ERROR: Image Error: " + e); + logger.fatal("ERROR: Image Error: ", e); try { if (errorMsgHtml) { ServletOps.htmlMessage( "ERROR: Image Operation Error: " + e, response); } else { - servletOp.sendFile(errorImgFile, response); + ServletOps.sendFile(errorImgFile, null, response); } } catch (FileOpException ex) { } // so we don't get a loop } catch (RuntimeException e) { // JAI likes to throw RuntimeExceptions ;-( - util.dprintln(1, "ERROR: Other Image Error: " + e); + logger.fatal("ERROR: Other Image Error: ", e); try { if (errorMsgHtml) { ServletOps.htmlMessage( "ERROR: Other Image Operation Error: " + e, response); } else { - servletOp.sendFile(errorImgFile, response); + ServletOps.sendFile(errorImgFile, null, response); } } catch (FileOpException ex) { } // so we don't get a loop
--- a/servlet/src/digilib/servlet/ServletOps.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/ServletOps.java Fri Nov 21 00:17:31 2003 +0100 @@ -1,219 +1,120 @@ -/* ServletOps -- Servlet utility class - - Digital Image Library servlet components - - Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2 of the License, or (at your - option) any later version. - - Please read license.txt for the full details. A copy of the GPL - may be found at http://www.gnu.org/copyleft/lgpl.html - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ +/* + * ServletOps -- Servlet utility class + * + * Digital Image Library servlet components + * + * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * Please read license.txt for the full details. A copy of the GPL may be found + * at http://www.gnu.org/copyleft/lgpl.html + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + * + */ package digilib.servlet; -import javax.servlet.*; -import javax.servlet.http.*; -import java.io.*; -import java.util.*; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.util.StringTokenizer; -import digilib.*; -import digilib.io.*; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; +import org.apache.log4j.Logger; + +import digilib.io.FileOpException; +import digilib.io.FileOps; public class ServletOps { - private Utils util = null; - private HashMap confTable = null; - - public ServletOps() { - util = new Utils(); - } - - public ServletOps(Utils u) { - util = u; - } - - public ServletOps(Utils u, ServletConfig sc) throws ServletException { - util = u; - setConfig(sc); - } - - public void setUtils(Utils u) { - util = u; - } + private static Logger logger = Logger.getLogger("servlet.op"); - /** - * read parameter list from the XML file in init parameter "config-file" - */ - public void setConfig(ServletConfig c) throws ServletException { - // reset parameter table - confTable = null; - if (c == null) { - return; - } - // get config file name - String fn = c.getInitParameter("config-file"); - if (fn == null) { - util.dprintln(4, "setConfig: no param config-file"); - return; - } - File f = new File(fn); - // setup config file list reader - XMLListLoader lilo = new XMLListLoader("digilib-config", "parameter", "name", "value"); - try { - confTable = lilo.loadURL(f.toURL().toString()); - } catch (Exception e) { - util.dprintln(4, "setConfig: unable to read file "+fn); - throw new ServletException(e); - } - } + /** + * convert a string with a list of pathnames into an array of strings using + * the system's path seperator string + */ + public static String[] getPathArray(String paths) { + // split list into directories + StringTokenizer dirs = + new StringTokenizer(paths, java.io.File.pathSeparator); + int n = dirs.countTokens(); + if (n < 1) { + return null; + } + // add directories into array + String[] pathArray = new String[n]; + for (int i = 0; i < n; i++) { + pathArray[i] = dirs.nextToken(); + } + return pathArray; + } - /** - * convert a string with a list of pathnames into an array of strings - * using the system's path seperator string - */ - public String[] getPathArray(String paths) { - // split list into directories - StringTokenizer dirs = new StringTokenizer(paths, java.io.File.pathSeparator); - int n = dirs.countTokens(); - if (n < 1) { - return null; - } - // add directories into array - String[] pathArray = new String[n]; - for (int i = 0; i < n; i++) { - pathArray[i] = dirs.nextToken(); - } - return pathArray; - } - - /** - * getPathArray with default fall back - */ - public String[] tryToGetPathArray(String paths, String[] defaultPath) { - String[] pa = getPathArray(paths); - return (pa != null) ? pa : defaultPath; - } - - /** - * print a servlet response and exit - */ - public static void htmlMessage(String s, HttpServletResponse response) throws IOException { - response.setContentType("text/html; charset=iso-8859-1"); - PrintWriter out = response.getWriter(); - out.println("<html>"); - out.println("<head><title>Scaler</title></head>"); - out.println("<body>"); - out.println("<p>"+s+"</p>"); - out.println("</body></html>"); - } + /** + * print a servlet response and exit + */ + public static void htmlMessage(String s, HttpServletResponse response) + throws IOException { + response.setContentType("text/html; charset=iso-8859-1"); + PrintWriter out = response.getWriter(); + out.println("<html>"); + out.println("<head><title>Scaler</title></head>"); + out.println("<body>"); + out.println("<p>" + s + "</p>"); + out.println("</body></html>"); + } - /** Transfers an image file as-is. - * - * The local file is copied to the <code>OutputStream</code> of the - * <code>ServletResponse</code>. The mime-type for the response is detected - * from the file. - * - * @param f Image file to be sent. - * @param res ServletResponse where the image file will be sent. - * @throws FileOpException Exception is thrown for a IOException. - */ - public void sendFile(File f, ServletResponse response) throws FileOpException { - util.dprintln(4, "sendFile("+f+")"); - String mimeType = FileOps.mimeForFile(f); - if (mimeType == null) { - util.dprintln(2, "ERROR(sendFile): unknown file Type"); - throw new FileOpException("Unknown file type."); - } - response.setContentType(mimeType); - // open file - try { - FileInputStream inFile = new FileInputStream(f); - OutputStream outStream = response.getOutputStream(); - byte dataBuffer[] = new byte[4096]; - int len; - while ((len = inFile.read(dataBuffer)) != -1) { - // copy out file - outStream.write(dataBuffer, 0, len); - } - inFile.close(); - } catch (IOException e) { - util.dprintln(2, "ERROR(sendFile): unable to send file"); - throw new FileOpException("Unable to send file."); + /** + * Transfers an image file as-is with the mime type mt. + * + * The local file is copied to the <code>OutputStream</code> of the + * <code>ServletResponse</code>. If mt is null then the mime-type is + * auto-detected with mimeForFile. + * + * @param mt + * mime-type of the file. + * @param f + * Image file to be sent. + * @param res + * ServletResponse where the image file will be sent. + * @throws FileOpException + * Exception is thrown for a IOException. + */ + public static void sendFile(File f, String mt, ServletResponse response) + throws FileOpException { + logger.debug("sendRawFile(" + mt + ", " + f + ")"); + if (mt == null) { + // auto-detect mime-type + mt = FileOps.mimeForFile(f); + if (mt == null) { + throw new FileOpException("Unknown file type."); + } + } + response.setContentType(mt); + // open file + try { + FileInputStream inFile = new FileInputStream(f); + OutputStream outStream = response.getOutputStream(); + byte dataBuffer[] = new byte[4096]; + int len; + while ((len = inFile.read(dataBuffer)) != -1) { + // copy out file + outStream.write(dataBuffer, 0, len); + } + inFile.close(); + } catch (IOException e) { + throw new FileOpException("Unable to send file."); + } } - } - - - /** - * get a parameter from request and return it if set, otherwise return default - */ - public int tryToGetParam(String s, int i, HttpServletRequest r) { - try { - i = Integer.parseInt(r.getParameter(s)); - } catch(Exception e) { - util.dprintln(4, "trytoGetParam(int) failed on param "+s); - //e.printStackTrace(); - } - return i; - } - public float tryToGetParam(String s, float f, HttpServletRequest r) { - try { - f = Float.parseFloat(r.getParameter(s)); - } catch(Exception e) { - util.dprintln(4, "trytoGetParam(float) failed on param "+s); - //e.printStackTrace(); - } - return f; - } - public String tryToGetParam(String s, String x, HttpServletRequest r) { - if (r.getParameter(s) != null) { - x = r.getParameter(s); - } else { - util.dprintln(4, "trytoGetParam(string) failed on param "+s); - } - return x; - } - - - /** - * get an init parameter from config and return it if set, otherwise return default - */ - public int tryToGetInitParam(String s, int i) { - //System.out.println("trytogetInitParam("+s+", "+i+")"); - try { - //System.out.println("trytogetInitParam: "+(String)confTable.get(s)); - i = Integer.parseInt((String)confTable.get(s)); - } catch(Exception e) { - util.dprintln(4, "trytogetInitParam(int) failed on param "+s); - //e.printStackTrace(); - } - return i; - } - public float tryToGetInitParam(String s, float f) { - try { - f = Float.parseFloat((String)confTable.get(s)); - } catch(Exception e) { - util.dprintln(4, "trytoGetInitParam(float) failed on param "+s); - //e.printStackTrace(); - } - return f; - } - public String tryToGetInitParam(String s, String x) { - if ((confTable != null)&&((String)confTable.get(s) != null)) { - x = (String)confTable.get(s); - } else { - util.dprintln(4, "trytoGetInitParam(string) failed on param "+s); - } - return x; - } }
--- a/servlet/src/digilib/servlet/Texter.java Fri Nov 21 00:11:18 2003 +0100 +++ b/servlet/src/digilib/servlet/Texter.java Fri Nov 21 00:17:31 2003 +0100 @@ -22,7 +22,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import digilib.Utils; +import org.apache.log4j.Logger; + import digilib.auth.AuthOps; import digilib.io.DocuDirCache; import digilib.io.FileOpException; @@ -39,11 +40,11 @@ public class Texter extends HttpServlet { /** Servlet version */ - public static String tlVersion = "0.1a2"; + public static String tlVersion = "0.1a3"; /** DigilibConfiguration instance */ DigilibConfiguration dlConfig = null; - /** Utils instance with debuglevel */ - Utils util; + /** general logger */ + Logger logger = Logger.getLogger("digilib.texter"); /** FileOps instance */ FileOps fileOp; /** AuthOps instance */ @@ -63,10 +64,10 @@ super.init(config); System.out.println( - "***** Digital Image Library Text Servlet (version " + "***** Digital Image Library Text Servlet (version " + tlVersion + ") *****"); - + // get our ServletContext ServletContext context = config.getServletContext(); // see if there is a Configuration instance @@ -82,15 +83,15 @@ throw new ServletException(e); } } - // first we need an Utils - util = dlConfig.getUtil(); + // say hello in the log file + logger.info( + "***** Digital Image Library Text Servlet (version " + + tlVersion + + ") *****"); + // set our AuthOps useAuthentication = dlConfig.getAsBoolean("use-authorization"); authOp = (AuthOps) dlConfig.getValue("servlet.auth.op"); - // FileOps instance - fileOp = new FileOps(util); - // AuthOps instance - servletOp = new ServletOps(util); // DocuDirCache instance dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache"); } @@ -147,19 +148,19 @@ * find the file to load/send */ if (this.getTextFile(dlRequest, "/txt") != null) { - servletOp.sendFile( + ServletOps.sendFile( this.getTextFile(dlRequest, "txt").getFile(), - response); + null, response); } else if (this.getTextFile(dlRequest, "") != null) { - servletOp.sendFile( + ServletOps.sendFile( this.getTextFile(dlRequest, "").getFile(), - response); + null, response); } else { ServletOps.htmlMessage("No Text-File!", response); } } catch (FileOpException e) { - util.dprintln(1, "ERROR: File IO Error: " + e); + logger.error("ERROR: File IO Error: ", e); try { ServletOps.htmlMessage("ERROR: File IO Error: " + e, response); } catch (FileOpException ex) {