# added new RaceLogRaceStatus FINISHING

# added new generic event method to RaceLogListener
This commit is contained in:
Lukas Niemeier committed 2013-02-12 22:55:18 +01:00
1 parent 4112f6919c
commit 02c70e69b4
12 files changed
+56 -9

No files matched your search

@@ -6,6 +6,7 @@ import com.mongodb.DBObject;
import com.sap.sailing.domain.base.Fleet; import com.sap.sailing.domain.base.Fleet;
import com.sap.sailing.domain.persistence.MongoObjectFactory; import com.sap.sailing.domain.persistence.MongoObjectFactory;
import com.sap.sailing.domain.racelog.RaceColumnIdentifier; import com.sap.sailing.domain.racelog.RaceColumnIdentifier;
import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogFlagEvent; import com.sap.sailing.domain.racelog.RaceLogFlagEvent;
import com.sap.sailing.domain.racelog.RaceLogListener; import com.sap.sailing.domain.racelog.RaceLogListener;
import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent; import com.sap.sailing.domain.racelog.RaceLogStartTimeEvent;
@@ -40,4 +41,9 @@ public class MongoRaceLogListener implements RaceLogListener {
} }
@Override
public void eventReceived(RaceLogEvent event) {
// do nothing, we are interested in the typed events.
}
} }
@@ -1,7 +1,25 @@
package com.sap.sailing.domain.racelog; package com.sap.sailing.domain.racelog;
/**
* Implementors may use this interface to listen for added {@link RaceLogEvent}.
*/
public interface RaceLogListener { public interface RaceLogListener {
/**
* This method is called for any event that is added to the host.
* @param event
*/
void eventReceived(RaceLogEvent event);
/**
* This method is called additionally if the event is a {@link RaceLogFlagEvent}.
* @param flagEvent
*/
void flagEventReceived(RaceLogFlagEvent flagEvent); void flagEventReceived(RaceLogFlagEvent flagEvent);
/**
* This method is called additionally if the event is a {@link RaceLogStartTimeEvent}.
* @param startTimeEvent
*/
void startTimeEventReceived(RaceLogStartTimeEvent startTimeEvent); void startTimeEventReceived(RaceLogStartTimeEvent startTimeEvent);
} }
@@ -5,5 +5,5 @@ package com.sap.sailing.domain.racelog;
* *
*/ */
public enum RaceLogRaceStatus { public enum RaceLogRaceStatus {
UNKNOWN, UNSCHEDULED, SCHEDULED, STARTPHASE, RUNNING, FINISHED UNKNOWN, UNSCHEDULED, SCHEDULED, STARTPHASE, RUNNING, FINISHING, FINISHED
} }
@@ -43,6 +43,7 @@ public class RaceLogImpl extends TrackImpl<RaceLogEvent> implements RaceLog {
} }
private void notifyListenersAboutReceive(RaceLogEvent event) { private void notifyListenersAboutReceive(RaceLogEvent event) {
notifiyListenersAboutReceivedEvent(event);
if (event instanceof RaceLogFlagEvent) { if (event instanceof RaceLogFlagEvent) {
notifiyListenersAboutReceivedFlagEvent((RaceLogFlagEvent) event); notifiyListenersAboutReceivedFlagEvent((RaceLogFlagEvent) event);
} else if (event instanceof RaceLogStartTimeEvent) { } else if (event instanceof RaceLogStartTimeEvent) {
@@ -50,6 +51,19 @@ public class RaceLogImpl extends TrackImpl<RaceLogEvent> implements RaceLog {
} }
} }
private void notifiyListenersAboutReceivedEvent(RaceLogEvent event) {
synchronized (listeners) {
for (RaceLogListener listener : listeners) {
try {
listener.eventReceived(event);
} catch (Throwable t) {
logger.log(Level.SEVERE, "RaceLogListener " + listener + " threw exception " + t.getMessage());
logger.throwing(RaceLogImpl.class.getName(), "notifiyListenersAboutReceivedEvent(RaceLogEvent)", t);
}
}
}
}
private void notifiyListenersAboutReceivedStartTimeEvent(RaceLogStartTimeEvent event) { private void notifiyListenersAboutReceivedStartTimeEvent(RaceLogStartTimeEvent event) {
synchronized (listeners) { synchronized (listeners) {
for (RaceLogListener listener : listeners) { for (RaceLogListener listener : listeners) {
@@ -79,7 +79,7 @@ public class OfflineDataManager extends DataManager {
RaceLogRaceStatus.SCHEDULED, RaceLogRaceStatus.SCHEDULED,
new MillisecondsTimePoint(new Date().getTime() + 100000))); new MillisecondsTimePoint(new Date().getTime() + 100000)));
log.add(factory.createRaceStatusEvent( log.add(factory.createRaceStatusEvent(
new MillisecondsTimePoint(new Date()), new MillisecondsTimePoint(new Date().getTime() + 1),
2, 2,
RaceLogRaceStatus.RUNNING)); RaceLogRaceStatus.RUNNING));
@@ -4,6 +4,7 @@ import com.sap.sailing.domain.common.Named;
import com.sap.sailing.domain.common.WithID; import com.sap.sailing.domain.common.WithID;
import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.domain.state.ManagedRaceState;
public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID { public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID {
@@ -8,8 +8,9 @@ import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
import com.sap.sailing.racecommittee.app.domain.ManagedRace; import com.sap.sailing.racecommittee.app.domain.ManagedRace;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier; import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceState;
import com.sap.sailing.racecommittee.app.domain.RaceGroup; import com.sap.sailing.racecommittee.app.domain.RaceGroup;
import com.sap.sailing.racecommittee.app.domain.state.ManagedRaceState;
import com.sap.sailing.racecommittee.app.domain.state.impl.ManagedRaceStateImpl;
public class ManagedRaceImpl implements ManagedRace { public class ManagedRaceImpl implements ManagedRace {
private static final long serialVersionUID = -4936566684992524001L; private static final long serialVersionUID = -4936566684992524001L;
@@ -6,9 +6,11 @@ import com.sap.sailing.domain.base.Timed;
import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogListener; import com.sap.sailing.domain.racelog.RaceLogListener;
import com.sap.sailing.domain.racelog.impl.RaceLogEventComparator;
import com.sap.sailing.domain.tracking.impl.PartialNavigableSetView; import com.sap.sailing.domain.tracking.impl.PartialNavigableSetView;
import com.sap.sailing.domain.tracking.impl.TrackImpl; import com.sap.sailing.domain.tracking.impl.TrackImpl;
import com.sap.sailing.racecommittee.app.logging.ExLog; import com.sap.sailing.racecommittee.app.logging.ExLog;
import com.sap.sailing.util.impl.ArrayListNavigableSet;
public class PassAwareRaceLog extends TrackImpl<RaceLogEvent> implements RaceLog { public class PassAwareRaceLog extends TrackImpl<RaceLogEvent> implements RaceLog {
private static final String TAG = PassAwareRaceLog.class.getName(); private static final String TAG = PassAwareRaceLog.class.getName();
@@ -24,7 +26,7 @@ public class PassAwareRaceLog extends TrackImpl<RaceLogEvent> implements RaceLog
} }
public PassAwareRaceLog(int currentPassId) { public PassAwareRaceLog(int currentPassId) {
super(ReadWriteLockName); super(new ArrayListNavigableSet<Timed>(RaceLogEventComparator.INSTANCE), ReadWriteLockName);
this.currentPassId = currentPassId; this.currentPassId = currentPassId;
} }
@@ -64,8 +66,11 @@ public class PassAwareRaceLog extends TrackImpl<RaceLogEvent> implements RaceLog
public boolean add(RaceLogEvent event) { public boolean add(RaceLogEvent event) {
lockForWrite(); lockForWrite();
try { try {
setCurrentPassId(Math.max(event.getPassId(), this.currentPassId)); if (getInternalRawFixes().add(event)) {
return getInternalRawFixes().add(event); setCurrentPassId(Math.max(event.getPassId(), this.currentPassId));
return true;
}
return false;
} finally { } finally {
unlockAfterWrite(); unlockAfterWrite();
} }
@@ -1,4 +1,4 @@
package com.sap.sailing.racecommittee.app.domain; package com.sap.sailing.racecommittee.app.domain.state;
import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
@@ -1,10 +1,10 @@
package com.sap.sailing.racecommittee.app.domain.impl; package com.sap.sailing.racecommittee.app.domain.state.impl;
import com.sap.sailing.domain.racelog.RaceLog; import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEvent; import com.sap.sailing.domain.racelog.RaceLogEvent;
import com.sap.sailing.domain.racelog.RaceLogRaceStatus; import com.sap.sailing.domain.racelog.RaceLogRaceStatus;
import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent; import com.sap.sailing.domain.racelog.RaceLogRaceStatusEvent;
import com.sap.sailing.racecommittee.app.domain.ManagedRaceState; import com.sap.sailing.racecommittee.app.domain.state.ManagedRaceState;
import com.sap.sailing.racecommittee.app.logging.ExLog; import com.sap.sailing.racecommittee.app.logging.ExLog;
public class ManagedRaceStateImpl implements ManagedRaceState { public class ManagedRaceStateImpl implements ManagedRaceState {
@@ -190,6 +190,7 @@ public class RaceListAdapter extends ArrayAdapter<RaceListDataType> {
RaceListDataTypeElement lastFinishedRace = null; RaceListDataTypeElement lastFinishedRace = null;
int numberOfUnscheduledRaces = 0; int numberOfUnscheduledRaces = 0;
/// TODO: new status FINISHING?!?!?!
for (RaceListDataTypeElement dataElement : elementList) { for (RaceListDataTypeElement dataElement : elementList) {
if (dataElement.getRace().getStatus().equals(RaceLogRaceStatus.FINISHED)) { if (dataElement.getRace().getStatus().equals(RaceLogRaceStatus.FINISHED)) {
lastFinishedRace = dataElement; lastFinishedRace = dataElement;
@@ -85,6 +85,7 @@ public class RaceListDataTypeElement extends RaceListDataType {
case STARTPHASE: case STARTPHASE:
return String.format(startPhaseTemplate, formatStartTime()); return String.format(startPhaseTemplate, formatStartTime());
case RUNNING: case RUNNING:
case FINISHING:
return String.format(runningTemplate, formatStartTime()); return String.format(runningTemplate, formatStartTime());
case FINISHED: case FINISHED:
return finishedTemplate; return finishedTemplate;