mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-16 17:21:00 +00:00
Refactored code. Adjusted tests. Added exception mapper.
This commit is contained in:
1 parent
8ba81d9cab
commit
6f66fc6efb
4 files changed
+347
-428
No files matched your search
+16
-15
@@ -40,6 +40,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
|
||||
@Test
|
||||
public void testCreateEvent() throws Exception {
|
||||
// cave: using null as parameters overrides @DefaultValue Annotation
|
||||
Response eventResponse = eventsResource.createEvent(randomName, randomName, null, null, randomName, null, null, null, null, null, null, null);
|
||||
assertTrue(isValidEventResponse(eventResponse));
|
||||
}
|
||||
@@ -49,7 +50,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
Response eventResponse = eventsResource.createEvent(randomName, randomName, null, null, randomName, null, null, null, null, "true", null, null);
|
||||
assertTrue(isValidEventResponse(eventResponse));
|
||||
|
||||
JSONObject objEvent = getEvent(getEntityAsString(eventResponse));
|
||||
JSONObject objEvent = getEvent(getIdFromResponse(eventResponse));
|
||||
assertTrue(hasDefaultLeaderboardGroup(objEvent));
|
||||
}
|
||||
|
||||
@@ -59,7 +60,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
Response eventResponse = eventsResource.createEvent(randomName, randomName, null, null, randomName, null, null, null, null, "true", "true", "A_CAT");
|
||||
assert(isValidEventResponse(eventResponse));
|
||||
|
||||
JSONObject objEvent = getEvent(getEntityAsString(eventResponse));
|
||||
JSONObject objEvent = getEvent(getIdFromResponse(eventResponse));
|
||||
assertTrue(hasDefaultLeaderboardGroup(objEvent));
|
||||
|
||||
assertTrue(hasAtLeastOneCourseArea(objEvent));
|
||||
@@ -88,10 +89,10 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
String eventName = randomName();
|
||||
|
||||
Response eventResponse = eventsResource.createEvent(eventName, eventName, null, null, eventName, null, null, null, null, null, null, null);
|
||||
String strEventId = getEntityAsString(eventResponse);
|
||||
String strEventId = getIdFromResponse(eventResponse);
|
||||
|
||||
Response addLeaderboardGroupResponse = eventsResource.addLeaderboardGroup(strEventId, eventName, eventName, null, null, null, null, null);
|
||||
String strLeaderboardGroupId = getEntityAsString(addLeaderboardGroupResponse);
|
||||
String strLeaderboardGroupId = getIdFromResponse(addLeaderboardGroupResponse);
|
||||
assertTrue(isValidLeaderboardGroupResponse(addLeaderboardGroupResponse));
|
||||
|
||||
JSONObject objEvent = getEvent(strEventId);
|
||||
@@ -108,8 +109,8 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
Response eventResponse = eventsResource.createEvent(eventName, eventName, null, null, eventName, null, null, null, null, null, null, null);
|
||||
assertTrue(isValidEventResponse(eventResponse));
|
||||
|
||||
String strEventId = getEntityAsString(eventResponse);
|
||||
Response regattaResponse = eventsResource.addRegatta(eventName, "A_CAT", null, strEventId, null,"true", "LOW_POINT", null, "3.0", "true", "false", "ONE_DESIGN");
|
||||
String strEventId = getIdFromResponse(eventResponse);
|
||||
Response regattaResponse = eventsResource.addRegatta(eventName, "A_CAT", null, strEventId, null, null, null, null, null, null, null, "ONE_DESIGN");
|
||||
assertTrue(isValidRegattaResponse(regattaResponse));
|
||||
|
||||
JSONObject regatta = getRegatta(eventName);
|
||||
@@ -134,7 +135,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
Response eventResponse = eventsResource.createEvent(eventName, eventName, null, null, eventName, null, null, null, null, "true", null, null);
|
||||
assertTrue(isValidEventResponse(eventResponse));
|
||||
|
||||
String strEventId = getEntityAsString(eventResponse);
|
||||
String strEventId = getIdFromResponse(eventResponse);
|
||||
Response regattaResponse = eventsResource.addRegatta(eventName, "A_CAT", null, strEventId, null,"true", "LOW_POINT", null, "3.0", "true", "false", "ONE_DESIGN");
|
||||
assertTrue(isValidRegattaResponse(regattaResponse));
|
||||
|
||||
@@ -182,21 +183,21 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
|
||||
private JSONObject getRegatta(String eventName) {
|
||||
Response regattasResponse = regattasResource.getRegatta(eventName);
|
||||
return toJSONObject(getEntityAsString(regattasResponse));
|
||||
return toJSONObject(getIdFromResponse(regattasResponse));
|
||||
}
|
||||
|
||||
private boolean isValidEventResponse(Response response) {
|
||||
String id = getEntityAsString(response);
|
||||
String id = getIdFromResponse(response);
|
||||
return validateUUID(id);
|
||||
}
|
||||
|
||||
private boolean isValidLeaderboardGroupResponse(Response response) {
|
||||
String id = getEntityAsString(response);
|
||||
String id = getIdFromResponse(response);
|
||||
return validateUUID(id);
|
||||
}
|
||||
|
||||
private boolean isValidRegattaResponse(Response response) {
|
||||
String id = getEntityAsString(response);
|
||||
String id = getIdFromResponse(response);
|
||||
return validateUUID(id);
|
||||
}
|
||||
|
||||
@@ -222,14 +223,14 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
|
||||
|
||||
private JSONObject getEntityAsObject(Response leaderboardGroupsResponse) {
|
||||
String strLeaderboardGroup = getEntityAsString(leaderboardGroupsResponse);
|
||||
String strLeaderboardGroup = getIdFromResponse(leaderboardGroupsResponse);
|
||||
JSONObject objLeaderboardGroup = toJSONObject(strLeaderboardGroup);
|
||||
return objLeaderboardGroup;
|
||||
}
|
||||
|
||||
private JSONObject getLeaderboardGroup(String strDefaultLeaderboardGroupName) {
|
||||
Response leaderboardGroupsResponse = leaderboardGroupsResource.getLeaderboardGroup(strDefaultLeaderboardGroupName);
|
||||
return toJSONObject(getEntityAsString(leaderboardGroupsResponse));
|
||||
return toJSONObject(getIdFromResponse(leaderboardGroupsResponse));
|
||||
}
|
||||
|
||||
private JSONArray getLeaderboardGroups(JSONObject objEvent) {
|
||||
@@ -256,7 +257,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
}
|
||||
|
||||
|
||||
private String getEntityAsString(Response eventResponse) {
|
||||
private String getIdFromResponse(Response eventResponse) {
|
||||
return (String) eventResponse.getEntity();
|
||||
}
|
||||
|
||||
@@ -266,7 +267,7 @@ public class EventResourceTest extends AbstractJaxRsApiTest
|
||||
|
||||
|
||||
private String getEventAsString(String eventId) {
|
||||
return getEntityAsString(eventsResource.getEvent(eventId));
|
||||
return getIdFromResponse(eventsResource.getEvent(eventId));
|
||||
}
|
||||
|
||||
|
||||
|
||||
+277
-412
@@ -21,7 +21,6 @@ import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DefaultValue;
|
||||
import javax.ws.rs.FormParam;
|
||||
@@ -36,6 +35,7 @@ import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
|
||||
import org.apache.commons.lang.StringEscapeUtils;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.json.simple.JSONArray;
|
||||
import org.json.simple.JSONObject;
|
||||
|
||||
@@ -44,17 +44,21 @@ import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.EventBase;
|
||||
import com.sap.sailing.domain.base.Regatta;
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.domain.common.NotFoundException;
|
||||
import com.sap.sailing.domain.common.RankingMetrics;
|
||||
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.RegattaCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.dto.SeriesCreationParametersDTO;
|
||||
import com.sap.sailing.domain.common.security.Permission;
|
||||
import com.sap.sailing.domain.common.security.Permission.Mode;
|
||||
import com.sap.sailing.domain.leaderboard.Leaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.LeaderboardGroup;
|
||||
import com.sap.sailing.domain.leaderboard.RegattaLeaderboard;
|
||||
import com.sap.sailing.domain.leaderboard.ScoringScheme;
|
||||
import com.sap.sailing.server.gateway.jaxrs.AbstractSailingServerResource;
|
||||
import com.sap.sailing.server.gateway.jaxrs.exceptions.ExceptionManager;
|
||||
import com.sap.sailing.server.gateway.serialization.JsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.CourseAreaJsonSerializer;
|
||||
import com.sap.sailing.server.gateway.serialization.impl.EventBaseJsonSerializer;
|
||||
@@ -64,7 +68,6 @@ import com.sap.sailing.server.gateway.serialization.impl.VenueJsonSerializer;
|
||||
import com.sap.sailing.server.operationaltransformation.AddCourseAreas;
|
||||
import com.sap.sailing.server.operationaltransformation.AddSpecificRegatta;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateEvent;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateLeaderboardGroup;
|
||||
import com.sap.sailing.server.operationaltransformation.CreateRegattaLeaderboard;
|
||||
import com.sap.sse.common.Duration;
|
||||
import com.sap.sse.common.Util.Pair;
|
||||
@@ -77,84 +80,143 @@ import com.sap.sse.shared.media.VideoDescriptor;
|
||||
public class EventsResource extends AbstractSailingServerResource {
|
||||
|
||||
private static final SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy");
|
||||
|
||||
private static final boolean DEBUG_SECURITY_CHECK = false;
|
||||
|
||||
@POST
|
||||
@Path("/createEvent")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response createEvent(@FormParam("eventName") String eventName,
|
||||
@FormParam("eventDescription") String eventDescription,
|
||||
@FormParam("startDate") String startDateString,
|
||||
@FormParam("endDate") String endDateString,
|
||||
@FormParam("venueName") String venueName,
|
||||
public Response createEvent(@FormParam("eventName") String eventNameParam,
|
||||
@FormParam("eventDescription") String eventDescriptionParam,
|
||||
@FormParam("startDate") String startDateParam,
|
||||
@FormParam("endDate") String endDateParam,
|
||||
@FormParam("venueName") String venueNameParam,
|
||||
@FormParam("isPublic") @DefaultValue("false") String isPublicParam,
|
||||
@FormParam("officialWebsiteURL") String officialWebsiteURLString,
|
||||
@FormParam("baseURL") String baseURLString,
|
||||
@FormParam("leaderboardGroupIds") List<String> leaderboardGroupIdsList,
|
||||
@FormParam("officialWebsiteURL") String officialWebsiteURLParam,
|
||||
@FormParam("baseURL") String baseURLParam,
|
||||
@FormParam("leaderboardGroupIds") List<String> leaderboardGroupIdsListParam,
|
||||
@FormParam("createLeaderboardGroup") @DefaultValue("false") String createLeaderboardGroupParam,
|
||||
@FormParam("createRegatta") @DefaultValue("false") String createRegattaParam,
|
||||
@FormParam("boatClassName") String boatClassName)
|
||||
@FormParam("boatClassName") String boatClassNameParam) throws MalformedURLException, ParseException, NotFoundException
|
||||
{
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.CREATE));
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.CREATE));
|
||||
|
||||
Event event = validateAndCreateEvent(eventNameParam, eventDescriptionParam, startDateParam, endDateParam, venueNameParam,
|
||||
isPublicParam, officialWebsiteURLParam, baseURLParam, leaderboardGroupIdsListParam,
|
||||
createLeaderboardGroupParam, createRegattaParam, boatClassNameParam);
|
||||
|
||||
return ok(event.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/addRegatta")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addRegatta(@FormParam("regattaName") String regattaNameParam,
|
||||
@FormParam("boatClassName") String boatClassNameParam,
|
||||
@FormParam("startDate") String startDateParam,
|
||||
@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("endDate") String endDateParam,
|
||||
@FormParam("persistent") @DefaultValue("true") String isPersistentParam,
|
||||
@FormParam("scoringScheme") @DefaultValue("LOW_POINT") String scoringSchemeParam,
|
||||
@FormParam("courseAreaId") String courseAreaIdParam,
|
||||
@FormParam("buoyZoneRadiusInHullLengths") @DefaultValue("3.0") String buoyZoneRadiusInHullLengthsParam,
|
||||
@FormParam("useStartTimeInterference") @DefaultValue("true") String useStartTimeInterferenceParam,
|
||||
@FormParam("controlTrackingFromStartAndFinishTimes") @DefaultValue("false") String controlTrackingFromStartAndFinishTimesParam,
|
||||
@FormParam("rankingMetric") @DefaultValue("ONE_DESIGN") String rankingMetricParam) throws ParseException, NotFoundException
|
||||
{
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.CREATE, regattaNameParam));
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.READ));
|
||||
|
||||
Regatta regatta = validateAndCreateRegatta(regattaNameParam, boatClassNameParam, startDateParam, eventIdParam, endDateParam,
|
||||
isPersistentParam, scoringSchemeParam, courseAreaIdParam, buoyZoneRadiusInHullLengthsParam,
|
||||
useStartTimeInterferenceParam, controlTrackingFromStartAndFinishTimesParam, rankingMetricParam);
|
||||
|
||||
return ok(regatta.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/addCourseArea")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addCourseArea(@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("courseAreaName") @DefaultValue("Default") String courseAreaNameParam)
|
||||
{
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.CREATE));
|
||||
|
||||
if(eventIdParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("eventId"));
|
||||
if(courseAreaNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("courseAreaName"));
|
||||
|
||||
UUID eventId = toUUID(eventIdParam);
|
||||
CourseArea courseArea = addCourseArea(eventId, courseAreaNameParam);
|
||||
|
||||
return ok(courseArea.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/addLeaderboard")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addLeaderboard(@FormParam("regattaName") String regattaNameParam,
|
||||
@FormParam("discardThreshold") List<Integer> discardThresholdsParam)
|
||||
{
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.LEADERBOARD.getStringPermissionForObjects(Mode.CREATE, regattaNameParam));
|
||||
|
||||
if(regattaNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("regattaName"));
|
||||
|
||||
int[] discardThresholds = discardThresholdsParam == null ? new int[0] : discardThresholdsParam.stream().mapToInt(i -> i).toArray();
|
||||
|
||||
RegattaLeaderboard leaderboard = addLeaderboard(regattaNameParam, discardThresholds);
|
||||
|
||||
return ok(leaderboard.getName(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/addLeaderboardGroup")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addLeaderboardGroup(@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("leaderboardGroupName") String leaderboardGroupNameParam,
|
||||
@FormParam("leaderboardGroupDescription") String leaderboardGroupDescriptionParam,
|
||||
@FormParam("leaderboardGroupDisplayName") String leaderboardGroupDisplayNameParam,
|
||||
@FormParam("displayGroupsInReverseOrder") String displayGroupsInReverseOrderParam,
|
||||
@FormParam("leaderboardNames") List<String> leaderboardNamesParam,
|
||||
@FormParam("overallLeaderboardDiscardThresholds") List<Integer> overallLeaderboardDiscardThresholdsParam,
|
||||
@FormParam("overallLeaderboardScoringSchemeType") @DefaultValue("LOW_POINT") String overallLeaderboardScoringSchemeTypeParam) throws NotFoundException
|
||||
{
|
||||
if(DEBUG_SECURITY_CHECK) SecurityUtils.getSubject().checkPermission(Permission.LEADERBOARD_GROUP.getStringPermissionForObjects(Mode.CREATE, leaderboardGroupNameParam));
|
||||
|
||||
LeaderboardGroup leaderboardGroup = validateAndAddLeaderboardGroup(eventIdParam, leaderboardGroupNameParam,
|
||||
leaderboardGroupDescriptionParam, leaderboardGroupDescriptionParam, displayGroupsInReverseOrderParam,
|
||||
leaderboardNamesParam, overallLeaderboardDiscardThresholdsParam,
|
||||
overallLeaderboardScoringSchemeTypeParam);
|
||||
|
||||
return ok(leaderboardGroup.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
private Event validateAndCreateEvent(String eventNameParam, String eventDescriptionParam, String startDateParam, String endDateParam, String venueNameParam,
|
||||
String isPublicParam, String officialWebsiteURLParam, String baseURLParam, List<String >leaderboardGroupIdsListParam,
|
||||
String createLeaderboardGroupParam, String createRegattaParam, String boatClassNameParam) throws ParseException, MalformedURLException, NotFoundException{
|
||||
|
||||
boolean isPublic = Boolean.parseBoolean(isPublicParam);
|
||||
boolean createRegatta = Boolean.parseBoolean(createRegattaParam);
|
||||
boolean createLeaderboardGroup = Boolean.parseBoolean(createLeaderboardGroupParam);
|
||||
|
||||
if (eventName == null) {
|
||||
return getParameterMissingResponse("eventName");
|
||||
}
|
||||
|
||||
if (venueName == null) {
|
||||
return getParameterMissingResponse("venueName");
|
||||
}
|
||||
if(eventNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("eventName"));
|
||||
if(venueNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("venueName"));
|
||||
if(createRegatta && boatClassNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("boatClassName"));
|
||||
|
||||
if (createRegatta) {
|
||||
if (boatClassName == null) {
|
||||
return getParameterMissingResponse("boatClassName");
|
||||
}
|
||||
}
|
||||
|
||||
if (eventDescription == null) {
|
||||
eventDescription = eventName;
|
||||
}
|
||||
|
||||
MillisecondsTimePoint startDate = null;
|
||||
try {
|
||||
startDate = startDateString != null ? new MillisecondsTimePoint(df.parse(startDateString))
|
||||
: new MillisecondsTimePoint(new Date());
|
||||
} catch (ParseException e) {
|
||||
return getInvalidDateFormatResponse(startDateString);
|
||||
}
|
||||
|
||||
MillisecondsTimePoint endDate = null;
|
||||
try {
|
||||
endDate = endDateString != null ? new MillisecondsTimePoint(df.parse(endDateString))
|
||||
: new MillisecondsTimePoint(addOneWeek(startDate.asDate()));
|
||||
} catch (ParseException e) {
|
||||
return getInvalidDateFormatResponse(endDateString);
|
||||
}
|
||||
|
||||
URL officialWebsiteURL = null;
|
||||
try {
|
||||
officialWebsiteURL = officialWebsiteURLString != null ? new URL(officialWebsiteURLString) : null;
|
||||
} catch (MalformedURLException e) {
|
||||
return getInvalidURLFormatResponse(officialWebsiteURLString);
|
||||
}
|
||||
|
||||
URL baseURL = null;
|
||||
try {
|
||||
baseURL = baseURLString != null ? new URL(baseURLString) : null;
|
||||
} catch (MalformedURLException e) {
|
||||
return getInvalidURLFormatResponse(baseURLString);
|
||||
}
|
||||
|
||||
List<UUID> leaderboardGroupIds = new ArrayList<UUID>();
|
||||
if(leaderboardGroupIdsList != null){
|
||||
leaderboardGroupIds = leaderboardGroupIdsList.stream().map(id -> UUID.fromString(id))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
String eventName = eventNameParam;
|
||||
String venueName = venueNameParam;
|
||||
String boatClassName = boatClassNameParam;
|
||||
String eventDescription = eventDescriptionParam == null ? eventNameParam : eventDescriptionParam;
|
||||
MillisecondsTimePoint startDate = startDateParam == null ? now() : toMillisecondsTimePoint(startDateParam);
|
||||
MillisecondsTimePoint endDate = endDateParam == null ? new MillisecondsTimePoint(addOneWeek(startDate.asDate())): toMillisecondsTimePoint(endDateParam) ;
|
||||
URL officialWebsiteURL = officialWebsiteURLParam == null ? null : toURL(officialWebsiteURLParam);
|
||||
URL baseURL = baseURLParam == null ? null : toURL(baseURLParam);
|
||||
List<UUID> leaderboardGroupIds = leaderboardGroupIdsListParam == null ? new ArrayList<UUID>() : toUUIDList(leaderboardGroupIdsListParam);
|
||||
UUID eventId = UUID.randomUUID();
|
||||
|
||||
// ignoring sailorsInfoWebsiteURLs, images, videos
|
||||
@@ -168,277 +230,73 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
CourseArea courseArea = addCourseArea(event.getId(), "Default");
|
||||
|
||||
if (createLeaderboardGroup) {
|
||||
addLeaderboardGroup(event.getName(), event.getDescription(), null, new ArrayList<String>(), false, event, ScoringSchemeType.LOW_POINT, new int[0]);
|
||||
addLeaderboardGroup(event.getId().toString(), event.getName(), event.getName(), null, null, null, null, null);
|
||||
}
|
||||
|
||||
if (createRegatta) {
|
||||
addRegatta(event.getName(), true, false, true, 3.0, courseArea.getId(), boatClassName, new MillisecondsTimePoint(new Date()), new MillisecondsTimePoint(addOneWeek(new Date())), getService().getBaseDomainFactory().createScoringScheme(ScoringSchemeType.LOW_POINT), RankingMetrics.ONE_DESIGN, UUID.randomUUID(), new RegattaCreationParametersDTO(
|
||||
createDefaultSeriesCreationParameters()));
|
||||
|
||||
addRegatta(event.getName(), boatClassName, startDateParam, null, endDateParam, null, null,
|
||||
courseArea.getId().toString(), null, null, null, null);
|
||||
}
|
||||
|
||||
return ok(event.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
|
||||
return event;
|
||||
}
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/addRegatta")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addRegatta(@FormParam("regattaName") String regattaName,
|
||||
@FormParam("boatClassName") String boatClassNameParam,
|
||||
@FormParam("startDate") String startDateString,
|
||||
@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("endDate") String endDateString,
|
||||
@FormParam("persistent") @DefaultValue("true") String isPersistentParam,
|
||||
@FormParam("scoringScheme") @DefaultValue("LOW_POINT") String scoringSchemeParam,
|
||||
@FormParam("courseAreaId") String courseAreaIdParam,
|
||||
@FormParam("buoyZoneRadiusInHullLengths") @DefaultValue("3.0") String buoyZoneRadiusInHullLengthsParam,
|
||||
@FormParam("useStartTimeInterference") @DefaultValue("true") String useStartTimeInterferenceParam,
|
||||
@FormParam("controlTrackingFromStartAndFinishTimes") @DefaultValue("false") String controlTrackingFromStartAndFinishTimesParam,
|
||||
@FormParam("rankingMetric") @DefaultValue("ONE_DESIGN") String rankingMetricParam)
|
||||
{
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.REGATTA.getStringPermissionForObjects(Mode.CREATE, regattaName));
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.READ));
|
||||
private Regatta validateAndCreateRegatta(String regattaNameParam, String boatClassNameParam, String startDateParam,
|
||||
String eventIdParam, String endDateParam, String isPersistentParam, String scoringSchemeParam, String courseAreaIdParam, String buoyZoneRadiusInHullLengthsParam,
|
||||
String useStartTimeInterferenceParam, String controlTrackingFromStartAndFinishTimesParam, String rankingMetricParam) throws ParseException, NotFoundException{
|
||||
|
||||
boolean isPersistent = Boolean.parseBoolean(isPersistentParam);
|
||||
boolean controlTrackingFromStartAndFinishTimes = Boolean.parseBoolean(controlTrackingFromStartAndFinishTimesParam);
|
||||
boolean useStartTimeInterference = Boolean.parseBoolean(useStartTimeInterferenceParam);
|
||||
double buoyZoneRadiusInHullLengths = Double.parseDouble(buoyZoneRadiusInHullLengthsParam);
|
||||
boolean isPersistent = isPersistentParam == null ? true : Boolean.parseBoolean(isPersistentParam);
|
||||
boolean controlTrackingFromStartAndFinishTimes = controlTrackingFromStartAndFinishTimesParam == null ? false : Boolean.parseBoolean(controlTrackingFromStartAndFinishTimesParam);
|
||||
boolean useStartTimeInterference = useStartTimeInterferenceParam == null ? true : Boolean.parseBoolean(useStartTimeInterferenceParam);
|
||||
double buoyZoneRadiusInHullLengths = buoyZoneRadiusInHullLengthsParam == null ? 3.0 : Double.parseDouble(buoyZoneRadiusInHullLengthsParam);
|
||||
|
||||
if (regattaName == null) {
|
||||
return getParameterMissingResponse("regattaName");
|
||||
}
|
||||
|
||||
if (boatClassNameParam == null) {
|
||||
return getParameterMissingResponse("boatClassName");
|
||||
}
|
||||
|
||||
if (eventIdParam == null && courseAreaIdParam == null) {
|
||||
return getMissingParametersResponse(Arrays.asList("eventId", "courseAreaId"));
|
||||
}
|
||||
|
||||
UUID courseAreaId = null;
|
||||
|
||||
if (eventIdParam != null) {
|
||||
UUID eventId = null;
|
||||
Event event = null;
|
||||
try {
|
||||
eventId = UUID.fromString(eventIdParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getInvalidIdFormatResponse(eventIdParam);
|
||||
}
|
||||
|
||||
event = getService().getEvent(eventId);
|
||||
if (event == null){
|
||||
return getBadEventErrorResponse(eventIdParam);
|
||||
}
|
||||
|
||||
CourseArea courseArea = getDefaultCourseArea(event);
|
||||
courseAreaId = courseArea != null ? courseArea.getId() : null;
|
||||
}
|
||||
|
||||
if (courseAreaIdParam != null) {
|
||||
try {
|
||||
courseAreaId = UUID.fromString(courseAreaIdParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getInvalidIdFormatResponse(courseAreaIdParam);
|
||||
}
|
||||
}
|
||||
|
||||
String boatClassName = null;
|
||||
try {
|
||||
boatClassName = BoatClassMasterdata.valueOf(boatClassNameParam).getDisplayName();
|
||||
} catch (IllegalArgumentException e) {
|
||||
String correctValues = getBoatClassDisplayNames();
|
||||
return getValueUnknownResponse(boatClassNameParam, correctValues);
|
||||
}
|
||||
|
||||
MillisecondsTimePoint startDate = null;
|
||||
try { startDate = startDateString != null ? new MillisecondsTimePoint(df.parse(startDateString)) : new MillisecondsTimePoint(new Date());;
|
||||
} catch (ParseException e) {
|
||||
return getInvalidDateFormatResponse(startDateString);
|
||||
}
|
||||
|
||||
MillisecondsTimePoint endDate = null;
|
||||
try {
|
||||
endDate = endDateString != null ? new MillisecondsTimePoint(df.parse(endDateString)) : new MillisecondsTimePoint(addOneWeek(startDate.asDate()));;
|
||||
} catch (ParseException e) {
|
||||
return getInvalidDateFormatResponse(endDateString);
|
||||
}
|
||||
|
||||
ScoringScheme scoringScheme = null;
|
||||
ScoringSchemeType type = null;
|
||||
if (scoringSchemeParam != null) {
|
||||
try {
|
||||
type = ScoringSchemeType.valueOf(scoringSchemeParam);
|
||||
scoringScheme = getService().getBaseDomainFactory().createScoringScheme(type);
|
||||
} catch (IllegalArgumentException e) {
|
||||
String correctValues = getEnumValuesAsString(ScoringSchemeType.class);
|
||||
return getValueUnknownResponse(scoringSchemeParam, correctValues);
|
||||
}
|
||||
}
|
||||
|
||||
RankingMetrics rankingMetric = null;
|
||||
if (rankingMetricParam != null) {
|
||||
try {
|
||||
rankingMetric = RankingMetrics.valueOf(rankingMetricParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
String correctValues = getEnumValuesAsString(RankingMetrics.class);
|
||||
return getValueUnknownResponse(rankingMetricParam, correctValues);
|
||||
}
|
||||
}
|
||||
|
||||
if(regattaNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("regattaName"));
|
||||
if(boatClassNameParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("boatClassName"));
|
||||
if(eventIdParam == null && courseAreaIdParam == null) throw new IllegalArgumentException(ExceptionManager.atLeastOneParameterRequiredMsg("eventId", "courseAreaId"));
|
||||
|
||||
String regattaName = regattaNameParam;
|
||||
UUID eventId = eventIdParam == null ? null : toUUID(eventIdParam);
|
||||
UUID courseAreaId = courseAreaIdParam == null ? null : toUUID(courseAreaIdParam);
|
||||
String boatClassName = boatClassNameParam == null ? null : getBoatClassDisplayName(boatClassNameParam);
|
||||
MillisecondsTimePoint startDate = startDateParam == null ? now() : toMillisecondsTimePoint(startDateParam);
|
||||
MillisecondsTimePoint endDate = endDateParam == null ? new MillisecondsTimePoint(addOneWeek(startDate.asDate())): toMillisecondsTimePoint(endDateParam) ;
|
||||
ScoringScheme scoringScheme = scoringSchemeParam == null ? createScoringScheme("LOW_POINT") : createScoringScheme(scoringSchemeParam);
|
||||
RankingMetrics rankingMetric = rankingMetricParam == null ? createRankingMetric("ONE_DESIGN") : createRankingMetric(rankingMetricParam);
|
||||
RegattaCreationParametersDTO regattaCreationParametersDTO = new RegattaCreationParametersDTO(createDefaultSeriesCreationParameters());
|
||||
UUID regattaId = UUID.randomUUID();
|
||||
|
||||
// using default seriesCreationParameters
|
||||
RegattaCreationParametersDTO regattaCreationParametersDTO = new RegattaCreationParametersDTO(
|
||||
createDefaultSeriesCreationParameters());
|
||||
|
||||
// if courseAreaId not provided then get it from eventId
|
||||
if(eventId != null && courseAreaId == null) courseAreaId = getDefaultCourseArea(getEvent(eventId)).getId();
|
||||
|
||||
Regatta regatta = addRegatta(regattaName, isPersistent, controlTrackingFromStartAndFinishTimes,
|
||||
useStartTimeInterference, buoyZoneRadiusInHullLengths, courseAreaId, boatClassName, startDate, endDate,
|
||||
scoringScheme, rankingMetric, regattaId, regattaCreationParametersDTO);
|
||||
|
||||
|
||||
return ok(regatta.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
return regatta;
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/addCourseArea")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addCourseArea(@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("courseAreaName") @DefaultValue("Default") String courseAreaName) {
|
||||
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.COURSE_AREA.getStringPermission(Mode.CREATE));
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.EVENT.getStringPermission(Mode.CREATE));
|
||||
private LeaderboardGroup validateAndAddLeaderboardGroup(String eventIdParam, String leaderboardGroupNameParam,
|
||||
String leaderboardGroupDescriptionParam, String leaderboardGroupDisplayNameParam, String displayGroupsInReverseOrderParam,
|
||||
List<String> leaderboardNamesParam, List<Integer> overallLeaderboardDiscardThresholdsParam, String overallLeaderboardScoringSchemeTypeParam) throws NotFoundException{
|
||||
|
||||
if (eventIdParam == null) {
|
||||
return getParameterMissingResponse("eventId");
|
||||
}
|
||||
|
||||
if (courseAreaName == null) {
|
||||
return getParameterMissingResponse("courseAreaName");
|
||||
}
|
||||
|
||||
UUID eventId = null;
|
||||
try {
|
||||
eventId = UUID.fromString(eventIdParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getInvalidIdFormatResponse(eventIdParam);
|
||||
}
|
||||
|
||||
CourseArea result = addCourseArea(eventId, courseAreaName);
|
||||
|
||||
return ok(result.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
private CourseArea addCourseArea(UUID eventId, String courseAreaName) {
|
||||
String[] courseAreaNames = new String[] { courseAreaName };
|
||||
UUID[] courseAreaIds = new UUID[] { UUID.randomUUID() };
|
||||
CourseArea[] courseAreas = null;
|
||||
CourseArea result = null;
|
||||
try {
|
||||
courseAreas = getService().apply(new AddCourseAreas(eventId, courseAreaNames, courseAreaIds));
|
||||
result = courseAreas[0];
|
||||
} catch (IllegalArgumentException e) {
|
||||
// return getBadEventErrorResponse(eventId.toString());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("/addLeaderboard")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addLeaderboard(@FormParam("regattaName") String regattaName,
|
||||
@FormParam("discardThreshold") List<Integer> discardThresholdsParam) {
|
||||
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.LEADERBOARD.getStringPermissionForObjects(Mode.CREATE, regattaName));
|
||||
if(eventIdParam == null) throw new IllegalArgumentException(ExceptionManager.parameterRequiredMsg("eventId"));
|
||||
|
||||
if (regattaName == null) {
|
||||
return getParameterMissingResponse("regattaName");
|
||||
}
|
||||
|
||||
if (getService().getRegatta(new RegattaName(regattaName)) == null) {
|
||||
return getBadObjectErrorResponse(Regatta.class.getSimpleName(), regattaName);
|
||||
}
|
||||
|
||||
int[] discardThresholds = discardThresholdsParam != null
|
||||
? discardThresholdsParam.stream().mapToInt(i -> i).toArray() : null;
|
||||
|
||||
final RegattaLeaderboard leaderboard = addLeaderboard(regattaName, discardThresholds);
|
||||
|
||||
return ok(leaderboard.getName(), MediaType.TEXT_PLAIN);
|
||||
UUID eventId = toUUID(eventIdParam);
|
||||
Event event = getEvent(eventId);
|
||||
boolean displayGroupsInReverseOrder = displayGroupsInReverseOrderParam == null ? false : Boolean.parseBoolean(displayGroupsInReverseOrderParam);
|
||||
String leaderboardGroupDescription = leaderboardGroupDescriptionParam == null ? leaderboardGroupNameParam : leaderboardGroupDescriptionParam;
|
||||
String leaderboardGroupDisplayName = leaderboardGroupDisplayNameParam == null ? null : leaderboardGroupDisplayNameParam;
|
||||
String leaderboardGroupName = leaderboardGroupNameParam == null ? event.getName() : leaderboardGroupNameParam;
|
||||
ScoringSchemeType overallLeaderboardScoringSchemeType = overallLeaderboardScoringSchemeTypeParam == null ? getScoringSchemeType("LOW_POINT") : getScoringSchemeType(overallLeaderboardScoringSchemeTypeParam);
|
||||
int[] overallLeaderboardDiscardThresholds = overallLeaderboardDiscardThresholdsParam == null ? new int[0] : overallLeaderboardDiscardThresholdsParam.stream().mapToInt(i -> i).toArray();
|
||||
List<String> leaderboardNames = leaderboardNamesParam == null ? new ArrayList<String>() : leaderboardNamesParam;
|
||||
|
||||
LeaderboardGroup leaderboardGroup = getService().addLeaderboardGroup(event.getId(), leaderboardGroupName, leaderboardGroupDescription, leaderboardGroupDisplayName, displayGroupsInReverseOrder, leaderboardNames, overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType);
|
||||
updateEvent(event, leaderboardGroup);
|
||||
|
||||
return leaderboardGroup;
|
||||
}
|
||||
|
||||
|
||||
@POST
|
||||
@Path("/addLeaderboardGroup")
|
||||
@Consumes("text/plain")
|
||||
@Produces("text/plain")
|
||||
public Response addLeaderboardGroup(@FormParam("eventId") String eventIdParam,
|
||||
@FormParam("leaderboardGroupName") String leaderboardGroupName,
|
||||
@FormParam("leaderboardGroupDescription") String leaderboardGroupDescription,
|
||||
@FormParam("leaderboardGroupDisplayName") String leaderboardGroupDisplayName,
|
||||
@FormParam("displayGroupsInReverseOrder") String displayGroupsInReverseOrderParam,
|
||||
@FormParam("leaderboardNames") List<String> leaderboardNames,
|
||||
@FormParam("overallLeaderboardDiscardThresholds") List<Integer> overallLeaderboardDiscardThresholdsParam,
|
||||
@FormParam("overallLeaderboardScoringSchemeType") String overallLeaderboardScoringSchemeTypeParam) {
|
||||
|
||||
// SecurityUtils.getSubject().checkPermission(Permission.LEADERBOARD_GROUP.getStringPermissionForObjects(Mode.CREATE, leaderboardGroupName));
|
||||
|
||||
if (eventIdParam == null) {
|
||||
return getParameterMissingResponse("eventId");
|
||||
}
|
||||
|
||||
if (leaderboardGroupDescription == null) {
|
||||
leaderboardGroupDescription = leaderboardGroupName;
|
||||
}
|
||||
|
||||
boolean displayGroupsInReverseOrder = Boolean.parseBoolean(displayGroupsInReverseOrderParam);
|
||||
UUID eventId = null;
|
||||
try {
|
||||
eventId = UUID.fromString(eventIdParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getInvalidIdFormatResponse(eventIdParam);
|
||||
}
|
||||
|
||||
Event event = getService().getEvent(eventId);
|
||||
if (event == null) {
|
||||
return getBadEventErrorResponse(eventId.toString());
|
||||
}
|
||||
|
||||
if (leaderboardGroupName == null) {
|
||||
leaderboardGroupName = event.getName();
|
||||
}
|
||||
|
||||
ScoringSchemeType overallLeaderboardScoringSchemeType = null;
|
||||
if (overallLeaderboardScoringSchemeTypeParam != null) {
|
||||
try {
|
||||
overallLeaderboardScoringSchemeType = ScoringSchemeType
|
||||
.valueOf(overallLeaderboardScoringSchemeTypeParam);
|
||||
} catch (IllegalArgumentException e) {
|
||||
String correctValues = getEnumValuesAsString(ScoringSchemeType.class);
|
||||
return getValueUnknownResponse(overallLeaderboardScoringSchemeTypeParam, correctValues);
|
||||
}
|
||||
}
|
||||
|
||||
int[] overallLeaderboardDiscardThresholds = overallLeaderboardDiscardThresholdsParam != null
|
||||
? overallLeaderboardDiscardThresholdsParam.stream().mapToInt(i -> i).toArray() : new int[0];
|
||||
|
||||
if(leaderboardNames == null){
|
||||
leaderboardNames = new ArrayList<String>();
|
||||
}
|
||||
|
||||
LeaderboardGroup leaderboardGroup = addLeaderboardGroup(leaderboardGroupName, leaderboardGroupDescription,
|
||||
leaderboardGroupDisplayName, leaderboardNames, displayGroupsInReverseOrder, event,
|
||||
overallLeaderboardScoringSchemeType, overallLeaderboardDiscardThresholds);
|
||||
|
||||
return ok(leaderboardGroup.getId().toString(), MediaType.TEXT_PLAIN);
|
||||
}
|
||||
|
||||
|
||||
private Event createEvent(String eventName, String eventDescription, String venueName, boolean isPublic,
|
||||
MillisecondsTimePoint startDate, MillisecondsTimePoint endDate, URL officialWebsiteURL, URL baseURL,
|
||||
List<UUID> leaderboardGroupIds, UUID eventId, Map<Locale, URL> sailorsInfoWebsiteURLs,
|
||||
@@ -447,13 +305,23 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
.apply(new CreateEvent(eventName, eventDescription, startDate, endDate, venueName, isPublic, eventId,
|
||||
officialWebsiteURL, baseURL, sailorsInfoWebsiteURLs, images, videos, leaderboardGroupIds));
|
||||
}
|
||||
|
||||
|
||||
private CourseArea addCourseArea(UUID eventId, String courseAreaName) {
|
||||
String[] courseAreaNames = new String[] { courseAreaName };
|
||||
UUID[] courseAreaIds = new UUID[] { UUID.randomUUID() };
|
||||
try {
|
||||
return getService().apply(new AddCourseAreas(eventId, courseAreaNames, courseAreaIds))[0];
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException("Course area could not be added to event.");
|
||||
}
|
||||
}
|
||||
|
||||
private Regatta addRegatta(String regattaName, boolean isPersistent, boolean controlTrackingFromStartAndFinishTimes,
|
||||
boolean useStartTimeInterference, double buoyZoneRadiusInHullLengths, UUID courseAreaId,
|
||||
String boatClassName, MillisecondsTimePoint startDate, MillisecondsTimePoint endDate,
|
||||
ScoringScheme scoringScheme, RankingMetrics rankingMetric, UUID regattaId,
|
||||
RegattaCreationParametersDTO regattaCreationParametersDTO) {
|
||||
|
||||
AddSpecificRegatta operation = new AddSpecificRegatta(regattaName, boatClassName, startDate, endDate, regattaId,
|
||||
regattaCreationParametersDTO, isPersistent, scoringScheme, courseAreaId, buoyZoneRadiusInHullLengths,
|
||||
useStartTimeInterference, controlTrackingFromStartAndFinishTimes, rankingMetric);
|
||||
@@ -461,6 +329,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
Regatta regatta = getService().apply(operation);
|
||||
|
||||
addLeaderboard(regattaName, new int[0]);
|
||||
|
||||
return regatta;
|
||||
}
|
||||
|
||||
@@ -469,31 +338,6 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
.filter(c -> c.getName().equals("Default")).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
private LeaderboardGroup addLeaderboardGroup(String leaderboardGroupName, String leaderboardGroupDescription,
|
||||
String leaderboardGroupDisplayName, List<String> leaderboardNames, boolean displayGroupsInReverseOrder,
|
||||
Event event, ScoringSchemeType overallLeaderboardScoringSchemeType,
|
||||
int[] overallLeaderboardDiscardThresholds) {
|
||||
LeaderboardGroup leaderboardGroup = createLeaderboardGroup(leaderboardGroupName, leaderboardGroupDescription,
|
||||
leaderboardGroupDisplayName, leaderboardNames, displayGroupsInReverseOrder,
|
||||
overallLeaderboardScoringSchemeType, overallLeaderboardDiscardThresholds);
|
||||
|
||||
updateEvent(event, leaderboardGroup);
|
||||
return leaderboardGroup;
|
||||
}
|
||||
|
||||
private LeaderboardGroup createLeaderboardGroup(String leaderboardGroupName, String leaderboardGroupDescription,
|
||||
String leaderboardGroupDisplayName, List<String> leaderboardNames, boolean displayGroupsInReverseOrder,
|
||||
ScoringSchemeType overallLeaderboardScoringSchemeType, int[] overallLeaderboardDiscardThresholds) {
|
||||
LeaderboardGroup leaderboardGroup = null;
|
||||
try {
|
||||
leaderboardGroup = getService().apply(new CreateLeaderboardGroup(leaderboardGroupName,
|
||||
leaderboardGroupDescription, leaderboardGroupDisplayName, displayGroupsInReverseOrder,
|
||||
leaderboardNames, overallLeaderboardDiscardThresholds, overallLeaderboardScoringSchemeType));
|
||||
} catch (IllegalArgumentException e) {
|
||||
return null;
|
||||
}
|
||||
return leaderboardGroup;
|
||||
}
|
||||
|
||||
private void updateEvent(Event event, LeaderboardGroup leaderboardGroup){
|
||||
List<UUID> newLeaderboardGroupIds = new ArrayList<>();
|
||||
@@ -508,17 +352,16 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
}
|
||||
|
||||
private RegattaLeaderboard addLeaderboard(String regattaName, int[] discardThresholds) {
|
||||
final RegattaLeaderboard leaderboard = createRegattaLeaderboard(regattaName, discardThresholds);
|
||||
|
||||
if(leaderboard == null){
|
||||
// return getObjectAlreadyExistsResponse(RegattaLeaderboard.class, regattaName);
|
||||
RegattaLeaderboard leaderboard = null;
|
||||
try {
|
||||
leaderboard = createRegattaLeaderboard(regattaName, discardThresholds);
|
||||
} catch (IllegalArgumentException e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
addLeaderboardToDefaultLeaderboardGroup(leaderboard);
|
||||
return leaderboard;
|
||||
}
|
||||
|
||||
|
||||
private RegattaLeaderboard createRegattaLeaderboard(String regattaName, int[] discardThresholds) {
|
||||
return getService()
|
||||
.apply(new CreateRegattaLeaderboard(new RegattaName(regattaName), regattaName, discardThresholds));
|
||||
@@ -559,10 +402,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
private <E extends Enum<E>> String getEnumValuesAsString(Class<E> e) {
|
||||
return EnumSet.allOf(e).stream().map(en -> en.name()).collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
private String getBoatClassDisplayNames() {
|
||||
return EnumSet.allOf(BoatClassMasterdata.class).stream().map(en -> en.getDisplayName()).collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
|
||||
private LinkedHashMap<String, SeriesCreationParametersDTO> createDefaultSeriesCreationParameters() {
|
||||
final LinkedHashMap<String, SeriesCreationParametersDTO> seriesCreationParameters = new LinkedHashMap<>();
|
||||
@@ -604,7 +444,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
Response response;
|
||||
UUID eventUuid;
|
||||
try {
|
||||
eventUuid = UUID.fromString(eventId);
|
||||
eventUuid = toUUID(eventId);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getBadEventErrorResponse(eventId);
|
||||
}
|
||||
@@ -637,7 +477,7 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
Response response;
|
||||
UUID eventUuid;
|
||||
try {
|
||||
eventUuid = UUID.fromString(eventId);
|
||||
eventUuid = toUUID(eventId);
|
||||
} catch (IllegalArgumentException e) {
|
||||
return getBadEventErrorResponse(eventId);
|
||||
}
|
||||
@@ -671,67 +511,92 @@ public class EventsResource extends AbstractSailingServerResource {
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getBadObjectErrorResponse(String className, String id) {
|
||||
return Response.status(Status.NOT_FOUND).entity("Could not find object of type " + className
|
||||
+ " with identifier '" + StringEscapeUtils.escapeHtml(id) + "'.").type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getObjectAlreadyExistsResponse(Object object, String id) {
|
||||
return Response
|
||||
.status(Status.BAD_REQUEST).entity("The object of type " + object.getClass().getSimpleName()
|
||||
+ " with id '" + StringEscapeUtils.escapeHtml(id) + "' already exists.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getParameterMissingResponse(String parameter) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("The parameter " + StringEscapeUtils.escapeHtml(parameter) + " is required.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getInvalidDateFormatResponse(String date) {
|
||||
return Response.status(Status.BAD_REQUEST).entity(
|
||||
"The date " + StringEscapeUtils.escapeHtml(date) + " does not follow the date pattern \"dd-MM-yyyy\".")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getInvalidURLFormatResponse(String url) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("The format of the url " + StringEscapeUtils.escapeHtml(url) + " is incorrect.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getInvalidIdFormatResponse(String id) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("The format of the id " + StringEscapeUtils.escapeHtml(id) + " is incorrect.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getValueUnknownResponse(String value, String correctValues) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("The value \"" + StringEscapeUtils.escapeHtml(value)
|
||||
+ "\" is not recognized. Correct values are: " + correctValues)
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getLeaderboardNotFoundResponse(List<String> leaderboardNames) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("One of the following leaderboards was not found: \""
|
||||
+ StringEscapeUtils.escapeHtml(leaderboardNames.toString()) + "\" was not found.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Response getMissingParametersResponse(List<String> parameters) {
|
||||
return Response.status(Status.BAD_REQUEST)
|
||||
.entity("At least one of the following parameters must be provided: "
|
||||
+ parameters.stream().collect(Collectors.joining(", ")) + "\" was not found.")
|
||||
.type(MediaType.TEXT_PLAIN).build();
|
||||
}
|
||||
|
||||
private Date addOneWeek(Date date) {
|
||||
Calendar c = Calendar.getInstance();
|
||||
c.setTime(date);
|
||||
c.add(Calendar.WEEK_OF_MONTH, 1);
|
||||
return c.getTime();
|
||||
}
|
||||
|
||||
private MillisecondsTimePoint toMillisecondsTimePoint(String startDateParam) throws ParseException {
|
||||
try {
|
||||
return new MillisecondsTimePoint(df.parse(startDateParam));
|
||||
} catch (ParseException e) {
|
||||
throw new ParseException(ExceptionManager.invalidDateFormatMsg(startDateParam),0);
|
||||
}
|
||||
}
|
||||
|
||||
private MillisecondsTimePoint now() {
|
||||
return new MillisecondsTimePoint(new Date());
|
||||
}
|
||||
|
||||
private URL toURL(String url) throws MalformedURLException{
|
||||
try {
|
||||
return new URL(url);
|
||||
} catch (MalformedURLException e) {
|
||||
throw new MalformedURLException(ExceptionManager.invalidURLFormatMsg(url));
|
||||
}
|
||||
}
|
||||
|
||||
private List<UUID> toUUIDList(List<String> list){
|
||||
return list.stream().map(id -> toUUID(id))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
private UUID toUUID(String id) {
|
||||
try{
|
||||
return UUID.fromString(id);
|
||||
}
|
||||
catch(IllegalArgumentException e){
|
||||
throw new IllegalArgumentException(ExceptionManager.invalidIdFormatMsg(id));
|
||||
}
|
||||
}
|
||||
|
||||
private Event getEvent(UUID eventId) throws NotFoundException{
|
||||
Event event = getService().getEvent(eventId);
|
||||
if(event != null){
|
||||
return event;
|
||||
}
|
||||
throw new NotFoundException(ExceptionManager.objectNotFoundMsg(Event.class.getSimpleName(), eventId));
|
||||
}
|
||||
|
||||
private RankingMetrics createRankingMetric(String rankingMetricParam) {
|
||||
try{
|
||||
return RankingMetrics.valueOf(rankingMetricParam);
|
||||
}
|
||||
catch(IllegalArgumentException e){
|
||||
throw new IllegalArgumentException(ExceptionManager.incorrectParameterValue(rankingMetricParam, getEnumValuesAsString(RankingMetrics.class)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private ScoringScheme createScoringScheme(String scoringSchemeParam) {
|
||||
ScoringScheme scoringScheme = getService().getBaseDomainFactory().createScoringScheme(getScoringSchemeType(scoringSchemeParam));
|
||||
return scoringScheme;
|
||||
}
|
||||
|
||||
private ScoringSchemeType getScoringSchemeType(String scoringSchemeTypeParam) {
|
||||
try{
|
||||
return ScoringSchemeType.valueOf(scoringSchemeTypeParam);
|
||||
}
|
||||
catch(IllegalArgumentException e){
|
||||
throw new IllegalArgumentException(ExceptionManager.incorrectParameterValue(scoringSchemeTypeParam, getEnumValuesAsString(ScoringSchemeType.class)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private String getBoatClassDisplayName(String boatClassNameParam) {
|
||||
try{
|
||||
return BoatClassMasterdata.valueOf(boatClassNameParam).getDisplayName();
|
||||
}
|
||||
catch(IllegalArgumentException e){
|
||||
throw new IllegalArgumentException(ExceptionManager.incorrectParameterValue(boatClassNameParam, getEnumValuesAsString(BoatClassMasterdata.class)));
|
||||
}
|
||||
}
|
||||
|
||||
private Regatta getRegatta(String regattaNameParam) {
|
||||
return getService().getRegatta(new RegattaName(regattaNameParam));
|
||||
}
|
||||
|
||||
}
|
||||
+3
-1
@@ -5,6 +5,7 @@ import java.util.Set;
|
||||
|
||||
import javax.ws.rs.core.Application;
|
||||
|
||||
import com.sap.sailing.server.gateway.jaxrs.exceptions.ExceptionManager;
|
||||
import com.sap.sse.security.jaxrs.ShiroAuthorizationExceptionTo401ResponseMapper;
|
||||
|
||||
|
||||
@@ -26,8 +27,9 @@ public class RestApiApplication extends Application {
|
||||
classes.add(TrackedRaceListResource.class);
|
||||
classes.add(StatisticsResource.class);
|
||||
|
||||
// Exception Mapper
|
||||
// Exception Mappers
|
||||
classes.add(ShiroAuthorizationExceptionTo401ResponseMapper.class);
|
||||
classes.add(ExceptionManager.class);
|
||||
return classes;
|
||||
}
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.sap.sailing.server.gateway.jaxrs.exceptions;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.ext.ExceptionMapper;
|
||||
import javax.ws.rs.ext.Provider;
|
||||
|
||||
import org.apache.commons.lang.StringEscapeUtils;
|
||||
|
||||
@Provider
|
||||
public class ExceptionManager implements ExceptionMapper<Exception>{
|
||||
public Response toResponse(Exception exception) {
|
||||
if(exception instanceof IllegalArgumentException){
|
||||
return Response.status(400).entity("IllegalArgumentException: "+exception.getMessage()).type("text/plain").build();
|
||||
}
|
||||
return Response.status(300).entity("Internal Server Error").type("text/plain").build();
|
||||
}
|
||||
|
||||
public static String invalidDateFormatMsg(String date) {
|
||||
return "The date " + StringEscapeUtils.escapeHtml(date) + " does not follow the date pattern \"dd-MM-yyyy\".";
|
||||
}
|
||||
|
||||
public static String invalidURLFormatMsg(String url) {
|
||||
return "The format of the url " + StringEscapeUtils.escapeHtml(url) + " is incorrect.";
|
||||
}
|
||||
|
||||
public static String parameterRequiredMsg(String param) {
|
||||
return "The parameter \"" + StringEscapeUtils.escapeHtml(param) + "\" is required.";
|
||||
}
|
||||
|
||||
public static String atLeastOneParameterRequiredMsg(String... params) {
|
||||
return "Please provide at least one of the following parameters: "+Arrays.stream(params).collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
public static String invalidIdFormatMsg(String id){
|
||||
return "The format of the id " + StringEscapeUtils.escapeHtml(id) + " is incorrect.";
|
||||
}
|
||||
|
||||
public static String objectNotFoundMsg(String name, UUID id){
|
||||
return "The "+name+" with id " + id + " was not found.";
|
||||
}
|
||||
|
||||
public static String incorrectParameterValue(String value, String correctValues){
|
||||
return "The value \"" + StringEscapeUtils.escapeHtml(value) +"\" is not recognized. Correct values are: " + correctValues;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user