/[projects]/android/MarketStats/src/dk/thoerup/marketstats/ShowStats.java
ViewVC logotype

Annotation of /android/MarketStats/src/dk/thoerup/marketstats/ShowStats.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 957 - (hide annotations) (download)
Mon Jul 5 09:28:40 2010 UTC (13 years, 10 months ago) by torben
File size: 4767 byte(s)
Switch to servlet 3.0 annotations
1 torben 659 package dk.thoerup.marketstats;
2    
3     import java.io.IOException;
4     import java.net.InetSocketAddress;
5 torben 662 import java.util.ArrayList;
6 torben 659 import java.util.Locale;
7 torben 762 import java.util.concurrent.TimeUnit;
8 torben 659 import java.util.logging.Logger;
9    
10     import javax.servlet.ServletException;
11 torben 957 import javax.servlet.annotation.WebServlet;
12 torben 659 import javax.servlet.http.HttpServlet;
13     import javax.servlet.http.HttpServletRequest;
14     import javax.servlet.http.HttpServletResponse;
15    
16     import net.spy.memcached.MemcachedClient;
17    
18     import com.gc.android.market.api.MarketSession;
19     import com.gc.android.market.api.model.Market.AppsRequest;
20     import com.gc.android.market.api.model.Market.CommentsRequest;
21    
22    
23 torben 957 @WebServlet(urlPatterns={"/ShowStats"})
24 torben 659 public class ShowStats extends HttpServlet {
25     private static final long serialVersionUID = 1L;
26    
27 torben 950 static final int MAXCOMMENTS = 30;
28     static final int APP_TIMEOUT = 30*60;
29     static final int COMMENT_TIMEOUT = APP_TIMEOUT * 4;
30 torben 949
31 torben 659 static final Logger log = Logger.getLogger(ShowStats.class.getName());
32    
33     String login;
34     String password;
35 torben 667
36     MemcachedClient memcache = null;
37 torben 659
38    
39     @Override
40     public void init() throws ServletException {
41     super.init();
42    
43     login = getServletContext().getInitParameter("login");
44     password = getServletContext().getInitParameter("password");
45 torben 667
46     try {
47     memcache = new MemcachedClient(new InetSocketAddress("localhost", 11211));
48     } catch (IOException e) {
49     throw new ServletException(e);
50     }
51 torben 659 }
52    
53 torben 762 @Override
54     public void destroy() {
55     super.destroy();
56    
57     memcache.shutdown(3, TimeUnit.SECONDS);
58     memcache = null;
59     }
60    
61 torben 952 protected AppBean lookupApp(String query) throws IOException {
62 torben 667
63 torben 659
64 torben 759 String key = "marketstats:" + query.replace(' ', '_');
65 torben 950 //String response = (String) memcache.get(key);
66     AppBean response = (AppBean) memcache.get(key);
67 torben 659
68     if (response == null) {
69 torben 952 response = lookupAppWorker(query);
70 torben 950 if (response != null) {
71     memcache.set(key, APP_TIMEOUT, response);
72     }
73     }
74 torben 659 return response;
75     }
76 torben 952
77     protected AppBean lookupAppWorker(String query) {
78    
79     MarketSession session = new MarketSession();
80     session.login(login,password);
81    
82    
83     AppsRequest appsRequest = AppsRequest.newBuilder()
84     .setQuery(query)
85     .setStartIndex(0)
86     .setEntriesCount(1)
87     .setWithExtendedInfo(true)
88     .build();
89    
90     AppsCallback appsCb = new AppsCallback();
91     session.append(appsRequest, appsCb);
92     session.flush();
93    
94     return appsCb.getResult();
95     }
96 torben 663
97 torben 950 CommentsRequest buildCommentRequest(String appId, int start, int count) {
98     CommentsRequest commentsRequest = CommentsRequest.newBuilder()
99     .setAppId(appId)
100     .setStartIndex(start)
101     .setEntriesCount(count)
102     .build();
103    
104     return commentsRequest;
105     }
106    
107     private ArrayList<CommentBean> loadComments(String appId) {
108    
109     ArrayList<CommentBean> commentBeans = new ArrayList<CommentBean>();
110     MarketSession session = new MarketSession();
111     session.login(login,password);
112    
113 torben 663 CommentCallback commentsCb = new CommentCallback();
114     commentsCb.setList( commentBeans );
115 torben 659
116 torben 756 session.setLocale( Locale.ROOT );
117 torben 663
118    
119 torben 756
120 torben 663 int start = 0;
121     do {
122     int count = 10;
123     if (start > 0)
124     count = Math.min(10, commentsCb.getEntryCount() );
125    
126 torben 757 //log.warning("count=" + count + " start=" + start + " entryCount=" + commentsCb.getEntryCount() );
127 torben 950 CommentsRequest commentsRequest = buildCommentRequest(appId,start,count);
128     session.append(commentsRequest, commentsCb);
129     start +=10;
130 torben 663
131 torben 950 CommentsRequest commentsRequest2 = buildCommentRequest(appId,start,count);
132     session.append(commentsRequest2, commentsCb);
133 torben 663 session.flush();
134 torben 950
135 torben 663 start +=10;
136    
137 torben 949 if (start >= MAXCOMMENTS)
138 torben 663 break; //emergency brake
139    
140     } while ( start < commentsCb.getEntryCount() );
141 torben 950
142     return commentBeans;
143 torben 663 }
144 torben 659
145 torben 950
146 torben 705
147 torben 952 @SuppressWarnings("unchecked")
148 torben 950 public ArrayList<CommentBean> getComments(AppBean app) {
149     String key = "marketstats:comments:" + app.getId();
150     ArrayList<CommentBean> comments = (ArrayList<CommentBean>) memcache.get(key);
151 torben 662
152 torben 950 if (comments == null) {
153     comments = loadComments(app.getId());
154     memcache.set(key, COMMENT_TIMEOUT, comments);
155     }
156     return comments;
157 torben 659 }
158    
159     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
160 torben 705 String query = request.getParameter("query");
161 torben 950
162 torben 952 AppBean app = lookupApp(query);
163 torben 950 if (app != null) {
164     request.setAttribute("app", app);
165    
166     ArrayList<CommentBean> comments = getComments(app);
167     request.setAttribute("comments", comments);
168    
169     getServletContext().getRequestDispatcher("/statsview.jsp").forward(request, response);
170     } else {
171     response.getWriter().print("No app found with query=" + query);
172     }
173 torben 659 }
174    
175     }

  ViewVC Help
Powered by ViewVC 1.1.20