Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.72 KB | None | 0 0
  1. package ru.segmento.process;
  2.  
  3. import com.sun.deploy.security.SessionCertStore;
  4. import ru.segmento.model.Session;
  5. import ru.segmento.model.Visit;
  6.  
  7. import java.util.*;
  8.  
  9. /**
  10.  * Created by guest-admin on 26.06.17.
  11.  */
  12. public class VisitProcessor implements VisitsProcessor {
  13.  
  14.     private final static int TIMEOUT = 300000;
  15.     private int conversionCounter = 0;
  16.  
  17.     @Override
  18.     public List<Session> process(List<Visit> visits) {
  19.  
  20.         List<Session> sessions = new ArrayList<>();
  21.  
  22.         if (visits.size() == 0) { // case for no session
  23.             return sessions;
  24.         }
  25.  
  26.         Collections.sort(visits, new Sort());
  27.  
  28.         Iterator<Visit> iterator1 = visits.iterator();
  29.         Iterator<Visit> iterator2 = visits.iterator();
  30.  
  31.         Visit visit2 = iterator2.next();
  32.  
  33.         Session session = new Session(visit2.getHost());
  34.         session.addVisit(visit2);
  35.         session.setUtmLabelsMap(visit2.getUtmLabelsMap());
  36.  
  37.         conversationRaiseOrNot(visit2);
  38.  
  39.         if (visits.size() == 1) { // case for one visit
  40.             session.setConversionsCount(conversionCounter);
  41.             sessions.add(session);
  42.             return sessions;
  43.         }
  44.  
  45.         while (iterator2.hasNext()) {
  46.             Visit visit1 = iterator1.next();
  47.             visit2 = iterator2.next();
  48.  
  49.             if (visit2.getTimestamp() - visit1.getTimestamp() < TIMEOUT && visit1.getHost().equals(visit2.getHost())) {
  50.                 boolean visitsIsInOneSession = true;
  51.  
  52.                 for (String utmLabel : visit2.getUtmLabelsMap().keySet()) {
  53.  
  54.                     if (visit1.getUtmLabelsMap().containsKey(utmLabel)) {
  55.  
  56.                         if (!(visit1.getUtmLabelsMap().get(utmLabel).equals(visit2.getUtmLabelsMap().get(utmLabel)))) {
  57.                             visitsIsInOneSession = false;
  58.                             conversationRaiseOrNot(visit2);
  59.                             session = createSession(sessions, visit2, session); // new session
  60.                             break;
  61.  
  62.                         }
  63.                     } else {
  64.                         visitsIsInOneSession = false;
  65.                         conversationRaiseOrNot(visit2);
  66.                         session = createSession(sessions, visit2, session);
  67.  
  68.                     }
  69.  
  70.                 }
  71.                 if (visitsIsInOneSession) {  // same session case
  72.                     conversationRaiseOrNot(visit2);
  73.                     session.setConversionsCount(conversionCounter);
  74.                     session.addVisit(visit2);
  75.                 }
  76.             } else {
  77.                 conversationRaiseOrNot(visit2);
  78.                 session = createSession(sessions, visit2, session); // new session
  79.             }
  80.         }
  81.         sessions.add(session);
  82.         conversionCounter = 0;
  83.         return sessions;
  84.     }
  85.  
  86.     private Session createSession(List<Session> sessions, Visit visit2, Session session) {
  87.         session.setConversionsCount(conversionCounter);
  88.         conversionCounter = 0;
  89.         sessions.add(session);
  90.         session = new Session(visit2.getHost());
  91.         session.addVisit(visit2);
  92.         session.setUtmLabelsMap(visit2.getUtmLabelsMap());
  93.         return session;
  94.     }
  95.  
  96.     private void conversationRaiseOrNot(Visit visit) {
  97.         if (visit.isConversion()) conversionCounter++;
  98.  
  99.     }
  100.  
  101.     private class Sort implements Comparator<Visit> {
  102.  
  103.         @Override
  104.         public int compare(Visit o1, Visit o2) {
  105.  
  106.             if (o1.getHost().compareTo(o2.getHost()) == 0) {
  107.                 if (o1.getTimestamp() > o2.getTimestamp()) {
  108.                     return 1;
  109.                 } else return -1;
  110.             }
  111.             return o1.getHost().compareTo(o2.getHost());
  112.  
  113.         }
  114.     }
  115.  
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement