| // |
| // ======================================================================== |
| // Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd. |
| // ------------------------------------------------------------------------ |
| // All rights reserved. This program and the accompanying materials |
| // are made available under the terms of the Eclipse Public License v1.0 |
| // and Apache License v2.0 which accompanies this distribution. |
| // |
| // The Eclipse Public License is available at |
| // http://www.eclipse.org/legal/epl-v10.html |
| // |
| // The Apache License v2.0 is available at |
| // http://www.opensource.org/licenses/apache2.0.php |
| // |
| // You may elect to redistribute this code under either of these licenses. |
| // ======================================================================== |
| // |
| |
| package org.eclipse.jetty.example.asyncrest; |
| |
| import java.io.IOException; |
| import java.math.BigDecimal; |
| import java.math.RoundingMode; |
| import java.net.URLEncoder; |
| import java.util.Map; |
| import java.util.Queue; |
| |
| import javax.servlet.ServletConfig; |
| import javax.servlet.ServletException; |
| import javax.servlet.http.HttpServlet; |
| import javax.servlet.http.HttpServletRequest; |
| import javax.servlet.http.HttpServletResponse; |
| |
| /** |
| * Abstract Servlet implementation class AsyncRESTServlet. |
| * Enquires ebay REST service for auctions by key word. |
| * May be configured with init parameters: <dl> |
| * <dt>appid</dt><dd>The eBay application ID to use</dd> |
| * </dl> |
| * Each request examines the following request parameters:<dl> |
| * <dt>items</dt><dd>The keyword to search for</dd> |
| * </dl> |
| */ |
| public class AbstractRestServlet extends HttpServlet |
| { |
| protected final static String __DEFAULT_APPID = "Webtide81-adf4-4f0a-ad58-d91e41bbe85"; |
| protected final static String STYLE = |
| "<style type='text/css'>"+ |
| " img.thumb:hover {height:50px}"+ |
| " img.thumb {vertical-align:text-top}"+ |
| " span.red {color: #ff0000}"+ |
| " span.green {color: #00ff00}"+ |
| " iframe {border: 0px}"+ |
| "</style>"; |
| |
| protected final static String ITEMS_PARAM = "items"; |
| protected final static String APPID_PARAM = "appid"; |
| |
| protected String _appid; |
| |
| @Override |
| public void init(ServletConfig servletConfig) throws ServletException |
| { |
| if (servletConfig.getInitParameter(APPID_PARAM) == null) |
| _appid = __DEFAULT_APPID; |
| else |
| _appid = servletConfig.getInitParameter(APPID_PARAM); |
| } |
| |
| |
| public static String sanitize(String s) |
| { |
| if (s==null) |
| return null; |
| return s.replace("<","?").replace("&","?").replace("\n","?"); |
| } |
| |
| protected String restURL(String item) |
| { |
| try |
| { |
| return ("http://open.api.ebay.com/shopping?MaxEntries=3&appid=" + _appid + |
| "&version=573&siteid=0&callname=FindItems&responseencoding=JSON&QueryKeywords=" + |
| URLEncoder.encode(item,"UTF-8")); |
| } |
| catch(Exception e) |
| { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| protected String generateThumbs(Queue<Map<String,String>> results) |
| { |
| StringBuilder thumbs = new StringBuilder(); |
| for (Map<String, String> m : results) |
| { |
| if (!m.containsKey("GalleryURL")) |
| continue; |
| |
| thumbs.append("<a href=\""+m.get("ViewItemURLForNaturalSearch")+"\">"); |
| thumbs.append("<img class='thumb' border='1px' height='25px'"+ |
| " src='"+m.get("GalleryURL")+"'"+ |
| " title='"+m.get("Title")+"'"+ |
| "/>"); |
| thumbs.append("</a> "); |
| } |
| return thumbs.toString(); |
| } |
| |
| protected String ms(long nano) |
| { |
| BigDecimal dec = new BigDecimal(nano); |
| return dec.divide(new BigDecimal(1000000L)).setScale(1,RoundingMode.UP).toString(); |
| } |
| |
| protected int width(long nano) |
| { |
| int w=(int)((nano+999999L)/5000000L); |
| if (w==0) |
| w=2; |
| return w; |
| } |
| |
| protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException |
| { |
| doGet(request, response); |
| } |
| |
| } |