Fixed calculatition of event stage candidates

This commit is contained in:
Benjamin Barth committed 2015-09-07 11:49:38 +02:00
1 parent 1ae9370996
commit 22ecae22cb
3 files changed
+26 -11

No files matched your search

@@ -15,7 +15,7 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
public class EventStageCandidateCalculator implements EventVisitor {
private final TimePoint now = MillisecondsTimePoint.now();
private final SortedSet<Pair<StageEventType, EventHolder>> featuredEvents = new TreeSet<>(FeaturedEventsComparator.INSTANCE);
private final SortedSet<Pair<StageEventType, EventHolder>> featuredEvents = new TreeSet<>(new FeaturedEventsComparator());
@Override
public void visit(EventBase event, boolean onRemoteServer, URL baseURL) {
@@ -1,7 +1,11 @@
package com.sap.sailing.gwt.server;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import com.sap.sailing.domain.base.EventBase;
import com.sap.sailing.gwt.ui.shared.start.StageEventType;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
@@ -10,15 +14,25 @@ import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.TimeRangeImpl;
public class FeaturedEventsComparator implements Comparator<Pair<StageEventType, EventHolder>> {
public static final Comparator<Pair<StageEventType, EventHolder>> INSTANCE = new FeaturedEventsComparator();
private final TimePoint now = MillisecondsTimePoint.now();
private final Random randomizer = new Random();
private final Map<EventBase, Integer> randomizedEvents = new HashMap<>();
@Override
public int compare(Pair<StageEventType, EventHolder> eventAndStageType1, Pair<StageEventType, EventHolder> eventAndStageType2) {
TimePoint now = MillisecondsTimePoint.now();
TimeRange event1Range = new TimeRangeImpl(eventAndStageType1.getB().event.getStartDate(),
eventAndStageType1.getB().event.getEndDate());
TimeRange event2Range = new TimeRangeImpl(eventAndStageType2.getB().event.getStartDate(),
eventAndStageType2.getB().event.getEndDate());
return event1Range.timeDifference(now).compareTo(event2Range.timeDifference(now));
EventBase event1 = eventAndStageType1.getB().event, event2 = eventAndStageType2.getB().event;
TimeRange event1Range = new TimeRangeImpl(event1.getStartDate(), event1.getEndDate());
TimeRange event2Range = new TimeRangeImpl(event2.getStartDate(), event2.getEndDate());
int timeDiffComp = event1Range.timeDifference(now).compareTo(event2Range.timeDifference(now));
return timeDiffComp == 0 ? getRandomValue(event1) - getRandomValue(event2) : timeDiffComp;
}
private int getRandomValue(EventBase event) {
Integer randomValue = randomizedEvents.get(event);
if (randomValue == null) {
randomizedEvents.put(event, randomValue = randomizer.nextInt());
}
return randomValue;
}
}
@@ -72,13 +72,14 @@ public class HomeServiceImpl extends ProxiedRemoteServiceServlet implements Home
int count = 0;
for(Pair<StageEventType, EventHolder> pair : stageCandidateCalculator.getFeaturedEvents()) {
StageEventType stageType = pair.getA();
EventHolder holder = pair.getB();
count++;
if(count > MAX_STAGE_EVENTS) {
if(count > MAX_STAGE_EVENTS && stageType != StageEventType.RUNNING) {
break;
}
StageEventType stageType = pair.getA();
EventHolder holder = pair.getB();
result.addStageEvent(HomeServiceUtil.convertToEventStageDTO(holder.event, holder.baseURL, holder.onRemoteServer, stageType, getService(), false));
EventReferenceDTO eventRef = new EventReferenceDTO(holder.event);