Subversion Repositories SmartDukaan

Rev

Rev 2669 | Rev 2772 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.web;

import java.io.IOException;
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.PreparedQuery;
import com.google.appengine.api.datastore.Query;

public class ShowCompareProducts extends HttpServlet {
    private static final long serialVersionUID = -8236918415987438049L;

    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
        resp.setContentType("application/json");
        
        DatastoreService datastore = DatastoreServiceFactory
                .getDatastoreService();

        Query q = new Query("DataLog");
        q.addFilter("eventType", Query.FilterOperator.EQUAL, "PRODUCT_COMPARE");
        
        PreparedQuery pq = datastore.prepare(q);
        Map<Long, Map<Long, Long>> comparisonStats = new HashMap<Long, Map<Long, Long>>();
        
        try {
            for (Entity result : pq.asIterable()) {
                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);
                                        }
                                }
                        }
                }
            }
            
            JSONObject comparisonStatsJson = new JSONObject(comparisonStats);
            resp.getWriter().println(comparisonStatsJson);
                
        } catch (IOException e) {
            System.out.println("Unable to write at output stream");
        }
    }
    
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
        doPost(req, resp);
    }
}