mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
# completed the interface of RaceState2 and all procedures
# fixed access on them in ui
This commit is contained in:
+2
-2
@@ -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);
|
||||
|
||||
+4
-4
@@ -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
-1
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
+6
-1
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
+7
@@ -15,5 +15,12 @@ public class GateStartChangedListeners extends RacingProcedureChangedListeners<G
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPathfinderChanged(GateStartRacingProcedure procedure) {
|
||||
for (GateStartChangedListener listener : this) {
|
||||
listener.onPathfinderChanged(procedure);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+24
-5
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
+10
-20
@@ -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() {
|
||||
|
||||
+8
-12
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-4
@@ -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) {
|
||||
|
||||
+4
-4
@@ -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();
|
||||
}
|
||||
|
||||
+1
-1
@@ -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();
|
||||
|
||||
+5
@@ -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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
+5
@@ -69,6 +69,11 @@ public class GateStartStartphaseRaceFragment2 extends BaseStartphaseRaceFragment
|
||||
public void onGateLineOpeningTimeChanged(GateStartRacingProcedure gateStartRacingProcedure) {
|
||||
setupUi();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPathfinderChanged(GateStartRacingProcedure procedure) {
|
||||
setupUi();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user