diff --git a/java/bed-allocation/src/main/java/org/acme/bedallocation/rest/BedSchedulingResource.java b/java/bed-allocation/src/main/java/org/acme/bedallocation/rest/BedSchedulingResource.java index ba61593a6a..25810fd590 100644 --- a/java/bed-allocation/src/main/java/org/acme/bedallocation/rest/BedSchedulingResource.java +++ b/java/bed-allocation/src/main/java/org/acme/bedallocation/rest/BedSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(BedPlan problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(BedPlan problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/bed-allocation/src/main/resources/META-INF/resources/app.js b/java/bed-allocation/src/main/resources/META-INF/resources/app.js index 0104599ad3..f71eaec160 100644 --- a/java/bed-allocation/src/main/resources/META-INF/resources/app.js +++ b/java/bed-allocation/src/main/resources/META-INF/resources/app.js @@ -250,7 +250,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); @@ -316,19 +316,6 @@ function analyze() { } } -function publish() { - $("#publishButton").hide(); - $("#publishLoadingButton").show(); - $.put(`/schedules/${scheduleId}/publish`, function (schedule) { - loadedSchedule = schedule; - renderSchedule(schedule); - }) - .fail(function (xhr, ajaxOptions, thrownError) { - showError("Publish failed.", xhr); - refreshSolvingButtons(false); - }); -} - function getScoreComponents(score) { let components = {hard: 0, medium: 0, soft: 0}; diff --git a/java/bed-allocation/src/test/java/org/acme/bedallocation/rest/BedSchedulingResourceTest.java b/java/bed-allocation/src/test/java/org/acme/bedallocation/rest/BedSchedulingResourceTest.java index 5f01492f36..0f68552c68 100644 --- a/java/bed-allocation/src/test/java/org/acme/bedallocation/rest/BedSchedulingResourceTest.java +++ b/java/bed-allocation/src/test/java/org/acme/bedallocation/rest/BedSchedulingResourceTest.java @@ -83,7 +83,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -96,7 +96,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/conference-scheduling/src/main/java/org/acme/conferencescheduling/rest/ConferenceSchedulingResource.java b/java/conference-scheduling/src/main/java/org/acme/conferencescheduling/rest/ConferenceSchedulingResource.java index 462792990e..6a46f24520 100644 --- a/java/conference-scheduling/src/main/java/org/acme/conferencescheduling/rest/ConferenceSchedulingResource.java +++ b/java/conference-scheduling/src/main/java/org/acme/conferencescheduling/rest/ConferenceSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(ConferenceSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(ConferenceSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/conference-scheduling/src/main/resources/META-INF/resources/app.js b/java/conference-scheduling/src/main/resources/META-INF/resources/app.js index a083eb353d..3138381969 100644 --- a/java/conference-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/conference-scheduling/src/main/resources/META-INF/resources/app.js @@ -332,7 +332,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/conference-scheduling/src/test/java/org/acme/conferencescheduling/rest/ConferenceScheduleResourceTest.java b/java/conference-scheduling/src/test/java/org/acme/conferencescheduling/rest/ConferenceScheduleResourceTest.java index bda7181d5a..c80f87b236 100644 --- a/java/conference-scheduling/src/test/java/org/acme/conferencescheduling/rest/ConferenceScheduleResourceTest.java +++ b/java/conference-scheduling/src/test/java/org/acme/conferencescheduling/rest/ConferenceScheduleResourceTest.java @@ -83,7 +83,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .put("/schedules/score-analysis") .then() .extract() .asString(); @@ -96,7 +96,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .put("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/employee-scheduling/src/main/java/org/acme/employeescheduling/rest/EmployeeScheduleResource.java b/java/employee-scheduling/src/main/java/org/acme/employeescheduling/rest/EmployeeScheduleResource.java index 2ab429ff24..8147211649 100644 --- a/java/employee-scheduling/src/main/java/org/acme/employeescheduling/rest/EmployeeScheduleResource.java +++ b/java/employee-scheduling/src/main/java/org/acme/employeescheduling/rest/EmployeeScheduleResource.java @@ -98,10 +98,10 @@ public String solve(EmployeeSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(EmployeeSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/employee-scheduling/src/main/resources/META-INF/resources/app.js b/java/employee-scheduling/src/main/resources/META-INF/resources/app.js index 9a6b7bcdd2..b05e98054d 100644 --- a/java/employee-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/employee-scheduling/src/main/resources/META-INF/resources/app.js @@ -319,7 +319,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); @@ -412,23 +412,6 @@ function refreshSolvingButtons(solving) { } } -function refreshSolvingButtons(solving) { - if (solving) { - $("#solveButton").hide(); - $("#stopSolvingButton").show(); - if (autoRefreshIntervalId == null) { - autoRefreshIntervalId = setInterval(refreshSchedule, 2000); - } - } else { - $("#solveButton").show(); - $("#stopSolvingButton").hide(); - if (autoRefreshIntervalId != null) { - clearInterval(autoRefreshIntervalId); - autoRefreshIntervalId = null; - } - } -} - function stopSolving() { $.delete(`/schedules/${scheduleId}`, function () { refreshSolvingButtons(false); diff --git a/java/facility-location/src/main/java/org/acme/facilitylocation/rest/SolverResource.java b/java/facility-location/src/main/java/org/acme/facilitylocation/rest/SolverResource.java index dd30be3460..8d1dcecd0f 100644 --- a/java/facility-location/src/main/java/org/acme/facilitylocation/rest/SolverResource.java +++ b/java/facility-location/src/main/java/org/acme/facilitylocation/rest/SolverResource.java @@ -67,10 +67,10 @@ public void solve() { .run()); } - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(@QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { FacilityLocationProblem problem = repository.solution().get(); return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/facility-location/src/main/resources/META-INF/resources/app.js b/java/facility-location/src/main/resources/META-INF/resources/app.js index 55c4af83c1..b9faaae5a4 100644 --- a/java/facility-location/src/main/resources/META-INF/resources/app.js +++ b/java/facility-location/src/main/resources/META-INF/resources/app.js @@ -178,7 +178,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/flp/analyze", function (scoreAnalysis) { + $.post("/flp/score-analysis", function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/flight-crew-scheduling/src/main/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResource.java b/java/flight-crew-scheduling/src/main/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResource.java index aa3a13874e..1c763be10d 100644 --- a/java/flight-crew-scheduling/src/main/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResource.java +++ b/java/flight-crew-scheduling/src/main/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(FlightCrewSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(FlightCrewSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/flight-crew-scheduling/src/main/resources/META-INF/resources/app.js b/java/flight-crew-scheduling/src/main/resources/META-INF/resources/app.js index b38ec53a2c..13fc04989f 100644 --- a/java/flight-crew-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/flight-crew-scheduling/src/main/resources/META-INF/resources/app.js @@ -269,7 +269,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/flight-crew-scheduling/src/test/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResourceTest.java b/java/flight-crew-scheduling/src/test/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResourceTest.java index 2c3573ac65..3a94e5ef28 100644 --- a/java/flight-crew-scheduling/src/test/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResourceTest.java +++ b/java/flight-crew-scheduling/src/test/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/food-packaging/src/main/java/org/acme/foodpackaging/rest/PackagingScheduleResource.java b/java/food-packaging/src/main/java/org/acme/foodpackaging/rest/PackagingScheduleResource.java index 0ef7ef9c47..59e90ca922 100644 --- a/java/food-packaging/src/main/java/org/acme/foodpackaging/rest/PackagingScheduleResource.java +++ b/java/food-packaging/src/main/java/org/acme/foodpackaging/rest/PackagingScheduleResource.java @@ -2,6 +2,7 @@ import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.PUT; @@ -60,17 +61,16 @@ public void solve() { .run(); } - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(@QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { PackagingSchedule problem = repository.read(); return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); } - @POST - @Path("stopSolving") + @DELETE public void stopSolving() { solverManager.terminateEarly(SINGLETON_SOLUTION_ID); } diff --git a/java/food-packaging/src/main/resources/META-INF/resources/app.js b/java/food-packaging/src/main/resources/META-INF/resources/app.js index cde74c6077..c367cedebc 100644 --- a/java/food-packaging/src/main/resources/META-INF/resources/app.js +++ b/java/food-packaging/src/main/resources/META-INF/resources/app.js @@ -199,7 +199,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedule/analyze", function (scoreAnalysis) { + $.post("/schedule/score-analysis", function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); @@ -293,7 +293,7 @@ function refreshSolvingButtons(solving) { } function stopSolving() { - $.post("/schedule/stopSolving", function () { + $.delete("/schedule", function () { refreshSolvingButtons(false); refreshSchedule(); }).fail(function (xhr, ajaxOptions, thrownError) { diff --git a/java/maintenance-scheduling/src/main/java/org/acme/maintenancescheduling/rest/MaintenanceScheduleResource.java b/java/maintenance-scheduling/src/main/java/org/acme/maintenancescheduling/rest/MaintenanceScheduleResource.java index 7ab214a560..08b38d7306 100644 --- a/java/maintenance-scheduling/src/main/java/org/acme/maintenancescheduling/rest/MaintenanceScheduleResource.java +++ b/java/maintenance-scheduling/src/main/java/org/acme/maintenancescheduling/rest/MaintenanceScheduleResource.java @@ -98,10 +98,10 @@ public String solve(MaintenanceSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(MaintenanceSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/maintenance-scheduling/src/main/resources/META-INF/resources/app.js b/java/maintenance-scheduling/src/main/resources/META-INF/resources/app.js index 84f0fcc0bf..746e27590c 100644 --- a/java/maintenance-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/maintenance-scheduling/src/main/resources/META-INF/resources/app.js @@ -251,7 +251,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/meeting-scheduling/src/main/java/org/acme/meetingschedule/rest/MeetingSchedulingResource.java b/java/meeting-scheduling/src/main/java/org/acme/meetingschedule/rest/MeetingSchedulingResource.java index 68e5f2c81b..562d90042e 100644 --- a/java/meeting-scheduling/src/main/java/org/acme/meetingschedule/rest/MeetingSchedulingResource.java +++ b/java/meeting-scheduling/src/main/java/org/acme/meetingschedule/rest/MeetingSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(MeetingSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(MeetingSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/meeting-scheduling/src/main/resources/META-INF/resources/app.js b/java/meeting-scheduling/src/main/resources/META-INF/resources/app.js index e5fdc8ca95..9fe36060e9 100644 --- a/java/meeting-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/meeting-scheduling/src/main/resources/META-INF/resources/app.js @@ -248,7 +248,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/meeting-scheduling/src/test/java/org/acme/meetscheduling/rest/MeetingSchedulingResourceTest.java b/java/meeting-scheduling/src/test/java/org/acme/meetscheduling/rest/MeetingSchedulingResourceTest.java index 3065504a5d..330cc5917a 100644 --- a/java/meeting-scheduling/src/test/java/org/acme/meetscheduling/rest/MeetingSchedulingResourceTest.java +++ b/java/meeting-scheduling/src/test/java/org/acme/meetscheduling/rest/MeetingSchedulingResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/order-picking/src/main/java/org/acme/orderpicking/rest/OrderPickingSolverResource.java b/java/order-picking/src/main/java/org/acme/orderpicking/rest/OrderPickingSolverResource.java index e498cda42c..54e16b06b0 100644 --- a/java/order-picking/src/main/java/org/acme/orderpicking/rest/OrderPickingSolverResource.java +++ b/java/order-picking/src/main/java/org/acme/orderpicking/rest/OrderPickingSolverResource.java @@ -5,6 +5,7 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.PUT; @@ -52,7 +53,6 @@ public OrderPickingPlanning getBestSolution() { } @POST - @Path("solve") public void solve() { solverWasNeverStarted.set(false); solverManager.solveBuilder() @@ -62,17 +62,16 @@ public void solve() { .run(); } - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(@QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { OrderPickingSolution problem = orderPickingRepository.find(); return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); } - @POST - @Path("stopSolving") + @DELETE public void stopSolving() { solverManager.terminateEarly(PROBLEM_ID); } diff --git a/java/order-picking/src/main/resources/META-INF/resources/app.js b/java/order-picking/src/main/resources/META-INF/resources/app.js index c48ef275d4..1be536189c 100644 --- a/java/order-picking/src/main/resources/META-INF/resources/app.js +++ b/java/order-picking/src/main/resources/META-INF/resources/app.js @@ -519,7 +519,7 @@ function refreshSolvingButtons(solving) { } function solve() { - $.post("/orderPicking/solve", function () { + $.post("/orderPicking", function () { refreshSolvingButtons(true); }).fail(function (xhr, ajaxOptions, thrownError) { showError("Start solving failed.", xhr); @@ -534,7 +534,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/orderPicking/analyze", function (scoreAnalysis) { + $.post("/orderPicking/score-analysis", function (scoreAnalysis) { let constraints = Object.values(scoreAnalysis.constraintMap); constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); @@ -607,7 +607,7 @@ function getScoreComponents(score) { } function stopSolving() { - $.post("/orderPicking/stopSolving", function () { + $.delete("/orderPicking", function () { refreshSolvingButtons(false); refreshSolution(); }).fail(function (xhr, ajaxOptions, thrownError) { diff --git a/java/order-picking/src/test/java/org/acme/orderpicking/rest/OrderPickingResourceIT.java b/java/order-picking/src/test/java/org/acme/orderpicking/rest/OrderPickingResourceIT.java index 3f518585b7..467d832dbf 100644 --- a/java/order-picking/src/test/java/org/acme/orderpicking/rest/OrderPickingResourceIT.java +++ b/java/order-picking/src/test/java/org/acme/orderpicking/rest/OrderPickingResourceIT.java @@ -18,7 +18,7 @@ class OrderPickingResourceIT { @Test void solveNative() { - post("/orderPicking/solve") + post("/orderPicking") .then() .statusCode(204) .extract(); diff --git a/java/project-job-scheduling/src/main/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResource.java b/java/project-job-scheduling/src/main/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResource.java index 7bdbfb5c2f..22a189ecf8 100644 --- a/java/project-job-scheduling/src/main/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResource.java +++ b/java/project-job-scheduling/src/main/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(ProjectJobSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(ProjectJobSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/project-job-scheduling/src/main/resources/META-INF/resources/app.js b/java/project-job-scheduling/src/main/resources/META-INF/resources/app.js index 71f6e7a682..b10986523a 100644 --- a/java/project-job-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/project-job-scheduling/src/main/resources/META-INF/resources/app.js @@ -271,7 +271,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/project-job-scheduling/src/test/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResourceTest.java b/java/project-job-scheduling/src/test/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResourceTest.java index 211c1dbfe1..e087fde7f8 100644 --- a/java/project-job-scheduling/src/test/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResourceTest.java +++ b/java/project-job-scheduling/src/test/java/org/acme/projectjobschedule/rest/ProjectJobSchedulingResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/school-timetabling/src/main/java/org/acme/schooltimetabling/rest/TimetableResource.java b/java/school-timetabling/src/main/java/org/acme/schooltimetabling/rest/TimetableResource.java index f52e22cceb..74d1fec3a9 100644 --- a/java/school-timetabling/src/main/java/org/acme/schooltimetabling/rest/TimetableResource.java +++ b/java/school-timetabling/src/main/java/org/acme/schooltimetabling/rest/TimetableResource.java @@ -104,10 +104,10 @@ public String solve(Timetable problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(Timetable problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/school-timetabling/src/main/resources/META-INF/resources/app.js b/java/school-timetabling/src/main/resources/META-INF/resources/app.js index c1bb8d3b86..225287a668 100644 --- a/java/school-timetabling/src/main/resources/META-INF/resources/app.js +++ b/java/school-timetabling/src/main/resources/META-INF/resources/app.js @@ -230,7 +230,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/timetables/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/timetables/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/school-timetabling/src/test/java/org/acme/schooltimetabling/rest/TimetableResourceTest.java b/java/school-timetabling/src/test/java/org/acme/schooltimetabling/rest/TimetableResourceTest.java index 49b58de8e0..afff8ed2e1 100644 --- a/java/school-timetabling/src/test/java/org/acme/schooltimetabling/rest/TimetableResourceTest.java +++ b/java/school-timetabling/src/test/java/org/acme/schooltimetabling/rest/TimetableResourceTest.java @@ -78,7 +78,7 @@ void analyze() { .body(testTimetable) .expect().contentType(ContentType.JSON) .when() - .put("/timetables/analyze") + .put("/timetables/score-analysis") .then() .extract() .asString(); @@ -90,7 +90,7 @@ void analyze() { .body(testTimetable) .expect().contentType(ContentType.JSON) .when() - .put("/timetables/analyze") + .put("/timetables/score-analysis") .then() .extract() .asString(); diff --git a/java/sports-league-scheduling/src/main/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResource.java b/java/sports-league-scheduling/src/main/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResource.java index 3d4bf29b06..c3fbc17a70 100644 --- a/java/sports-league-scheduling/src/main/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResource.java +++ b/java/sports-league-scheduling/src/main/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(LeagueSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(LeagueSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/sports-league-scheduling/src/main/resources/META-INF/resources/app.js b/java/sports-league-scheduling/src/main/resources/META-INF/resources/app.js index 5cfbaab8e2..76499a0760 100644 --- a/java/sports-league-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/sports-league-scheduling/src/main/resources/META-INF/resources/app.js @@ -159,7 +159,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/sports-league-scheduling/src/test/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResourceTest.java b/java/sports-league-scheduling/src/test/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResourceTest.java index 195f89a6a6..c292bb034a 100644 --- a/java/sports-league-scheduling/src/test/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResourceTest.java +++ b/java/sports-league-scheduling/src/test/java/org/acme/sportsleagueschedule/rest/SportsLeagueSchedulingResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/spring-boot-integration/src/main/java/org/acme/schooltimetabling/rest/TimetableController.java b/java/spring-boot-integration/src/main/java/org/acme/schooltimetabling/rest/TimetableController.java index 05bda7ba5c..00392c328d 100644 --- a/java/spring-boot-integration/src/main/java/org/acme/schooltimetabling/rest/TimetableController.java +++ b/java/spring-boot-integration/src/main/java/org/acme/schooltimetabling/rest/TimetableController.java @@ -101,7 +101,7 @@ public String solve(@RequestBody Timetable problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON_VALUE, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PutMapping(value = "/analyze", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @PostMapping(value = "/score-analysis", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @RegisterReflectionForBinding({ RoomConflictJustification.class, StudentGroupConflictJustification.class, diff --git a/java/spring-boot-integration/src/main/resources/static/app.js b/java/spring-boot-integration/src/main/resources/static/app.js index fa5924c2eb..aea445ac48 100644 --- a/java/spring-boot-integration/src/main/resources/static/app.js +++ b/java/spring-boot-integration/src/main/resources/static/app.js @@ -230,7 +230,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/timetables/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/timetables/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/spring-boot-integration/src/test/java/org/acme/schooltimetabling/rest/TimetableControllerTest.java b/java/spring-boot-integration/src/test/java/org/acme/schooltimetabling/rest/TimetableControllerTest.java index c55eba6b0a..6d1033f236 100644 --- a/java/spring-boot-integration/src/test/java/org/acme/schooltimetabling/rest/TimetableControllerTest.java +++ b/java/spring-boot-integration/src/test/java/org/acme/schooltimetabling/rest/TimetableControllerTest.java @@ -96,7 +96,7 @@ void analyze() { } client.put() - .uri("/timetables/analyze") + .uri("/timetables/score-analysis") .contentType(MediaType.APPLICATION_JSON) .bodyValue(testTimetable) .exchange() @@ -104,7 +104,7 @@ void analyze() { .jsonPath("score").isNotEmpty(); client.put() - .uri("/timetables/analyze?fetchPolicy=FETCH_SHALLOW") + .uri("/timetables/score-analysis?fetchPolicy=FETCH_SHALLOW") .contentType(MediaType.APPLICATION_JSON) .bodyValue(testTimetable) .exchange() diff --git a/java/task-assigning/src/main/java/org/acme/taskassigning/rest/TaskAssigningResource.java b/java/task-assigning/src/main/java/org/acme/taskassigning/rest/TaskAssigningResource.java index 6783d56fdf..4b2e36e4d3 100644 --- a/java/task-assigning/src/main/java/org/acme/taskassigning/rest/TaskAssigningResource.java +++ b/java/task-assigning/src/main/java/org/acme/taskassigning/rest/TaskAssigningResource.java @@ -107,10 +107,10 @@ public String solve(TaskAssigningSolution problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(TaskAssigningSolution problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/task-assigning/src/main/resources/META-INF/resources/app.js b/java/task-assigning/src/main/resources/META-INF/resources/app.js index ac16a6e65d..8fdeacf646 100644 --- a/java/task-assigning/src/main/resources/META-INF/resources/app.js +++ b/java/task-assigning/src/main/resources/META-INF/resources/app.js @@ -224,7 +224,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedPlan.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedPlan), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedPlan), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/task-assigning/src/test/java/org/acme/taskassigning/rest/TaskAssigningResourceTest.java b/java/task-assigning/src/test/java/org/acme/taskassigning/rest/TaskAssigningResourceTest.java index 8d2f5534f8..456e8aa788 100644 --- a/java/task-assigning/src/test/java/org/acme/taskassigning/rest/TaskAssigningResourceTest.java +++ b/java/task-assigning/src/test/java/org/acme/taskassigning/rest/TaskAssigningResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/tournament-scheduling/src/main/java/org/acme/tournamentschedule/rest/TournamentSchedulingResource.java b/java/tournament-scheduling/src/main/java/org/acme/tournamentschedule/rest/TournamentSchedulingResource.java index cbef796033..d354c38d05 100644 --- a/java/tournament-scheduling/src/main/java/org/acme/tournamentschedule/rest/TournamentSchedulingResource.java +++ b/java/tournament-scheduling/src/main/java/org/acme/tournamentschedule/rest/TournamentSchedulingResource.java @@ -108,10 +108,10 @@ public String solve(TournamentSchedule problem) { description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class))) }) - @PUT + @POST @Consumes({ MediaType.APPLICATION_JSON }) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(TournamentSchedule problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/tournament-scheduling/src/main/resources/META-INF/resources/app.js b/java/tournament-scheduling/src/main/resources/META-INF/resources/app.js index b0084756b2..0006ffefb6 100644 --- a/java/tournament-scheduling/src/main/resources/META-INF/resources/app.js +++ b/java/tournament-scheduling/src/main/resources/META-INF/resources/app.js @@ -266,7 +266,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/java/tournament-scheduling/src/test/java/org/acme/tournamentschedule/rest/TournamentSchedulingResourceTest.java b/java/tournament-scheduling/src/test/java/org/acme/tournamentschedule/rest/TournamentSchedulingResourceTest.java index bf6cc74228..5cb39abcf1 100644 --- a/java/tournament-scheduling/src/test/java/org/acme/tournamentschedule/rest/TournamentSchedulingResourceTest.java +++ b/java/tournament-scheduling/src/test/java/org/acme/tournamentschedule/rest/TournamentSchedulingResourceTest.java @@ -84,7 +84,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); @@ -97,7 +97,7 @@ void analyze() { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/schedules/analyze") + .post("/schedules/score-analysis") .then() .extract() .asString(); diff --git a/java/vehicle-routing/src/main/java/org/acme/vehiclerouting/rest/VehicleRoutePlanResource.java b/java/vehicle-routing/src/main/java/org/acme/vehiclerouting/rest/VehicleRoutePlanResource.java index 7dae34e109..b9101f6e8e 100644 --- a/java/vehicle-routing/src/main/java/org/acme/vehiclerouting/rest/VehicleRoutePlanResource.java +++ b/java/vehicle-routing/src/main/java/org/acme/vehiclerouting/rest/VehicleRoutePlanResource.java @@ -247,10 +247,10 @@ public VehicleRoutePlan terminateSolving( description = "Resulting score analysis, optionally without constraint matches.", content = @Content(mediaType = MediaType.APPLICATION_JSON, schema = @Schema(implementation = ScoreAnalysis.class)))}) - @PUT + @POST @Consumes({MediaType.APPLICATION_JSON}) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") public ScoreAnalysis analyze(VehicleRoutePlan problem, @QueryParam("fetchPolicy") ScoreAnalysisFetchPolicy fetchPolicy) { return fetchPolicy == null ? solutionManager.analyze(problem) : solutionManager.analyze(problem, fetchPolicy); diff --git a/java/vehicle-routing/src/main/resources/META-INF/resources/app.js b/java/vehicle-routing/src/main/resources/META-INF/resources/app.js index a27763a00c..4777270d2f 100644 --- a/java/vehicle-routing/src/main/resources/META-INF/resources/app.js +++ b/java/vehicle-routing/src/main/resources/META-INF/resources/app.js @@ -326,7 +326,7 @@ function renderTimelines(routePlan) { function analyze() { // see score-analysis.js - analyzeScore(loadedRoutePlan, "/route-plans/analyze") + analyzeScore(loadedRoutePlan, "/route-plans/score-analysis") } function openRecommendationModal(lat, lng) { diff --git a/java/vehicle-routing/src/main/resources/META-INF/resources/score-analysis.js b/java/vehicle-routing/src/main/resources/META-INF/resources/score-analysis.js index ec09076d6e..e92aefd28c 100644 --- a/java/vehicle-routing/src/main/resources/META-INF/resources/score-analysis.js +++ b/java/vehicle-routing/src/main/resources/META-INF/resources/score-analysis.js @@ -13,7 +13,7 @@ function analyzeScore(solution, endpointPath) { function visualizeScoreAnalysis(scoreAnalysisModalContent, solution, endpointPath) { $('#scoreAnalysisScoreLabel').text(`(${solution.score})`); - $.put(endpointPath, JSON.stringify(solution), function (scoreAnalysis) { + $.post(endpointPath, JSON.stringify(solution), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort(compareConstraintsBySeverity); constraints.map(addDerivedScoreAttributes); diff --git a/java/vehicle-routing/src/test/java/org/acme/vehiclerouting/rest/VehicleRoutingPlanResourceTest.java b/java/vehicle-routing/src/test/java/org/acme/vehiclerouting/rest/VehicleRoutingPlanResourceTest.java index 830a294c54..fe7f1ebc23 100644 --- a/java/vehicle-routing/src/test/java/org/acme/vehiclerouting/rest/VehicleRoutingPlanResourceTest.java +++ b/java/vehicle-routing/src/test/java/org/acme/vehiclerouting/rest/VehicleRoutingPlanResourceTest.java @@ -64,7 +64,7 @@ void analyzeFetchAll() throws JsonProcessingException { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/route-plans/analyze") + .post("/route-plans/score-analysis") .then() .extract() .asString(); @@ -90,7 +90,7 @@ void analyzeFetchShallow() throws JsonProcessingException { .body(solution) .expect().contentType(ContentType.JSON) .when() - .put("/route-plans/analyze") + .post("/route-plans/score-analysis") .then() .extract() .asString(); diff --git a/kotlin/school-timetabling/src/main/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResource.kt b/kotlin/school-timetabling/src/main/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResource.kt index 9ef92fb136..df0a58b4e4 100644 --- a/kotlin/school-timetabling/src/main/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResource.kt +++ b/kotlin/school-timetabling/src/main/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResource.kt @@ -123,12 +123,12 @@ class TimetableResource { )] )] ) - @PUT + @POST @Consumes( MediaType.APPLICATION_JSON ) @Produces(MediaType.APPLICATION_JSON) - @Path("analyze") + @Path("score-analysis") fun analyze( problem: Timetable, @QueryParam("fetchPolicy") fetchPolicy: ScoreAnalysisFetchPolicy? ): ScoreAnalysis { diff --git a/kotlin/school-timetabling/src/main/resources/META-INF/resources/app.js b/kotlin/school-timetabling/src/main/resources/META-INF/resources/app.js index 6f9c637278..72dae7b568 100644 --- a/kotlin/school-timetabling/src/main/resources/META-INF/resources/app.js +++ b/kotlin/school-timetabling/src/main/resources/META-INF/resources/app.js @@ -230,7 +230,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/timetables/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/timetables/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/kotlin/school-timetabling/src/test/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResourceTest.kt b/kotlin/school-timetabling/src/test/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResourceTest.kt index 62004a740b..57d08a099e 100644 --- a/kotlin/school-timetabling/src/test/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResourceTest.kt +++ b/kotlin/school-timetabling/src/test/kotlin/org/acme/kotlin/schooltimetabling/rest/TimetableResourceTest.kt @@ -80,7 +80,7 @@ class TimetableResourceTest { .body(testTimetable) .expect().contentType(ContentType.JSON) .`when`() - .put("/timetables/analyze") + .post("/timetables/score-analysis") .then() .extract() .asString() @@ -92,7 +92,7 @@ class TimetableResourceTest { .body(testTimetable) .expect().contentType(ContentType.JSON) .`when`() - .put("/timetables/analyze") + .post("/timetables/score-analysis") .then() .extract() .asString() diff --git a/python/employee-scheduling/src/employee_scheduling/rest_api.py b/python/employee-scheduling/src/employee_scheduling/rest_api.py index dfcaee136d..396c5363bf 100644 --- a/python/employee-scheduling/src/employee_scheduling/rest_api.py +++ b/python/employee-scheduling/src/employee_scheduling/rest_api.py @@ -29,6 +29,22 @@ async def get_timetable(problem_id: str) -> EmployeeSchedule: 'solver_status': solver_manager.get_solver_status(problem_id) }) +@app.post("/schedules/score-analysis") +async def analyze_timetable(employee_schedule: Annotated[EmployeeSchedule, Depends(setup_context)]) -> dict: + return {'constraints': [ConstraintAnalysisDTO( + name=constraint.constraint_name, + weight=constraint.weight, + score=constraint.score, + matches=[ + MatchAnalysisDTO( + name=match.constraint_ref.constraint_name, + score=match.score, + justification=match.justification + ) + for match in constraint.matches + ] + ) for constraint in solution_manager.analyze(employee_schedule).constraint_analyses]} + def update_schedule(problem_id: str, schedule: EmployeeSchedule): global data_sets diff --git a/python/employee-scheduling/static/app.js b/python/employee-scheduling/static/app.js index 9a6b7bcdd2..9643f5c91b 100644 --- a/python/employee-scheduling/static/app.js +++ b/python/employee-scheduling/static/app.js @@ -319,7 +319,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/python/flight-crew-scheduling/src/flight_crew_scheduling/rest_api.py b/python/flight-crew-scheduling/src/flight_crew_scheduling/rest_api.py index 71d7282c80..6a4ba2f897 100644 --- a/python/flight-crew-scheduling/src/flight_crew_scheduling/rest_api.py +++ b/python/flight-crew-scheduling/src/flight_crew_scheduling/rest_api.py @@ -105,7 +105,7 @@ async def get_schedule_status(job_id: str) -> dict: return {"solver_status": flight_crew_schedule.solver_status} -@app.put("/schedules/analyze") +@app.post("/schedules/score-analysis") async def analyze_timetable(flight_crew_schedule: Annotated[FlightCrewSchedule, Depends(setup_context)]) -> dict: return {'constraints': [ConstraintAnalysisDTO( name=constraint.constraint_name, diff --git a/python/flight-crew-scheduling/static/app.js b/python/flight-crew-scheduling/static/app.js index b38ec53a2c..13fc04989f 100644 --- a/python/flight-crew-scheduling/static/app.js +++ b/python/flight-crew-scheduling/static/app.js @@ -269,7 +269,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/python/flight-crew-scheduling/tests/test_feasible.py b/python/flight-crew-scheduling/tests/test_feasible.py index dc15e7e23c..bb3c9e3f3a 100644 --- a/python/flight-crew-scheduling/tests/test_feasible.py +++ b/python/flight-crew-scheduling/tests/test_feasible.py @@ -70,7 +70,7 @@ def test_feasible(): fail('solution is not feasible') # Analyze the Schedule - analyze_response = client.put("/schedules/analyze", json=demo_data) + analyze_response = client.post("/schedules/score-analysis", json=demo_data) assert analyze_response.status_code == 200 analyze_data = analyze_response.json() assert "constraints" in analyze_data diff --git a/python/school-timetabling/src/school_timetabling/rest_api.py b/python/school-timetabling/src/school_timetabling/rest_api.py index f3d80d8ae9..16d229ec94 100644 --- a/python/school-timetabling/src/school_timetabling/rest_api.py +++ b/python/school-timetabling/src/school_timetabling/rest_api.py @@ -63,7 +63,7 @@ async def setup_context(request: Request) -> Timetable: }) -@app.put("/timetables/analyze") +@app.post("/timetables/score-analysis") async def analyze_timetable(timetable: Annotated[Timetable, Depends(setup_context)]) -> dict: return {'constraints': [ConstraintAnalysisDTO( name=constraint.constraint_name, diff --git a/python/school-timetabling/static/app.js b/python/school-timetabling/static/app.js index c1bb8d3b86..225287a668 100644 --- a/python/school-timetabling/static/app.js +++ b/python/school-timetabling/static/app.js @@ -230,7 +230,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/timetables/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/timetables/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/python/sports-league-scheduling/src/sports_league_scheduling/rest_api.py b/python/sports-league-scheduling/src/sports_league_scheduling/rest_api.py index d7cf195041..2717623f6f 100644 --- a/python/sports-league-scheduling/src/sports_league_scheduling/rest_api.py +++ b/python/sports-league-scheduling/src/sports_league_scheduling/rest_api.py @@ -86,7 +86,7 @@ async def get_schedule_status(job_id: str) -> dict: return {"solver_status": league_schedule.solver_status} -@app.put("/schedules/analyze") +@app.post("/schedules/score-analysis") async def analyze_timetable(league_schedule: Annotated[LeagueSchedule, Depends(setup_context)]) -> dict: return {'constraints': [ConstraintAnalysisDTO( name=constraint.constraint_name, diff --git a/python/sports-league-scheduling/static/app.js b/python/sports-league-scheduling/static/app.js index fea847c161..60b573d2e0 100644 --- a/python/sports-league-scheduling/static/app.js +++ b/python/sports-league-scheduling/static/app.js @@ -160,7 +160,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/python/sports-league-scheduling/tests/test_feasible.py b/python/sports-league-scheduling/tests/test_feasible.py index 9b4a1e283a..825088c944 100644 --- a/python/sports-league-scheduling/tests/test_feasible.py +++ b/python/sports-league-scheduling/tests/test_feasible.py @@ -47,7 +47,7 @@ def test_feasible(): fail('solution is not feasible') # Analyze the Timetable - analyze_response = client.put("/schedules/analyze", json=demo_data) + analyze_response = client.post("/schedules/score-analysis", json=demo_data) assert analyze_response.status_code == 200 analyze_data = analyze_response.json() assert "constraints" in analyze_data diff --git a/python/tournament-scheduling/src/tournament_scheduling/rest_api.py b/python/tournament-scheduling/src/tournament_scheduling/rest_api.py index 5d53949fd4..7fd781ce12 100644 --- a/python/tournament-scheduling/src/tournament_scheduling/rest_api.py +++ b/python/tournament-scheduling/src/tournament_scheduling/rest_api.py @@ -88,7 +88,7 @@ async def get_tournament_schedule_status(job_id: str) -> dict: return {"solver_status": tournament_schedule.solver_status} -@app.put("/schedules/analyze") +@app.post("/schedules/score-analysis") async def analyze_timetable(tournament_schedule: Annotated[TournamentSchedule, Depends(setup_context)]) -> dict: return {'constraints': [ConstraintAnalysisDTO( name=constraint.constraint_name, diff --git a/python/tournament-scheduling/static/app.js b/python/tournament-scheduling/static/app.js index b0084756b2..0006ffefb6 100644 --- a/python/tournament-scheduling/static/app.js +++ b/python/tournament-scheduling/static/app.js @@ -266,7 +266,7 @@ function analyze() { scoreAnalysisModalContent.text("No score to analyze yet, please first press the 'solve' button."); } else { $('#scoreAnalysisScoreLabel').text(`(${loadedSchedule.score})`); - $.put("/schedules/analyze", JSON.stringify(loadedSchedule), function (scoreAnalysis) { + $.post("/schedules/score-analysis", JSON.stringify(loadedSchedule), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort((a, b) => { let aComponents = getScoreComponents(a.score), bComponents = getScoreComponents(b.score); diff --git a/python/tournament-scheduling/tests/test_feasible.py b/python/tournament-scheduling/tests/test_feasible.py index e5ef72c696..11da6070ec 100644 --- a/python/tournament-scheduling/tests/test_feasible.py +++ b/python/tournament-scheduling/tests/test_feasible.py @@ -47,7 +47,7 @@ def test_feasible(): fail('solution is not feasible') # Analyze the Timetable - analyze_response = client.put("/schedules/analyze", json=demo_data) + analyze_response = client.post("/schedules/score-analysis", json=demo_data) assert analyze_response.status_code == 200 analyze_data = analyze_response.json() assert "constraints" in analyze_data diff --git a/python/vehicle-routing/src/vehicle_routing/rest_api.py b/python/vehicle-routing/src/vehicle_routing/rest_api.py index 9f29d2aabd..2bd2d3c613 100644 --- a/python/vehicle-routing/src/vehicle_routing/rest_api.py +++ b/python/vehicle-routing/src/vehicle_routing/rest_api.py @@ -82,7 +82,7 @@ async def solve_route(route: Annotated[VehicleRoutePlan, Depends(setup_context)] return job_id -@app.put("/route-plans/analyze") +@app.post("/route-plans/score-analysis") async def analyze_route(route: Annotated[VehicleRoutePlan, Depends(setup_context)]) \ -> dict['str', list[ConstraintAnalysisDTO]]: return {'constraints': [ConstraintAnalysisDTO( diff --git a/python/vehicle-routing/static/app.js b/python/vehicle-routing/static/app.js index f330802423..511c265eba 100644 --- a/python/vehicle-routing/static/app.js +++ b/python/vehicle-routing/static/app.js @@ -326,7 +326,7 @@ function renderTimelines(routePlan) { function analyze() { // see score-analysis.js - analyzeScore(loadedRoutePlan, "/route-plans/analyze") + analyzeScore(loadedRoutePlan, "/route-plans/score-analysis") } // TODO: move the general functionality to the webjar. diff --git a/python/vehicle-routing/static/score-analysis.js b/python/vehicle-routing/static/score-analysis.js index 243b65e7b1..999bed53cd 100644 --- a/python/vehicle-routing/static/score-analysis.js +++ b/python/vehicle-routing/static/score-analysis.js @@ -13,7 +13,7 @@ function analyzeScore(solution, endpointPath) { function visualizeScoreAnalysis(scoreAnalysisModalContent, solution, endpointPath) { $('#scoreAnalysisScoreLabel').text(`(${solution.score})`); - $.put(endpointPath, JSON.stringify(solution), function (scoreAnalysis) { + $.post(endpointPath, JSON.stringify(solution), function (scoreAnalysis) { let constraints = scoreAnalysis.constraints; constraints.sort(compareConstraintsBySeverity); constraints.map(addDerivedScoreAttributes);