bug5960: completed CourseConfigurationDTO and field types, added corresponding converters

This commit is contained in:
Axel Uhl committed 2024-02-13 17:42:12 +01:00
1 parent cf7facbb55
commit abfdc3e632
31 files changed
+322 -32

No files matched your search

@@ -26,9 +26,9 @@ import com.sap.sailing.domain.coursetemplate.impl.CourseTemplateImpl;
import com.sap.sailing.domain.coursetemplate.impl.MarkRoleImpl;
import com.sap.sailing.domain.coursetemplate.impl.MarkRolePairImpl;
import com.sap.sailing.domain.coursetemplate.impl.MarkTemplateImpl;
import com.sap.sailing.domain.coursetemplate.impl.RepeatablePartImpl;
import com.sap.sailing.domain.coursetemplate.impl.WaypointTemplateImpl;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.RepeatablePartImpl;
public class TestLapConfiguration {
private CourseTemplate courseTemplate;
@@ -6,6 +6,7 @@ import java.util.Map;
import com.sap.sailing.domain.abstractlog.regatta.RegattaLog;
import com.sap.sailing.domain.base.Mark;
import com.sap.sse.common.Named;
import com.sap.sse.common.WithOptionalRepeatablePart;
/**
* A course that does not necessarily consist of {@link Mark}s existing in a regatta but instead is defined by
@@ -10,6 +10,7 @@ import com.sap.sailing.domain.base.Mark;
import com.sap.sailing.domain.common.security.SecuredDomainType;
import com.sap.sse.common.NamedWithUUID;
import com.sap.sse.common.Util;
import com.sap.sse.common.WithOptionalRepeatablePart;
import com.sap.sse.security.shared.HasPermissions;
import com.sap.sse.security.shared.QualifiedObjectIdentifier;
import com.sap.sse.security.shared.TypeRelativeObjectIdentifier;
@@ -3,6 +3,7 @@ package com.sap.sailing.domain.coursetemplate;
import java.util.Iterator;
import com.sap.sailing.domain.base.CourseBase;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.Util;
/**
@@ -11,8 +11,8 @@ import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.CourseTemplateCompatibilityChecker;
import com.sap.sailing.domain.coursetemplate.MarkConfiguration;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
import com.sap.sse.common.RepeatablePart;
public class CourseConfigurationImpl<P> implements CourseConfiguration<P> {
private static final long serialVersionUID = -9189989170055144298L;
@@ -12,8 +12,8 @@ import java.util.UUID;
import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.NamedWithUUIDImpl;
@@ -0,0 +1,49 @@
package com.google.gwt.user.client.rpc.core.com.sap.sse.common.impl;
import com.google.gwt.user.client.rpc.CustomFieldSerializer;
import com.google.gwt.user.client.rpc.SerializationException;
import com.google.gwt.user.client.rpc.SerializationStreamReader;
import com.google.gwt.user.client.rpc.SerializationStreamWriter;
import com.sap.sse.common.impl.RepeatablePartImpl;
public class RepeatablePartImpl_CustomFieldSerializer extends CustomFieldSerializer<RepeatablePartImpl> {
@Override
public void serializeInstance(SerializationStreamWriter streamWriter, RepeatablePartImpl instance)
throws SerializationException {
serialize(streamWriter, instance);
}
public static void serialize(SerializationStreamWriter streamWriter, RepeatablePartImpl instance)
throws SerializationException {
streamWriter.writeInt(instance.getZeroBasedIndexOfRepeatablePartStart());
streamWriter.writeInt(instance.getZeroBasedIndexOfRepeatablePartEnd());
}
@Override
public boolean hasCustomInstantiateInstance() {
return true;
}
@Override
public RepeatablePartImpl instantiateInstance(SerializationStreamReader streamReader)
throws SerializationException {
return instantiate(streamReader);
}
public static RepeatablePartImpl instantiate(SerializationStreamReader streamReader)
throws SerializationException {
return new RepeatablePartImpl(streamReader.readInt(), streamReader.readInt());
}
@Override
public void deserializeInstance(SerializationStreamReader streamReader, RepeatablePartImpl instance)
throws SerializationException {
deserialize(streamReader, instance);
}
public static void deserialize(SerializationStreamReader streamReader, RepeatablePartImpl instance) {
// Done by instantiateInstance
}
}
@@ -233,18 +233,25 @@ import com.sap.sailing.domain.common.tracking.impl.PreciseCompactGPSFixMovingImp
import com.sap.sailing.domain.common.windfinder.SpotDTO;
import com.sap.sailing.domain.coursetemplate.CommonMarkProperties;
import com.sap.sailing.domain.coursetemplate.ControlPointTemplate;
import com.sap.sailing.domain.coursetemplate.ControlPointWithMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.CourseConfiguration;
import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.FixedPositioning;
import com.sap.sailing.domain.coursetemplate.FreestyleMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.MarkConfiguration;
import com.sap.sailing.domain.coursetemplate.MarkConfigurationVisitor;
import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkPropertiesBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkRolePair.MarkRolePairFactory;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.MarkTemplateBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.PositioningVisitor;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.RegattaMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.TrackingDeviceBasedPositioning;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.impl.CommonMarkPropertiesImpl;
import com.sap.sailing.domain.coursetemplate.impl.RepeatablePartImpl;
import com.sap.sailing.domain.coursetemplate.impl.WaypointTemplateImpl;
import com.sap.sailing.domain.igtimiadapter.Account;
import com.sap.sailing.domain.igtimiadapter.IgtimiConnectionFactory;
@@ -407,12 +414,21 @@ import com.sap.sailing.gwt.ui.shared.WindTrackInfoDTO;
import com.sap.sailing.gwt.ui.shared.YellowBrickConfigurationWithSecurityDTO;
import com.sap.sailing.gwt.ui.shared.YellowBrickRaceRecordDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.CommonMarkPropertiesDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.ControlPointWithMarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.CourseConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.CourseTemplateDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.FreestyleMarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkPairWithConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkPropertiesBasedMarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkPropertiesDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkRoleDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkTemplateBasedMarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.MarkTemplateDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.RegattaMarkConfigurationDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.RepeatablePartDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.WaypointTemplateDTO;
import com.sap.sailing.gwt.ui.shared.courseCreation.WaypointWithMarkConfigurationDTO;
import com.sap.sailing.manage2sail.EventResultDescriptor;
import com.sap.sailing.manage2sail.Manage2SailEventResultsParserImpl;
import com.sap.sailing.manage2sail.RaceResultDescriptor;
@@ -441,6 +457,7 @@ import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.PairingListCreationException;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.Speed;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
@@ -452,6 +469,7 @@ import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.Util.Triple;
import com.sap.sse.common.WithID;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.RepeatablePartImpl;
import com.sap.sse.common.impl.SecondsDurationImpl;
import com.sap.sse.common.impl.TimeRangeImpl;
import com.sap.sse.common.media.MediaTagConstants;
@@ -6173,6 +6191,82 @@ public class SailingServiceImpl extends ResultCachingProxiedRemoteServiceServlet
SecurityDTOUtil.addSecurityInformation(getSecurityService(), markRoleDTO);
return markRoleDTO;
}
protected <P> MarkConfigurationDTO convertToMarkConfigurationDTO(MarkConfiguration<P> markConfig) {
return markConfig.accept(new MarkConfigurationVisitor<MarkConfigurationDTO, P>() {
@Override
public MarkConfigurationDTO visit(FreestyleMarkConfiguration<P> markConfiguration) {
final FreestyleMarkConfigurationDTO result = new FreestyleMarkConfigurationDTO();
result.setOptionalMarkProperties(markConfiguration.getOptionalMarkProperties()==null?null:convertToMarkPropertiesDTO(markConfiguration.getOptionalMarkProperties()));
result.setOptionalMarkTemplate(markConfiguration.getOptionalMarkTemplate()==null?null:convertToMarkTemplateDTO(markConfiguration.getOptionalMarkTemplate()));
return result;
}
@Override
public MarkConfigurationDTO visit(MarkPropertiesBasedMarkConfiguration<P> markConfiguration) {
final MarkPropertiesBasedMarkConfigurationDTO result = new MarkPropertiesBasedMarkConfigurationDTO();
result.setMarkProperties(markConfiguration.getOptionalMarkProperties()==null?null:convertToMarkPropertiesDTO(markConfiguration.getOptionalMarkProperties()));
result.setOptionalMarkTemplate(markConfiguration.getOptionalMarkTemplate()==null?null:convertToMarkTemplateDTO(markConfiguration.getOptionalMarkTemplate()));
return result;
}
@Override
public MarkConfigurationDTO visit(MarkTemplateBasedMarkConfiguration<P> markConfiguration) {
final MarkTemplateBasedMarkConfigurationDTO result = new MarkTemplateBasedMarkConfigurationDTO();
result.setOptionalMarkTemplate(markConfiguration.getOptionalMarkTemplate()==null?null:convertToMarkTemplateDTO(markConfiguration.getOptionalMarkTemplate()));
return result;
}
@Override
public MarkConfigurationDTO visit(RegattaMarkConfiguration<P> markConfiguration) {
final RegattaMarkConfigurationDTO result = new RegattaMarkConfigurationDTO();
result.setMark(convertToMarkDTO(markConfiguration.getMark(), /* position */ null));
result.setOptionalMarkProperties(markConfiguration.getOptionalMarkProperties()==null?null:convertToMarkPropertiesDTO(markConfiguration.getOptionalMarkProperties()));
result.setOptionalMarkTemplate(markConfiguration.getOptionalMarkTemplate()==null?null:convertToMarkTemplateDTO(markConfiguration.getOptionalMarkTemplate()));
return result;
}
});
}
private <P> ControlPointWithMarkConfigurationDTO convertToControlPointWithMarkConfigurationDTO(ControlPointWithMarkConfiguration<P> controlPoint) {
final Iterable<MarkConfigurationDTO> markConfigurations = Util.map(controlPoint.getMarkConfigurations(), this::convertToMarkConfigurationDTO);
final ControlPointWithMarkConfigurationDTO result;
if (Util.size(markConfigurations) == 1) {
result = markConfigurations.iterator().next();
} else {
final MarkPairWithConfigurationDTO preResult = new MarkPairWithConfigurationDTO();
preResult.setName(controlPoint.getName());
preResult.setShortName(controlPoint.getShortName());
final Iterator<MarkConfigurationDTO> markConfigs = markConfigurations.iterator();
preResult.setLeft(markConfigs.next());
preResult.setRight(markConfigs.next());
result = preResult;
}
return result;
}
protected <P> WaypointWithMarkConfigurationDTO convertToWaypointWithMarkConfigurationDTO(final WaypointWithMarkConfiguration<P> waypointWithMarkConfiguration) {
final WaypointWithMarkConfigurationDTO result = new WaypointWithMarkConfigurationDTO();
result.setControlPoint(convertToControlPointWithMarkConfigurationDTO(waypointWithMarkConfiguration.getControlPoint()));
result.setPassingInstruction(waypointWithMarkConfiguration.getPassingInstruction());
return result;
}
protected <P> CourseConfigurationDTO convertToCourseConfigurationDTO(CourseConfiguration<P> courseConfiguration) {
final CourseConfigurationDTO result = new CourseConfigurationDTO();
result.setAssociatedRoles(new HashMap<>(courseConfiguration.getAssociatedRoles().entrySet().stream().collect(Collectors.toMap(
e->convertToMarkConfigurationDTO(e.getKey()), e->convertToMarkRoleDTO(e.getValue())))));
result.setAllMarks(Util.mapToArrayList(courseConfiguration.getAllMarks(), this::convertToMarkConfigurationDTO));
result.setName(courseConfiguration.getName());
result.setShortName(courseConfiguration.getShortName());
result.setNumberOfLaps(courseConfiguration.getNumberOfLaps());
result.setOptionalCourseTemplate(courseConfiguration.getOptionalCourseTemplate()==null?null:convertToCourseTemplateDTO(courseConfiguration.getOptionalCourseTemplate()));
result.setOptionalImageURL(courseConfiguration.getOptionalImageURL());
result.setOptionalRepeatablePart(courseConfiguration.getRepeatablePart());
result.setShortName(courseConfiguration.getShortName());
result.setWaypoints(new ArrayList<>(Util.asList(Util.map(courseConfiguration.getWaypoints(), wpWithMarkConfig->convertToWaypointWithMarkConfigurationDTO(wpWithMarkConfig)))));
return result;
}
@Override
public List<MarkRoleDTO> getMarkRoles() {
@@ -223,7 +223,6 @@ import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkRolePair.MarkRolePairFactory;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.igtimiadapter.Account;
import com.sap.sailing.domain.igtimiadapter.IgtimiConnection;
@@ -359,6 +358,7 @@ import com.sap.sailing.xrr.schema.RegattaResults;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.Speed;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TimeRange;
@@ -1,7 +1,127 @@
package com.sap.sailing.gwt.ui.shared.courseCreation;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sse.common.RepeatablePart;
public class CourseConfigurationDTO implements IsSerializable {
private String shortName;
private CourseTemplateDTO optionalCourseTemplate;
// TODO decide if we should combine markConfigurations and roleMapping to one field
private ArrayList<MarkConfigurationDTO> markConfigurations;
private HashMap<MarkConfigurationDTO, MarkRoleDTO> associatedRoles;
/**
* The waypoints sequence, with at least a single occurrence of any {@link #getRepeatablePart() repeatable part}, in
* order to obtain a sequence for more than only one lap (meaning zero occurrences of the repeatable part). There
* may be more occurrences of the repeatable part than only one, in particular to allow subsequent repetitions to
* use different mark configurations in their lap. See also {@link #getWaypoints()} and {@link #getWaypoints(int)}.
* So, if {@link #numberOfLaps} is less than or equal to {@code 1}, an occurrence of the repeatable part will be in
* this sequence although it isn't used in the current configuration. This is, however, required in order to
* interpret the index-based repeatable part in case one or more occurrences of the repeatable part will be
* requested.
* <p>
*
* This sequence may contain more occurrences of the repeatable part than requested through {@link #numberOfLaps}
* even if one or more occurrences of the repeatable part are requested this way. These extra occurrences will then
* be used if {@link #getWaypoints(int)} is called with more laps than {@link #numberOfLaps}. This way, a course
* configuration can prepare for more laps being sailed and prepare a configuration for extra laps that differ from
* the configurations used for the laps currently selected.
*/
private ArrayList<WaypointWithMarkConfigurationDTO> waypoints;
/**
* Refers to a repeatable part in {@link #waypoints}. Other than in a {@link CourseTemplate} that always has exactly
* one occurrence of a repeatable part in its waypoint template sequence, here the {@link #waypoints} sequence must
* have at least one but may have multiple occurrences of the repeatable part. The special handling that happens in
* this class is that when more than one occurrence already exists in {@link #waypoints}, upon adding more
* repetitions the <em>last</em> occurrence will be repeated. See also {@link #getWaypoints(int)}.
*/
private RepeatablePart optionalRepeatablePart;
/**
* The number of laps this course configuration has, in case there is a {@link #getRepeatablePart() repeatable part}
* defined for a valid {@link #optionalCourseTemplate}. In this case, {@link #getWaypoints()} will consider this
* number of laps and will return
*/
private Integer numberOfLaps;
private String name;
private URL optionalImageURL;
public String getShortName() {
return shortName;
}
public void setShortName(String shortName) {
this.shortName = shortName;
}
public CourseTemplateDTO getOptionalCourseTemplate() {
return optionalCourseTemplate;
}
public void setOptionalCourseTemplate(CourseTemplateDTO optionalCourseTemplate) {
this.optionalCourseTemplate = optionalCourseTemplate;
}
public ArrayList<MarkConfigurationDTO> getAllMarks() {
return markConfigurations;
}
public void setAllMarks(ArrayList<MarkConfigurationDTO> markConfigurations) {
this.markConfigurations = markConfigurations;
}
public HashMap<MarkConfigurationDTO, MarkRoleDTO> getAssociatedRoles() {
return associatedRoles;
}
public void setAssociatedRoles(HashMap<MarkConfigurationDTO, MarkRoleDTO> associatedRoles) {
this.associatedRoles = associatedRoles;
}
public ArrayList<WaypointWithMarkConfigurationDTO> getWaypoints() {
return waypoints;
}
public void setWaypoints(ArrayList<WaypointWithMarkConfigurationDTO> waypoints) {
this.waypoints = waypoints;
}
public RepeatablePart getOptionalRepeatablePart() {
return optionalRepeatablePart;
}
public void setOptionalRepeatablePart(RepeatablePart optionalRepeatablePart) {
this.optionalRepeatablePart = optionalRepeatablePart;
}
public Integer getNumberOfLaps() {
return numberOfLaps;
}
public void setNumberOfLaps(Integer numberOfLaps) {
this.numberOfLaps = numberOfLaps;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public URL getOptionalImageURL() {
return optionalImageURL;
}
public void setOptionalImageURL(URL optionalImageURL) {
this.optionalImageURL = optionalImageURL;
}
}
@@ -7,6 +7,10 @@ public class MarkPropertiesBasedMarkConfigurationDTO extends MarkConfigurationDT
private static final long serialVersionUID = 2204116830344315567L;
private MarkPropertiesDTO markProperties;
public void setMarkProperties(MarkPropertiesDTO markProperties) {
this.markProperties = markProperties;
}
@Override
public MarkPropertiesDTO getOptionalMarkProperties() {
return markProperties;
@@ -13,6 +13,10 @@ public class RegattaMarkConfigurationDTO extends MarkConfigurationDTO {
return mark.getName();
}
public void setOptionalMarkProperties(MarkPropertiesDTO optionalMarkProperties) {
this.optionalMarkProperties = optionalMarkProperties;
}
@Override
public MarkPropertiesDTO getOptionalMarkProperties() {
return optionalMarkProperties;
@@ -1,7 +1,25 @@
package com.sap.sailing.gwt.ui.shared.courseCreation;
import com.google.gwt.user.client.rpc.IsSerializable;
import com.sap.sailing.domain.common.PassingInstruction;
public class WaypointWithMarkConfigurationDTO implements IsSerializable {
private ControlPointWithMarkConfigurationDTO controlPoint;
private PassingInstruction passingInstruction;
public ControlPointWithMarkConfigurationDTO getControlPoint() {
return controlPoint;
}
public void setControlPoint(ControlPointWithMarkConfigurationDTO controlPoint) {
this.controlPoint = controlPoint;
}
public PassingInstruction getPassingInstruction() {
return passingInstruction;
}
public void setPassingInstruction(PassingInstruction passingInstruction) {
this.passingInstruction = passingInstruction;
}
}
@@ -39,7 +39,6 @@ import com.sap.sailing.domain.coursetemplate.MarkTemplateBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.PositioningVisitor;
import com.sap.sailing.domain.coursetemplate.RegattaMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.TrackingDeviceBasedPositioning;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.impl.CourseConfigurationImpl;
@@ -55,6 +54,7 @@ import com.sap.sailing.domain.racelogtracking.DeviceMappingWithRegattaLogEvent;
import com.sap.sailing.domain.tracking.GPSFixTrack;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimeRange;
import com.sap.sse.common.Util.Triple;
import com.sap.sse.common.WithID;
@@ -20,10 +20,10 @@ import com.sap.sailing.domain.coursetemplate.MarkConfiguration;
import com.sap.sailing.domain.coursetemplate.MarkConfigurationRequestAnnotation;
import com.sap.sailing.domain.coursetemplate.MarkConfigurationRequestAnnotation.MarkRoleCreationRequest;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.impl.MarkConfigurationRequestAnnotationImpl.MarkRoleCreationRequestImpl;
import com.sap.sailing.server.gateway.serialization.impl.CourseConfigurationJsonSerializer;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.shared.json.JsonDeserializationException;
import com.sap.sse.shared.json.JsonDeserializer;
@@ -18,13 +18,13 @@ import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkRolePair.MarkRolePairFactory;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.impl.CourseTemplateImpl;
import com.sap.sailing.domain.coursetemplate.impl.WaypointTemplateImpl;
import com.sap.sailing.server.gateway.serialization.impl.CourseTemplateJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.MarkRoleJsonSerializer;
import com.sap.sailing.server.gateway.serialization.impl.MarkTemplateJsonSerializer;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.shared.json.JsonDeserializationException;
import com.sap.sse.shared.json.JsonDeserializer;
@@ -2,9 +2,9 @@ package com.sap.sailing.server.gateway.deserialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.impl.RepeatablePartImpl;
import com.sap.sailing.server.gateway.serialization.impl.RepeatablePartJsonSerializer;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.impl.RepeatablePartImpl;
import com.sap.sse.shared.json.JsonDeserializationException;
import com.sap.sse.shared.json.JsonDeserializer;
@@ -22,8 +22,8 @@ import com.sap.sailing.domain.coursetemplate.MarkPropertiesBasedMarkConfiguratio
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplateBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.RegattaMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimeRange;
import com.sap.sse.common.Util.Triple;
import com.sap.sse.shared.json.JsonSerializer;
@@ -5,7 +5,7 @@ import org.json.simple.JSONObject;
import com.sap.sailing.domain.coursetemplate.CourseTemplate;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.shared.json.JsonSerializer;
public class CourseTemplateJsonSerializer implements JsonSerializer<CourseTemplate> {
@@ -2,7 +2,7 @@ package com.sap.sailing.server.gateway.serialization.impl;
import org.json.simple.JSONObject;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.shared.json.JsonSerializer;
public class RepeatablePartJsonSerializer implements JsonSerializer<RepeatablePart> {
@@ -22,12 +22,12 @@ import com.sap.sailing.domain.coursetemplate.MarkConfigurationResponseAnnotation
import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.MarkTemplateBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.WithOptionalRepeatablePart;
import com.sap.sailing.domain.tracking.TrackedRace;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.WithOptionalRepeatablePart;
import com.sap.sse.security.shared.impl.UserGroup;
/**
@@ -69,7 +69,6 @@ import com.sap.sailing.domain.coursetemplate.MarkTemplateBasedMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.PositioningVisitor;
import com.sap.sailing.domain.coursetemplate.RegattaMarkConfiguration;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.TrackingDeviceBasedPositioning;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.WaypointWithMarkConfiguration;
@@ -92,6 +91,7 @@ import com.sap.sailing.server.gateway.deserialization.impl.CourseConfigurationBu
import com.sap.sailing.server.interfaces.CourseAndMarkConfigurationFactory;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Timed;
import com.sap.sse.common.TransformationException;
@@ -33,12 +33,10 @@ import com.sap.sailing.domain.coursetemplate.MarkPropertiesBuilder;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkRolePair.MarkRolePairFactory;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.impl.CourseTemplateImpl;
import com.sap.sailing.domain.coursetemplate.impl.MarkRoleImpl;
import com.sap.sailing.domain.coursetemplate.impl.MarkTemplateImpl;
import com.sap.sailing.domain.coursetemplate.impl.RepeatablePartImpl;
import com.sap.sailing.domain.coursetemplate.impl.WaypointTemplateImpl;
import com.sap.sailing.domain.racelogtracking.impl.PlaceHolderDeviceIdentifierSerializationHandler;
import com.sap.sailing.shared.persistence.DomainObjectFactory;
@@ -46,11 +44,13 @@ import com.sap.sailing.shared.persistence.device.DeviceIdentifierMongoHandler;
import com.sap.sailing.shared.persistence.device.impl.PlaceHolderDeviceIdentifierMongoHandler;
import com.sap.sse.common.Color;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TypeBasedServiceFinder;
import com.sap.sse.common.TypeBasedServiceFinderFactory;
import com.sap.sse.common.impl.AbstractColor;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.common.impl.RepeatablePartImpl;
import com.sap.sse.common.TransformationException;
public class DomainObjectFactoryImpl implements DomainObjectFactory {
@@ -15,10 +15,10 @@ import com.sap.sailing.domain.coursetemplate.MarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.shared.server.impl.ReplicatingSharedSailingData;
import com.sap.sailing.shared.server.impl.SharedSailingDataImpl;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.replication.OperationWithResult;
@@ -9,9 +9,9 @@ import com.sap.sailing.domain.coursetemplate.CommonMarkProperties;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.common.RepeatablePart;
public interface ReplicatingSharedSailingData extends SharedSailingData {
@@ -27,7 +27,6 @@ import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.MarkTemplate.MarkTemplateResolver;
import com.sap.sailing.domain.coursetemplate.Positioning;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.domain.coursetemplate.impl.CommonMarkPropertiesImpl;
import com.sap.sailing.domain.coursetemplate.impl.CourseTemplateImpl;
@@ -50,6 +49,7 @@ import com.sap.sailing.shared.server.operations.RecordUsageForMarkTemplateOperat
import com.sap.sailing.shared.server.operations.SetPositioningInformationForMarkPropertiesOperation;
import com.sap.sailing.shared.server.operations.UpdateCourseTemplateOperation;
import com.sap.sailing.shared.server.operations.UpdateMarkPropertiesOperation;
import com.sap.sse.common.RepeatablePart;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TypeBasedServiceFinder;
import com.sap.sse.common.TypeBasedServiceFinderFactory;
@@ -6,9 +6,9 @@ import java.util.UUID;
import com.sap.sailing.domain.coursetemplate.MarkRole;
import com.sap.sailing.domain.coursetemplate.MarkTemplate;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sailing.domain.coursetemplate.WaypointTemplate;
import com.sap.sailing.shared.server.impl.ReplicatingSharedSailingData;
import com.sap.sse.common.RepeatablePart;
public class CreateCourseTemplateOperation implements SharedSailingDataOperation<Void> {
private static final long serialVersionUID = 5028364832943967084L;
@@ -1,11 +1,9 @@
package com.sap.sailing.domain.coursetemplate;
package com.sap.sse.common;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.sap.sse.common.Util;
/**
* Reusable implementation of the semantics for the repeatable part of a course sequence. The sequence is defined by the
* start and end of the zero-based repeatable part of the complete sequence. The following requirements need to be
@@ -45,7 +43,7 @@ public interface RepeatablePart extends Serializable {
* in case the given {@code sequenceWithRepeatablePart} contains less or equal elements to
* {@link #getZeroBasedIndexOfRepeatablePartEnd()}.
*/
default <T> Iterable<T> createSequence(int laps, Iterable<T> sequenceWithRepeatablePart) {
default <T> Iterable<T> createSequence(int repetitions, Iterable<T> sequenceWithRepeatablePart) {
validateRepeatablePartForSequence(sequenceWithRepeatablePart);
final int zeroBasedIndexOfRepeatablePartStart = getZeroBasedIndexOfRepeatablePartStart();
final int zeroBasedIndexOfRepeatablePartEnd = getZeroBasedIndexOfRepeatablePartEnd();
@@ -58,7 +56,7 @@ public interface RepeatablePart extends Serializable {
result.add(sequenceWithRepeatablePartAsList.get(i));
}
// Repeatable part of the sequence
for (int lap = 1; lap < laps; lap++) {
for (int lap = 1; lap < repetitions; lap++) {
for (int i = zeroBasedIndexOfRepeatablePartStart; i < zeroBasedIndexOfRepeatablePartEnd; i++) {
result.add(sequenceWithRepeatablePartAsList.get(i));
}
@@ -869,7 +869,7 @@ public class Util {
* Input Iterable
* @return
* returns List<T> if {@code iterable} is an instance of List<?> and if it is an instance Serializable. If not,
* an ArrayList<T> gets constructed and filled with all items of {@code iterable}
* an ArrayList<T> gets constructed and filled with all items of {@code iterable}
*/
public static <T> List<T> asList(Iterable<T> iterable) {
final List<T> list;
@@ -1,4 +1,4 @@
package com.sap.sailing.domain.coursetemplate;
package com.sap.sse.common;
public interface WithOptionalRepeatablePart {
default boolean hasRepeatablePart() {
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.coursetemplate.impl;
package com.sap.sse.common.impl;
import com.sap.sailing.domain.coursetemplate.RepeatablePart;
import com.sap.sse.common.RepeatablePart;
public class RepeatablePartImpl implements RepeatablePart {
private static final long serialVersionUID = -7432656529810302123L;