diff servlet2/src/main/java/digilib/servlet/Texter.java @ 903:7779b37d1d05

refactored into maven modules per servlet type. can build servlet-api 2.3 and 3.0 via profile now!
author robcast
date Tue, 26 Apr 2011 20:24:31 +0200
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servlet2/src/main/java/digilib/servlet/Texter.java	Tue Apr 26 20:24:31 2011 +0200
@@ -0,0 +1,189 @@
+/* Texter.java -- Servlet for displaying text  
+ * 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.servlet;
+
+import java.io.IOException;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.log4j.Logger;
+
+import digilib.auth.AuthOps;
+import digilib.image.ImageOpException;
+import digilib.io.DocuDirCache;
+import digilib.io.FileOps;
+import digilib.io.FileOps.FileClass;
+import digilib.io.TextFile;
+
+/**
+ * Servlet for displaying text
+ * 
+ * 
+ * @author casties
+ *  
+ */
+public class Texter extends HttpServlet {
+
+    private static final long serialVersionUID = 6678666342141409867L;
+
+    /** Servlet version */
+	public static String tlVersion = "0.1b3";
+
+	/** DigilibConfiguration instance */
+	DigilibServletConfiguration dlConfig = null;
+
+	/** general logger */
+	Logger logger = Logger.getLogger("digilib.texter");
+
+    /** logger for accounting requests */
+    protected static Logger accountlog = Logger.getLogger("account.texter.request");
+
+	/** FileOps instance */
+	FileOps fileOp;
+
+	/** AuthOps instance */
+	AuthOps authOp;
+
+	/** ServletOps instance */
+	ServletOps servletOp;
+
+	/** DocuDirCache instance */
+	DocuDirCache dirCache;
+
+	/** use authentication */
+	boolean useAuthentication = false;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
+	 */
+	public void init(ServletConfig config) throws ServletException {
+		super.init(config);
+
+		System.out.println("***** Digital Image Library Text Servlet (version "
+				+ tlVersion + ") *****");
+
+		// get our ServletContext
+		ServletContext context = config.getServletContext();
+		// see if there is a Configuration instance
+		dlConfig = (DigilibServletConfiguration) context
+				.getAttribute("digilib.servlet.configuration");
+		if (dlConfig == null) {
+			// no Configuration
+			throw new ServletException("No Configuration!");
+		}
+		// 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");
+		// DocuDirCache instance
+		dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
+	 *      javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doGet(HttpServletRequest request,
+			HttpServletResponse response) throws ServletException, IOException {
+        accountlog.info("GET from " + request.getRemoteAddr());
+		// do the processing
+		processRequest(request, response);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest,
+	 *      javax.servlet.http.HttpServletResponse)
+	 */
+	protected void doPost(HttpServletRequest request,
+			HttpServletResponse response) throws ServletException, IOException {
+        accountlog.info("POST from " + request.getRemoteAddr());
+		// do the processing
+		processRequest(request, response);
+	}
+
+	protected void processRequest(HttpServletRequest request,
+			HttpServletResponse response) {
+		
+		/*
+		 * request parameters
+		 */
+        // create new request with defaults
+        DigilibServletRequest dlRequest = new DigilibServletRequest(request);
+		try {
+			
+			/*
+			 * find the file to load/send
+			 */
+			TextFile f = getTextFile(dlRequest, "/txt");
+			if (f != null) {
+				ServletOps.sendFile(f.getFile(), null, null, response, logger);
+			} else {
+				f = getTextFile(dlRequest, "");
+				if (f != null) {
+					ServletOps.sendFile(f.getFile(), null, null, response, logger);
+				} else {
+					response.sendError(HttpServletResponse.SC_NOT_FOUND, "Text-File not found!");
+					//ServletOps.htmlMessage("No Text-File!", response);
+				}
+			}
+			
+		} catch (ImageOpException e) {
+            // most likely wrong file format...
+            logger.error("ERROR sending text file: ", e);
+            try {
+                response.sendError(HttpServletResponse.SC_BAD_REQUEST);
+            } catch (IOException e1) {
+                logger.error("ERROR sending error: ", e1);
+            }
+        } catch (IOException e) {
+            logger.error("ERROR sending text file: ", e);
+        }
+    }
+	
+
+	/**
+	 * Looks for a file in the given subDirectory.
+	 * 
+	 * @param dlRequest
+	 *            The received request which has the file path.
+	 * @param subDirectory
+	 *            The subDirectory of the file path where the file should
+	 *            be found.
+	 * @return The wanted Textfile or null if there wasn't a file.
+	 */
+
+	private TextFile getTextFile(DigilibServletRequest dlRequest, String subDirectory) {
+		String loadPathName = dlRequest.getFilePath() + subDirectory;
+		// find the file(set)
+		return (TextFile) dirCache.getFile(loadPathName, dlRequest.getAsInt("pn"), 
+		        FileClass.TEXT);
+	}
+}
\ No newline at end of file