bug5866/bug5867: pass through centerPosition/radius for CourseArea creation

This commit is contained in:
Axel Uhl committed 2023-08-02 16:07:06 +02:00
1 parent 8d3c5c81d1
commit 9dd347b7c2
10 files changed
+42 -20

No files matched your search

@@ -39,6 +39,6 @@ public class CourseAreaImpl extends NamedImpl implements CourseArea {
@Override
public CourseArea resolve(SharedDomainFactory<?> domainFactory) {
return domainFactory.getOrCreateCourseArea(id, getName(), /* centerPosition */ null, /* radius */ null);
return domainFactory.getOrCreateCourseArea(id, getName(), getCenterPosition(), getRadius());
}
}
@@ -356,6 +356,7 @@ import com.sap.sailing.server.operationaltransformation.UpdateSpecificRegatta;
import com.sap.sailing.server.security.SailingViewerRole;
import com.sap.sailing.server.util.WaitForTrackedRaceUtil;
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.Speed;
@@ -1546,7 +1547,9 @@ public class SailingServiceWriteImpl extends SailingServiceImpl implements Saili
getSecurityService().checkCurrentUserUpdatePermission(getService().getEvent(eventId));
getService().apply(new AddCourseAreas(eventId,
Util.toArray(Util.map(courseAreas, CourseAreaDTO::getName), new String[courseAreas.size()]),
Util.toArray(Util.map(courseAreas, CourseAreaDTO::getId), new UUID[courseAreas.size()])));
Util.toArray(Util.map(courseAreas, CourseAreaDTO::getId), new UUID[courseAreas.size()]),
Util.toArray(Util.map(courseAreas, CourseAreaDTO::getCenterPosition), new Position[courseAreas.size()]),
Util.toArray(Util.map(courseAreas, CourseAreaDTO::getRadius), new Distance[courseAreas.size()])));
}
@Override
@@ -59,6 +59,7 @@ import com.sap.sailing.domain.base.impl.EventBaseImpl;
import com.sap.sailing.domain.common.CompetitorRegistrationType;
import com.sap.sailing.domain.common.LeaderboardNameConstants;
import com.sap.sailing.domain.common.NotFoundException;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.RankingMetrics;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.ScoringSchemeType;
@@ -101,6 +102,7 @@ import com.sap.sailing.server.operationaltransformation.UpdateSeries;
import com.sap.sailing.server.security.SailingViewerRole;
import com.sap.sailing.shared.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sse.InvalidDateException;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
@@ -768,7 +770,9 @@ public class EventsResource extends AbstractSailingServerResource {
SecuredDomainType.EVENT.getStringPermissionForObject(DefaultActions.UPDATE, event));
String[] courseAreaNames = new String[] { courseAreaName };
UUID[] courseAreaIds = new UUID[] { UUID.randomUUID() };
final CourseArea[] courseAreas = getService().apply(new AddCourseAreas(event.getId(), courseAreaNames, courseAreaIds));
final CourseArea[] courseAreas = getService().apply(
new AddCourseAreas(event.getId(), courseAreaNames, courseAreaIds,
/* centerPositions */ new Position[] { null }, /* radiuses */ new Distance[] { null }));
return courseAreas[0];
}
@@ -96,6 +96,7 @@ import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard
import com.sap.sailing.server.operationaltransformation.UpdateEvent;
import com.sap.sailing.server.security.PermissionAwareRaceTrackingHandler;
import com.sap.sailing.server.util.WaitForTrackedRaceUtil;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.NoCorrespondingServiceRegisteredException;
import com.sap.sse.common.TimePoint;
@@ -743,7 +744,7 @@ public class ExpeditionAllInOneImporter {
private UUID addDefaultCourseArea(final Event event) {
final String courseAreaName = "Default";
final UUID courseAreaId = UUID.randomUUID();
service.addCourseAreas(event.getId(), new String[] { courseAreaName }, new UUID[] { courseAreaId });
service.addCourseAreas(event.getId(), new String[] { courseAreaName }, new UUID[] { courseAreaId }, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0]);
return courseAreaId;
}
@@ -105,6 +105,7 @@ import com.sap.sailing.domain.tracking.TrackingConnectorInfo;
import com.sap.sailing.domain.tracking.WindStore;
import com.sap.sailing.domain.tracking.WindTracker;
import com.sap.sailing.server.operationaltransformation.RemoveEvent;
import com.sap.sse.common.Distance;
import com.sap.sse.common.PairingListCreationException;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.TypeBasedServiceFinder;
@@ -509,7 +510,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
void removeRemoteSailingServerReference(String name);
CourseArea[] addCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds);
CourseArea[] addCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds, Position[] centerPositions, Distance[] radiuses);
com.sap.sailing.domain.base.DomainFactory getBaseDomainFactory();
@@ -595,7 +596,7 @@ public interface RacingEventService extends TrackedRegattaRegistry, RegattaFetch
void setRegattaForRace(Regatta regatta, String raceIdAsString);
CourseArea[] addCourseAreasWithoutReplication(UUID eventId, UUID[] courseAreaIds, String[] courseAreaNames);
CourseArea[] addCourseAreasWithoutReplication(UUID eventId, UUID[] courseAreaIds, String[] courseAreaNames, Position[] centerPositions, Distance[] radiuses);
CourseArea[] removeCourseAreaWithoutReplication(UUID eventId, UUID[] courseAreaIds);
@@ -5,8 +5,10 @@ import java.util.UUID;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.base.Venue;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.server.interfaces.RacingEventService;
import com.sap.sailing.server.interfaces.RacingEventServiceOperation;
import com.sap.sse.common.Distance;
/**
* Adds a course area to an {@link Event}'s {@link Venue}.
@@ -20,17 +22,21 @@ public class AddCourseAreas extends AbstractRacingEventServiceOperation<CourseAr
private final String[] courseAreaNames;
private final UUID[] courseAreaIds;
private final UUID eventId;
private final Position[] centerPositions;
private final Distance[] radiuses;
public AddCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds) {
public AddCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds, Position[] centerPositions, Distance[] radiuses) {
super();
this.eventId = eventId;
this.courseAreaIds = courseAreaIds;
this.courseAreaNames = courseAreaNames;
this.centerPositions = centerPositions;
this.radiuses = radiuses;
}
@Override
public CourseArea[] internalApplyTo(RacingEventService toState) throws Exception {
return toState.addCourseAreasWithoutReplication(eventId, courseAreaIds, courseAreaNames);
return toState.addCourseAreasWithoutReplication(eventId, courseAreaIds, courseAreaNames, centerPositions, radiuses);
}
@Override
@@ -15,10 +15,12 @@ import org.junit.Test;
import com.sap.sailing.domain.base.CourseArea;
import com.sap.sailing.domain.base.Event;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.AddLeaderboardGroupToEvent;
import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup;
import com.sap.sailing.server.operationaltransformation.RemoveLeaderboardGroupFromEvent;
import com.sap.sse.common.Distance;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -100,7 +102,8 @@ public class EventReplicationTest extends AbstractServerReplicationTest {
final TimePoint eventStartDate = new MillisecondsTimePoint(new Date());
final TimePoint eventEndDate = new MillisecondsTimePoint(new Date());
Event masterEvent = master.addEvent(eventName, /* eventDescription */ null, eventStartDate, eventEndDate, venueName, isPublic, UUID.randomUUID());
CourseArea masterCourseArea = master.addCourseAreas(masterEvent.getId(), new String[] {courseArea}, new UUID[] {UUID.randomUUID()})[0];
CourseArea masterCourseArea = master.addCourseAreas(masterEvent.getId(), new String[] {courseArea}, new UUID[] {UUID.randomUUID()},
/* TODO bug5866 centerPositions */ new Position[0], /* TODO bug5866 radiuses */ new Distance[0])[0];
Thread.sleep(1000);
Event replicatedEvent = replica.getEvent(masterEvent.getId());
assertNotNull(replicatedEvent);
@@ -28,6 +28,7 @@ import com.sap.sailing.domain.base.impl.RegattaImpl;
import com.sap.sailing.domain.base.impl.SeriesImpl;
import com.sap.sailing.domain.common.CompetitorRegistrationType;
import com.sap.sailing.domain.common.CourseDesignerMode;
import com.sap.sailing.domain.common.Position;
import com.sap.sailing.domain.common.RegattaName;
import com.sap.sailing.domain.common.ScoringSchemeType;
import com.sap.sailing.domain.common.dto.FleetDTO;
@@ -35,6 +36,7 @@ import com.sap.sailing.domain.ranking.OneDesignRankingMetric;
import com.sap.sailing.server.operationaltransformation.UpdateSeries;
import com.sap.sailing.server.operationaltransformation.UpdateSpecificRegatta;
import com.sap.sse.common.Color;
import com.sap.sse.common.Distance;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Util;
import com.sap.sse.common.impl.MillisecondsTimePoint;
@@ -106,8 +108,8 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
final TimePoint eventStartDate = new MillisecondsTimePoint(new Date());
final TimePoint eventEndDate = new MillisecondsTimePoint(new Date());
Event event = master.addEvent("Event", /* eventDescription */ null, eventStartDate, eventEndDate, "Venue", true, UUID.randomUUID());
master.addCourseAreas(event.getId(), new String[] {"Alpha"}, new UUID[] {alphaCourseAreaId});
master.addCourseAreas(event.getId(), new String[] {"TV"}, new UUID[] {tvCourseAreaId});
master.addCourseAreas(event.getId(), new String[] {"Alpha"}, new UUID[] {alphaCourseAreaId}, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0]);
master.addCourseAreas(event.getId(), new String[] {"TV"}, new UUID[] {tvCourseAreaId}, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0]);
UUID currentCourseAreaId = null;
Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName("Kiel Week 2012", "49er"), "49er",
/* canBoatsOfCompetitorsChangePerRace */ true, CompetitorRegistrationType.CLOSED,
@@ -162,7 +164,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
final TimePoint eventStartDate = new MillisecondsTimePoint(new Date());
final TimePoint eventEndDate = new MillisecondsTimePoint(new Date());
Event event = master.addEvent("Event", /* eventDescription */ null, eventStartDate, eventEndDate, "Venue", true, UUID.randomUUID());
master.addCourseAreas(event.getId(), new String[] {"Alpha"}, new UUID[] {alphaCourseAreaId});
master.addCourseAreas(event.getId(), new String[] {"Alpha"}, new UUID[] {alphaCourseAreaId}, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0]);
UUID currentCourseAreaId = null;
Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName("RR", "49er"), "49er",
/* canBoatsOfCompetitorsChangePerRace */ true, CompetitorRegistrationType.CLOSED,
@@ -342,7 +344,7 @@ public class RegattaReplicationTest extends AbstractServerReplicationTest {
final TimePoint eventStartDate = new MillisecondsTimePoint(new Date());
final TimePoint eventEndDate = new MillisecondsTimePoint(new Date());
Event masterEvent = master.addEvent(eventName, /* eventDescription */ null, eventStartDate, eventEndDate, venueName, isPublic, UUID.randomUUID());
CourseArea masterCourseArea = master.addCourseAreas(masterEvent.getId(), new String[] {courseArea}, new UUID[] {UUID.randomUUID()})[0];
CourseArea masterCourseArea = master.addCourseAreas(masterEvent.getId(), new String[] {courseArea}, new UUID[] {UUID.randomUUID()}, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0])[0];
Regatta masterRegatta = master.createRegatta(RegattaImpl.getDefaultName(eventName, boatClassName),
boatClassName, /* canBoatsOfCompetitorsChangePerRace */ true, CompetitorRegistrationType.CLOSED,
/* registrationLinkSecret */ null, /* startDate */ null, /* endDate */ null, UUID.randomUUID(), series,
@@ -145,6 +145,7 @@ import com.sap.sailing.server.masterdata.MasterDataImporter;
import com.sap.sailing.server.testsupport.RacingEventServiceImplMock;
import com.sap.sailing.shared.server.gateway.jaxrs.AbstractSailingServerResource;
import com.sap.sse.common.Color;
import com.sap.sse.common.Distance;
import com.sap.sse.common.TimePoint;
import com.sap.sse.common.Timed;
import com.sap.sse.common.TypeBasedServiceFinderFactory;
@@ -1410,7 +1411,7 @@ public class MasterDataImportTest {
/* sailorsInfoWebsiteURL */null, /* videos */
/* images */Collections.<ImageDescriptor> emptyList(), Collections.<VideoDescriptor> emptyList());
CourseArea defaultCourseArea = sourceService.addCourseAreas(event.getId(), new String[] { "ECHO" },
new UUID[] { UUID.randomUUID() })[0];
new UUID[] { UUID.randomUUID() }, /* centerPositions */ new Position[0], /* radiuses */ new Distance[0])[0];
Regatta regatta = sourceService.createRegatta(
RegattaImpl.getDefaultName(TEST_REGATTA_NAME, TEST_BOAT_CLASS_NAME),
@@ -1476,7 +1477,7 @@ public class MasterDataImportTest {
/* sailorsInfoWebsiteURL */null, /* videos */
/* images */Collections.<ImageDescriptor> emptyList(), Collections.<VideoDescriptor> emptyList());
CourseArea defaultCourseArea = sourceService.addCourseAreas(event.getId(), new String[] { "ECHO" },
new UUID[] { UUID.randomUUID() })[0];
new UUID[] { UUID.randomUUID() }, /* TODO bug5866 centerPositions */ new Position[0], /* TODO bug5866 radiuses */ new Distance[0])[0];
List<String> raceColumnNames = new ArrayList<>();
String raceColumnName = "T1";
@@ -315,6 +315,7 @@ import com.sap.sailing.server.tagging.TaggingServiceFactory;
import com.sap.sailing.server.util.EventUtil;
import com.sap.sailing.shared.server.SharedSailingData;
import com.sap.sse.ServerInfo;
import com.sap.sse.common.Distance;
import com.sap.sse.common.Duration;
import com.sap.sse.common.PairingListCreationException;
import com.sap.sse.common.TimePoint;
@@ -3888,17 +3889,17 @@ Replicator {
}
@Override
public CourseArea[] addCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds) {
final CourseArea[] courseAreas = addCourseAreasWithoutReplication(eventId, courseAreaIds, courseAreaNames);
replicate(new AddCourseAreas(eventId, courseAreaNames, courseAreaIds));
public CourseArea[] addCourseAreas(UUID eventId, String[] courseAreaNames, UUID[] courseAreaIds, Position[] centerPositions, Distance[] radiuses) {
final CourseArea[] courseAreas = addCourseAreasWithoutReplication(eventId, courseAreaIds, courseAreaNames, centerPositions, radiuses);
replicate(new AddCourseAreas(eventId, courseAreaNames, courseAreaIds, centerPositions, radiuses));
return courseAreas;
}
@Override
public CourseArea[] addCourseAreasWithoutReplication(UUID eventId, UUID[] courseAreaIds, String[] courseAreaNames) {
public CourseArea[] addCourseAreasWithoutReplication(UUID eventId, UUID[] courseAreaIds, String[] courseAreaNames, Position[] centerPositions, Distance[] radiuses) {
final CourseArea[] result = new CourseArea[courseAreaNames.length];
for (int i=0; i<courseAreaIds.length; i++) {
final CourseArea courseArea = getBaseDomainFactory().getOrCreateCourseArea(courseAreaIds[i], courseAreaNames[i], /* centerPosition */ null, /* radius */ null);
final CourseArea courseArea = getBaseDomainFactory().getOrCreateCourseArea(courseAreaIds[i], courseAreaNames[i], centerPositions[i], radiuses[i]);
final Event event = eventsById.get(eventId);
if (event == null) {
throw new IllegalArgumentException("No sailing event with ID " + eventId + " found.");