Rev 5159 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package in.shop2020.web;import in.shop2020.model.ComparisonStats;import in.shop2020.server.ComparisonStatsRepository;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.json.JSONObject;import com.google.appengine.api.datastore.DatastoreService;import com.google.appengine.api.datastore.DatastoreServiceFactory;import com.google.appengine.api.datastore.Entity;import com.google.appengine.api.datastore.FetchOptions;import com.google.appengine.api.datastore.PreparedQuery;import com.google.appengine.api.datastore.Query;import com.google.appengine.api.datastore.Text;public class DailyComparisonStatsGenerator extends HttpServlet {private static final long serialVersionUID = -8236918415987438049L;public void doPost(HttpServletRequest req, HttpServletResponse resp) {resp.setContentType("application/json");DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();Calendar cal = Calendar.getInstance();Date toDate = cal.getTime();cal.add(Calendar.DAY_OF_MONTH, -15);Date fromDate = cal.getTime();Query q = new Query("DataLog");q.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_COMPARE");q.addFilter("date", Query.FilterOperator.GREATER_THAN_OR_EQUAL, fromDate);q.addFilter("date", Query.FilterOperator.LESS_THAN_OR_EQUAL, toDate);PreparedQuery pq = datastore.prepare(q);Map<Long, Map<Long, Long>> comparisonStats = new HashMap<Long, Map<Long, Long>>();List<Entity> results = new ArrayList<Entity>();for (Entity result : pq.asIterable(FetchOptions.Builder.withPrefetchSize(500).chunkSize(500))) {// results.add(result);// }//// for (Entity result : results) {List<Long> itemIds;try{itemIds = (List<Long>) result.getProperty("itemIds");}catch (ClassCastException ce) {System.out.println("Unable to cast itemIds to List");continue;}if(itemIds != null && !itemIds.isEmpty()){for(int i=0; i<itemIds.size(); i++){for(int j=0; j<i; j++){Long itemOne = itemIds.get(i);Long itemTwo = itemIds.get(j);Map<Long, Long> comparedItems;comparedItems = comparisonStats.get(itemOne);if(comparedItems==null){comparedItems = new HashMap<Long, Long>();comparisonStats.put(itemOne, comparedItems);}if(comparedItems.containsKey(itemTwo)){comparedItems.put(itemTwo, comparedItems.get(itemTwo)+1);}else{comparedItems.put(itemTwo, 1L);}comparedItems = comparisonStats.get(itemTwo);if(comparedItems==null){comparedItems = new HashMap<Long, Long>();comparisonStats.put(itemTwo, comparedItems);}if(comparedItems.containsKey(itemOne)){comparedItems.put(itemOne, comparedItems.get(itemOne)+1);}else{comparedItems.put(itemOne, 1L);}}}}}SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");String id = sdf.format(toDate);JSONObject comparisonStatsJSON = new JSONObject(comparisonStats);ComparisonStats compStats = new ComparisonStats();compStats.setId(id);compStats.setComparisonStatsJSON(new Text(comparisonStatsJSON.toString()));ComparisonStatsRepository repo = new ComparisonStatsRepository();repo.store(compStats);}public void doGet(HttpServletRequest req, HttpServletResponse resp) {doPost(req, resp);}}