Minor change to standardize on more canonical "UTF8" name for encoding in Java
[zxing.git] / zxingorg / src / com / google / zxing / web / DecodeServlet.java
index 7c69cc5..e60536c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2008 Google Inc.
+ * Copyright 2008 ZXing authors
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -22,6 +22,8 @@ import com.google.zxing.Reader;
 import com.google.zxing.ReaderException;
 import com.google.zxing.Result;
 import com.google.zxing.client.j2se.BufferedImageMonochromeBitmapSource;
+import com.google.zxing.client.result.ParsedResult;
+import com.google.zxing.client.result.ResultParser;
 import org.apache.commons.fileupload.FileItem;
 import org.apache.commons.fileupload.FileUploadException;
 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
@@ -57,18 +59,23 @@ import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.net.UnknownHostException;
+import java.util.Arrays;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Timer;
 import java.util.logging.Logger;
 
 /**
- * @author Sean Owen
+ * {@link HttpServlet} which decodes images containing barcodes. Given a URL, it will
+ * retrieve the image and decode it. It can also process image files uploaded via POST.
+ * 
+ * @author Sean Owen (srowen@google.com)
  */
 public final class DecodeServlet extends HttpServlet {
 
   private static final long MAX_IMAGE_SIZE = 500000L;
-  private static final long EMAIL_CHECK_INTERVAL = 60000L;
+  private static final long EMAIL_CHECK_INTERVAL = 2L * 60 * 1000;
 
   private static final Logger log = Logger.getLogger(DecodeServlet.class.getName());
 
@@ -114,7 +121,7 @@ public final class DecodeServlet extends HttpServlet {
   }
 
   @Override
-  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
     String imageURIString = request.getParameter("u");
     if (imageURIString == null || imageURIString.length() == 0) {
@@ -149,7 +156,7 @@ public final class DecodeServlet extends HttpServlet {
       log.info("Decoding " + imageURI);
       InputStream is = getResponse.getEntity().getContent();
       try {
-        processStream(is, response);
+        processStream(is, request, response);
       } finally {
         is.close();
       }
@@ -159,6 +166,9 @@ public final class DecodeServlet extends HttpServlet {
     } catch (HttpException he) {
       getRequest.abort();
       response.sendRedirect("badurl.jspx");
+    } catch (UnknownHostException uhe) {
+      getRequest.abort();
+      response.sendRedirect("badurl.jspx");
     }
 
   }
@@ -183,12 +193,12 @@ public final class DecodeServlet extends HttpServlet {
             log.info("Decoding uploaded file");
             InputStream is = item.getInputStream();
             try {
-              processStream(is, response);
+              processStream(is, request, response);
             } finally {
               is.close();
             }
           } else {
-            throw new ServletException("File is too large: " + item.getSize());
+            response.sendRedirect("badimage.jspx");
           }
           break;
         }
@@ -199,7 +209,8 @@ public final class DecodeServlet extends HttpServlet {
 
   }
 
-  private static void processStream(InputStream is, HttpServletResponse response) throws IOException {
+  private static void processStream(InputStream is, HttpServletRequest request, HttpServletResponse response)
+      throws ServletException, IOException {
     BufferedImage image = ImageIO.read(is);
     if (image == null) {
       response.sendRedirect("badimage.jspx");
@@ -216,13 +227,26 @@ public final class DecodeServlet extends HttpServlet {
       return;
     }
 
-    response.setContentType("text/plain");
-    response.setCharacterEncoding("UTF-8");
-    Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF-8");
-    try {
-      out.write(result.getText());
-    } finally {
-      out.close();
+    if (request.getParameter("full") == null) {
+      response.setContentType("text/plain");
+      response.setCharacterEncoding("UTF8");
+      Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF8");
+      try {
+        out.write(result.getText());
+      } finally {
+        out.close();
+      }
+    } else {
+      request.setAttribute("result", result);
+      byte[] rawBytes = result.getRawBytes();
+      if (rawBytes != null) {
+        request.setAttribute("rawBytesString", Arrays.toString(rawBytes));
+      } else {
+        request.setAttribute("rawBytesString", "(Not applicable)");
+      }
+      ParsedResult parsedResult = ResultParser.parseReaderResult(result);
+      request.setAttribute("parsedResult", parsedResult);
+      request.getRequestDispatcher("decoderesult.jspx").forward(request, response);
     }
   }