Skip to content

Commit a4f963a

Browse files
authored
chore: migrate to new event consumers (#944)
1 parent 9190da8 commit a4f963a

File tree

18 files changed

+209
-240
lines changed

18 files changed

+209
-240
lines changed

java/bed-allocation/src/main/java/org/acme/bedallocation/rest/BedSchedulingResource.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package org.acme.bedallocation.rest;
22

3-
import java.time.LocalDateTime;
4-
import java.util.Collection;
5-
import java.util.List;
6-
import java.util.Map.Entry;
7-
import java.util.UUID;
8-
import java.util.concurrent.ConcurrentHashMap;
9-
import java.util.concurrent.ConcurrentMap;
10-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
8+
import ai.timefold.solver.core.api.solver.SolverStatus;
119
import jakarta.inject.Inject;
1210
import jakarta.ws.rs.Consumes;
1311
import jakarta.ws.rs.DELETE;
@@ -20,14 +18,6 @@
2018
import jakarta.ws.rs.QueryParam;
2119
import jakarta.ws.rs.core.MediaType;
2220
import jakarta.ws.rs.core.Response;
23-
24-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
25-
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
26-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
27-
import ai.timefold.solver.core.api.solver.SolutionManager;
28-
import ai.timefold.solver.core.api.solver.SolverManager;
29-
import ai.timefold.solver.core.api.solver.SolverStatus;
30-
3121
import org.acme.bedallocation.domain.BedPlan;
3222
import org.acme.bedallocation.rest.exception.ErrorInfo;
3323
import org.acme.bedallocation.rest.exception.ScheduleSolverException;
@@ -42,6 +32,14 @@
4232
import org.slf4j.Logger;
4333
import org.slf4j.LoggerFactory;
4434

35+
import java.time.LocalDateTime;
36+
import java.util.Collection;
37+
import java.util.List;
38+
import java.util.Map.Entry;
39+
import java.util.UUID;
40+
import java.util.concurrent.ConcurrentHashMap;
41+
import java.util.concurrent.ConcurrentMap;
42+
4543
@Tag(name = "Bed Scheduling",
4644
description = "Bed Scheduling service assigning beds for patient stays.")
4745
@Path("schedules")
@@ -92,7 +90,7 @@ public String solve(BedPlan problem) {
9290
solverManager.solveBuilder()
9391
.withProblemId(jobId)
9492
.withProblemFinder(id -> jobIdToJob.get(jobId).schedule)
95-
.withBestSolutionConsumer(solution -> jobIdToJob.put(jobId, Job.ofSchedule(solution)))
93+
.withBestSolutionEventConsumer(event -> jobIdToJob.put(jobId, Job.ofSchedule(event.solution())))
9694
.withExceptionHandler((id, exception) -> {
9795
jobIdToJob.put(id, Job.ofException(exception));
9896
LOGGER.error("Failed solving jobId ({}).", id, exception);

java/conference-scheduling/src/main/java/org/acme/conferencescheduling/rest/ConferenceSchedulingResource.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package org.acme.conferencescheduling.rest;
22

3-
import java.time.LocalDateTime;
4-
import java.util.Collection;
5-
import java.util.List;
6-
import java.util.Map.Entry;
7-
import java.util.UUID;
8-
import java.util.concurrent.ConcurrentHashMap;
9-
import java.util.concurrent.ConcurrentMap;
10-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
8+
import ai.timefold.solver.core.api.solver.SolverStatus;
119
import jakarta.inject.Inject;
1210
import jakarta.ws.rs.Consumes;
1311
import jakarta.ws.rs.DELETE;
@@ -20,14 +18,6 @@
2018
import jakarta.ws.rs.QueryParam;
2119
import jakarta.ws.rs.core.MediaType;
2220
import jakarta.ws.rs.core.Response;
23-
24-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
25-
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
26-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
27-
import ai.timefold.solver.core.api.solver.SolutionManager;
28-
import ai.timefold.solver.core.api.solver.SolverManager;
29-
import ai.timefold.solver.core.api.solver.SolverStatus;
30-
3121
import org.acme.conferencescheduling.domain.ConferenceSchedule;
3222
import org.acme.conferencescheduling.rest.exception.ConferenceScheduleSolverException;
3323
import org.acme.conferencescheduling.rest.exception.ErrorInfo;
@@ -42,6 +32,14 @@
4232
import org.slf4j.Logger;
4333
import org.slf4j.LoggerFactory;
4434

35+
import java.time.LocalDateTime;
36+
import java.util.Collection;
37+
import java.util.List;
38+
import java.util.Map.Entry;
39+
import java.util.UUID;
40+
import java.util.concurrent.ConcurrentHashMap;
41+
import java.util.concurrent.ConcurrentMap;
42+
4543
@Tag(name = "Conference Scheduling",
4644
description = "Conference Scheduling service assigning rooms and timeslots for conference talks.")
4745
@Path("schedules")
@@ -92,7 +90,7 @@ public String solve(ConferenceSchedule problem) {
9290
solverManager.solveBuilder()
9391
.withProblemId(jobId)
9492
.withProblemFinder(id -> jobIdToJob.get(jobId).schedule)
95-
.withBestSolutionConsumer(solution -> jobIdToJob.put(jobId, Job.ofSchedule(solution)))
93+
.withBestSolutionEventConsumer(event -> jobIdToJob.put(jobId, Job.ofSchedule(event.solution())))
9694
.withExceptionHandler((id, exception) -> {
9795
jobIdToJob.put(id, Job.ofException(exception));
9896
LOGGER.error("Failed solving jobId ({}).", id, exception);

java/employee-scheduling/src/main/java/org/acme/employeescheduling/rest/EmployeeScheduleResource.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package org.acme.employeescheduling.rest;
22

3-
import java.util.Collection;
4-
import java.util.UUID;
5-
import java.util.concurrent.ConcurrentHashMap;
6-
import java.util.concurrent.ConcurrentMap;
7-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
8+
import ai.timefold.solver.core.api.solver.SolverStatus;
89
import jakarta.inject.Inject;
910
import jakarta.ws.rs.Consumes;
1011
import jakarta.ws.rs.DELETE;
@@ -17,14 +18,6 @@
1718
import jakarta.ws.rs.QueryParam;
1819
import jakarta.ws.rs.core.MediaType;
1920
import jakarta.ws.rs.core.Response;
20-
21-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
22-
import ai.timefold.solver.core.api.score.buildin.hardsoftbigdecimal.HardSoftBigDecimalScore;
23-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
24-
import ai.timefold.solver.core.api.solver.SolutionManager;
25-
import ai.timefold.solver.core.api.solver.SolverManager;
26-
import ai.timefold.solver.core.api.solver.SolverStatus;
27-
2821
import org.acme.employeescheduling.domain.EmployeeSchedule;
2922
import org.acme.employeescheduling.rest.exception.EmployeeScheduleSolverException;
3023
import org.acme.employeescheduling.rest.exception.ErrorInfo;
@@ -39,6 +32,11 @@
3932
import org.slf4j.Logger;
4033
import org.slf4j.LoggerFactory;
4134

35+
import java.util.Collection;
36+
import java.util.UUID;
37+
import java.util.concurrent.ConcurrentHashMap;
38+
import java.util.concurrent.ConcurrentMap;
39+
4240
@Tag(name = "Employee Schedules", description = "Employee Schedules service for assigning employees to shifts.")
4341
@Path("schedules")
4442
public class EmployeeScheduleResource {
@@ -83,7 +81,7 @@ public String solve(EmployeeSchedule problem) {
8381
solverManager.solveBuilder()
8482
.withProblemId(jobId)
8583
.withProblemFinder(jobId_ -> jobIdToJob.get(jobId).schedule)
86-
.withBestSolutionConsumer(solution -> jobIdToJob.put(jobId, Job.ofSchedule(solution)))
84+
.withBestSolutionEventConsumer(event -> jobIdToJob.put(jobId, Job.ofSchedule(event.solution())))
8785
.withExceptionHandler((jobId_, exception) -> {
8886
jobIdToJob.put(jobId, Job.ofException(exception));
8987
LOGGER.error("Failed solving jobId ({}).", jobId, exception);

java/facility-location/src/main/java/org/acme/facilitylocation/persistence/FacilityLocationProblemRepository.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
package org.acme.facilitylocation.persistence;
22

3-
import java.util.Optional;
4-
53
import jakarta.enterprise.context.ApplicationScoped;
6-
74
import org.acme.facilitylocation.domain.FacilityLocationProblem;
85

6+
import java.util.Optional;
7+
98
@ApplicationScoped
109
public class FacilityLocationProblemRepository {
1110

java/facility-location/src/main/java/org/acme/facilitylocation/rest/SolverResource.java

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.acme.facilitylocation.rest;
22

3-
import java.util.Optional;
4-
import java.util.concurrent.atomic.AtomicReference;
5-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoftlong.HardSoftLongScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
68
import jakarta.ws.rs.Consumes;
79
import jakarta.ws.rs.GET;
810
import jakarta.ws.rs.POST;
@@ -11,16 +13,12 @@
1113
import jakarta.ws.rs.Produces;
1214
import jakarta.ws.rs.QueryParam;
1315
import jakarta.ws.rs.core.MediaType;
14-
15-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
16-
import ai.timefold.solver.core.api.score.buildin.hardsoftlong.HardSoftLongScore;
17-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
18-
import ai.timefold.solver.core.api.solver.SolutionManager;
19-
import ai.timefold.solver.core.api.solver.SolverManager;
20-
2116
import org.acme.facilitylocation.domain.FacilityLocationProblem;
2217
import org.acme.facilitylocation.persistence.FacilityLocationProblemRepository;
2318

19+
import java.util.Optional;
20+
import java.util.concurrent.atomic.AtomicReference;
21+
2422
@Path("/flp")
2523
public class SolverResource {
2624

@@ -62,7 +60,7 @@ public void solve() {
6260
maybeSolution.ifPresent(facilityLocationProblem -> solverManager.solveBuilder()
6361
.withProblemId(PROBLEM_ID)
6462
.withProblemFinder(id -> facilityLocationProblem)
65-
.withBestSolutionConsumer(repository::update)
63+
.withBestSolutionEventConsumer(event -> repository.update(event.solution()))
6664
.withExceptionHandler((problemId, throwable) -> solverError.set(throwable))
6765
.run());
6866
}

java/flight-crew-scheduling/src/main/java/org/acme/flighcrewscheduling/rest/FlightCrewSchedulingResource.java

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package org.acme.flighcrewscheduling.rest;
22

3-
import java.time.LocalDateTime;
4-
import java.util.Collection;
5-
import java.util.List;
6-
import java.util.Map.Entry;
7-
import java.util.UUID;
8-
import java.util.concurrent.ConcurrentHashMap;
9-
import java.util.concurrent.ConcurrentMap;
10-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
8+
import ai.timefold.solver.core.api.solver.SolverStatus;
119
import jakarta.inject.Inject;
1210
import jakarta.ws.rs.Consumes;
1311
import jakarta.ws.rs.DELETE;
@@ -20,14 +18,6 @@
2018
import jakarta.ws.rs.QueryParam;
2119
import jakarta.ws.rs.core.MediaType;
2220
import jakarta.ws.rs.core.Response;
23-
24-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
25-
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
26-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
27-
import ai.timefold.solver.core.api.solver.SolutionManager;
28-
import ai.timefold.solver.core.api.solver.SolverManager;
29-
import ai.timefold.solver.core.api.solver.SolverStatus;
30-
3121
import org.acme.flighcrewscheduling.domain.FlightCrewSchedule;
3222
import org.acme.flighcrewscheduling.rest.exception.ErrorInfo;
3323
import org.acme.flighcrewscheduling.rest.exception.ScheduleSolverException;
@@ -42,6 +32,14 @@
4232
import org.slf4j.Logger;
4333
import org.slf4j.LoggerFactory;
4434

35+
import java.time.LocalDateTime;
36+
import java.util.Collection;
37+
import java.util.List;
38+
import java.util.Map.Entry;
39+
import java.util.UUID;
40+
import java.util.concurrent.ConcurrentHashMap;
41+
import java.util.concurrent.ConcurrentMap;
42+
4543
@Tag(name = "Flight Crew Scheduling",
4644
description = "Flight Crew Scheduling service assigning crew for flights.")
4745
@Path("schedules")
@@ -92,7 +90,7 @@ public String solve(FlightCrewSchedule problem) {
9290
solverManager.solveBuilder()
9391
.withProblemId(jobId)
9492
.withProblemFinder(id -> jobIdToJob.get(jobId).schedule)
95-
.withBestSolutionConsumer(solution -> jobIdToJob.put(jobId, Job.ofSchedule(solution)))
93+
.withBestSolutionEventConsumer(event -> jobIdToJob.put(jobId, Job.ofSchedule(event.solution())))
9694
.withExceptionHandler((id, exception) -> {
9795
jobIdToJob.put(id, Job.ofException(exception));
9896
LOGGER.error("Failed solving jobId ({}).", id, exception);

java/food-packaging/src/main/java/org/acme/foodpackaging/rest/PackagingScheduleResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public void solve() {
5656
solverManager.solveBuilder()
5757
.withProblemId(SINGLETON_SOLUTION_ID)
5858
.withProblemFinder(id -> repository.read())
59-
.withBestSolutionConsumer(schedule -> repository.write(schedule))
59+
.withBestSolutionEventConsumer(event -> repository.write(event.solution()))
6060
.run();
6161
}
6262

java/maintenance-scheduling/src/main/java/org/acme/maintenancescheduling/rest/MaintenanceScheduleResource.java

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package org.acme.maintenancescheduling.rest;
22

3-
import java.util.Collection;
4-
import java.util.UUID;
5-
import java.util.concurrent.ConcurrentHashMap;
6-
import java.util.concurrent.ConcurrentMap;
7-
3+
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
4+
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
5+
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
6+
import ai.timefold.solver.core.api.solver.SolutionManager;
7+
import ai.timefold.solver.core.api.solver.SolverManager;
8+
import ai.timefold.solver.core.api.solver.SolverStatus;
89
import jakarta.inject.Inject;
910
import jakarta.ws.rs.Consumes;
1011
import jakarta.ws.rs.DELETE;
@@ -17,14 +18,6 @@
1718
import jakarta.ws.rs.QueryParam;
1819
import jakarta.ws.rs.core.MediaType;
1920
import jakarta.ws.rs.core.Response;
20-
21-
import ai.timefold.solver.core.api.score.analysis.ScoreAnalysis;
22-
import ai.timefold.solver.core.api.score.buildin.hardsoft.HardSoftScore;
23-
import ai.timefold.solver.core.api.solver.ScoreAnalysisFetchPolicy;
24-
import ai.timefold.solver.core.api.solver.SolutionManager;
25-
import ai.timefold.solver.core.api.solver.SolverManager;
26-
import ai.timefold.solver.core.api.solver.SolverStatus;
27-
2821
import org.acme.maintenancescheduling.domain.MaintenanceSchedule;
2922
import org.acme.maintenancescheduling.rest.exception.ErrorInfo;
3023
import org.acme.maintenancescheduling.rest.exception.MaintenanceScheduleSolverException;
@@ -38,6 +31,11 @@
3831
import org.slf4j.Logger;
3932
import org.slf4j.LoggerFactory;
4033

34+
import java.util.Collection;
35+
import java.util.UUID;
36+
import java.util.concurrent.ConcurrentHashMap;
37+
import java.util.concurrent.ConcurrentMap;
38+
4139
@Path("schedules")
4240
public class MaintenanceScheduleResource {
4341

@@ -83,7 +81,7 @@ public String solve(MaintenanceSchedule problem) {
8381
solverManager.solveBuilder()
8482
.withProblemId(jobId)
8583
.withProblemFinder(jobId_ -> jobIdToJob.get(jobId).schedule)
86-
.withBestSolutionConsumer(solution -> jobIdToJob.put(jobId, Job.ofSchedule(solution)))
84+
.withBestSolutionEventConsumer(event -> jobIdToJob.put(jobId, Job.ofSchedule(event.solution())))
8785
.withExceptionHandler((jobId_, exception) -> {
8886
jobIdToJob.put(jobId, Job.ofException(exception));
8987
LOGGER.error("Failed solving jobId ({}).", jobId, exception);

0 commit comments

Comments
 (0)