@@ -147,11 +147,11 @@ and there are no time slots during lunch or other breaks.
147147A time slot has no date, because a high school schedule just repeats every week.
148148So there is no need for https://docs.optaplanner.org/latestFinal/optaplanner-docs/html_single/index.html#continuousPlanning[continuous planning].
149149
150- Create the `src/main/java/org/acme/domain/Timeslot.java` class:
150+ Create the `src/main/java/org/acme/optaplanner/ domain/Timeslot.java` class:
151151
152152[source,java]
153153----
154- package org.acme.domain;
154+ package org.acme.optaplanner. domain;
155155
156156import java.time.DayOfWeek;
157157import java.time.LocalTime;
@@ -185,7 +185,7 @@ public class Timeslot {
185185
186186 @Override
187187 public String toString() {
188- return dayOfWeek + " " + startTime.toString() ;
188+ return dayOfWeek + " " + startTime;
189189 }
190190
191191}
@@ -204,11 +204,11 @@ for example, `Room A` or `Room B`.
204204For simplicity's sake, all rooms are without capacity limits
205205and they can accommodate all lessons.
206206
207- Create the `src/main/java/org/acme/domain/Room.java` class:
207+ Create the `src/main/java/org/acme/optaplanner/ domain/Room.java` class:
208208
209209[source,java]
210210----
211- package org.acme.domain;
211+ package org.acme.optaplanner. domain;
212212
213213public class Room {
214214
@@ -259,11 +259,11 @@ In order for OptaPlanner to recognize them,
259259both the `timeslot` and `room` fields require an `@PlanningVariable` annotation.
260260Their containing class, `Lesson`, requires an `@PlanningEntity` annotation.
261261
262- Create the `src/main/java/org/acme/domain/Lesson.java` class:
262+ Create the `src/main/java/org/acme/optaplanner/ domain/Lesson.java` class:
263263
264264[source,java]
265265----
266- package org.acme.domain;
266+ package org.acme.optaplanner. domain;
267267
268268import org.optaplanner.core.api.domain.entity.PlanningEntity;
269269import org.optaplanner.core.api.domain.lookup.PlanningId;
@@ -412,15 +412,15 @@ Unfortunately **that does not scale well**, because it is non-incremental:
412412every time a lesson is assigned to a different time slot or room,
413413all lessons are re-evaluated to calculate the new score.
414414
415- Instead, create a `src/main/java/org/acme/solver/TimeTableConstraintProvider.java` class
415+ Instead, create a `src/main/java/org/acme/optaplanner/ solver/TimeTableConstraintProvider.java` class
416416to perform incremental score calculation.
417417It uses OptaPlanner's ConstraintStream API which is inspired by Java 8 Streams and SQL:
418418
419419[source,java]
420420----
421- package org.acme.solver;
421+ package org.acme.optaplanner. solver;
422422
423- import org.acme.domain.Lesson;
423+ import org.acme.optaplanner. domain.Lesson;
424424import org.optaplanner.core.api.score.buildin.hardsoft.HardSoftScore;
425425import org.optaplanner.core.api.score.stream.Constraint;
426426import org.optaplanner.core.api.score.stream.ConstraintFactory;
@@ -493,11 +493,11 @@ for example, a solution with the score `-2hard/-3soft`.
493493* If it adheres to all hard constraints, then it is a _feasible_ solution,
494494for example, a solution with the score `0hard/-7soft`.
495495
496- Create the `src/main/java/org/acme/domain/TimeTable.java` class:
496+ Create the `src/main/java/org/acme/optaplanner/ domain/TimeTable.java` class:
497497
498498[source,java]
499499----
500- package org.acme.domain;
500+ package org.acme.optaplanner. domain;
501501
502502import java.util.List;
503503
@@ -603,11 +603,11 @@ Therefore, the Quarkus extension injects a `SolverManager`,
603603which runs solvers in a separate thread pool
604604and can solve multiple datasets in parallel.
605605
606- Create the `src/main/java/org/acme/solver /TimeTableResource.java` class:
606+ Create the `src/main/java/org/acme/optaplanner/rest /TimeTableResource.java` class:
607607
608608[source,java]
609609----
610- package org.acme.rest;
610+ package org.acme.optaplanner. rest;
611611
612612import java.util.UUID;
613613import java.util.concurrent.ExecutionException;
@@ -618,7 +618,7 @@ import javax.ws.rs.Path;
618618import javax.ws.rs.Produces;
619619import javax.ws.rs.core.MediaType;
620620
621- import org.acme.domain.TimeTable;
621+ import org.acme.optaplanner. domain.TimeTable;
622622import org.optaplanner.core.api.solver.SolverJob;
623623import org.optaplanner.core.api.solver.SolverManager;
624624
@@ -720,11 +720,11 @@ On the server side, the `info` log show what OptaPlanner did in those five secon
720720A good application includes test coverage.
721721In a JUnit test, generate a test dataset and send it to the `TimeTableResource` to solve.
722722
723- Create the `src/test/java/org/acme/solver /TimeTableResourceTest.java` class:
723+ Create the `src/test/java/org/acme/optaplanner/rest /TimeTableResourceTest.java` class:
724724
725725[source,java]
726726----
727- package org.acme;
727+ package org.acme.optaplanner.rest ;
728728
729729import java.time.DayOfWeek;
730730import java.time.LocalTime;
@@ -734,11 +734,11 @@ import java.util.List;
734734import javax.inject.Inject;
735735
736736import io.quarkus.test.junit.QuarkusTest;
737- import org.acme.domain.Room;
738- import org.acme.domain.Timeslot;
739- import org.acme.domain.Lesson;
740- import org.acme.domain.TimeTable;
741- import org.acme.rest.TimeTableResource;
737+ import org.acme.optaplanner. domain.Room;
738+ import org.acme.optaplanner. domain.Timeslot;
739+ import org.acme.optaplanner. domain.Lesson;
740+ import org.acme.optaplanner. domain.TimeTable;
741+ import org.acme.optaplanner. rest.TimeTableResource;
742742import org.junit.jupiter.api.Test;
743743import org.junit.jupiter.api.Timeout;
744744
0 commit comments