Usar uma aplicação do google em minha aplicação

0 respostas
Naruto

Bom dia, pessoal, o google tem um projeto chamado zxing, e preciso usar uma funcionalidade dele em minha aplicação porem não sei como fazer isso.

é o seguinte a abaixo segue o código fonte do google

package com.google.zxing.web; 
  
 import com.google.zxing.BarcodeFormat; 
 import com.google.zxing.BinaryBitmap; 
 import com.google.zxing.ChecksumException; 
 import com.google.zxing.DecodeHintType; 
 import com.google.zxing.FormatException; 
 import com.google.zxing.LuminanceSource; 
 import com.google.zxing.MultiFormatReader; 
 import com.google.zxing.NotFoundException; 
 import com.google.zxing.Reader; 
 import com.google.zxing.ReaderException; 
 import com.google.zxing.Result; 
 import com.google.zxing.client.j2se.BufferedImageLuminanceSource; 
 import com.google.zxing.common.GlobalHistogramBinarizer; 
 import com.google.zxing.common.HybridBinarizer; 
  
 import com.google.zxing.multi.GenericMultipleBarcodeReader; 
 import com.google.zxing.multi.MultipleBarcodeReader; 
 import org.apache.commons.fileupload.FileItem; 
 import org.apache.commons.fileupload.FileUploadException; 
 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
 import org.apache.commons.fileupload.servlet.ServletFileUpload; 
 import org.apache.http.Header; 
 import org.apache.http.HttpMessage; 
 import org.apache.http.HttpResponse; 
 import org.apache.http.HttpVersion; 
 import org.apache.http.HttpEntity; 
 import org.apache.http.client.HttpClient; 
 import org.apache.http.client.methods.HttpGet; 
 import org.apache.http.client.methods.HttpUriRequest; 
 import org.apache.http.conn.scheme.PlainSocketFactory; 
 import org.apache.http.conn.scheme.Scheme; 
 import org.apache.http.conn.scheme.SchemeRegistry; 
 import org.apache.http.conn.ssl.SSLSocketFactory; 
 import org.apache.http.conn.ClientConnectionManager; 
 import org.apache.http.impl.client.DefaultHttpClient; 
 import org.apache.http.impl.conn.SingleClientConnManager; 
 import org.apache.http.params.BasicHttpParams; 
 import org.apache.http.params.HttpParams; 
 import org.apache.http.params.HttpProtocolParams; 
  
 import java.awt.color.CMMException; 
 import java.awt.image.BufferedImage; 
 import java.io.IOException; 
 import java.io.InputStream; 
 import java.io.OutputStreamWriter; 
 import java.io.Writer; 
 import java.net.URI; 
 import java.net.URISyntaxException; 
 import java.util.ArrayList; 
 import java.util.Arrays; 
 import java.util.Collection; 
 import java.util.Hashtable; 
 import java.util.List; 
 import java.util.Vector; 
 import java.util.logging.Logger; 
  
 import javax.imageio.ImageIO; 
 import javax.servlet.ServletConfig; 
 import javax.servlet.ServletException; 
 import javax.servlet.ServletRequest; 
 import javax.servlet.http.HttpServlet; 
 import javax.servlet.http.HttpServletRequest; 
 import javax.servlet.http.HttpServletResponse; 
  
 /** 
  * {@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 
  */ 
 public final class DecodeServlet extends HttpServlet { 
  
   // No real reason to let people upload more than a 2MB image 
   private static final long MAX_IMAGE_SIZE = 2000000L; 
   // No real reason to deal with more than maybe 2 megapixels 
   private static final int MAX_PIXELS = 1 << 21; 
  
   private static final Logger log = Logger.getLogger(DecodeServlet.class.getName()); 
  
   static final Hashtable<DecodeHintType, Object> HINTS; 
   static final Hashtable<DecodeHintType, Object> HINTS_PURE; 
  
   static { 
     HINTS = new Hashtable<DecodeHintType, Object>(5); 
     HINTS.put(DecodeHintType.TRY_HARDER, Boolean.TRUE); 
     Collection<BarcodeFormat> possibleFormats = new Vector<BarcodeFormat>(); 
     possibleFormats.add(BarcodeFormat.UPC_A); 
     possibleFormats.add(BarcodeFormat.UPC_E); 
     possibleFormats.add(BarcodeFormat.EAN_8); 
     possibleFormats.add(BarcodeFormat.EAN_13); 
     possibleFormats.add(BarcodeFormat.CODE_39); 
     possibleFormats.add(BarcodeFormat.CODE_128); 
     possibleFormats.add(BarcodeFormat.ITF); 
     possibleFormats.add(BarcodeFormat.RSS14);     
     possibleFormats.add(BarcodeFormat.QR_CODE); 
     possibleFormats.add(BarcodeFormat.DATAMATRIX); 
     possibleFormats.add(BarcodeFormat.PDF417); 
     HINTS.put(DecodeHintType.POSSIBLE_FORMATS, possibleFormats); 
     HINTS_PURE = new Hashtable<DecodeHintType, Object>(HINTS); 
     HINTS_PURE.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE); 
   } 
  
   private HttpParams params; 
   private SchemeRegistry registry; 
   private DiskFileItemFactory diskFileItemFactory; 
  
   @Override 
   public void init(ServletConfig servletConfig) { 
  
     Logger logger = Logger.getLogger("com.google.zxing"); 
     logger.addHandler(new ServletContextLogHandler(servletConfig.getServletContext())); 
  
     params = new BasicHttpParams(); 
     HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); 
  
     registry = new SchemeRegistry(); 
     registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
     registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443)); 
  
     diskFileItemFactory = new DiskFileItemFactory(); 
  
     log.info("DecodeServlet configured"); 
   } 
  
   @Override 
   protected void doGet(HttpServletRequest request, HttpServletResponse response) 
       throws ServletException, IOException { 
     String imageURIString = request.getParameter("u"); 
     if (imageURIString == null || imageURIString.length() == 0) { 
       log.fine("URI was empty"); 
       response.sendRedirect("badurl.jspx"); 
       return; 
     } 
  
     imageURIString = imageURIString.trim(); 
  
     if (!(imageURIString.startsWith("http://") || imageURIString.startsWith("https://"))) { 
       imageURIString = "http://" + imageURIString; 
     } 
  
     URI imageURI; 
     try { 
       imageURI = new URI(imageURIString); 
     } catch (URISyntaxException urise) { 
       log.fine("URI was not valid: " + imageURIString); 
       response.sendRedirect("badurl.jspx"); 
       return; 
     } 
  
     ClientConnectionManager connectionManager = new SingleClientConnManager(params, registry); 
     HttpClient client = new DefaultHttpClient(connectionManager, params); 
  
     HttpUriRequest getRequest = new HttpGet(imageURI); 
     getRequest.addHeader("Connection", "close"); // Avoids CLOSE_WAIT socket issue? 
  
     try { 
  
       HttpResponse getResponse; 
       try { 
         getResponse = client.execute(getRequest); 
       } catch (IllegalArgumentException iae) { 
         // Thrown if hostname is bad or null 
         log.fine(iae.toString()); 
         getRequest.abort(); 
         response.sendRedirect("badurl.jspx"); 
         return; 
       } catch (IOException ioe) { 
         // Encompasses lots of stuff, including 
         //  java.net.SocketException, java.net.UnknownHostException, 
         //  javax.net.ssl.SSLPeerUnverifiedException, 
         //  org.apache.http.NoHttpResponseException, 
         //  org.apache.http.client.ClientProtocolException, 
         log.fine(ioe.toString()); 
         getRequest.abort(); 
         response.sendRedirect("badurl.jspx"); 
         return; 
       } 
  
       if (getResponse.getStatusLine().getStatusCode() != HttpServletResponse.SC_OK) { 
         log.fine("Unsuccessful return code: " + getResponse.getStatusLine().getStatusCode()); 
         response.sendRedirect("badurl.jspx"); 
         return; 
       } 
       if (!isSizeOK(getResponse)) { 
         log.fine("Too large"); 
         response.sendRedirect("badimage.jspx"); 
         return; 
       } 
  
       log.info("Decoding " + imageURI); 
       HttpEntity entity = getResponse.getEntity(); 
       InputStream is = entity.getContent(); 
       try { 
         processStream(is, request, response); 
       } finally { 
         entity.consumeContent(); 
         is.close(); 
       } 
  
     } finally { 
       connectionManager.shutdown(); 
     } 
  
   } 
  
   @Override 
   protected void doPost(HttpServletRequest request, HttpServletResponse response) 
           throws ServletException, IOException { 
  
     if (!ServletFileUpload.isMultipartContent(request)) { 
       log.fine("File upload was not multipart"); 
       response.sendRedirect("badimage.jspx"); 
       return; 
     } 
  
     ServletFileUpload upload = new ServletFileUpload(diskFileItemFactory); 
     upload.setFileSizeMax(MAX_IMAGE_SIZE); 
  
     // Parse the request 
     try { 
       for (FileItem item : (List<FileItem>) upload.parseRequest(request)) { 
         if (!item.isFormField()) { 
           if (item.getSize() <= MAX_IMAGE_SIZE) { 
             log.info("Decoding uploaded file"); 
             InputStream is = item.getInputStream(); 
             try { 
               processStream(is, request, response); 
             } finally { 
               is.close(); 
             } 
           } else { 
             log.fine("Too large"); 
             response.sendRedirect("badimage.jspx"); 
           } 
           break; 
         } 
       } 
     } catch (FileUploadException fue) { 
       log.fine(fue.toString()); 
       response.sendRedirect("badimage.jspx"); 
     } 
  
   } 
  
   private static void processStream(InputStream is, ServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
  
     BufferedImage image; 
     try { 
       image = ImageIO.read(is); 
     } catch (IOException ioe) { 
       log.fine(ioe.toString()); 
       // Includes javax.imageio.IIOException 
       response.sendRedirect("badimage.jspx"); 
       return; 
     } catch (CMMException cmme) { 
       log.fine(cmme.toString()); 
       // Have seen this in logs 
       response.sendRedirect("badimage.jspx"); 
       return; 
     } catch (IllegalArgumentException iae) { 
       log.fine(iae.toString()); 
       // Have seen this in logs for some JPEGs 
       response.sendRedirect("badimage.jspx"); 
       return; 
     } 
     if (image == null) { 
       response.sendRedirect("badimage.jspx"); 
       return;       
     } 
     if (image.getHeight() <= 1 || image.getWidth() <= 1 || 
         image.getHeight() * image.getWidth() > MAX_PIXELS) { 
       log.fine("Dimensions too large: " + image.getWidth() + 'x' + image.getHeight());         
       response.sendRedirect("badimage.jspx"); 
       return; 
     } 
  
     Reader reader = new MultiFormatReader(); 
     LuminanceSource source = new BufferedImageLuminanceSource(image); 
     BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source)); 
     Collection<Result> results = new ArrayList<Result>(1); 
     ReaderException savedException = null; 
  
     try { 
       // Look for multiple barcodes 
       MultipleBarcodeReader multiReader = new GenericMultipleBarcodeReader(reader); 
       Result[] theResults = multiReader.decodeMultiple(bitmap, HINTS); 
       if (theResults != null) { 
         results.addAll(Arrays.asList(theResults)); 
       } 
     } catch (ReaderException re) { 
       savedException = re; 
     } 
  
     if (results.isEmpty()) { 
       try { 
         // Look for pure barcode 
         Result theResult = reader.decode(bitmap, HINTS_PURE); 
         if (theResult != null) { 
           results.add(theResult); 
         } 
       } catch (ReaderException re) { 
         savedException = re; 
       } 
     } 
  
     if (results.isEmpty()) { 
       try { 
         // Look for normal barcode in photo 
         Result theResult = reader.decode(bitmap, HINTS); 
         if (theResult != null) { 
           results.add(theResult); 
         } 
       } catch (ReaderException re) { 
         savedException = re; 
       } 
     } 
  
     if (results.isEmpty()) { 
       try { 
         // Try again with other binarizer 
         BinaryBitmap hybridBitmap = new BinaryBitmap(new HybridBinarizer(source)); 
         Result theResult = reader.decode(hybridBitmap, HINTS); 
         if (theResult != null) { 
           results.add(theResult); 
         } 
       } catch (ReaderException re) { 
         savedException = re; 
       } 
     } 
  
     if (results.isEmpty()) { 
       handleException(savedException, response); 
       return; 
     } 
  
     if (request.getParameter("full") == null) { 
       response.setContentType("text/plain"); 
       response.setCharacterEncoding("UTF8"); 
       Writer out = new OutputStreamWriter(response.getOutputStream(), "UTF8"); 
       try { 
         for (Result result : results) { 
           out.write(result.getText()); 
           out.write('\n'); 
         } 
       } finally { 
         out.close(); 
       } 
     } else { 
       request.setAttribute("results", results); 
       request.getRequestDispatcher("decoderesult.jspx").forward(request, response); 
     } 
   } 
  
   private static void handleException(ReaderException re, HttpServletResponse response) throws IOException { 
     if (re instanceof NotFoundException) { 
       log.info("Not found: " + re); 
       response.sendRedirect("notfound.jspx"); 
     } else if (re instanceof FormatException) { 
       log.info("Format problem: " + re); 
       response.sendRedirect("format.jspx"); 
     } else if (re instanceof ChecksumException) { 
       log.info("Checksum problem: " + re); 
       response.sendRedirect("format.jspx"); 
     } else { 
       log.info("Unknown problem: " + re); 
       response.sendRedirect("notfound.jspx"); 
     } 
   } 
  
   private static boolean isSizeOK(HttpMessage getResponse) { 
     Header lengthHeader = getResponse.getLastHeader("Content-Length"); 
     if (lengthHeader != null) { 
       long length = Long.parseLong(lengthHeader.getValue()); 
       if (length > MAX_IMAGE_SIZE) { 
         return false; 
       } 
     } 
     return true; 
   } 
  
   @Override 
   public void destroy() { 
     log.config("DecodeServlet shutting down..."); 
   } 
  
 }

