Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.segmento.process;
- import com.sun.deploy.security.SessionCertStore;
- import ru.segmento.model.Session;
- import ru.segmento.model.Visit;
- import java.util.*;
- /**
- * Created by guest-admin on 26.06.17.
- */
- public class VisitProcessor implements VisitsProcessor {
- private final static int TIMEOUT = 300000;
- private int conversionCounter = 0;
- @Override
- public List<Session> process(List<Visit> visits) {
- List<Session> sessions = new ArrayList<>();
- if (visits.size() == 0) { // case for no session
- return sessions;
- }
- Collections.sort(visits, new Sort());
- Iterator<Visit> iterator1 = visits.iterator();
- Iterator<Visit> iterator2 = visits.iterator();
- Visit visit2 = iterator2.next();
- Session session = new Session(visit2.getHost());
- session.addVisit(visit2);
- session.setUtmLabelsMap(visit2.getUtmLabelsMap());
- conversationRaiseOrNot(visit2);
- if (visits.size() == 1) { // case for one visit
- session.setConversionsCount(conversionCounter);
- sessions.add(session);
- return sessions;
- }
- while (iterator2.hasNext()) {
- Visit visit1 = iterator1.next();
- visit2 = iterator2.next();
- if (visit2.getTimestamp() - visit1.getTimestamp() < TIMEOUT && visit1.getHost().equals(visit2.getHost())) {
- boolean visitsIsInOneSession = true;
- for (String utmLabel : visit2.getUtmLabelsMap().keySet()) {
- if (visit1.getUtmLabelsMap().containsKey(utmLabel)) {
- if (!(visit1.getUtmLabelsMap().get(utmLabel).equals(visit2.getUtmLabelsMap().get(utmLabel)))) {
- visitsIsInOneSession = false;
- conversationRaiseOrNot(visit2);
- session = createSession(sessions, visit2, session); // new session
- break;
- }
- } else {
- visitsIsInOneSession = false;
- conversationRaiseOrNot(visit2);
- session = createSession(sessions, visit2, session);
- }
- }
- if (visitsIsInOneSession) { // same session case
- conversationRaiseOrNot(visit2);
- session.setConversionsCount(conversionCounter);
- session.addVisit(visit2);
- }
- } else {
- conversationRaiseOrNot(visit2);
- session = createSession(sessions, visit2, session); // new session
- }
- }
- sessions.add(session);
- conversionCounter = 0;
- return sessions;
- }
- private Session createSession(List<Session> sessions, Visit visit2, Session session) {
- session.setConversionsCount(conversionCounter);
- conversionCounter = 0;
- sessions.add(session);
- session = new Session(visit2.getHost());
- session.addVisit(visit2);
- session.setUtmLabelsMap(visit2.getUtmLabelsMap());
- return session;
- }
- private void conversationRaiseOrNot(Visit visit) {
- if (visit.isConversion()) conversionCounter++;
- }
- private class Sort implements Comparator<Visit> {
- @Override
- public int compare(Visit o1, Visit o2) {
- if (o1.getHost().compareTo(o2.getHost()) == 0) {
- if (o1.getTimestamp() > o2.getTimestamp()) {
- return 1;
- } else return -1;
- }
- return o1.getHost().compareTo(o2.getHost());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement