mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-23 22:19:13 +00:00
# default racing procedure and default course designer configurable for regtattas
This commit is contained in:
+26
@@ -0,0 +1,26 @@
|
||||
package com.sap.sailing.domain.common;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Used to decided which Course Designer to pick.
|
||||
*
|
||||
* When modifying these values also check res/preferences.xml of racecommittee.app!
|
||||
*/
|
||||
public enum CourseDesignerMode {
|
||||
UNKNOWN,
|
||||
BY_NAME, // O2, O3, I2,...
|
||||
BY_MAP, // Map-based Course Designer
|
||||
BY_MARKS; // ESS
|
||||
|
||||
public static CourseDesignerMode[] validValues() {
|
||||
List<CourseDesignerMode> validValues = new ArrayList<CourseDesignerMode>();
|
||||
for (CourseDesignerMode type : values()) {
|
||||
if (type != UNKNOWN) {
|
||||
validValues.add(type);
|
||||
}
|
||||
}
|
||||
return validValues.toArray(new CourseDesignerMode[0]);
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -28,7 +28,7 @@ public enum RacingProcedureType {
|
||||
public static RacingProcedureType[] validValues() {
|
||||
List<RacingProcedureType> validValues = new ArrayList<RacingProcedureType>();
|
||||
for (RacingProcedureType type : values()) {
|
||||
if (type != RacingProcedureType.UNKNOWN) {
|
||||
if (type != UNKNOWN) {
|
||||
validValues.add(type);
|
||||
}
|
||||
}
|
||||
|
||||
+18
@@ -55,6 +55,7 @@ import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.impl.VenueImpl;
|
||||
import com.sap.sailing.domain.base.impl.WaypointImpl;
|
||||
import com.sap.sailing.domain.common.Color;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.MarkType;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.NauticalSide;
|
||||
@@ -903,7 +904,24 @@ public class DomainObjectFactoryImpl implements DomainObjectFactory {
|
||||
courseArea = baseDomainFactory.getExistingCourseAreaById(courseAreaUuid);
|
||||
}
|
||||
|
||||
// Let's set these values to something other then null, this way old regattas will gain this field.
|
||||
RacingProcedureType procedureType = RacingProcedureType.UNKNOWN;
|
||||
CourseDesignerMode designerMode = CourseDesignerMode.UNKNOWN;
|
||||
|
||||
if (dbRegatta.containsField(FieldNames.REGATTA_DEFAULT_RACING_PROCEDURE.name())) {
|
||||
procedureType = RacingProcedureType.valueOf(
|
||||
dbRegatta.get(FieldNames.REGATTA_DEFAULT_RACING_PROCEDURE.name()).toString());
|
||||
}
|
||||
|
||||
if (dbRegatta.containsField(FieldNames.REGATTA_DEFAULT_COURSE_DESIGNER.name())) {
|
||||
designerMode = CourseDesignerMode.valueOf(
|
||||
dbRegatta.get(FieldNames.REGATTA_DEFAULT_COURSE_DESIGNER.name()).toString());
|
||||
}
|
||||
|
||||
|
||||
result = new RegattaImpl(raceLogStore, baseName, boatClass, series, /* persistent */ true, loadScoringScheme(dbRegatta), id, courseArea);
|
||||
result.setDefaultRacingProcedureType(procedureType);
|
||||
result.setDefaultCourseDesignerMode(designerMode);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
+2
@@ -18,6 +18,8 @@ public enum FieldNames {
|
||||
REGATTA_ID,
|
||||
REGATTA_BASE_NAME,
|
||||
REGATTA_SERIES,
|
||||
REGATTA_DEFAULT_RACING_PROCEDURE,
|
||||
REGATTA_DEFAULT_COURSE_DESIGNER,
|
||||
SERIES_NAME,
|
||||
SERIES_IS_MEDAL,
|
||||
SERIES_STARTS_WITH_ZERO_SCORE,
|
||||
|
||||
+6
@@ -475,6 +475,12 @@ public class MongoObjectFactoryImpl implements MongoObjectFactory {
|
||||
} else {
|
||||
dbRegatta.put(FieldNames.COURSE_AREA_ID.name(), null);
|
||||
}
|
||||
if (regatta.getDefaultRacingProcedureType() != null) {
|
||||
dbRegatta.put(FieldNames.REGATTA_DEFAULT_RACING_PROCEDURE.name(), regatta.getDefaultRacingProcedureType().name());
|
||||
}
|
||||
if (regatta.getDefaultCourseDesignerMode() != null) {
|
||||
dbRegatta.put(FieldNames.REGATTA_DEFAULT_COURSE_DESIGNER.name(), regatta.getDefaultCourseDesignerMode().name());
|
||||
}
|
||||
|
||||
regattasCollection.update(query, dbRegatta, /* upsrt */ true, /* multi */ false);
|
||||
}
|
||||
|
||||
-12
@@ -1,12 +0,0 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
/**
|
||||
* Used to decided which Course Designer to pick.
|
||||
*
|
||||
* When modifying these values also check res/preferences.xml of racecommittee.app!
|
||||
*/
|
||||
public enum CourseDesignerMode {
|
||||
BY_NAME, // O2, O3, I2,...
|
||||
BY_MAP, // Map-based Course Designer
|
||||
BY_MARKS // ESS
|
||||
}
|
||||
+1
-1
@@ -2,8 +2,8 @@ package com.sap.sailing.domain.base.racegroup;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.Named;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
|
||||
+9
-10
@@ -2,9 +2,9 @@ package com.sap.sailing.domain.base.racegroup.impl;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.impl.NamedImpl;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
@@ -15,16 +15,17 @@ public class RaceGroupImpl extends NamedImpl implements RaceGroup {
|
||||
private final BoatClass boatClass;
|
||||
private final CourseArea courseArea;
|
||||
private final Iterable<SeriesWithRows> series;
|
||||
private final RacingProcedureType defaultRacingProcedureType;
|
||||
private final CourseDesignerMode defaultCourseDesignerMode;
|
||||
|
||||
public RaceGroupImpl(
|
||||
String name,
|
||||
BoatClass boatClass,
|
||||
CourseArea courseArea,
|
||||
Iterable<SeriesWithRows> series) {
|
||||
public RaceGroupImpl(String name, BoatClass boatClass, CourseArea courseArea, Iterable<SeriesWithRows> series,
|
||||
RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode) {
|
||||
super(name);
|
||||
this.boatClass = boatClass;
|
||||
this.courseArea = courseArea;
|
||||
this.series = series;
|
||||
this.defaultRacingProcedureType = defaultRacingProcedureType;
|
||||
this.defaultCourseDesignerMode = defaultCourseDesignerMode;
|
||||
}
|
||||
|
||||
public CourseArea getDefaultCourseArea() {
|
||||
@@ -41,14 +42,12 @@ public class RaceGroupImpl extends NamedImpl implements RaceGroup {
|
||||
|
||||
@Override
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
// TODO Add field and store
|
||||
return RacingProcedureType.GateStart;
|
||||
return defaultRacingProcedureType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
// TODO Add field and store
|
||||
return CourseDesignerMode.BY_NAME;
|
||||
return defaultCourseDesignerMode;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
@@ -2,6 +2,7 @@ package com.sap.sailing.domain.racelog;
|
||||
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
|
||||
public interface RaceLogStartProcedureChangedEvent extends RaceLogEvent {
|
||||
|
||||
RacingProcedureType getStartProcedureType();
|
||||
|
||||
+11
-1
@@ -35,6 +35,12 @@ import com.sap.sailing.domain.tracking.Wind;
|
||||
|
||||
public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
|
||||
/**
|
||||
* When trying to initialize a {@link RaceStateImpl} with an initial {@link RacingProcedureType}
|
||||
* of {@link RacingProcedureType#UNKNOWN} the value of this field will be used instead.
|
||||
*/
|
||||
private final static RacingProcedureType FallbackInitialProcedureType = RacingProcedureType.RRS26;
|
||||
|
||||
private final RaceLog raceLog;
|
||||
private final RaceLogEventAuthor author;
|
||||
private final RaceLogEventFactory factory;
|
||||
@@ -87,7 +93,11 @@ public class RaceStateImpl implements RaceState, RaceLogChangedListener {
|
||||
this.confirmedFinishPositioningListAnalyzer = new ConfirmedFinishPositioningListFinder(raceLog);
|
||||
this.courseDesignerAnalyzer = new LastPublishedCourseDesignFinder(raceLog);
|
||||
|
||||
this.cachedRacingProcedureType = initalRacingProcedureType;
|
||||
if (initalRacingProcedureType == RacingProcedureType.UNKNOWN) {
|
||||
this.cachedRacingProcedureType = FallbackInitialProcedureType;
|
||||
} else {
|
||||
this.cachedRacingProcedureType = initalRacingProcedureType;
|
||||
}
|
||||
this.cachedRaceStatus = RaceLogRaceStatus.UNKNOWN;
|
||||
this.cachedPassId = raceLog.getCurrentPassId();
|
||||
this.cachedIsPositionedCompetitorsConfirmed = false;
|
||||
|
||||
+26
@@ -18,6 +18,7 @@ import com.sap.sailing.domain.base.RegattaListener;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
@@ -29,6 +30,7 @@ import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.tracking.CourseDesignChangedListener;
|
||||
@@ -430,6 +432,30 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultRacingProcedureType(RacingProcedureType type) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultCourseDesignerMode(CourseDesignerMode mode) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package com.sap.sailing.domain.base;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.Named;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.WithID;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.TrackedRegatta;
|
||||
@@ -31,6 +33,28 @@ public interface Regatta extends Named, WithID {
|
||||
*/
|
||||
void setDefaultCourseArea(CourseArea newCourseArea);
|
||||
|
||||
/**
|
||||
* Gets the default {@link RacingProcedureType} of this {@link Regatta}'s races.
|
||||
*/
|
||||
public RacingProcedureType getDefaultRacingProcedureType();
|
||||
|
||||
/**
|
||||
* Sets the default {@link RacingProcedureType} for this {@link Regatta}'s races.
|
||||
* @param mode the {@link RacingProcedureType}
|
||||
*/
|
||||
public void setDefaultRacingProcedureType(RacingProcedureType type);
|
||||
|
||||
/**
|
||||
* Gets the default {@link CourseDesignerMode} of this {@link Regatta}'s races.
|
||||
*/
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode();
|
||||
|
||||
/**
|
||||
* Sets the default {@link CourseDesignerMode} for this {@link Regatta}'s races.
|
||||
* @param mode the {@link CourseDesignerMode}
|
||||
*/
|
||||
public void setDefaultCourseDesignerMode(CourseDesignerMode mode);
|
||||
|
||||
/**
|
||||
* A regatta consists of one or more series.
|
||||
*
|
||||
|
||||
@@ -19,12 +19,14 @@ import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.RegattaListener;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.impl.NamedImpl;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEvent;
|
||||
@@ -50,8 +52,9 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
private final Serializable id;
|
||||
private transient RaceLogStore raceLogStore;
|
||||
|
||||
// Can be changed...
|
||||
private CourseArea defaultCourseArea;
|
||||
private RacingProcedureType defaultRacingProcedureType;
|
||||
private CourseDesignerMode defaultCourseDesignerMode;
|
||||
|
||||
/**
|
||||
* Regattas may be constructed as implicit default regattas in which case they won't need to be stored
|
||||
@@ -108,7 +111,9 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
}
|
||||
this.persistent = persistent;
|
||||
this.scoringScheme = scoringScheme;
|
||||
this.defaultCourseArea = courseArea;
|
||||
this.defaultCourseArea = courseArea;
|
||||
this.defaultRacingProcedureType = RacingProcedureType.UNKNOWN;
|
||||
this.defaultCourseDesignerMode = CourseDesignerMode.UNKNOWN;
|
||||
}
|
||||
|
||||
private void registerRaceLogsOnRaceColumns(Series series) {
|
||||
@@ -357,6 +362,26 @@ public class RegattaImpl extends NamedImpl implements Regatta, RaceColumnListene
|
||||
this.defaultCourseArea = newCourseArea;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
return defaultRacingProcedureType;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultRacingProcedureType(RacingProcedureType type) {
|
||||
defaultRacingProcedureType = type;
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
return defaultCourseDesignerMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultCourseDesignerMode(CourseDesignerMode mode) {
|
||||
defaultCourseDesignerMode = mode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return whether this regatta defines its local per-series result discarding rules; if so, any leaderboard based
|
||||
* on the regatta has to respect this and has to use a result discarding rule implementation that
|
||||
|
||||
+16
-2
@@ -1,24 +1,30 @@
|
||||
package com.sap.sailing.domain.masterdataimport;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
public class RegattaMasterData {
|
||||
|
||||
private String id;
|
||||
private String baseName;
|
||||
private String defaultCourseAreaId;
|
||||
private RacingProcedureType defaultRacingProcedureType;
|
||||
private CourseDesignerMode defaultCourseDesignerMode;
|
||||
private String boatClassName;
|
||||
private String scoringSchemeType;
|
||||
private Iterable<SeriesMasterData> series;
|
||||
private boolean isPersistent;
|
||||
private String regattaName;
|
||||
private Iterable<String> raceIds;
|
||||
|
||||
|
||||
public RegattaMasterData(String id, String baseName, String defaultCourseAreaId, String boatClassName,
|
||||
String scoringSchemeType, Iterable<SeriesMasterData> series, boolean isPersistent, String regattaName,
|
||||
Iterable<String> raceIds) {
|
||||
Iterable<String> raceIds, RacingProcedureType procedureType, CourseDesignerMode designerMode) {
|
||||
this.id = id;
|
||||
this.baseName = baseName;
|
||||
this.defaultCourseAreaId = defaultCourseAreaId;
|
||||
this.defaultRacingProcedureType = procedureType;
|
||||
this.defaultCourseDesignerMode = designerMode;
|
||||
this.boatClassName = boatClassName;
|
||||
this.scoringSchemeType = scoringSchemeType;
|
||||
this.series = series;
|
||||
@@ -43,6 +49,14 @@ public class RegattaMasterData {
|
||||
return defaultCourseAreaId;
|
||||
}
|
||||
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
return defaultRacingProcedureType;
|
||||
}
|
||||
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
return defaultCourseDesignerMode;
|
||||
}
|
||||
|
||||
public String getBoatClassName() {
|
||||
return boatClassName;
|
||||
}
|
||||
|
||||
+26
@@ -17,6 +17,7 @@ import com.sap.sailing.domain.base.RegattaListener;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.Sideline;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.NoWindException;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
@@ -28,6 +29,7 @@ import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.WindSource;
|
||||
import com.sap.sailing.domain.common.WindSourceType;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.domain.racelog.RaceLog;
|
||||
import com.sap.sailing.domain.tracking.CourseDesignChangedListener;
|
||||
@@ -431,6 +433,30 @@ public class MockedTrackedRace implements DynamicTrackedRace {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultRacingProcedureType(RacingProcedureType type) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDefaultCourseDesignerMode(CourseDesignerMode mode) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
+25
-3
@@ -19,12 +19,14 @@ import com.google.gwt.view.client.ListDataProvider;
|
||||
import com.google.gwt.view.client.SelectionChangeEvent;
|
||||
import com.google.gwt.view.client.SelectionModel;
|
||||
import com.google.gwt.view.client.SingleSelectionModel;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.dto.FleetDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceColumnInSeriesDTO;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.gwt.ui.client.DataEntryDialog.DialogCallback;
|
||||
import com.sap.sailing.gwt.ui.client.ErrorReporter;
|
||||
import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
||||
@@ -49,6 +51,8 @@ public class RegattaDetailsComposite extends Composite {
|
||||
private final Label boatClassName;
|
||||
private final Label scoringSystem;
|
||||
private final Label defaultCourseArea;
|
||||
private final Label defaultRacingProcedureType;
|
||||
private final Label defaultCourseDesignerMode;
|
||||
|
||||
private final SelectionModel<SeriesDTO> seriesSelectionModel;
|
||||
private final CellTable<SeriesDTO> seriesTable;
|
||||
@@ -66,7 +70,7 @@ public class RegattaDetailsComposite extends Composite {
|
||||
mainPanel = new CaptionPanel(stringMessages.regatta());
|
||||
VerticalPanel vPanel = new VerticalPanel();
|
||||
mainPanel.add(vPanel);
|
||||
Grid grid = new Grid(4, 2);
|
||||
Grid grid = new Grid(6, 2);
|
||||
vPanel.add(grid);
|
||||
regattaName = new Label();
|
||||
grid.setWidget(0 , 0, new Label(stringMessages.regattaName() + ":"));
|
||||
@@ -77,9 +81,15 @@ public class RegattaDetailsComposite extends Composite {
|
||||
defaultCourseArea = new Label();
|
||||
grid.setWidget(2 , 0, new Label(stringMessages.courseArea() + ":"));
|
||||
grid.setWidget(2 , 1, defaultCourseArea);
|
||||
defaultRacingProcedureType = new Label();
|
||||
grid.setWidget(3, 0, new Label("Procedure:"));
|
||||
grid.setWidget(3, 1, defaultRacingProcedureType);;
|
||||
defaultCourseDesignerMode = new Label();
|
||||
grid.setWidget(4, 0, new Label("Course Designer:"));
|
||||
grid.setWidget(4, 1, defaultCourseDesignerMode);;
|
||||
scoringSystem = new Label();
|
||||
grid.setWidget(3 , 0, new Label(stringMessages.scoringSystem() + ":"));
|
||||
grid.setWidget(3 , 1, scoringSystem);
|
||||
grid.setWidget(5 , 0, new Label(stringMessages.scoringSystem() + ":"));
|
||||
grid.setWidget(5 , 1, scoringSystem);
|
||||
seriesTable = createRegattaSeriesTable();
|
||||
seriesSelectionModel = new SingleSelectionModel<SeriesDTO>();
|
||||
seriesSelectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
|
||||
@@ -315,6 +325,18 @@ public class RegattaDetailsComposite extends Composite {
|
||||
regattaName.setText(regatta.getName());
|
||||
boatClassName.setText(regatta.boatClass != null ? regatta.boatClass.getName() : "");
|
||||
defaultCourseArea.setText(regatta.defaultCourseAreaIdAsString == null ? "" : regatta.defaultCourseAreaName);
|
||||
RacingProcedureType procedureType = regatta.defaultRacingProcedureType;
|
||||
if (procedureType == null || procedureType == RacingProcedureType.UNKNOWN) {
|
||||
defaultRacingProcedureType.setText(stringMessages.none());
|
||||
} else {
|
||||
defaultRacingProcedureType.setText(procedureType.toString());
|
||||
}
|
||||
CourseDesignerMode designerMode = regatta.defaultCourseDesignerMode;
|
||||
if (designerMode == null || designerMode == CourseDesignerMode.UNKNOWN) {
|
||||
defaultCourseDesignerMode.setText(stringMessages.none());
|
||||
} else {
|
||||
defaultCourseDesignerMode.setText(designerMode.toString());
|
||||
}
|
||||
ScoringSchemeType scoringScheme = regatta.scoringScheme;
|
||||
String scoringSystemText = scoringScheme == null ? "" : ScoringSchemeTypeFormatter.format(scoringScheme, stringMessages);
|
||||
scoringSystem.setText(scoringSystemText);
|
||||
|
||||
+3
-1
@@ -262,7 +262,9 @@ public class RegattaListComposite extends Composite implements RegattaDisplayer
|
||||
private void commitEditedRegatta(final RegattaDTO editedRegatta) {
|
||||
final RegattaIdentifier regattaName = new RegattaName(editedRegatta.getName());
|
||||
|
||||
sailingService.updateRegatta(regattaName, editedRegatta.defaultCourseAreaIdAsString, new AsyncCallback<Void>() {
|
||||
sailingService.updateRegatta(regattaName, editedRegatta.defaultCourseAreaIdAsString,
|
||||
editedRegatta.defaultRacingProcedureType, editedRegatta.defaultCourseDesignerMode,
|
||||
new AsyncCallback<Void>() {
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
errorReporter.reportError("Error trying to update regatta " + editedRegatta.getName() + ": " + caught.getMessage());
|
||||
|
||||
+63
-1
@@ -3,13 +3,21 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import com.google.gwt.user.client.ui.Grid;
|
||||
import com.google.gwt.user.client.ui.Label;
|
||||
import com.google.gwt.user.client.ui.ListBox;
|
||||
import com.google.gwt.user.client.ui.VerticalPanel;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
||||
|
||||
public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFleetsDialog {
|
||||
|
||||
protected ListBox racingProcedureListBox;
|
||||
protected ListBox designerModeEntryListBox;
|
||||
|
||||
public RegattaWithSeriesAndFleetsEditDialog(RegattaDTO regatta, Collection<RegattaDTO> existingRegattas,
|
||||
List<EventDTO> existingEvents, StringMessages stringMessages, DialogCallback<RegattaDTO> callback) {
|
||||
super(regatta, existingEvents, stringMessages.editRegatta(), stringMessages.ok(), stringMessages,
|
||||
@@ -19,6 +27,30 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl
|
||||
scoringSchemeListBox.setEnabled(false);
|
||||
sailingEventsListBox.setEnabled(true);
|
||||
courseAreaListBox.setEnabled(true);
|
||||
|
||||
racingProcedureListBox = createListBox(false);
|
||||
for (RacingProcedureType type : RacingProcedureType.values()) {
|
||||
if (type == RacingProcedureType.UNKNOWN) {
|
||||
racingProcedureListBox.addItem(stringMessages.none(), type.name());
|
||||
} else {
|
||||
racingProcedureListBox.addItem(type.name(), type.name());
|
||||
}
|
||||
if (type == regatta.defaultRacingProcedureType) {
|
||||
racingProcedureListBox.setSelectedIndex(racingProcedureListBox.getItemCount() - 1);
|
||||
}
|
||||
}
|
||||
designerModeEntryListBox = createListBox(false);
|
||||
for (CourseDesignerMode mode : CourseDesignerMode.values()) {
|
||||
if (mode == CourseDesignerMode.UNKNOWN) {
|
||||
designerModeEntryListBox.addItem(stringMessages.none(), mode.name());
|
||||
} else {
|
||||
designerModeEntryListBox.addItem(mode.name(), mode.name());
|
||||
}
|
||||
if (mode == regatta.defaultCourseDesignerMode) {
|
||||
designerModeEntryListBox.setSelectedIndex(designerModeEntryListBox.getItemCount() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -29,7 +61,37 @@ public class RegattaWithSeriesAndFleetsEditDialog extends RegattaWithSeriesAndFl
|
||||
|
||||
@Override
|
||||
protected void setupAdditionalWidgetsOnPanel(VerticalPanel panel) {
|
||||
// nothing yet
|
||||
Grid formGrid = new Grid(2, 2);
|
||||
formGrid.setWidget(0, 0, new Label(stringMessages.racingProcedure() + ":"));
|
||||
formGrid.setWidget(0, 1, racingProcedureListBox);
|
||||
formGrid.setWidget(1, 0, new Label(stringMessages.courseDesignerMode() + ":"));
|
||||
formGrid.setWidget(1, 1, designerModeEntryListBox);
|
||||
panel.add(formGrid);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected RegattaDTO getResult() {
|
||||
RegattaDTO regatta = super.getResult();
|
||||
|
||||
regatta.defaultRacingProcedureType = getSelectedDefaultRacingProcedureType();
|
||||
regatta.defaultCourseDesignerMode = getSelectedDefaultCourseDesignerModeType();
|
||||
return regatta;
|
||||
}
|
||||
|
||||
private CourseDesignerMode getSelectedDefaultCourseDesignerModeType() {
|
||||
int index = designerModeEntryListBox.getSelectedIndex();
|
||||
if (index >= 0) {
|
||||
return CourseDesignerMode.valueOf(designerModeEntryListBox.getValue(index));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected RacingProcedureType getSelectedDefaultRacingProcedureType() {
|
||||
int index = racingProcedureListBox.getSelectedIndex();
|
||||
if (index >= 0) {
|
||||
return RacingProcedureType.valueOf(racingProcedureListBox.getValue(index));
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+3
-1
@@ -9,6 +9,7 @@ import java.util.Set;
|
||||
|
||||
import com.google.gwt.user.client.rpc.RemoteService;
|
||||
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
@@ -29,6 +30,7 @@ import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
@@ -156,7 +158,7 @@ public interface SailingService extends RemoteService {
|
||||
|
||||
void removeRegattas(Collection<RegattaIdentifier> regattas);
|
||||
|
||||
void updateRegatta(RegattaIdentifier regattaIdentifier, String defaultCourseAreaId);
|
||||
void updateRegatta(RegattaIdentifier regattaIdentifier, String defaultCourseAreaId, RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode);
|
||||
|
||||
List<RaceColumnInSeriesDTO> addRaceColumnsToSeries(RegattaIdentifier regattaIdentifier, String seriesName, List<String> columnNames);
|
||||
|
||||
|
||||
+3
-1
@@ -8,6 +8,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
@@ -29,6 +30,7 @@ import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
import com.sap.sailing.domain.common.dto.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.gwt.ui.shared.BulkScoreCorrectionDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompactRaceMapDataDTO;
|
||||
import com.sap.sailing.gwt.ui.shared.CompetitorsRaceDataDTO;
|
||||
@@ -427,7 +429,7 @@ public interface SailingServiceAsync {
|
||||
|
||||
void getEventByIdAsString(String eventIdAsString, AsyncCallback<EventDTO> asyncCallback);
|
||||
|
||||
void updateRegatta(RegattaIdentifier regattaIdentifier, String defaultCourseAreaId, AsyncCallback<Void> callback);
|
||||
void updateRegatta(RegattaIdentifier regattaIdentifier, String defaultCourseAreaId, RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode, AsyncCallback<Void> callback);
|
||||
|
||||
void getBuildVersion(AsyncCallback<String> callback);
|
||||
|
||||
|
||||
+4
@@ -837,4 +837,8 @@ public interface StringMessages extends Messages {
|
||||
String maximumRoundsForCourse();
|
||||
String resultsMailRecipient();
|
||||
String deviceConfiguration();
|
||||
|
||||
String none();
|
||||
String courseDesignerMode();
|
||||
String racingProcedure();
|
||||
}
|
||||
|
||||
+4
-1
@@ -828,4 +828,7 @@ allowedCourseAreas=Allowed Course Areas
|
||||
minimumRoundsForCourse=Minimum Rounds for Course
|
||||
maximumRoundsForCourse=Maximum Rounds for Course
|
||||
resultsMailRecipient=Results Mail Recipient
|
||||
deviceConfiguration=Device Configuration
|
||||
deviceConfiguration=Device Configuration
|
||||
none=None
|
||||
courseDesignerMode=Course Designer
|
||||
racingProcedure=Racing Procedure
|
||||
+4
-1
@@ -824,4 +824,7 @@ allowedCourseAreas=Erlaubte Rennbahnen
|
||||
minimumRoundsForCourse=Minimale Rundenanzahl
|
||||
maximumRoundsForCourse=Maximale Rundenanzahl
|
||||
resultsMailRecipient=Empfänger der Ergebnislisten
|
||||
deviceConfiguration=Device Configuration
|
||||
deviceConfiguration=Device Configuration
|
||||
none=Keine
|
||||
courseDesignerMode=Kursdesigner
|
||||
racingProcedure=Rennregeln
|
||||
+7
-2
@@ -75,6 +75,7 @@ import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.CountryCode;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.DetailType;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
@@ -626,6 +627,8 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
regattaDTO.defaultCourseAreaIdAsString = regatta.getDefaultCourseArea().getId().toString();
|
||||
regattaDTO.defaultCourseAreaName = regatta.getDefaultCourseArea().getName();
|
||||
}
|
||||
regattaDTO.defaultRacingProcedureType = regatta.getDefaultRacingProcedureType();
|
||||
regattaDTO.defaultCourseDesignerMode = regatta.getDefaultCourseDesignerMode();
|
||||
return regattaDTO;
|
||||
}
|
||||
|
||||
@@ -2789,9 +2792,11 @@ public class SailingServiceImpl extends ProxiedRemoteServiceServlet implements S
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateRegatta(RegattaIdentifier regattaName, String defaultCourseAreaId) {
|
||||
public void updateRegatta(RegattaIdentifier regattaName, String defaultCourseAreaId,
|
||||
RacingProcedureType defaultRacingProcedureType, CourseDesignerMode defaultCourseDesignerMode) {
|
||||
UUID courseAreaUuid = convertIdentifierStringToUuid(defaultCourseAreaId);
|
||||
getService().apply(new UpdateSpecificRegatta(regattaName, courseAreaUuid));
|
||||
getService().apply(new UpdateSpecificRegatta(regattaName, courseAreaUuid,
|
||||
defaultRacingProcedureType, defaultCourseDesignerMode));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+4
@@ -3,12 +3,14 @@ package com.sap.sailing.gwt.ui.shared;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.dto.BoatClassDTO;
|
||||
import com.sap.sailing.domain.common.dto.NamedDTO;
|
||||
import com.sap.sailing.domain.common.dto.RaceDTO;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
public class RegattaDTO extends NamedDTO {
|
||||
private static final long serialVersionUID = -4594784946348402759L;
|
||||
@@ -21,6 +23,8 @@ public class RegattaDTO extends NamedDTO {
|
||||
public ScoringSchemeType scoringScheme;
|
||||
public String defaultCourseAreaIdAsString;
|
||||
public String defaultCourseAreaName;
|
||||
public RacingProcedureType defaultRacingProcedureType;
|
||||
public CourseDesignerMode defaultCourseDesignerMode;
|
||||
|
||||
public RegattaDTO() {}
|
||||
|
||||
|
||||
+23
@@ -35,6 +35,7 @@ import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.impl.VenueImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.RaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
@@ -42,6 +43,7 @@ import com.sap.sailing.domain.common.RegattaNameAndRaceName;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
@@ -130,6 +132,27 @@ public class TestStoringAndLoadingEventsAndRegattas extends AbstractMongoDBTest
|
||||
assertEquals(loadedRegatta.getDefaultCourseArea().getId(), courseArea.getId());
|
||||
assertEquals(loadedRegatta.getDefaultCourseArea().getName(), courseArea.getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadStoreRegattaDefaultProcedureAndCourseDesigner() {
|
||||
|
||||
final RacingProcedureType type = RacingProcedureType.GateStart;
|
||||
final CourseDesignerMode mode = CourseDesignerMode.BY_MAP;
|
||||
|
||||
BoatClass boatClass = DomainFactory.INSTANCE.getOrCreateBoatClass("ESS40", false);
|
||||
Regatta regatta = createRegattaAndAddRaceColumns(1, 1, "RR", boatClass, false,
|
||||
DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.HIGH_POINT));
|
||||
regatta.setDefaultRacingProcedureType(type);
|
||||
regatta.setDefaultCourseDesignerMode(mode);
|
||||
|
||||
MongoObjectFactory mof = PersistenceFactory.INSTANCE.getMongoObjectFactory(getMongoService());
|
||||
mof.storeRegatta(regatta);
|
||||
DomainObjectFactory dof = PersistenceFactory.INSTANCE.getDomainObjectFactory(getMongoService(), DomainFactory.INSTANCE);
|
||||
Regatta loadedRegatta = dof.loadRegatta(regatta.getName(), null);
|
||||
|
||||
assertEquals(type, loadedRegatta.getDefaultRacingProcedureType());
|
||||
assertEquals(mode, loadedRegatta.getDefaultCourseDesignerMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadStoreSimpleRegattaLeaderboard() {
|
||||
|
||||
+15
-1
@@ -9,6 +9,8 @@ import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.masterdataimport.RaceColumnMasterData;
|
||||
import com.sap.sailing.domain.masterdataimport.RegattaMasterData;
|
||||
import com.sap.sailing.domain.masterdataimport.SeriesMasterData;
|
||||
@@ -38,7 +40,19 @@ public class RegattaMasterDataJsonDeserializer implements JsonDeserializer<Regat
|
||||
boolean isPersistent = (Boolean) object.get(RegattaMasterDataJsonSerializer.FIELD_IS_PERSISTENT);
|
||||
Iterable<SeriesMasterData> series = deserializeSeries((JSONArray) object.get(RegattaMasterDataJsonSerializer.FIELD_SERIES));
|
||||
Iterable<String> raceIds = deserializeRaceIds((JSONArray) object.get(RegattaMasterDataJsonSerializer.FIELD_REGATTA_RACE_IDS));
|
||||
return new RegattaMasterData(id, baseName, defaultCourseAreaId, boatClassName, scoringSchemeType, series, isPersistent, regattaName, raceIds);
|
||||
|
||||
RacingProcedureType procedureType = null;
|
||||
String defaultRacingProcedureTypeValue = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE_TYPE);
|
||||
if (defaultRacingProcedureTypeValue != null) {
|
||||
procedureType = RacingProcedureType.valueOf(defaultRacingProcedureTypeValue);
|
||||
}
|
||||
CourseDesignerMode designerMode = null;
|
||||
String defaultCourseDesignerModeValue = (String) object.get(RegattaMasterDataJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER_MODE);
|
||||
if (defaultCourseDesignerModeValue != null) {
|
||||
designerMode = CourseDesignerMode.valueOf(defaultCourseDesignerModeValue);
|
||||
}
|
||||
|
||||
return new RegattaMasterData(id, baseName, defaultCourseAreaId, boatClassName, scoringSchemeType, series, isPersistent, regattaName, raceIds, procedureType, designerMode);
|
||||
}
|
||||
|
||||
private Iterable<String> deserializeRaceIds(JSONArray jsonArray) {
|
||||
|
||||
+43
-32
@@ -10,6 +10,8 @@ import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializationException;
|
||||
import com.sap.sailing.server.gateway.deserialization.JsonDeserializer;
|
||||
import com.sap.sailing.server.gateway.deserialization.impl.Helpers;
|
||||
@@ -17,38 +19,47 @@ import com.sap.sailing.server.gateway.serialization.racegroup.impl.RaceGroupJson
|
||||
import com.sap.sailing.server.gateway.serialization.racegroup.impl.SeriesWithRowsOfRaceGroupSerializer;
|
||||
|
||||
public class RaceGroupDeserializer implements JsonDeserializer<RaceGroup> {
|
||||
|
||||
private JsonDeserializer<BoatClass> boatClassDeserializer;
|
||||
private JsonDeserializer<SeriesWithRows> seriesDeserializer;
|
||||
|
||||
public RaceGroupDeserializer(
|
||||
JsonDeserializer<BoatClass> boatClassDeserializer,
|
||||
JsonDeserializer<SeriesWithRows> seriesDeserializer) {
|
||||
this.boatClassDeserializer = boatClassDeserializer;
|
||||
this.seriesDeserializer = seriesDeserializer;
|
||||
}
|
||||
private JsonDeserializer<BoatClass> boatClassDeserializer;
|
||||
private JsonDeserializer<SeriesWithRows> seriesDeserializer;
|
||||
|
||||
public RaceGroup deserialize(JSONObject object)
|
||||
throws JsonDeserializationException {
|
||||
String name = object.get(RaceGroupJsonSerializer.FIELD_NAME).toString();
|
||||
BoatClass boatClass = null;
|
||||
CourseArea courseArea = null;
|
||||
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_COURSE_AREA)) {
|
||||
// TODO: deserialize CourseArea ...
|
||||
}
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_BOAT_CLASS)) {
|
||||
boatClass = boatClassDeserializer.deserialize(
|
||||
Helpers.getNestedObjectSafe(object, RaceGroupJsonSerializer.FIELD_BOAT_CLASS));
|
||||
}
|
||||
|
||||
Collection<SeriesWithRows> series = new ArrayList<SeriesWithRows>();
|
||||
for (Object seriesObject : Helpers.getNestedArraySafe(
|
||||
object,
|
||||
SeriesWithRowsOfRaceGroupSerializer.FIELD_SERIES)) {
|
||||
JSONObject seriesJson = Helpers.toJSONObjectSafe(seriesObject);
|
||||
series.add(seriesDeserializer.deserialize(seriesJson));
|
||||
}
|
||||
return new RaceGroupImpl(name, boatClass, courseArea, series);
|
||||
}
|
||||
public RaceGroupDeserializer(JsonDeserializer<BoatClass> boatClassDeserializer,
|
||||
JsonDeserializer<SeriesWithRows> seriesDeserializer) {
|
||||
this.boatClassDeserializer = boatClassDeserializer;
|
||||
this.seriesDeserializer = seriesDeserializer;
|
||||
}
|
||||
|
||||
public RaceGroup deserialize(JSONObject object) throws JsonDeserializationException {
|
||||
String name = object.get(RaceGroupJsonSerializer.FIELD_NAME).toString();
|
||||
BoatClass boatClass = null;
|
||||
CourseArea courseArea = null;
|
||||
RacingProcedureType procedure = RacingProcedureType.UNKNOWN;
|
||||
CourseDesignerMode designer = CourseDesignerMode.UNKNOWN;
|
||||
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_COURSE_AREA)) {
|
||||
// TODO: deserialize CourseArea ...
|
||||
}
|
||||
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_BOAT_CLASS)) {
|
||||
boatClass = boatClassDeserializer.deserialize(Helpers.getNestedObjectSafe(object,
|
||||
RaceGroupJsonSerializer.FIELD_BOAT_CLASS));
|
||||
}
|
||||
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE)) {
|
||||
procedure = RacingProcedureType.valueOf(
|
||||
object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_RACING_PROCEDURE).toString());
|
||||
}
|
||||
|
||||
if (object.containsKey(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER)) {
|
||||
designer = CourseDesignerMode.valueOf(
|
||||
object.get(RaceGroupJsonSerializer.FIELD_DEFAULT_COURSE_DESIGNER).toString());
|
||||
}
|
||||
|
||||
Collection<SeriesWithRows> series = new ArrayList<SeriesWithRows>();
|
||||
for (Object seriesObject : Helpers.getNestedArraySafe(object, SeriesWithRowsOfRaceGroupSerializer.FIELD_SERIES)) {
|
||||
JSONObject seriesJson = Helpers.toJSONObjectSafe(seriesObject);
|
||||
series.add(seriesDeserializer.deserialize(seriesJson));
|
||||
}
|
||||
return new RaceGroupImpl(name, boatClass, courseArea, series, procedure, designer);
|
||||
}
|
||||
}
|
||||
+16
@@ -12,7 +12,9 @@ import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.ResultDiscardingRule;
|
||||
import com.sap.sailing.domain.leaderboard.ThresholdBasedResultDiscardingRule;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
@@ -25,6 +27,8 @@ public class RegattaMasterDataJsonSerializer implements JsonSerializer<Regatta>
|
||||
public static final String FIELD_REGATTAS = "regattas";
|
||||
public static final String FIELD_BOAT_CLASS_NAME = "boatClass";
|
||||
public static final String FIELD_DEFAULT_COURSE_AREA_ID = "defaultCourseAreaId";
|
||||
public static final String FIELD_DEFAULT_RACING_PROCEDURE_TYPE = "defaultRacingProcedureType";
|
||||
public static final String FIELD_DEFAULT_COURSE_DESIGNER_MODE = "defaultCourseDesignerMode";
|
||||
public static final String FIELD_SCORING_SCHEME_TYPE = "scoringSchemeType";
|
||||
public static final String FIELD_SERIES = "series";
|
||||
public static final String FIELD_RACE_COLUMNS = "raceColumns";
|
||||
@@ -63,6 +67,18 @@ public class RegattaMasterDataJsonSerializer implements JsonSerializer<Regatta>
|
||||
} else {
|
||||
result.put(FIELD_DEFAULT_COURSE_AREA_ID, null);
|
||||
}
|
||||
RacingProcedureType procedureType = regatta.getDefaultRacingProcedureType();
|
||||
if (procedureType != null) {
|
||||
result.put(FIELD_DEFAULT_RACING_PROCEDURE_TYPE, procedureType.name());
|
||||
} else {
|
||||
result.put(FIELD_DEFAULT_RACING_PROCEDURE_TYPE, null);
|
||||
}
|
||||
CourseDesignerMode designerMode = regatta.getDefaultCourseDesignerMode();
|
||||
if (designerMode != null) {
|
||||
result.put(FIELD_DEFAULT_COURSE_DESIGNER_MODE, designerMode.name());
|
||||
} else {
|
||||
result.put(FIELD_DEFAULT_COURSE_DESIGNER_MODE, null);
|
||||
}
|
||||
result.put(FIELD_SCORING_SCHEME_TYPE, regatta.getScoringScheme().getType().toString());
|
||||
result.put(FIELD_SERIES, createJsonArrayForSeries(regatta.getSeries()));
|
||||
result.put(FIELD_IS_PERSISTENT, regatta.isPersistent());
|
||||
|
||||
+10
@@ -13,6 +13,8 @@ public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup>
|
||||
public static final String FIELD_NAME = "name";
|
||||
public static final String FIELD_COURSE_AREA = "courseArea";
|
||||
public static final String FIELD_BOAT_CLASS = "boatClass";
|
||||
public static final String FIELD_DEFAULT_RACING_PROCEDURE = "defaultProcedure";
|
||||
public static final String FIELD_DEFAULT_COURSE_DESIGNER = "defaultCourseDesigner";
|
||||
|
||||
private JsonSerializer<BoatClass> boatClassSerializer;
|
||||
private JsonSerializer<CourseArea> courseAreaSerializer;
|
||||
@@ -39,6 +41,14 @@ public class RaceGroupJsonSerializer extends ExtendableJsonSerializer<RaceGroup>
|
||||
if (object.getBoatClass() != null) {
|
||||
result.put(FIELD_BOAT_CLASS, boatClassSerializer.serialize(object.getBoatClass()));
|
||||
}
|
||||
|
||||
if (object.getDefaultRacingProcedureType() != null) {
|
||||
result.put(FIELD_DEFAULT_RACING_PROCEDURE, object.getDefaultRacingProcedureType().name());
|
||||
}
|
||||
|
||||
if (object.getDefaultCourseDesignerMode() != null) {
|
||||
result.put(FIELD_DEFAULT_COURSE_DESIGNER, object.getDefaultCourseDesignerMode().name());
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
+12
-3
@@ -12,6 +12,7 @@ import com.sap.sailing.domain.base.CourseArea;
|
||||
import com.sap.sailing.domain.base.Fleet;
|
||||
import com.sap.sailing.domain.base.RaceColumn;
|
||||
import com.sap.sailing.domain.base.RaceColumnInSeries;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.RaceCell;
|
||||
@@ -22,7 +23,9 @@ import com.sap.sailing.domain.base.racegroup.impl.RaceCellImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.RaceRowImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.SeriesWithRowsImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
|
||||
@@ -40,15 +43,21 @@ public class RaceGroupFactory {
|
||||
String name = leaderboard.getName();
|
||||
|
||||
CourseArea courseArea = leaderboard.getDefaultCourseArea();
|
||||
|
||||
BoatClass boatClass = null;
|
||||
RacingProcedureType defaultProcedureType = RacingProcedureType.UNKNOWN;
|
||||
CourseDesignerMode defaultCourseDesignerMode = CourseDesignerMode.UNKNOWN;
|
||||
|
||||
if (leaderboard instanceof RegattaLeaderboard) {
|
||||
boatClass = ((RegattaLeaderboard) leaderboard).getRegatta().getBoatClass();
|
||||
Regatta regatta = ((RegattaLeaderboard) leaderboard).getRegatta();
|
||||
boatClass = regatta.getBoatClass();
|
||||
defaultProcedureType = regatta.getDefaultRacingProcedureType();
|
||||
defaultCourseDesignerMode = regatta.getDefaultCourseDesignerMode();
|
||||
}
|
||||
|
||||
Iterable<SeriesWithRows> series = getSeries(leaderboard);
|
||||
|
||||
return new RaceGroupImpl(name, boatClass, courseArea, series);
|
||||
return new RaceGroupImpl(name, boatClass, courseArea, series,
|
||||
defaultProcedureType, defaultCourseDesignerMode);
|
||||
}
|
||||
|
||||
public Iterable<SeriesWithRows> getSeries(Leaderboard leaderboard) {
|
||||
|
||||
+42
-5
@@ -22,9 +22,11 @@ import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.impl.FleetImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RegattaName;
|
||||
import com.sap.sailing.domain.common.ScoringSchemeType;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
|
||||
public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
@Test
|
||||
@@ -35,17 +37,21 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
final UUID regattaId = UUID.randomUUID();
|
||||
Regatta masterRegatta = master.createRegatta(baseEventName, boatClassName, regattaId, series,
|
||||
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), null);
|
||||
|
||||
Thread.sleep(1000);
|
||||
|
||||
Regatta replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
assertTrue(replicatedRegatta.isPersistent());
|
||||
assertTrue(Util.isEmpty((replicatedRegatta.getSeries())));
|
||||
assertNull(replicatedRegatta.getDefaultCourseArea());
|
||||
assertTrue(regattaId.equals(replicatedRegatta.getId()));
|
||||
assertEquals(masterRegatta.getDefaultRacingProcedureType(), replicatedRegatta.getDefaultRacingProcedureType());
|
||||
assertEquals(masterRegatta.getDefaultCourseDesignerMode(), replicatedRegatta.getDefaultCourseDesignerMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSpecificRegattaReplication() throws InterruptedException {
|
||||
public void testUpdateSpecificRegattaReplicationForCourseArea() throws InterruptedException {
|
||||
Regatta replicatedRegatta;
|
||||
|
||||
final UUID alphaCourseAreaId = UUID.randomUUID();
|
||||
@@ -60,7 +66,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
/* persistent */ true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId);
|
||||
|
||||
// Test for 'null'
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId, null, null);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
@@ -68,7 +74,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
|
||||
// Test for 'alpha'
|
||||
currentCourseAreaId = alphaCourseAreaId;
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId, null, null);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
@@ -76,7 +82,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
|
||||
// Test for 'tv'
|
||||
currentCourseAreaId = tvCourseAreaId;
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId, null, null);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
@@ -84,12 +90,43 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
|
||||
|
||||
// Test back to 'null'
|
||||
currentCourseAreaId = null;
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId);
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId, null, null);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
assertNull(replicatedRegatta.getDefaultCourseArea());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateSpecificRegattaReplicationForProcedureAndCourseDesigner() throws InterruptedException {
|
||||
Regatta replicatedRegatta;
|
||||
|
||||
final UUID alphaCourseAreaId = UUID.randomUUID();
|
||||
|
||||
Event event = master.addEvent("Event", "Venue", ".", true, UUID.randomUUID());
|
||||
master.addCourseArea(event.getId(), "Alpha", alphaCourseAreaId);
|
||||
|
||||
UUID currentCourseAreaId = null;
|
||||
Regatta masterRegatta = master.createRegatta("RR", "49er", UUID.randomUUID(), Collections.<Series>emptyList(),
|
||||
true, DomainFactory.INSTANCE.createScoringScheme(ScoringSchemeType.LOW_POINT), currentCourseAreaId);
|
||||
|
||||
// Test for 'null'
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId, null, null);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
assertNull(replicatedRegatta.getDefaultRacingProcedureType());
|
||||
assertNull(replicatedRegatta.getDefaultCourseDesignerMode());
|
||||
|
||||
// Test for values
|
||||
master.updateRegatta(new RegattaName(masterRegatta.getName()), currentCourseAreaId,
|
||||
RacingProcedureType.ESS, CourseDesignerMode.BY_MARKS);
|
||||
Thread.sleep(1000);
|
||||
replicatedRegatta = replica.getRegatta(new RegattaName(masterRegatta.getName()));
|
||||
assertNotNull(replicatedRegatta);
|
||||
assertEquals(masterRegatta.getDefaultRacingProcedureType(), replicatedRegatta.getDefaultRacingProcedureType());
|
||||
assertEquals(masterRegatta.getDefaultCourseDesignerMode(), replicatedRegatta.getDefaultCourseDesignerMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultRegattaReplication() throws InterruptedException {
|
||||
|
||||
+59
-10
@@ -1,5 +1,7 @@
|
||||
package com.sap.sailing.server.test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.net.MalformedURLException;
|
||||
@@ -45,12 +47,14 @@ import com.sap.sailing.domain.base.impl.NationalityImpl;
|
||||
import com.sap.sailing.domain.base.impl.PersonImpl;
|
||||
import com.sap.sailing.domain.base.impl.SeriesImpl;
|
||||
import com.sap.sailing.domain.base.impl.TeamImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.MasterDataImportObjectCreationCount;
|
||||
import com.sap.sailing.domain.common.MaxPointsReason;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
@@ -78,6 +82,8 @@ public class MasterDataImportTest {
|
||||
|
||||
private static final String TEST_GROUP_NAME = "testGroup";
|
||||
private static final String TEST_EVENT_NAME = "testEvent";
|
||||
private static final String TEST_REGATTA_NAME = "testRegatta";
|
||||
private static final String TEST_BOAT_CLASS_NAME = "29er";
|
||||
private static final String TEST_LEADERBOARD_NAME = "testRegatta (29er)";
|
||||
private static final String TEST_GROUP_NAME2 = "testGroup2";
|
||||
|
||||
@@ -166,7 +172,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -334,7 +340,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -489,7 +495,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -620,7 +626,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -717,7 +723,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1NotToOverride = new FleetImpl("testFleet1");
|
||||
fleetsNotToOverride.add(testFleet1NotToOverride);
|
||||
seriesNotToOverride.add(new SeriesImpl("testSeries", false, fleetsNotToOverride, emptyRaceColumnNamesList, destService));
|
||||
Regatta regattaNotToOverride = destService.createRegatta("testRegatta", "29er", regattaUUID, seriesNotToOverride, true, new LowPoint(),
|
||||
Regatta regattaNotToOverride = destService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, seriesNotToOverride, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regattaNotToOverride);
|
||||
for (String name : raceColumnNamesNotToOverride) {
|
||||
@@ -796,7 +802,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -893,7 +899,7 @@ public class MasterDataImportTest {
|
||||
FleetImpl testFleet1ToOverride = new FleetImpl("testFleet1");
|
||||
fleetsToOverride.add(testFleet1ToOverride);
|
||||
seriesToOverride.add(new SeriesImpl("testSeries", false, fleetsToOverride, emptyRaceColumnNamesList, destService));
|
||||
Regatta regattaToOverride = destService.createRegatta("testRegatta", "29er", regattaUUID, seriesToOverride, true, new LowPoint(),
|
||||
Regatta regattaToOverride = destService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, seriesToOverride, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regattaToOverride);
|
||||
for (String name : raceColumnNamesToOverride) {
|
||||
@@ -951,6 +957,49 @@ public class MasterDataImportTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMasterDataImportForRegattaDefaultProcedureAndDesigner() throws MalformedURLException, IOException, InterruptedException {
|
||||
RacingEventService sourceService = new RacingEventServiceImpl();
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, UUID.randomUUID(),
|
||||
new ArrayList<Series>(), true, new LowPoint(), null);
|
||||
// Let's use the setters directly because we are not testing replication
|
||||
regatta.setDefaultRacingProcedureType(RacingProcedureType.GateStart);
|
||||
regatta.setDefaultCourseDesignerMode(CourseDesignerMode.BY_MARKS);
|
||||
|
||||
|
||||
Leaderboard leaderboard = sourceService.addRegattaLeaderboard(regatta.getRegattaIdentifier(),
|
||||
"testDisplayName", new int[] { 1, 2, 3, 4 });
|
||||
List<String> leaderboardNames = new ArrayList<String>();
|
||||
leaderboardNames.add(leaderboard.getName());
|
||||
sourceService.addLeaderboardGroup(TEST_GROUP_NAME, "testGroupDesc", false, leaderboardNames, null, null);
|
||||
|
||||
// Serialize
|
||||
TopLevelMasterDataSerializer serializer = new TopLevelMasterDataSerializer(
|
||||
sourceService.getLeaderboardGroups(), sourceService.getAllEvents(), sourceService.getPersistentRegattasForRaceIDs(),
|
||||
sourceService.getAllMediaTracks());
|
||||
Set<String> names = new HashSet<String>();
|
||||
names.add(TEST_GROUP_NAME);
|
||||
JSONObject masterDataOverallObject = serializer.serialize(names);
|
||||
Assert.assertNotNull(masterDataOverallObject);
|
||||
|
||||
// Delete all data above from the database, to allow recreating all of it on target server
|
||||
deleteCreatedDataFromDatabase();
|
||||
|
||||
RacingEventService destService = new RacingEventServiceImplMock();
|
||||
|
||||
// Deserialization copied from SailingServiceImpl
|
||||
DomainFactory domainFactory = DomainFactory.INSTANCE;
|
||||
MasterDataImporter importer = new MasterDataImporter(domainFactory, destService);
|
||||
importer.importMasterData(masterDataOverallObject.toString(), false);
|
||||
|
||||
Regatta importedRegatta = destService.getRegattaByName(regatta.getName());
|
||||
|
||||
assertNotNull(importedRegatta.getDefaultRacingProcedureType());
|
||||
assertNotNull(importedRegatta.getDefaultCourseDesignerMode());
|
||||
assertEquals(regatta.getDefaultRacingProcedureType(), importedRegatta.getDefaultRacingProcedureType());
|
||||
assertEquals(regatta.getDefaultCourseDesignerMode(), importedRegatta.getDefaultCourseDesignerMode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMasterDataImportForRegattaWithoutCourseArea() throws MalformedURLException, IOException, InterruptedException {
|
||||
// Setup source service
|
||||
@@ -969,7 +1018,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
null);
|
||||
for (String name : raceColumnNames) {
|
||||
series.get(0).addRaceColumn(name, sourceService);
|
||||
@@ -1091,7 +1140,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
@@ -1265,7 +1314,7 @@ public class MasterDataImportTest {
|
||||
fleets.add(new FleetImpl("testFleet2"));
|
||||
series.add(new SeriesImpl("testSeries", false, fleets, emptyRaceColumnNamesList, sourceService));
|
||||
UUID regattaUUID = UUID.randomUUID();
|
||||
Regatta regatta = sourceService.createRegatta("testRegatta", "29er", regattaUUID, series, true, new LowPoint(),
|
||||
Regatta regatta = sourceService.createRegatta(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME, regattaUUID, series, true, new LowPoint(),
|
||||
courseAreaUUID);
|
||||
event.addRegatta(regatta);
|
||||
for (String name : raceColumnNames) {
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.sap.sailing.domain.base.Series;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfiguration;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationIdentifier;
|
||||
import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RaceFetcher;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaFetcher;
|
||||
@@ -38,6 +39,7 @@ import com.sap.sailing.domain.common.dto.RaceColumnDTO;
|
||||
import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
@@ -265,7 +267,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
|
||||
*/
|
||||
Regatta createRegatta(String regattaBaseName, String boatClassName, Serializable id, Iterable<? extends Series> series, boolean persistent, ScoringScheme scoringScheme, Serializable defaultCourseAreaId);
|
||||
|
||||
Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId);
|
||||
Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId, RacingProcedureType newDefaultRacingProcedureType, CourseDesignerMode newDefaultCourseDesignerMode);
|
||||
|
||||
/**
|
||||
* Adds <code>raceDefinition</code> to the {@link Regatta} such that it will appear in {@link Regatta#getAllRaces()}
|
||||
|
||||
+19
-2
@@ -50,6 +50,7 @@ import com.sap.sailing.domain.base.configuration.DeviceConfigurationMatcher;
|
||||
import com.sap.sailing.domain.base.configuration.impl.DeviceConfigurationMapImpl;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
import com.sap.sailing.domain.base.impl.RegattaImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.LeaderboardNameConstants;
|
||||
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
@@ -67,6 +68,7 @@ import com.sap.sailing.domain.common.impl.Util.Pair;
|
||||
import com.sap.sailing.domain.common.impl.Util.Triple;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack;
|
||||
import com.sap.sailing.domain.common.media.MediaTrack.MimeType;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.FlexibleRaceColumn;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
@@ -1191,17 +1193,32 @@ public class RacingEventServiceImpl implements RacingEventService, RegattaListen
|
||||
}
|
||||
|
||||
@Override
|
||||
public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId) {
|
||||
public Regatta updateRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId,
|
||||
RacingProcedureType newDefaultRacingProcedureType, CourseDesignerMode newDefaultCourseDesignerMode) {
|
||||
// We're not doing any renaming of the regatta itself, therefore we don't have to sync on the maps.
|
||||
Regatta regatta = getRegatta(regattaIdentifier);
|
||||
synchronized (regatta) {
|
||||
boolean isDirty = false;
|
||||
CourseArea newCourseArea = getCourseArea(newDefaultCourseAreaId);
|
||||
if (newCourseArea != regatta.getDefaultCourseArea()) {
|
||||
regatta.setDefaultCourseArea(newCourseArea);
|
||||
isDirty = true;
|
||||
}
|
||||
if (newDefaultRacingProcedureType != regatta.getDefaultRacingProcedureType()) {
|
||||
regatta.setDefaultRacingProcedureType(newDefaultRacingProcedureType);
|
||||
isDirty = true;
|
||||
}
|
||||
if (newDefaultCourseDesignerMode != regatta.getDefaultCourseDesignerMode()) {
|
||||
regatta.setDefaultCourseDesignerMode(newDefaultCourseDesignerMode);
|
||||
isDirty = true;
|
||||
}
|
||||
|
||||
if (isDirty) {
|
||||
mongoObjectFactory.storeRegatta(regatta);
|
||||
}
|
||||
|
||||
replicate(new UpdateSpecificRegatta(regattaIdentifier, newDefaultCourseAreaId));
|
||||
replicate(new UpdateSpecificRegatta(regattaIdentifier, newDefaultCourseAreaId,
|
||||
newDefaultRacingProcedureType, newDefaultCourseDesignerMode));
|
||||
}
|
||||
return regatta;
|
||||
}
|
||||
|
||||
+2
@@ -315,6 +315,8 @@ public class ImportMasterDataOperation extends
|
||||
UUID.fromString(id), series, isPersistent,
|
||||
baseDomainFactory.createScoringScheme(ScoringSchemeType.valueOf(scoringSchemeType)),
|
||||
courseAreaUUID).getA();
|
||||
createdRegatta.setDefaultRacingProcedureType(singleRegattaData.getDefaultRacingProcedureType());
|
||||
createdRegatta.setDefaultCourseDesignerMode(singleRegattaData.getDefaultCourseDesignerMode());
|
||||
toState.setPersistentRegattaForRaceIDs(createdRegatta, singleRegattaData.getRaceIds(), override);
|
||||
creationCount.addOneRegatta(createdRegatta.getId().toString());
|
||||
}
|
||||
|
||||
+10
-2
@@ -3,7 +3,9 @@ package com.sap.sailing.server.operationaltransformation;
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.RegattaIdentifier;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
import com.sap.sailing.server.RacingEventServiceOperation;
|
||||
|
||||
@@ -12,15 +14,21 @@ public class UpdateSpecificRegatta extends AbstractRacingEventServiceOperation<R
|
||||
|
||||
private final RegattaIdentifier regattaIdentifier;
|
||||
private final Serializable newDefaultCourseAreaId;
|
||||
private final RacingProcedureType newDefaultRacingProcedureType;
|
||||
private final CourseDesignerMode newDefaultCourseDesignerMode;
|
||||
|
||||
public UpdateSpecificRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId) {
|
||||
public UpdateSpecificRegatta(RegattaIdentifier regattaIdentifier, Serializable newDefaultCourseAreaId,
|
||||
RacingProcedureType newDefaultRacingProcedureType, CourseDesignerMode newDefaultCourseDesignerMode) {
|
||||
this.regattaIdentifier = regattaIdentifier;
|
||||
this.newDefaultCourseAreaId = newDefaultCourseAreaId;
|
||||
this.newDefaultRacingProcedureType = newDefaultRacingProcedureType;
|
||||
this.newDefaultCourseDesignerMode = newDefaultCourseDesignerMode;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Regatta internalApplyTo(RacingEventService toState) throws Exception {
|
||||
return toState.updateRegatta(regattaIdentifier, newDefaultCourseAreaId);
|
||||
return toState.updateRegatta(regattaIdentifier, newDefaultCourseAreaId,
|
||||
newDefaultRacingProcedureType, newDefaultCourseDesignerMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -244,6 +244,7 @@
|
||||
|
||||
<string name="loading_configuration">Lade Konfiguration...</string>
|
||||
<string name="loading_configuration_failed">Fehler beim Laden der Konfiguration.</string>
|
||||
<string name="loading_configuration_not_found">Für dieses Gerät existiert keine Konfiguration auf dem Server.</string>
|
||||
<string name="loading_configuration_succeded">Konfiguration vom Server übernommen.</string>
|
||||
|
||||
</resources>
|
||||
@@ -276,6 +276,7 @@
|
||||
|
||||
<string name="loading_configuration">Loading configuration...</string>
|
||||
<string name="loading_configuration_failed">There was an error loading the configuration.</string>
|
||||
<string name="loading_configuration_not_found">There was no remote configuration found for this device.</string>
|
||||
<string name="loading_configuration_succeded">Remote configuration applied.</string>
|
||||
|
||||
<string name="gate_launch_stops_after">Gate Launch stops after %dmin</string>
|
||||
|
||||
+53
-20
@@ -8,6 +8,7 @@ import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.Settings.Secure;
|
||||
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
import com.sap.sailing.domain.racelog.RaceLogEventAuthor;
|
||||
import com.sap.sailing.domain.racelog.impl.RaceLogEventAuthorImpl;
|
||||
@@ -50,12 +51,12 @@ public class AppPreferences {
|
||||
}
|
||||
|
||||
public void setSendingActive(boolean activate) {
|
||||
preferences.edit().putBoolean(PREFERENCE_SENDING_ACTIVE, activate).apply();
|
||||
preferences.edit().putBoolean(PREFERENCE_SENDING_ACTIVE, activate).commit();
|
||||
}
|
||||
|
||||
public void setAuthor(RaceLogEventAuthor author) {
|
||||
preferences.edit().putString(PREFERENCE_AUTHOR_NAME, author.getName()).apply();
|
||||
preferences.edit().putInt(PREFERENCE_AUTHOR_PRIORITY, author.getPriority()).apply();
|
||||
preferences.edit().putString(PREFERENCE_AUTHOR_NAME, author.getName()).commit();
|
||||
preferences.edit().putInt(PREFERENCE_AUTHOR_PRIORITY, author.getPriority()).commit();
|
||||
}
|
||||
|
||||
public RaceLogEventAuthor getAuthor() {
|
||||
@@ -74,7 +75,7 @@ public class AppPreferences {
|
||||
|
||||
public void setBoatClass(BoatClassType boatClass) {
|
||||
String boatClassString = boatClass.name();
|
||||
preferences.edit().putString(PREFERENCE_BOAT_CLASS, boatClassString).apply();
|
||||
preferences.edit().putString(PREFERENCE_BOAT_CLASS, boatClassString).commit();
|
||||
}
|
||||
|
||||
public CourseLayouts getCourseLayout() {
|
||||
@@ -94,7 +95,7 @@ public class AppPreferences {
|
||||
|
||||
public void setCourseLayout(CourseLayouts courseLayout) {
|
||||
String courseLayoutString = courseLayout.name();
|
||||
preferences.edit().putString(PREFERENCE_COURSE_LAYOUT, courseLayoutString).apply();
|
||||
preferences.edit().putString(PREFERENCE_COURSE_LAYOUT, courseLayoutString).commit();
|
||||
}
|
||||
|
||||
public NumberOfRounds getNumberOfRounds() {
|
||||
@@ -106,7 +107,7 @@ public class AppPreferences {
|
||||
|
||||
public void setNumberOfRounds(NumberOfRounds numberOfRounds) {
|
||||
String numberOfRoundsString = numberOfRounds.name();
|
||||
preferences.edit().putString(PREFERENCE_NUMBER_OF_ROUNDS, numberOfRoundsString).apply();
|
||||
preferences.edit().putString(PREFERENCE_NUMBER_OF_ROUNDS, numberOfRoundsString).commit();
|
||||
}
|
||||
|
||||
public double getWindBearingFromDirection() {
|
||||
@@ -116,7 +117,7 @@ public class AppPreferences {
|
||||
|
||||
public void setWindBearingFromDirection(double enteredWindBearing) {
|
||||
long windBearingAsLong = Double.doubleToLongBits(enteredWindBearing);
|
||||
preferences.edit().putLong(PREFERENCE_WIND_BEARING, windBearingAsLong).apply();
|
||||
preferences.edit().putLong(PREFERENCE_WIND_BEARING, windBearingAsLong).commit();
|
||||
}
|
||||
|
||||
public double getWindSpeed() {
|
||||
@@ -126,11 +127,11 @@ public class AppPreferences {
|
||||
|
||||
public void setWindSpeed(double enteredWindSpeed) {
|
||||
long windSpeedAsLong = Double.doubleToLongBits(enteredWindSpeed);
|
||||
preferences.edit().putLong(PREFERENCE_WIND_SPEED, windSpeedAsLong).apply();
|
||||
preferences.edit().putLong(PREFERENCE_WIND_SPEED, windSpeedAsLong).commit();
|
||||
}
|
||||
|
||||
public List<String> getManagedCourseAreaNames() {
|
||||
String value = preferences.getString(context.getString(R.string.preference_course_areas_key), "");
|
||||
String value = preferences.getString(key(R.string.preference_course_areas_key), "");
|
||||
String[] managedCourseAreas = value.split(",");
|
||||
for (int i = 0; i < managedCourseAreas.length; i++) {
|
||||
managedCourseAreas[i] = managedCourseAreas[i].trim();
|
||||
@@ -146,12 +147,12 @@ public class AppPreferences {
|
||||
}
|
||||
preferences
|
||||
.edit()
|
||||
.putString(context.getString(R.string.preference_course_areas_key),
|
||||
.putString(key(R.string.preference_course_areas_key),
|
||||
builder.substring(0, builder.length() - 1)).commit();
|
||||
}
|
||||
|
||||
public String getServerBaseURL() {
|
||||
String value = preferences.getString(context.getString(R.string.preference_server_url_key), "");
|
||||
String value = preferences.getString(key(R.string.preference_server_url_key), "");
|
||||
if (value.equals("")) {
|
||||
return "http://localhost:8889";
|
||||
}
|
||||
@@ -159,37 +160,69 @@ public class AppPreferences {
|
||||
}
|
||||
|
||||
public String getMailRecipient() {
|
||||
return preferences.getString(context.getString(R.string.preference_mail_key), "");
|
||||
return preferences.getString(key(R.string.preference_mail_key), "");
|
||||
}
|
||||
|
||||
public void setMailRecipient(String mail) {
|
||||
preferences.edit().putString(context.getString(R.string.preference_mail_key), mail).commit();
|
||||
preferences.edit().putString(key(R.string.preference_mail_key), mail).commit();
|
||||
}
|
||||
|
||||
public int getMinRounds() {
|
||||
return preferences.getInt(context.getString(R.string.preference_course_designer_by_name_min_rounds_key), 0);
|
||||
return preferences.getInt(key(R.string.preference_course_designer_by_name_min_rounds_key), 0);
|
||||
}
|
||||
|
||||
public void setMinRounds(int minRounds) {
|
||||
preferences.edit().putInt(context.getString(R.string.preference_course_designer_by_name_min_rounds_key), minRounds).commit();
|
||||
preferences.edit().putInt(key(R.string.preference_course_designer_by_name_min_rounds_key), minRounds).commit();
|
||||
}
|
||||
|
||||
public int getMaxRounds() {
|
||||
return preferences.getInt(context.getString(R.string.preference_course_designer_by_name_max_rounds_key), 0);
|
||||
return preferences.getInt(key(R.string.preference_course_designer_by_name_max_rounds_key), 0);
|
||||
}
|
||||
|
||||
public void setMaxRounds(int maxRounds) {
|
||||
preferences.edit().putInt(context.getString(R.string.preference_course_designer_by_name_max_rounds_key), maxRounds).commit();
|
||||
preferences.edit().putInt(key(R.string.preference_course_designer_by_name_max_rounds_key), maxRounds).commit();
|
||||
}
|
||||
|
||||
public boolean isDefaultRacingProcedureTypeOverridden() {
|
||||
return preferences.getBoolean(key(R.string.preference_racing_procedure_is_overridden_key), false);
|
||||
}
|
||||
|
||||
public void setDefaultRacingProcedureTypeOverridden(boolean isOverridden) {
|
||||
preferences.edit().putBoolean(key(R.string.preference_racing_procedure_is_overridden_key), isOverridden).commit();
|
||||
}
|
||||
|
||||
public RacingProcedureType getDefaultStartProcedureType() {
|
||||
String defaultStartProcedureType = preferences.getString(
|
||||
context.getString(R.string.preference_racing_procedure_override_key), "");
|
||||
public RacingProcedureType getDefaultRacingProcedureType() {
|
||||
String defaultStartProcedureType = preferences.getString(key(R.string.preference_racing_procedure_override_key), "");
|
||||
return RacingProcedureType.valueOf(defaultStartProcedureType);
|
||||
}
|
||||
|
||||
public void setDefaultRacingProcedureType(RacingProcedureType type) {
|
||||
preferences.edit().putString(key(R.string.preference_racing_procedure_override_key), type.name()).commit();
|
||||
}
|
||||
|
||||
public boolean isDefaultCourseDesignerModeOverridden() {
|
||||
return preferences.getBoolean(key(R.string.preference_course_designer_is_overridden_key), false);
|
||||
}
|
||||
|
||||
public void setDefaultCourseDesignerModeOverridden(boolean isOverridden) {
|
||||
preferences.edit().putBoolean(key(R.string.preference_course_designer_is_overridden_key), isOverridden).commit();
|
||||
}
|
||||
|
||||
public CourseDesignerMode getDefaultCourseDesignerMode() {
|
||||
String mode = preferences.getString(key(R.string.preference_course_designer_override_key), "");
|
||||
return CourseDesignerMode.valueOf(mode);
|
||||
}
|
||||
|
||||
public void setDefaultCourseDesignerMode(CourseDesignerMode mode) {
|
||||
preferences.edit().putString(key(R.string.preference_course_designer_override_key), mode.name()).commit();
|
||||
}
|
||||
|
||||
public String getAndroidIdentifier() {
|
||||
return Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);
|
||||
}
|
||||
|
||||
private String key(int keyId) {
|
||||
return context.getString(keyId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+5
-4
@@ -31,6 +31,7 @@ import com.sap.sailing.domain.base.racegroup.RaceGroup;
|
||||
import com.sap.sailing.domain.base.racegroup.SeriesWithRows;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.RaceGroupImpl;
|
||||
import com.sap.sailing.domain.base.racegroup.impl.SeriesWithRowsImpl;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.racelog.RaceLogRaceStatus;
|
||||
import com.sap.sailing.domain.common.racelog.RacingProcedureType;
|
||||
@@ -75,7 +76,7 @@ public class OfflineDataManager extends DataManager {
|
||||
SeriesWithRows qualifying = new SeriesWithRowsImpl("Qualifying", false, null);
|
||||
SeriesWithRows medal = new SeriesWithRowsImpl("Medal", true, null);
|
||||
RaceGroup raceGroup = new RaceGroupImpl("ESS", new BoatClassImpl("X40", false), null, Arrays.asList(qualifying,
|
||||
medal));
|
||||
medal), RacingProcedureType.RRS26, CourseDesignerMode.BY_NAME);
|
||||
|
||||
List<Competitor> competitors = new ArrayList<Competitor>();
|
||||
competitors.add(new CompetitorImpl(UUID.randomUUID(), "SAP Extreme Sailing Team", null, null));
|
||||
@@ -99,7 +100,7 @@ public class OfflineDataManager extends DataManager {
|
||||
|
||||
ManagedRace q1 = new ManagedRaceImpl(
|
||||
new ManagedRaceIdentifierImpl("A.B", new FleetImpl("A"), qualifying, raceGroup),
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration));
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration));
|
||||
|
||||
log = new RaceLogImpl(UUID.randomUUID());
|
||||
/*
|
||||
@@ -109,7 +110,7 @@ public class OfflineDataManager extends DataManager {
|
||||
|
||||
ManagedRace q2 = new ManagedRaceImpl(
|
||||
new ManagedRaceIdentifierImpl("B", new FleetImpl("A.A"), qualifying, raceGroup),
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration));
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration));
|
||||
|
||||
log = new RaceLogImpl(UUID.randomUUID());
|
||||
/*
|
||||
@@ -118,7 +119,7 @@ public class OfflineDataManager extends DataManager {
|
||||
*/
|
||||
ManagedRace q3 = new ManagedRaceImpl(
|
||||
new ManagedRaceIdentifierImpl("Q3", new FleetImpl("Default"), qualifying, raceGroup),
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.ESS, configuration));
|
||||
new RaceStateImpl(log, AppPreferences.on(context).getAuthor(), RaceLogEventFactory.INSTANCE, RacingProcedureType.RRS26, configuration));
|
||||
/*
|
||||
* ManagedRace m1 = new ManagedRaceImpl( new ManagedRaceIdentifierImpl( "M1", new FleetImpl("Default"), medal,
|
||||
* raceGroup), null);
|
||||
|
||||
+4
-1
@@ -32,7 +32,10 @@ public class StoredDeviceConfigurationImpl extends DeviceConfigurationImpl imple
|
||||
public StoredDeviceConfiguration load() {
|
||||
getRacingProceduresConfiguration().load();
|
||||
|
||||
// TODO implement loading from AppPreferences
|
||||
setAllowedCourseAreaNames(preferences.getManagedCourseAreaNames());
|
||||
setMinimumRoundsForCourse(preferences.getMinRounds());
|
||||
setMaximumRoundsForCourse(preferences.getMaxRounds());
|
||||
setResultsMailRecipient(preferences.getMailRecipient());
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
+12
-4
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.racecommittee.app.ui.activities;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.Serializable;
|
||||
|
||||
import android.app.Fragment;
|
||||
@@ -126,10 +127,17 @@ public class LoginActivity extends BaseActivity implements EventSelectedListener
|
||||
public void onLoadFailed(Exception reason) {
|
||||
setProgressBarIndeterminateVisibility(false);
|
||||
progressDialog.dismiss();
|
||||
|
||||
Toast.makeText(getApplicationContext(), getString(R.string.loading_configuration_failed),
|
||||
Toast.LENGTH_LONG).show();
|
||||
ExLog.ex(TAG, reason);
|
||||
|
||||
if (reason instanceof FileNotFoundException) {
|
||||
Toast.makeText(getApplicationContext(), getString(R.string.loading_configuration_not_found),
|
||||
Toast.LENGTH_LONG).show();
|
||||
ExLog.w(TAG, String.format("There seems to be no configuration for this device: %s",
|
||||
reason.toString()));
|
||||
} else {
|
||||
Toast.makeText(getApplicationContext(), getString(R.string.loading_configuration_failed),
|
||||
Toast.LENGTH_LONG).show();
|
||||
ExLog.ex(TAG, reason);
|
||||
}
|
||||
|
||||
showCourseAreaListFragment(eventId);
|
||||
}
|
||||
|
||||
+3
@@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||
|
||||
import com.sap.sailing.domain.racelog.state.RaceState;
|
||||
import com.sap.sailing.racecommittee.app.AppConstants;
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.data.OnlineDataManager;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.utils.TickListener;
|
||||
@@ -33,10 +34,12 @@ public abstract class RaceFragment extends LoggableFragment implements TickListe
|
||||
}
|
||||
|
||||
private ManagedRace managedRace;
|
||||
protected AppPreferences preferences;
|
||||
|
||||
@Override
|
||||
public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
preferences = AppPreferences.on(getActivity());
|
||||
|
||||
Serializable raceId = getArguments().getSerializable(AppConstants.RACE_ID_KEY);
|
||||
managedRace = OnlineDataManager.create(getActivity()).getDataStore().getRace(raceId);
|
||||
|
||||
+1
-3
@@ -15,7 +15,6 @@ import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseBase;
|
||||
import com.sap.sailing.domain.base.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.impl.MillisecondsTimePoint;
|
||||
import com.sap.sailing.domain.common.impl.Util;
|
||||
import com.sap.sailing.domain.racelog.analyzing.impl.LastWindFixFinder;
|
||||
@@ -156,8 +155,7 @@ public class RaceInfoFragment extends RaceFragment implements RaceInfoListener {
|
||||
}
|
||||
|
||||
private void showCourseDesignDialog() {
|
||||
CourseDesignerMode mode = getRace().getRaceGroup().getDefaultCourseDesignerMode();
|
||||
RaceDialogFragment fragment = CourseDesignerChooser.choose(getActivity(), mode);
|
||||
RaceDialogFragment fragment = CourseDesignerChooser.choose(preferences, getRace());
|
||||
fragment.setArguments(getRecentArguments());
|
||||
fragment.show(getFragmentManager(), "courseDesignDialogFragment");
|
||||
}
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.racecommittee.app.R;
|
||||
|
||||
public class CourseDesignerPreferenceFragment extends BasePreferenceFragment {
|
||||
@@ -30,7 +30,7 @@ public class CourseDesignerPreferenceFragment extends BasePreferenceFragment {
|
||||
|
||||
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||
List<CharSequence> entryValues = new ArrayList<CharSequence>();
|
||||
for (CourseDesignerMode type : CourseDesignerMode.values()) {
|
||||
for (CourseDesignerMode type : CourseDesignerMode.validValues()) {
|
||||
entries.add(type.toString());
|
||||
entryValues.add(type.name());
|
||||
}
|
||||
|
||||
+13
-6
@@ -1,17 +1,23 @@
|
||||
package com.sap.sailing.racecommittee.app.utils;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import com.sap.sailing.domain.base.CourseDesignerMode;
|
||||
import com.sap.sailing.domain.common.CourseDesignerMode;
|
||||
import com.sap.sailing.racecommittee.app.AppPreferences;
|
||||
import com.sap.sailing.racecommittee.app.domain.ManagedRace;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.RaceDialogFragment;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByNameCourseDesignDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByMapCourseDesignDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ByNameCourseDesignDialog;
|
||||
import com.sap.sailing.racecommittee.app.ui.fragments.dialogs.coursedesign.ESSCourseDesignDialog;
|
||||
|
||||
public class CourseDesignerChooser {
|
||||
|
||||
public static RaceDialogFragment choose(Context context, CourseDesignerMode mode) {
|
||||
// TODO check override in user settings
|
||||
public static RaceDialogFragment choose(AppPreferences preferences, ManagedRace race) {
|
||||
CourseDesignerMode mode;
|
||||
if (preferences.isDefaultCourseDesignerModeOverridden()) {
|
||||
mode = preferences.getDefaultCourseDesignerMode();
|
||||
} else {
|
||||
mode = race.getRaceGroup().getDefaultCourseDesignerMode();
|
||||
}
|
||||
|
||||
switch (mode) {
|
||||
case BY_MAP:
|
||||
return new ByMapCourseDesignDialog();
|
||||
@@ -19,6 +25,7 @@ public class CourseDesignerChooser {
|
||||
return new ESSCourseDesignDialog();
|
||||
case BY_NAME:
|
||||
default:
|
||||
// might be UNKNOWN... let's take this one
|
||||
return new ByNameCourseDesignDialog();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user