RCApp: set finishing und finished time into managed race with checks

This commit is contained in:
Peter Siegmund committed 2015-06-20 15:53:41 +02:00
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>
@@ -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);
}
@@ -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;
}
}
@@ -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());
}
}
@@ -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();
}
}
}