e tem algumas paginas jspx mais a principal é esta decode.jspx

<?xml version="1.0" encoding="UTF-8"?> <!--  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.  You may obtain a copy of the License at        http://www.apache.org/licenses/LICENSE-2.0   Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.  --> <!-- Author: Sean Owen --> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="1.2"> <jsp:directive.page contentType="text/html" session="false"/> <jsp:scriptlet>response.setHeader("Cache-Control", "public");</jsp:scriptlet> <jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">]]></jsp:text> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">   <head>     <title>ZXing Decoder Online</title>     <link rel="stylesheet" href="style.css" type="text/css"/>   </head>   <body>     <div id="header"><h1><img src="zxing-icon.png" height="32" width="32" alt=""/> ZXing Decoder Online</h1></div>     <p>This is a simple page that will let you decode a 1D or 2D barcode found       in an image online. Enter a URL below.     </p>     <form action="decode" method="get">       <p>         <input type="text" size="50" name="u"/>&amp;nbsp;<input type="submit"/>         <input type="hidden" name="full" value="true"/>       </p>     </form>     <p>Or try uploading a file:</p>     <form action="decode" method="post" enctype="multipart/form-data">       <p>         <input type="file" size="50" name="f"/>&amp;nbsp;<input type="submit"/>         <input type="hidden" name="full" value="true"/>       </p>     </form>     <p>See the       <a href="http://code.google.com/p/zxing">project page</a>       for details.     </p>     <div id="footer"><p>Copyright 2008 and onwards ZXing authors</p></div>     <jsp:include page="analytics.jspx"/>   </body> </html> </jsp:root>

como faço para utilizar em uma aplicação JSF ???

Criado 26 de maio de 2010
Respostas 0
Participantes 1