diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java index 398a6b849f6..c5717e5ea14 100755 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoObjectFactoryImpl.java @@ -47,6 +47,7 @@ import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEvent; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogIdentifier; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; @@ -559,6 +560,13 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogCourseDesignChangedEvent(courseDesignChangedEvent)); return result; } + + public DBObject storeRaceLogEntry(RaceLogIdentifier raceLogIdentifier, RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) { + BasicDBObject result = new BasicDBObject(); + result.put(FieldNames.RACE_LOG_IDENTIFIER.name(), MongoUtils.escapeDollarAndDot(raceLogIdentifier.getIdentifier().toString())); + result.put(FieldNames.RACE_LOG_EVENT.name(), storeRaceLogFinishPositioningListChangedEvent(finishPositioningListChangedEvent)); + return result; + } private DBObject storeRaceLogStartTimeEvent(RaceLogStartTimeEvent startTimeEvent) { DBObject result = new BasicDBObject(); @@ -638,6 +646,15 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory { return result; } + private Object storeRaceLogFinishPositioningListChangedEvent(RaceLogFinishPositioningListChangedEvent finishPositioningListChangedEvent) { + DBObject result = new BasicDBObject(); + storeRaceLogEventProperties(finishPositioningListChangedEvent, result); + + result.put(FieldNames.RACE_LOG_EVENT_CLASS.name(), RaceLogFinishPositioningListChangedEvent.class.getSimpleName()); + + return result; + } + private BasicDBList storeCourseBase(CourseBase courseData) { BasicDBList dbList = new BasicDBList(); diff --git a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java index 65216800d16..05fcbd9915f 100644 --- a/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java +++ b/java/com.sap.sailing.domain.persistence/src/com/sap/sailing/domain/persistence/impl/MongoRaceLogListener.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogIdentifier; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; @@ -62,4 +63,10 @@ public class MongoRaceLogListener implements RaceLogEventVisitor { raceLogsCollection.insert(courseDesignChangedEventTrackEntry); } + @Override + public void visit(RaceLogFinishPositioningListChangedEvent event) { + DBObject finishPositioningListChangedEventTrackEntry = mongoObjectFactory.storeRaceLogEntry(raceLogIdentifier, event); + raceLogsCollection.insert(finishPositioningListChangedEventTrackEntry); + } + } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java index 7de230f6c50..ba8a29e281b 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventFactory.java @@ -9,6 +9,7 @@ import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.racelog.Flags; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.racelog.impl.RaceLogEventFactoryImpl; +import com.sap.sailing.domain.racelog.impl.RaceLogFinishPositioningListChangedEventImpl; public interface RaceLogEventFactory { RaceLogEventFactory INSTANCE = new RaceLogEventFactoryImpl(); @@ -30,4 +31,7 @@ public interface RaceLogEventFactory { RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint timePoint, Serializable id, List competitors, int passId, CourseBase courseData); RaceLogCourseDesignChangedEvent createCourseDesignChangedEvent(TimePoint timePoint, int passId, CourseBase courseData); + + RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent(TimePoint timePoint, Serializable id, List competitors, int passId); + RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent(TimePoint timePoint, List competitors, int passId); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventVisitor.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventVisitor.java index c658e2df963..f7106a91076 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventVisitor.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogEventVisitor.java @@ -12,4 +12,6 @@ public interface RaceLogEventVisitor { public void visit(RaceLogCourseAreaChangedEvent event); public void visit(RaceLogCourseDesignChangedEvent event); + + public void visit(RaceLogFinishPositioningListChangedEvent event); } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogFinishPositioningListChangedEvent.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogFinishPositioningListChangedEvent.java new file mode 100644 index 00000000000..3d9a470d718 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/RaceLogFinishPositioningListChangedEvent.java @@ -0,0 +1,5 @@ +package com.sap.sailing.domain.racelog; + +public interface RaceLogFinishPositioningListChangedEvent extends RaceLogEvent { + +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/analyzing/impl/FinishPositioningListFinder.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/analyzing/impl/FinishPositioningListFinder.java new file mode 100644 index 00000000000..d3cd2d74e64 --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/analyzing/impl/FinishPositioningListFinder.java @@ -0,0 +1,41 @@ +package com.sap.sailing.domain.racelog.analyzing.impl; + +import java.util.List; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.racelog.RaceLog; +import com.sap.sailing.domain.racelog.RaceLogEvent; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; + +public class FinishPositioningListFinder extends RaceLogAnalyzer { + + public FinishPositioningListFinder(RaceLog raceLog) { + super(raceLog); + } + + public List getFinishPositioningList() { + List lastFinishPositioningList = null; + + this.raceLog.lockForRead(); + try { + lastFinishPositioningList = searchForLastFinishPositioningList(); + } finally { + this.raceLog.unlockAfterRead(); + } + + return lastFinishPositioningList; + } + + private List searchForLastFinishPositioningList() { + List lastFinishPositioningList = null; + + for (RaceLogEvent event : getAllEvents()) { + if (event instanceof RaceLogFinishPositioningListChangedEvent) { + RaceLogFinishPositioningListChangedEvent finishPositioningEvent = (RaceLogFinishPositioningListChangedEvent) event; + lastFinishPositioningList = finishPositioningEvent.getInvolvedBoats(); + } + } + + return lastFinishPositioningList; + } +} diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java index 1307fd0dad9..432cc90fdc6 100644 --- a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogEventFactoryImpl.java @@ -90,4 +90,16 @@ public class RaceLogEventFactoryImpl implements RaceLogEventFactory { return createCourseDesignChangedEvent(timePoint, UUID.randomUUID(), new ArrayList(), passId, courseData); } + @Override + public RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent( + TimePoint timePoint, Serializable id, List competitors, int passId) { + return new RaceLogFinishPositioningListChangedEventImpl(MillisecondsTimePoint.now(), timePoint, id, competitors, passId); + } + + @Override + public RaceLogFinishPositioningListChangedEventImpl createFinishPositioningListChangedEvent( + TimePoint timePoint, List competitors, int passId) { + return createFinishPositioningListChangedEvent(timePoint, UUID.randomUUID(), competitors, passId); + } + } diff --git a/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogFinishPositioningListChangedEventImpl.java b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogFinishPositioningListChangedEventImpl.java new file mode 100644 index 00000000000..9b60a0f938a --- /dev/null +++ b/java/com.sap.sailing.domain.shared.android/src/com/sap/sailing/domain/racelog/impl/RaceLogFinishPositioningListChangedEventImpl.java @@ -0,0 +1,25 @@ +package com.sap.sailing.domain.racelog.impl; + +import java.io.Serializable; +import java.util.List; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; + +public class RaceLogFinishPositioningListChangedEventImpl extends RaceLogEventImpl implements RaceLogFinishPositioningListChangedEvent { + + private static final long serialVersionUID = -8167472925561954739L; + + public RaceLogFinishPositioningListChangedEventImpl(TimePoint createdAt, + TimePoint pTimePoint, Serializable pId, List pCompetitors, int pPassId) { + super(createdAt, pTimePoint, pId, pCompetitors, pPassId); + } + + @Override + public void accept(RaceLogEventVisitor visitor) { + visitor.visit(this); + } + +} diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnRaceLogReplicator.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnRaceLogReplicator.java index 133bce6d286..ee7b626b971 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnRaceLogReplicator.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/base/impl/RaceColumnRaceLogReplicator.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogIdentifier; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; @@ -60,4 +61,9 @@ public class RaceColumnRaceLogReplicator implements RaceLogEventVisitor, Seriali public void visit(RaceLogCourseDesignChangedEvent event) { notifyOnAdd(event); } + + @Override + public void visit(RaceLogFinishPositioningListChangedEvent event) { + notifyOnAdd(event); + } } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceLogListener.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceLogListener.java index 9217a64fc4a..114c35cf146 100644 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceLogListener.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/tracking/impl/TrackedRaceLogListener.java @@ -3,6 +3,7 @@ package com.sap.sailing.domain.tracking.impl; import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent; @@ -49,4 +50,9 @@ public class TrackedRaceLogListener implements RaceLogEventVisitor { trackedRace.onCourseDesignChangedByRaceCommittee(event.getCourseDesign()); } + @Override + public void visit(RaceLogFinishPositioningListChangedEvent event) { + // TODO implement score correction !!!!!!!!!!!!!!!! + } + } diff --git a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerChooserTest.java b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerChooserTest.java index 3d7767cb66c..a3810b159cc 100644 --- a/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerChooserTest.java +++ b/java/com.sap.sailing.server.gateway.serialization.test/src/com/sap/sailing/server/gateway/serialization/test/racelog/RaceLogEventSerializerChooserTest.java @@ -23,6 +23,7 @@ public class RaceLogEventSerializerChooserTest { private JsonSerializer courseAreaChangedEventSerializer; private JsonSerializer passChangedSerializer; private JsonSerializer courseDesignChangedEventSerializer; + private JsonSerializer finishPositioningListChangedEventSerializer; private RaceLogEventFactory factory; @@ -35,6 +36,7 @@ public class RaceLogEventSerializerChooserTest { courseAreaChangedEventSerializer = mock(JsonSerializer.class); passChangedSerializer = mock(JsonSerializer.class); courseDesignChangedEventSerializer = mock(JsonSerializer.class); + finishPositioningListChangedEventSerializer = mock(JsonSerializer.class); chooser = new RaceLogEventSerializerChooserImpl( flagEventSerializer, @@ -42,7 +44,8 @@ public class RaceLogEventSerializerChooserTest { raceStatusSerializer, courseAreaChangedEventSerializer, passChangedSerializer, - courseDesignChangedEventSerializer); + courseDesignChangedEventSerializer, + finishPositioningListChangedEventSerializer); factory = RaceLogEventFactory.INSTANCE; } @@ -88,5 +91,12 @@ public class RaceLogEventSerializerChooserTest { RaceLogEvent event = factory.createCourseDesignChangedEvent(null, 0, null); assertEquals(courseDesignChangedEventSerializer, chooser.getSerializer(event)); } + + @Test + public void testChoosesFinishPositioningListChangedSerializer() { + // we use the real event type here because we do not want to re-implement the dispatching. + RaceLogEvent event = factory.createFinishPositioningListChangedEvent(null, null, 0); + assertEquals(courseDesignChangedEventSerializer, chooser.getSerializer(event)); + } } diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogFinishPositioningListChangedEventDeserializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogFinishPositioningListChangedEventDeserializer.java new file mode 100644 index 00000000000..e9a32a17df9 --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/deserialization/impl/RaceLogFinishPositioningListChangedEventDeserializer.java @@ -0,0 +1,25 @@ +package com.sap.sailing.server.gateway.deserialization.impl; + +import java.io.Serializable; +import java.util.Collections; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.common.TimePoint; +import com.sap.sailing.domain.racelog.RaceLogEvent; +import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException; + +public class RaceLogFinishPositioningListChangedEventDeserializer extends BaseRaceLogEventDeserializer { + + public RaceLogFinishPositioningListChangedEventDeserializer() { + } + + @Override + protected RaceLogEvent deserialize(JSONObject object, Serializable id, TimePoint timePoint, int passId) + throws JsonDeserializationException { + + return factory.createFinishPositioningListChangedEvent(timePoint, id, Collections. emptyList(), passId); + } + +} diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializer.java index 93f8f2f11e7..85b310f4366 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializer.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializer.java @@ -26,7 +26,8 @@ public class RaceLogEventSerializer implements JsonSerializer { new WaypointJsonSerializer( new ControlPointJsonSerializer( new MarkJsonSerializer(), - new GateJsonSerializer(new MarkJsonSerializer()))))))); + new GateJsonSerializer(new MarkJsonSerializer()))))), + new RaceLogFinishPositioningListChangedEventSerializer(competitorSerializer))); } private RaceLogEventSerializerChooser serializerChooser; diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializerChooserImpl.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializerChooserImpl.java index a3b09bdd218..f97b24599dd 100644 --- a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializerChooserImpl.java +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogEventSerializerChooserImpl.java @@ -4,6 +4,7 @@ import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent; @@ -19,6 +20,7 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer private final JsonSerializer courseAreaChangedEventSerializer; private final JsonSerializer passChangedEventSerializer; private final JsonSerializer courseDesignChangedEventSerializer; + private final JsonSerializer finishPositioningListChangedEventSerializer; private JsonSerializer chosenSerializer; @@ -28,13 +30,15 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer JsonSerializer raceStatusSerializer, JsonSerializer courseAreaChangedEventSerializer, JsonSerializer passChangedEventSerializer, - JsonSerializer courseDesignChangedEventSerializer) { + JsonSerializer courseDesignChangedEventSerializer, + JsonSerializer finishPositioningListChangedEventSerializer) { this.flagEventSerializer = flagEventSerializer; this.startTimeSerializer = startTimeSerializer; this.raceStatusSerializer = raceStatusSerializer; this.courseAreaChangedEventSerializer = courseAreaChangedEventSerializer; this.passChangedEventSerializer = passChangedEventSerializer; this.courseDesignChangedEventSerializer = courseDesignChangedEventSerializer; + this.finishPositioningListChangedEventSerializer = finishPositioningListChangedEventSerializer; this.chosenSerializer = null; } @@ -81,4 +85,9 @@ public class RaceLogEventSerializerChooserImpl implements RaceLogEventSerializer chosenSerializer = courseDesignChangedEventSerializer; } + @Override + public void visit(RaceLogFinishPositioningListChangedEvent event) { + chosenSerializer = finishPositioningListChangedEventSerializer; + } + } diff --git a/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogFinishPositioningListChangedEventSerializer.java b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogFinishPositioningListChangedEventSerializer.java new file mode 100644 index 00000000000..e585e462f8c --- /dev/null +++ b/java/com.sap.sailing.server.gateway.serialization/src/com/sap/sailing/server/gateway/serialization/racelog/impl/RaceLogFinishPositioningListChangedEventSerializer.java @@ -0,0 +1,32 @@ +package com.sap.sailing.server.gateway.serialization.racelog.impl; + +import org.json.simple.JSONObject; + +import com.sap.sailing.domain.base.Competitor; +import com.sap.sailing.domain.racelog.RaceLogEvent; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; +import com.sap.sailing.server.gateway.serialization.JsonSerializer; + +public class RaceLogFinishPositioningListChangedEventSerializer extends BaseRaceLogEventSerializer { + + public static final String VALUE_CLASS = RaceLogFinishPositioningListChangedEvent.class.getSimpleName(); + + public RaceLogFinishPositioningListChangedEventSerializer(JsonSerializer competitorSerializer) { + super(competitorSerializer); + } + + @Override + protected String getClassFieldValue() { + return VALUE_CLASS; + } + + @Override + public JSONObject serialize(RaceLogEvent object) { + RaceLogFinishPositioningListChangedEvent finishPositioningListEvent = (RaceLogFinishPositioningListChangedEvent) object; + + JSONObject result = super.serialize(finishPositioningListEvent); + + return result; + } + +} diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/racelog/impl/RaceLogChangedVisitor.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/racelog/impl/RaceLogChangedVisitor.java index dcb81350e57..c2ca3ab9eab 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/racelog/impl/RaceLogChangedVisitor.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/racelog/impl/RaceLogChangedVisitor.java @@ -3,6 +3,7 @@ package com.sap.sailing.racecommittee.app.domain.racelog.impl; import com.sap.sailing.domain.racelog.RaceLogCourseAreaChangedEvent; import com.sap.sailing.domain.racelog.RaceLogCourseDesignChangedEvent; import com.sap.sailing.domain.racelog.RaceLogEventVisitor; +import com.sap.sailing.domain.racelog.RaceLogFinishPositioningListChangedEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogPassChangeEvent; import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent; @@ -41,4 +42,9 @@ public class RaceLogChangedVisitor implements RaceLogEventVisitor { listener.eventAdded(event); } + @Override + public void visit(RaceLogFinishPositioningListChangedEvent event) { + listener.eventAdded(event); + } + } diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/RaceState.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/RaceState.java index 90b0870b48e..e2d04b9d97b 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/RaceState.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/RaceState.java @@ -1,5 +1,8 @@ package com.sap.sailing.racecommittee.app.domain.state; +import java.util.List; + +import com.sap.sailing.domain.base.Competitor; import com.sap.sailing.domain.base.CourseBase; import com.sap.sailing.domain.common.TimePoint; import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus; @@ -50,11 +53,18 @@ public interface RaceState { TimePoint getFinishingStartTime(); /** - * Sets the current race's course design + * Returns the current race's course design * * @return the course data or null. */ CourseBase getCourseDesign(); + + /** + * Returns the current race's finish positioning list + * + * @return the positioning list for the finish or null. + */ + List getFinishPositioningList(); /** * Sets the current race's start time @@ -71,6 +81,13 @@ public interface RaceState { * to be set. */ void setCourseDesign(CourseBase newCourseData); + + /** + * Sets the current finish positioning list for the race + * + * @param competitors the current finishing list + */ + void setFinishPositioningListChanged(List competitors); /** * Updates the race's status. diff --git a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/impl/RaceStateImpl.java b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/impl/RaceStateImpl.java index bd6f9bb8d10..97cd2746034 100644 --- a/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/impl/RaceStateImpl.java +++ b/mobile/com.sap.sailing.racecommittee.app/src/com/sap/sailing/racecommittee/app/domain/state/impl/RaceStateImpl.java @@ -2,6 +2,7 @@ package com.sap.sailing.racecommittee.app.domain.state.impl; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; import java.util.UUID; @@ -14,6 +15,7 @@ import com.sap.sailing.domain.racelog.PassAwareRaceLog; import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEventFactory; +import com.sap.sailing.domain.racelog.analyzing.impl.FinishPositioningListFinder; import com.sap.sailing.domain.racelog.analyzing.impl.FinishedTimeFinder; import com.sap.sailing.domain.racelog.analyzing.impl.FinishingTimeFinder; import com.sap.sailing.domain.racelog.analyzing.impl.LastPublishedCourseDesignFinder; @@ -40,6 +42,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { private FinishedTimeFinder finishedTimeFinder; private FinishingTimeFinder finishingTimeFinder; private LastPublishedCourseDesignFinder lastCourseDesignFinder; + private FinishPositioningListFinder finishPositioningListFinder; public RaceStateImpl(PassAwareRaceLog raceLog, StartProcedure procedure) { this.raceLog = raceLog; @@ -56,6 +59,7 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { this.finishedTimeFinder = new FinishedTimeFinder(raceLog); this.statusAnalyzer = new RaceStatusAnalyzer(raceLog); this.lastCourseDesignFinder = new LastPublishedCourseDesignFinder(raceLog); + this.finishPositioningListFinder = new FinishPositioningListFinder(raceLog); updateStatus(); } @@ -161,4 +165,17 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener { return finishingTimeFinder.getFinishingTime(); } + @Override + public void setFinishPositioningListChanged(List competitors) { + TimePoint eventTime = MillisecondsTimePoint.now(); + + RaceLogEvent event = RaceLogEventFactory.INSTANCE.createFinishPositioningListChangedEvent(eventTime, competitors, raceLog.getCurrentPassId()); + this.raceLog.add(event); + } + + @Override + public List getFinishPositioningList() { + return finishPositioningListFinder.getFinishPositioningList(); + } + }