Subversion Repositories SmartDukaan

Rev

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

package in.shop2020.web;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONArray;
import org.json.JSONException;
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;

public class AddDataLogServlet extends HttpServlet {
    private static final long serialVersionUID = -8236918415987438049L;
    public static final List<String> indexedPropertyList =
        Arrays.asList("date","eventType","sessionId","query","itemId","itemIds","email","shortdate");

    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
        Entity entity = new Entity("DataLog");
        entity.setUnindexedProperty("logTime", new Date());
        
        setTime(req, entity);
        setEventType(req, entity);
        setSessionId(req, entity);
        setUserId(req, entity);
        setEmail(req, entity);
        setLogData(req, entity);
        
        DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
        ds.put(entity);
    }
    
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
        doPost(req, resp);
    }

    private void setTime(HttpServletRequest req, Entity entity) {
        Date date = new Date(Long.valueOf(req.getParameter("time")));
        entity.setProperty("date", date);
        
        Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("IST"));
        cal.setTime(date);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);  
        cal.set(Calendar.SECOND, 0);  
        cal.set(Calendar.MILLISECOND, 0);
        entity.setProperty("shortdate", cal.getTime());
    }
    
    private void setEventType(HttpServletRequest req, Entity entity) {
        entity.setProperty("eventType", req.getParameter("eventType"));
    }

    private void setSessionId(HttpServletRequest req, Entity entity) {
        entity.setProperty("sessionId", req.getParameter("sessionId"));
    }

    private void setUserId(HttpServletRequest req, Entity entity) {
        Integer userId = 0;
        try {
            userId = Integer.valueOf(req.getParameter("userId"));
        }
        catch (NumberFormatException e) {
        }
        entity.setProperty("userId", userId);
    }

    private void setEmail(HttpServletRequest req, Entity entity) {
        entity.setProperty("email", req.getParameter("email"));
    }
    
    private void setLogData(HttpServletRequest req, Entity entity) {
        try {
            String jsonLogData = req.getParameter("jsonLogData");
            if (jsonLogData == null) {
                return;
            }
            JSONObject logDataJson = new JSONObject(req.getParameter("jsonLogData"));
            for (String key : JSONObject.getNames(logDataJson)) {
                if (key.endsWith("_long_list")) {
                    JSONArray vals = logDataJson.getJSONArray(key);
                    List<Long> lVals = new ArrayList<Long>();
                    for (int i = 0; i<vals.length(); i++) {
                        lVals.add(vals.getLong(i));
                    }
                    if(!indexedPropertyList.contains(key.replace("_long_list", ""))){
                        entity.setUnindexedProperty(key.replace("_long_list", ""), lVals);
                    }else {
                        entity.setProperty(key.replace("_long_list", ""), lVals);
                    }
                } else if (key.endsWith("_long")) {
                        if(!indexedPropertyList.contains(key.replace("_long", ""))){
                                entity.setUnindexedProperty(key.replace("_long", ""), logDataJson.getLong(key));
                        }else {
                                entity.setProperty(key.replace("_long", ""), logDataJson.getLong(key));
                        }
                }
                else {
                        if(!indexedPropertyList.contains(key)){
                                entity.setUnindexedProperty(key, logDataJson.getString(key));
                        }else {
                                entity.setProperty(key, logDataJson.getString(key));
                        }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }
}