mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-10 14:20:55 +00:00
RCApp: set finishing und finished time into managed race with checks
This commit is contained in:
1 parent
ddadfc0165
commit
1a749cb78d
6 files changed
+253
-168
No files matched your search
@@ -421,6 +421,11 @@
|
||||
<string name="change_message">Nach den Wettfahrtregeln sind diese Daten im aktuellen Rennenstatus nicht veränderbar.\nSie könnten jedoch die falschen Eingaben korrigieren.</string>
|
||||
<string name="change_title">Warnung</string>
|
||||
<string name="send_mail">Sende Email...</string>
|
||||
|
||||
<string name="data_reload_title">Daten wurden extern verändert</string>
|
||||
<string name="data_reload_message">Daten müssen neu geladen werden. Eventueller Datenverlust ist möglich.</string>
|
||||
<string name="error_finished_time">Die ausgewählte Zielzeit liegt vor der Zeit, der ersten Schiffeinfahrt. Bitte überprüfe die Uhrzeit.</string>
|
||||
<string name="error_finishing_time">Die ausgewählte Zeit is vor dem Rennstart. Bitte überprüfe die Uhrzeit.</string>
|
||||
<string name="error_time_in_future">Die ausgewählte Zeit liegt in der Zukunft. Bitte überprüfe die Uhrzeit.</string>
|
||||
|
||||
</resources>
|
||||
@@ -444,5 +444,8 @@
|
||||
<string name="send_mail">Send mail...</string>
|
||||
<string name="data_reload_title">Data has changed externally</string>
|
||||
<string name="data_reload_message">Data have to be reloaded. Possible data loss is possible.</string>
|
||||
<string name="error_finished_time">The given finish time is earlier than the first finisher time. Please recheck the time.</string>
|
||||
<string name="error_finishing_time">The selected time is before the race start.</string>
|
||||
<string name="error_time_in_future">The given time is in future. Please recheck the time.</string>
|
||||
|
||||
</resources>
|
||||
+21
-3
@@ -1,16 +1,18 @@
|
||||
package com.sap.sailing.racecommittee.app.domain;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.Result;
|
||||
import com.sap.sse.common.Named;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.WithID;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID {
|
||||
|
||||
/**
|
||||
@@ -80,4 +82,20 @@ public interface ManagedRace extends ManagedRaceIdentifier, Named, WithID {
|
||||
* the retrieved list of mapItems for this race
|
||||
*/
|
||||
void setMapMarkers(List<MapMarker> markers);
|
||||
|
||||
/**
|
||||
* sets the finished time, if the finished time is after the finishing time; check the {@link Result} for error message
|
||||
*
|
||||
* @param finishedTime finished time
|
||||
* @return result object
|
||||
*/
|
||||
Result setFinishedTime(TimePoint finishedTime);
|
||||
|
||||
/**
|
||||
* sets the finishing time, if the finishing time is after the start time; check the {@link Result} for error message
|
||||
*
|
||||
* @param finishingTime finishing time
|
||||
* @return result object
|
||||
*/
|
||||
Result setFinishingTime(TimePoint finishingTime);
|
||||
}
|
||||
+163
-122
@@ -1,122 +1,163 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.MapMarker;
|
||||
|
||||
public class ManagedRaceImpl implements ManagedRace {
|
||||
private static final long serialVersionUID = -4936566684992524001L;
|
||||
|
||||
// private static final String TAG = ManagedRace.class.getName();
|
||||
|
||||
private final RaceState state;
|
||||
private final ManagedRaceIdentifier identifier;
|
||||
private Collection<Competitor> competitors;
|
||||
private List<MapMarker> mapMarkers;
|
||||
private CourseBase courseOnServer;
|
||||
|
||||
public ManagedRaceImpl(ManagedRaceIdentifier identifier, RaceState state) {
|
||||
this.state = state;
|
||||
this.identifier = identifier;
|
||||
this.competitors = new ArrayList<Competitor>();
|
||||
this.courseOnServer = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return identifier.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return identifier.getRaceName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRaceName() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fleet getFleet() {
|
||||
return identifier.getFleet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SeriesBase getSeries() {
|
||||
return identifier.getSeries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceGroup getRaceGroup() {
|
||||
return identifier.getRaceGroup();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManagedRaceIdentifier getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLog getRaceLog() {
|
||||
return state.getRaceLog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLogRaceStatus getStatus() {
|
||||
return state.getStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase getCourseDesign() {
|
||||
return state.getCourseDesign();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Competitor> getCompetitors() {
|
||||
return competitors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MapMarker> getMapMarkers(){
|
||||
return mapMarkers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase getCourseOnServer() {
|
||||
return courseOnServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCourseOnServer(CourseBase course) {
|
||||
courseOnServer = course;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompetitors(Collection<Competitor> competitors) {
|
||||
this.competitors = competitors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMapMarkers(List<MapMarker> markers) {
|
||||
this.mapMarkers = markers;
|
||||
}
|
||||
|
||||
}
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import com.sap.sailing.domain.abstractlog.race.RaceLog;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.state.RaceState;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.SeriesBase;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.AndroidRaceLogResolver;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRaceIdentifier;
|
||||
import com.sap.sailing.racecommittee.app.domain.MapMarker;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
public class ManagedRaceImpl implements ManagedRace {
|
||||
private static final long serialVersionUID = -4936566684992524001L;
|
||||
|
||||
// private static final String TAG = ManagedRace.class.getName();
|
||||
|
||||
private final RaceState state;
|
||||
private final ManagedRaceIdentifier identifier;
|
||||
private Collection<Competitor> competitors;
|
||||
private List<MapMarker> mapMarkers;
|
||||
private CourseBase courseOnServer;
|
||||
|
||||
public ManagedRaceImpl(ManagedRaceIdentifier identifier, RaceState state) {
|
||||
this.state = state;
|
||||
this.identifier = identifier;
|
||||
this.competitors = new ArrayList<Competitor>();
|
||||
this.courseOnServer = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceState getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return identifier.getId();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getName() {
|
||||
return identifier.getRaceName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getRaceName() {
|
||||
return getName();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Fleet getFleet() {
|
||||
return identifier.getFleet();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SeriesBase getSeries() {
|
||||
return identifier.getSeries();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceGroup getRaceGroup() {
|
||||
return identifier.getRaceGroup();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ManagedRaceIdentifier getIdentifier() {
|
||||
return identifier;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLog getRaceLog() {
|
||||
return state.getRaceLog();
|
||||
}
|
||||
|
||||
@Override
|
||||
public RaceLogRaceStatus getStatus() {
|
||||
return state.getStatus();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase getCourseDesign() {
|
||||
return state.getCourseDesign();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<Competitor> getCompetitors() {
|
||||
return competitors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MapMarker> getMapMarkers(){
|
||||
return mapMarkers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseBase getCourseOnServer() {
|
||||
return courseOnServer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCourseOnServer(CourseBase course) {
|
||||
courseOnServer = course;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCompetitors(Collection<Competitor> competitors) {
|
||||
this.competitors = competitors;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setMapMarkers(List<MapMarker> markers) {
|
||||
this.mapMarkers = markers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result setFinishedTime(TimePoint finishedTime) {
|
||||
Result result = new Result();
|
||||
FinishingTimeFinder ftf = new FinishingTimeFinder(getRaceLog());
|
||||
if (ftf.analyze() != null) {
|
||||
if (finishedTime.after(MillisecondsTimePoint.now())) {
|
||||
result.setError(R.string.error_time_in_future);
|
||||
} else {
|
||||
if (ftf.analyze().before(finishedTime)) {
|
||||
getState().setFinishedTime(finishedTime);
|
||||
} else {
|
||||
result.setError(R.string.error_finished_time);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result setFinishingTime(TimePoint finishingTime) {
|
||||
Result result = new Result();
|
||||
StartTimeFinder stf = new StartTimeFinder(new AndroidRaceLogResolver(), getRaceLog());
|
||||
if (stf.analyze() != null) {
|
||||
if (finishingTime.after(MillisecondsTimePoint.now())) {
|
||||
result.setError(R.string.error_time_in_future);
|
||||
} else {
|
||||
if (stf.analyze().getStartTime().before(finishingTime)) {
|
||||
getState().setFinishingTime(finishingTime);
|
||||
} else {
|
||||
result.setError(R.string.error_finishing_time);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.sap.sailing.racecommittee.app.domain.impl;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.annotation.StringRes;
|
||||
|
||||
public class Result {
|
||||
|
||||
public final static int OK = 0;
|
||||
|
||||
private int mErrorString;
|
||||
|
||||
public Result() {
|
||||
this(OK);
|
||||
}
|
||||
|
||||
public Result(@StringRes int stringRes) {
|
||||
setError(stringRes);
|
||||
}
|
||||
|
||||
public void resetError() {
|
||||
mErrorString = OK;
|
||||
}
|
||||
|
||||
public void setError(@StringRes int stringRes) {
|
||||
resetError();
|
||||
|
||||
if (stringRes != 0) {
|
||||
mErrorString = stringRes;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isOk() {
|
||||
return (mErrorString == OK);
|
||||
}
|
||||
|
||||
public boolean hasError() {
|
||||
return (mErrorString != OK);
|
||||
}
|
||||
|
||||
public @StringRes int getMessageId() {
|
||||
return mErrorString;
|
||||
}
|
||||
|
||||
public String getMessage(Context context) {
|
||||
return context.getString(getMessageId());
|
||||
}
|
||||
}
|
||||
+14
-43
@@ -1,26 +1,16 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.fragments.raceinfo;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.TimePicker;
|
||||
import android.widget.Toast;
|
||||
|
||||
import android.widget.*;
|
||||
import com.sap.sailing.android.shared.util.ViewHolder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.FinishingTimeFinder;
|
||||
import com.sap.sailing.domain.abstractlog.race.analyzing.impl.StartTimeFinder;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
import com.sap.sailing.racecommittee.app.data.AndroidRaceLogResolver;
|
||||
import com.sap.sailing.racecommittee.app.domain.impl.Result;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter.MoreFlag;
|
||||
import com.sap.sailing.racecommittee.app.ui.adapters.MoreFlagsAdapter.MoreFlagItemClick;
|
||||
@@ -29,6 +19,9 @@ import com.sap.sailing.racecommittee.app.utils.ThemeHelper;
|
||||
import com.sap.sse.common.TimePoint;
|
||||
import com.sap.sse.common.impl.MillisecondsTimePoint;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick {
|
||||
|
||||
private MoreFlagsAdapter mAdapter;
|
||||
@@ -217,45 +210,23 @@ public class MoreFlagsFragment extends BaseFragment implements MoreFlagItemClick
|
||||
}
|
||||
|
||||
private void setFinishTime(TimePoint finishTime) {
|
||||
Result result = null;
|
||||
switch (getArguments().getInt(START_MODE, 0)) {
|
||||
case 1: // Race-State: Finishing -> End Finishing
|
||||
setFinishedTime(finishTime);
|
||||
if (RaceLogRaceStatus.FINISHING.equals(getRace().getStatus())) {
|
||||
result = getRace().setFinishedTime(finishTime);
|
||||
}
|
||||
break;
|
||||
|
||||
default: // Race-State: Running -> Start Finishing
|
||||
setFinishingTime(finishTime);
|
||||
if (RaceLogRaceStatus.RUNNING.equals(getRace().getStatus())) {
|
||||
result = getRace().setFinishingTime(finishTime);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void setFinishingTime(TimePoint finishTime) {
|
||||
StartTimeFinder stf = new StartTimeFinder(new AndroidRaceLogResolver(), getRace().getRaceLog());
|
||||
if (stf.analyze() != null && getRace().getStatus().equals(RaceLogRaceStatus.RUNNING)) {
|
||||
if (finishTime.after(MillisecondsTimePoint.now())) {
|
||||
Toast.makeText(getActivity(), "The selected time is in the future. Please recheck the time.", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
if (stf.analyze().getStartTime().before(finishTime)) {
|
||||
getRaceState().setFinishingTime(finishTime);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), "The selected time is before the race start.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setFinishedTime(TimePoint finishTime) {
|
||||
FinishingTimeFinder ftf = new FinishingTimeFinder(getRace().getRaceLog());
|
||||
if (ftf.analyze() != null && getRace().getStatus().equals(RaceLogRaceStatus.FINISHING)) {
|
||||
if (finishTime.after(MillisecondsTimePoint.now())) {
|
||||
Toast.makeText(getActivity(), "The given finish time is in the future. Please recheck the time.", Toast.LENGTH_LONG).show();
|
||||
} else {
|
||||
if (ftf.analyze().before(finishTime)) {
|
||||
getRaceState().setFinishedTime(finishTime);
|
||||
} else {
|
||||
Toast.makeText(getActivity(), "The given finish time is earlier than than the first finisher time. Please recheck the time.", Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
if (result != null && result.hasError()) {
|
||||
Toast.makeText(getActivity(), result.getMessageId(), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user