Subversion Repositories SmartDukaan

Rev

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);
    }
}