1   //========================================================================
2   //Copyright 2004-2008 Mort Bay Consulting Pty. Ltd.
3   //------------------------------------------------------------------------
4   //Licensed under the Apache License, Version 2.0 (the "License");
5   //you may not use this file except in compliance with the License.
6   //You may obtain a copy of the License at 
7   //http://www.apache.org/licenses/LICENSE-2.0
8   //Unless required by applicable law or agreed to in writing, software
9   //distributed under the License is distributed on an "AS IS" BASIS,
10  //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11  //See the License for the specific language governing permissions and
12  //limitations under the License.
13  //========================================================================
14  
15  package org.mortbay.demo;
16  
17  import java.io.BufferedReader;
18  import java.io.IOException;
19  import java.io.InputStreamReader;
20  import java.io.PrintWriter;
21  import java.net.HttpURLConnection;
22  import java.net.URI;
23  import java.net.URISyntaxException;
24  import java.net.URL;
25  import java.net.URLEncoder;
26  import java.util.ArrayList;
27  import java.util.HashMap;
28  import java.util.List;
29  import java.util.Map;
30  import java.util.StringTokenizer;
31  
32  import javax.servlet.ServletConfig;
33  import javax.servlet.ServletException;
34  import javax.servlet.http.HttpServlet;
35  import javax.servlet.http.HttpServletRequest;
36  import javax.servlet.http.HttpServletResponse;
37  
38  import org.mortbay.util.ajax.JSON;
39  
40  /**
41   * Servlet implementation class SerialRestServlet
42   */
43  public class SerialRestServlet extends HttpServlet
44  {
45      private final static String __DEFAULT_APPID = "Webtide81-adf4-4f0a-ad58-d91e41bbe85";
46      
47      final static String ITEMS_PARAM="items";
48      final static String APPID_PARAM="appid";
49          
50      private String _appid;
51  
52      public void init(ServletConfig servletConfig) throws ServletException
53      {
54          if (servletConfig.getInitParameter(APPID_PARAM)==null)
55              _appid = __DEFAULT_APPID;
56          else
57              _appid=servletConfig.getInitParameter(APPID_PARAM);
58          
59      }
60      
61      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
62      {
63          long start = System.currentTimeMillis();
64          
65          String searchParameters = request.getParameter(ITEMS_PARAM);
66          List<String> itemTokens = new ArrayList<String>();
67  
68          if (searchParameters == null)
69          {
70              response.setContentType("text/html");
71              PrintWriter out = response.getWriter();
72  
73              out.println("<HTML><BODY>pass in url with ?items=a,b,c,d<br/>for more dramatic results run multiple times with 10 or more items</BODY></HTML>");
74              out.close();
75  
76          }
77          else
78          {
79              StringTokenizer strtok = new StringTokenizer( (String)searchParameters, ",");
80  
81              while ( strtok.hasMoreTokens() )
82              {
83                  itemTokens.add( URLEncoder.encode(strtok.nextToken(), "UTF-8") );
84              }
85          }
86  
87          
88          List list = new ArrayList();        
89          // make all requests serially
90          for (String itemName : itemTokens)
91          {
92              URL url = new URL("http://open.api.ebay.com/shopping?MaxEntries=5&appid="+_appid+"&version=573&siteid=0&callname=FindItems&responseencoding=JSON&QueryKeywords=" + itemName);
93              
94              HttpURLConnection connection = (HttpURLConnection)url.openConnection();
95              connection.setRequestMethod("GET");
96              
97              Map query = (Map)JSON.parse(new BufferedReader(new InputStreamReader(connection.getInputStream())));
98              
99              Object[] itemsArray = (Object[])query.get("Item");
100             
101             if (itemsArray==null)
102             {
103                 Map<String, String> m = new HashMap<String, String>();
104 
105                 m.put("Title", "\"" + itemName + "\" not found!");
106                 list.add(m);
107             }
108             else
109             {
110                 List items = new ArrayList();
111                 for (Object o : (Object[])query.get("Item"))
112                     list.add((Map)o);
113             }
114         }
115         
116 
117         response.setContentType("text/html");
118         PrintWriter out=response.getWriter();
119         out.println("<html><head><style type='text/css'>img:hover {height:75px}</style></head><body><small>");
120 
121         
122         for (Map m : (List<Map>)list)
123         {
124             out.print("<a href=\""+m.get("ViewItemURLForNaturalSearch")+"\">");
125             if (m.containsKey("GalleryURL"))
126                 out.print("<img border='1px' height='20px' src=\""+m.get("GalleryURL")+"\"/>&nbsp;");
127             
128             out.print(m.get("Title"));
129             out.println("</a><br/>");
130         }
131 
132         out.println("<hr />");
133         out.print( "Total Time: ");
134         long duration=System.currentTimeMillis()-start;
135         out.print( duration );
136         out.println( "ms<br/>");
137         out.print( "Thread held: ");
138         out.print( duration );
139         out.println( "ms");
140         
141         out.println("</small></body></html>" );
142         out.close();   
143         
144         
145 
146     }
147 
148     /**
149      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
150      *      response)
151      */
152     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
153     {
154         doGet(request, response);
155     }
156 
157 }