# completed the interface of RaceState2 and all procedures

# fixed access on them in ui
This commit is contained in:
Lukas Niemeier
2013-11-14 14:25:12 +01:00
parent 8cdd99b6bc
commit bc68412fed
14 changed files with 83 additions and 56 deletions
@@ -36,10 +36,10 @@ public interface RaceState2 extends RaceStateEventProcessor {
void setAborted(TimePoint timePoint, boolean isPostponed, Flags abortFlag);
void setGeneralRecall(TimePoint timePoint);
void setFinishPositioningListChanged(CompetitorResults positionedCompetitors);
void setFinishPositioningListChanged(TimePoint timePoint, CompetitorResults positionedCompetitors);
CompetitorResults getFinishPositioningList();
void setFinishPositioningConfirmed();
void setFinishPositioningConfirmed(TimePoint timePoint);
boolean isFinishPositioningConfirmed();
void setCourseDesign(CourseBase courseDesign);
@@ -203,9 +203,9 @@ public class RaceState2Impl implements RaceState2, RaceLogChangedListener {
}
@Override
public void setFinishPositioningListChanged(CompetitorResults positionedCompetitors) {
public void setFinishPositioningListChanged(TimePoint timePoint, CompetitorResults positionedCompetitors) {
raceLog.add(factory.createFinishPositioningListChangedEvent(
MillisecondsTimePoint.now(), author, raceLog.getCurrentPassId(), positionedCompetitors));
timePoint, author, raceLog.getCurrentPassId(), positionedCompetitors));
}
@Override
@@ -214,9 +214,9 @@ public class RaceState2Impl implements RaceState2, RaceLogChangedListener {
}
@Override
public void setFinishPositioningConfirmed() {
public void setFinishPositioningConfirmed(TimePoint timePoint) {
raceLog.add(factory.createFinishPositioningConfirmedEvent(
MillisecondsTimePoint.now(), author, raceLog.getCurrentPassId(), getFinishPositioningList()));
timePoint, author, raceLog.getCurrentPassId(), getFinishPositioningList()));
}
@Override
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.racelog.state.racingprocedure;
public interface GateStartChangedListener extends RacingProcedureChangedListener {
void onGateLineOpeningTimeChanged(GateStartRacingProcedure gateStartRacingProcedure);
void onGateLineOpeningTimeChanged(GateStartRacingProcedure procedure);
void onPathfinderChanged(GateStartRacingProcedure procedure);
}
@@ -5,10 +5,15 @@ import com.sap.sailing.domain.common.TimePoint;
public interface GateStartRacingProcedure extends RacingProcedure2 {
public final static long GolfDownStandardInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
void addChangedListener(GateStartChangedListener listener);
TimePoint getGateShutdownTime(TimePoint startTime);
Long getGateLineOpeningTime();
void setGateLineOpeningTime(long milliseconds);
void setGateLineOpeningTime(TimePoint timePoint, long milliseconds);
String getPathfinder();
void setPathfinder(TimePoint timePoint, String sailingId);
}
@@ -15,5 +15,12 @@ public class GateStartChangedListeners extends RacingProcedureChangedListeners<G
}
}
@Override
public void onPathfinderChanged(GateStartRacingProcedure procedure) {
for (GateStartChangedListener listener : this) {
listener.onPathfinderChanged(procedure);
}
}
}
@@ -4,7 +4,6 @@ import java.util.Arrays;
import java.util.Collection;
import com.sap.sailing.domain.common.TimePoint;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.racelog.FlagPole;
import com.sap.sailing.domain.common.racelog.Flags;
@@ -13,6 +12,7 @@ import com.sap.sailing.domain.racelog.RaceLog;
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.analyzing.impl.GateLineOpeningTimeFinder;
import com.sap.sailing.domain.racelog.analyzing.impl.PathfinderFinder;
import com.sap.sailing.domain.racelog.analyzing.impl.StartTimeFinder;
import com.sap.sailing.domain.racelog.state.RaceState2;
import com.sap.sailing.domain.racelog.state.RaceStateEvent;
@@ -25,8 +25,6 @@ import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedureChang
import com.sap.sailing.domain.racelog.state.racingprocedure.RacingProcedurePrerequisite;
public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements GateStartRacingProcedure {
public final static long startPhaseGolfDownStandardInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhaseClassOverGolfUpIntervall = 8 * 60 * 1000; // minutes * seconds * milliseconds
private final static long startPhasePapaUpInterval = 4 * 60 * 1000; // minutes * seconds * milliseconds
@@ -34,12 +32,15 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
private final static long startPhaseGolfDownStandardIntervalConstantSummand = 3 * 60 * 1000; // minutes * seconds * milliseconds
private final GateLineOpeningTimeFinder gateLineOpeningTimeAnalyzer;
private final PathfinderFinder pathfinderAnalyzer;;
private Long cachedGateLineOpeningTime;
private String cachedPathfinder;
public GateStartRacingProcedureImpl(RaceLog raceLog, RaceLogEventAuthor author, RaceLogEventFactory factory) {
super(raceLog, author, factory);
this.gateLineOpeningTimeAnalyzer = new GateLineOpeningTimeFinder(raceLog);
this.pathfinderAnalyzer = new PathfinderFinder(raceLog);
update();
}
@@ -148,8 +149,19 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
}
@Override
public void setGateLineOpeningTime(long milliseconds) {
raceLog.add(factory.createGateLineOpeningTimeEvent(MillisecondsTimePoint.now(), author, raceLog.getCurrentPassId(), milliseconds));
public void setGateLineOpeningTime(TimePoint timePoint, long milliseconds) {
raceLog.add(factory.createGateLineOpeningTimeEvent(timePoint, author, raceLog.getCurrentPassId(), milliseconds));
}
@Override
public String getPathfinder() {
return cachedPathfinder;
}
@Override
public void setPathfinder(TimePoint timePoint, String sailingId) {
// TODO Auto-generated method stub
}
@Override
@@ -175,6 +187,13 @@ public class GateStartRacingProcedureImpl extends BaseRacingProcedure implements
getChangedListeners().onGateLineOpeningTimeChanged(this);
rescheduleGateShutdownTime(new StartTimeFinder(raceLog).analyze());
}
String pathfinder = pathfinderAnalyzer.analyze();
if (!Util.equalsWithNull(cachedPathfinder, pathfinder)) {
cachedPathfinder = pathfinder;
getChangedListeners().onPathfinderChanged(this);
}
super.update();
}
@@ -18,10 +18,7 @@ import android.widget.TextView;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.racelog.Flags;
import com.sap.sailing.domain.racelog.RaceLogEventFactory;
import com.sap.sailing.domain.racelog.analyzing.impl.LastWindFixFinder;
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
import com.sap.sailing.domain.racelog.state.RaceState2;
import com.sap.sailing.domain.racelog.state.RaceState2ChangedListener;
import com.sap.sailing.domain.racelog.state.impl.BaseRaceState2ChangedListener;
@@ -33,6 +30,7 @@ import com.sap.sailing.racecommittee.app.logging.ExLog;
import com.sap.sailing.racecommittee.app.ui.activities.WindActivity;
import com.sap.sailing.racecommittee.app.ui.fragments.chooser.RaceInfoFragmentChooser;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByLabelCourseDesignDialog;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.RaceInfoListener;
import com.sap.sailing.racecommittee.app.ui.fragments.raceinfo.SetStartTimeRaceFragment;
@@ -82,19 +80,19 @@ public class RaceInfoFragment extends RaceFragment implements RaceInfoListener {
@Override
public void onClick(View v) {
getRace().getRaceLog().add(
/*RaceLogEventFactory.INSTANCE.createStartTimeEvent(
/*getRace().getRaceLog().add(
RaceLogEventFactory.INSTANCE.createStartTimeEvent(
MillisecondsTimePoint.now(),
new RaceLogEventAuthorImpl("Magic", -1),
getRace().getRaceLog().getCurrentPassId(),
MillisecondsTimePoint.now().plus(30000)));*/
MillisecondsTimePoint.now().plus(30000)));
RaceLogEventFactory.INSTANCE.createFlagEvent(MillisecondsTimePoint.now(),
new RaceLogEventAuthorImpl("Magic", 0),
getRace().getRaceLog().getCurrentPassId(),
Flags.AP,
Flags.NONE,
true));
//showCourseDesignDialog();
true));*/
showCourseDesignDialog();
}
});
@@ -166,18 +164,10 @@ public class RaceInfoFragment extends RaceFragment implements RaceInfoListener {
private void showCourseDesignDialog() {
FragmentManager fragmentManager = getFragmentManager();
RaceDialogFragment fragment;
try {
fragment = getRace().getState().getStartProcedure().getCourseDesignDialog().newInstance();
Bundle args = getRecentArguments();
fragment.setArguments(args);
fragment.show(fragmentManager, "courseDesignDialogFragment");
} catch (java.lang.InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// TODO: select course designer per race
RaceDialogFragment fragment = new ByLabelCourseDesignDialog();
fragment.setArguments(getRecentArguments());
fragment.show(fragmentManager, "courseDesignDialogFragment");
}
private void showRaceResetConfirmationDialog() {
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.base.Competitor;
import com.sap.sailing.domain.base.CompetitorStore;
import com.sap.sailing.domain.common.MaxPointsReason;
import com.sap.sailing.domain.common.Named;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.common.impl.Util;
import com.sap.sailing.domain.common.impl.Util.Triple;
import com.sap.sailing.domain.racelog.CompetitorResults;
@@ -83,7 +84,7 @@ public class PositioningFragment extends RaceDialogFragment {
okButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getRace().getState().setFinishPositioningConfirmed();
getRaceState().setFinishPositioningConfirmed(MillisecondsTimePoint.now());
dismiss();
}
});
@@ -111,7 +112,7 @@ public class PositioningFragment extends RaceDialogFragment {
if (from != to) {
Triple<Serializable, String, MaxPointsReason> item = positioningAdapter.getItem(from);
setItemToNewPositioning(from, to, item);
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
}
});
@@ -221,13 +222,8 @@ public class PositioningFragment extends RaceDialogFragment {
}
private CompetitorResults initializeFinishPositioningList() {
CompetitorResults positionings;
if (getRace().getState().getFinishPositioningList() != null) {
positionings = getRace().getState().getFinishPositioningList();
} else {
positionings = new CompetitorResultsImpl();
}
return positionings;
CompetitorResults positionings = getRaceState().getFinishPositioningList();
return positionings == null ? new CompetitorResultsImpl() : positionings;
}
private void setItemToNewPositioning(int from, int to, Triple<Serializable, String, MaxPointsReason> item) {
@@ -267,7 +263,7 @@ public class PositioningFragment extends RaceDialogFragment {
if (!maxPointsReason.equals(MaxPointsReason.NONE)) {
setCompetitorToBottomOfPositioningList(newItem);
}
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
private void replaceItemInPositioningList(int currentIndexOfItem,
@@ -285,7 +281,7 @@ public class PositioningFragment extends RaceDialogFragment {
protected void onCompetitorClickedOnGrid(Competitor competitor) {
addNewCompetitorToPositioningList(competitor);
removeCompetitorFromGrid(competitor);
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
protected void removeCompetitorFromGrid(Competitor competitor) {
@@ -305,7 +301,7 @@ public class PositioningFragment extends RaceDialogFragment {
Competitor competitor = getCompetitorStore().getExistingCompetitorById(item.getA());
addNewCompetitorToCompetitorList(competitor);
removeCompetitorFromPositionings(item);
getRace().getState().setFinishPositioningListChanged(positionedCompetitors);
getRaceState().setFinishPositioningListChanged(MillisecondsTimePoint.now(), positionedCompetitors);
}
private void addNewCompetitorToCompetitorList(Competitor competitor) {
@@ -160,7 +160,7 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment {
TimePoint recentFinishedTime = null;
for (ManagedRace race : races) {
TimePoint currentFinishedTime = race.getState().getFinishedTime();
TimePoint currentFinishedTime = race.getState2().getFinishedTime();
if (currentFinishedTime != null
&& (recentFinishedTime == null || recentFinishedTime.before(currentFinishedTime))) {
recentFinishedTime = currentFinishedTime;
@@ -198,7 +198,7 @@ public class ProtestTimeDialogFragment extends AttachedDialogFragment {
List<ManagedRace> selectedRaces = getSelectedRaces();
TimePoint protestTime = getProtestTime();
for (ManagedRace race : selectedRaces) {
race.getState().setProtestStartTime(protestTime);
race.getState2().setProtestTime(protestTime);
}
}
@@ -10,9 +10,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.racelog.state.racingprocedure.GateStartRacingProcedure;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
public class RaceChooseGateLineOpeningTimeDialog extends RaceDialogFragment {
@@ -35,8 +35,7 @@ public class RaceChooseGateLineOpeningTimeDialog extends RaceDialogFragment {
getDialog().setTitle(getString(R.string.set_gate_line_opening_time_title));
lineOpeningTimeEditText = (EditText) getView().findViewById(R.id.lineOpeningTimeText);
lineOpeningTimeEditText.setText(String
.valueOf((GateStartProcedure.startPhaseGolfDownStandardInterval / (60 * 1000))));
lineOpeningTimeEditText.setText(String.valueOf((GateStartRacingProcedure.GolfDownStandardInterval / (60 * 1000))));
chooseButton = (Button) getDialog().findViewById(R.id.chooseLineOpeningTimeButton);
chooseButton.setOnClickListener(new OnClickListener() {
@@ -50,7 +49,7 @@ public class RaceChooseGateLineOpeningTimeDialog extends RaceDialogFragment {
try {
Long lineOpeningTime = convertToLong(lineOpeningTimeEditText.getText().toString());
GateStartRacingProcedure procedure = getRace().getState2().getTypedRacingProcedure();
procedure.setGateLineOpeningTime(Long.valueOf(60 * 1000 * lineOpeningTime));
procedure.setGateLineOpeningTime(MillisecondsTimePoint.now(), Long.valueOf(60 * 1000 * lineOpeningTime));
Log.i("RACE_SET_GATELINE_OPENING_TIME", String.valueOf(lineOpeningTime));
dismiss();
} catch (NumberFormatException nfe) {
@@ -13,8 +13,9 @@ import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.racelog.state.racingprocedure.GateStartRacingProcedure;
import com.sap.sailing.racecommittee.app.R;
import com.sap.sailing.racecommittee.app.domain.startprocedure.impl.GateStartProcedure;
public class RaceChoosePathFinderDialog extends RaceDialogFragment {
@@ -78,9 +79,8 @@ public class RaceChoosePathFinderDialog extends RaceDialogFragment {
Toast.makeText(getActivity(), "Please enter a valid pathfinder", Toast.LENGTH_LONG).show();
}else{
String sailingId = sailingNationalityEditText.getText().toString() + " " + sailingNumberEditText.getText().toString();
if(getRace().getState().getStartProcedure() instanceof GateStartProcedure){
((GateStartProcedure) getRace().getState().getStartProcedure()).setPathfinder(sailingId);
}
GateStartRacingProcedure procedure = getRaceState().getTypedRacingProcedure();
procedure.setPathfinder(MillisecondsTimePoint.now(), sailingId);
Log.i("RACE_SET_PATHFINDER", sailingId);
dismiss();
}
@@ -35,7 +35,7 @@ public class RaceFinishedTimeDialog extends RaceDialogFragment {
FinishingTimeFinder ftf = new FinishingTimeFinder(getRace().getRaceLog());
if (ftf.analyze() != null && getRace().getStatus().equals(RaceLogRaceStatus.FINISHING)) {
if (ftf.analyze().before(finishedTime)) {
getRace().getState().getStartProcedure().setFinished(finishedTime);
getRaceState().setFinishedTime(finishedTime);
dismiss();
}else{
Toast.makeText(getActivity(), "The given finish time is earlier than than the first finisher time. Please recheck the time.", Toast.LENGTH_LONG).show();
@@ -47,6 +47,11 @@ public class GateStartRunningRaceFragment extends BaseRunningRaceFragment<GateSt
public void onGateLineOpeningTimeChanged(GateStartRacingProcedure gateStartRacingProcedure) {
// not interested - handled by active flags
}
@Override
public void onPathfinderChanged(GateStartRacingProcedure procedure) {
// we do not display changes of the pathfinder this late
}
}
@@ -69,6 +69,11 @@ public class GateStartStartphaseRaceFragment2 extends BaseStartphaseRaceFragment
public void onGateLineOpeningTimeChanged(GateStartRacingProcedure gateStartRacingProcedure) {
setupUi();
}
@Override
public void onPathfinderChanged(GateStartRacingProcedure procedure) {
setupUi();
}
}