use of org.acme.schooltimetabling.domain.Lesson in project optaplanner-quickstarts by kiegroup.
the class LessonResourceTest method getAll.
@Test
public void getAll() {
List<Lesson> lessonList = given().when().get("/lessons").then().statusCode(200).extract().body().jsonPath().getList(".", Lesson.class);
assertFalse(lessonList.isEmpty());
Lesson firstLesson = lessonList.get(0);
assertNotNull(firstLesson.getSubject());
assertNotNull(firstLesson.getTeacher());
assertNotNull(firstLesson.getStudentGroup());
}
use of org.acme.schooltimetabling.domain.Lesson in project optaplanner-quickstarts by kiegroup.
the class TimeTableControllerTest method solveDemoDataUntilFeasible.
@Test
@Timeout(600_000)
public void solveDemoDataUntilFeasible() throws InterruptedException {
timeTableController.solve();
TimeTable timeTable;
do {
// Use do-while to give the solver some time and avoid retrieving an early infeasible solution.
// Quick polling (not a Test Thread Sleep anti-pattern)
// Test is still fast on fast machines and doesn't randomly fail on slow machines.
Thread.sleep(20L);
timeTable = timeTableController.getTimeTable();
} while (timeTable.getSolverStatus() != SolverStatus.NOT_SOLVING || !timeTable.getScore().isFeasible());
assertFalse(timeTable.getLessonList().isEmpty());
for (Lesson lesson : timeTable.getLessonList()) {
assertNotNull(lesson.getTimeslot());
assertNotNull(lesson.getRoom());
}
assertTrue(timeTable.getScore().isFeasible());
}
use of org.acme.schooltimetabling.domain.Lesson in project optaplanner-quickstarts by kiegroup.
the class TimeTableApp method generateDemoData.
public static TimeTable generateDemoData() {
List<Timeslot> timeslotList = new ArrayList<>(10);
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
List<Room> roomList = new ArrayList<>(3);
roomList.add(new Room("Room A"));
roomList.add(new Room("Room B"));
roomList.add(new Room("Room C"));
List<Lesson> lessonList = new ArrayList<>();
long id = 0;
lessonList.add(new Lesson(id++, "Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson(id++, "Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson(id++, "Physics", "M. Curie", "9th grade"));
lessonList.add(new Lesson(id++, "Chemistry", "M. Curie", "9th grade"));
lessonList.add(new Lesson(id++, "Biology", "C. Darwin", "9th grade"));
lessonList.add(new Lesson(id++, "History", "I. Jones", "9th grade"));
lessonList.add(new Lesson(id++, "English", "I. Jones", "9th grade"));
lessonList.add(new Lesson(id++, "English", "I. Jones", "9th grade"));
lessonList.add(new Lesson(id++, "Spanish", "P. Cruz", "9th grade"));
lessonList.add(new Lesson(id++, "Spanish", "P. Cruz", "9th grade"));
lessonList.add(new Lesson(id++, "Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson(id++, "Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson(id++, "Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson(id++, "Physics", "M. Curie", "10th grade"));
lessonList.add(new Lesson(id++, "Chemistry", "M. Curie", "10th grade"));
lessonList.add(new Lesson(id++, "French", "M. Curie", "10th grade"));
lessonList.add(new Lesson(id++, "Geography", "C. Darwin", "10th grade"));
lessonList.add(new Lesson(id++, "History", "I. Jones", "10th grade"));
lessonList.add(new Lesson(id++, "English", "P. Cruz", "10th grade"));
lessonList.add(new Lesson(id++, "Spanish", "P. Cruz", "10th grade"));
return new TimeTable(timeslotList, roomList, lessonList);
}
use of org.acme.schooltimetabling.domain.Lesson in project optaplanner-quickstarts by kiegroup.
the class DemoDataGenerator method generateDemoData.
@Transactional
public void generateDemoData(@Observes StartupEvent startupEvent) {
if (demoData == DemoData.NONE) {
return;
}
List<Timeslot> timeslotList = new ArrayList<>(10);
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.MONDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.TUESDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
if (demoData == DemoData.LARGE) {
timeslotList.add(new Timeslot(DayOfWeek.WEDNESDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.WEDNESDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.WEDNESDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.WEDNESDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.WEDNESDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
timeslotList.add(new Timeslot(DayOfWeek.THURSDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.THURSDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.THURSDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.THURSDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.THURSDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
timeslotList.add(new Timeslot(DayOfWeek.FRIDAY, LocalTime.of(8, 30), LocalTime.of(9, 30)));
timeslotList.add(new Timeslot(DayOfWeek.FRIDAY, LocalTime.of(9, 30), LocalTime.of(10, 30)));
timeslotList.add(new Timeslot(DayOfWeek.FRIDAY, LocalTime.of(10, 30), LocalTime.of(11, 30)));
timeslotList.add(new Timeslot(DayOfWeek.FRIDAY, LocalTime.of(13, 30), LocalTime.of(14, 30)));
timeslotList.add(new Timeslot(DayOfWeek.FRIDAY, LocalTime.of(14, 30), LocalTime.of(15, 30)));
}
timeslotRepository.persist(timeslotList);
List<Room> roomList = new ArrayList<>(3);
roomList.add(new Room("Room A"));
roomList.add(new Room("Room B"));
roomList.add(new Room("Room C"));
if (demoData == DemoData.LARGE) {
roomList.add(new Room("Room D"));
roomList.add(new Room("Room E"));
roomList.add(new Room("Room F"));
}
roomRepository.persist(roomList);
List<Lesson> lessonList = new ArrayList<>();
lessonList.add(new Lesson("Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "9th grade"));
lessonList.add(new Lesson("Chemistry", "M. Curie", "9th grade"));
lessonList.add(new Lesson("Biology", "C. Darwin", "9th grade"));
lessonList.add(new Lesson("History", "I. Jones", "9th grade"));
lessonList.add(new Lesson("English", "I. Jones", "9th grade"));
lessonList.add(new Lesson("English", "I. Jones", "9th grade"));
lessonList.add(new Lesson("Spanish", "P. Cruz", "9th grade"));
lessonList.add(new Lesson("Spanish", "P. Cruz", "9th grade"));
if (demoData == DemoData.LARGE) {
lessonList.add(new Lesson("Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "9th grade"));
lessonList.add(new Lesson("ICT", "A. Turing", "9th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "9th grade"));
lessonList.add(new Lesson("Geography", "C. Darwin", "9th grade"));
lessonList.add(new Lesson("Geology", "C. Darwin", "9th grade"));
lessonList.add(new Lesson("History", "I. Jones", "9th grade"));
lessonList.add(new Lesson("English", "I. Jones", "9th grade"));
lessonList.add(new Lesson("Drama", "I. Jones", "9th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "9th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "9th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "9th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "9th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "9th grade"));
}
lessonList.add(new Lesson("Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "10th grade"));
lessonList.add(new Lesson("Chemistry", "M. Curie", "10th grade"));
lessonList.add(new Lesson("French", "M. Curie", "10th grade"));
lessonList.add(new Lesson("Geography", "C. Darwin", "10th grade"));
lessonList.add(new Lesson("History", "I. Jones", "10th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "10th grade"));
lessonList.add(new Lesson("Spanish", "P. Cruz", "10th grade"));
if (demoData == DemoData.LARGE) {
lessonList.add(new Lesson("Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "10th grade"));
lessonList.add(new Lesson("ICT", "A. Turing", "10th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "10th grade"));
lessonList.add(new Lesson("Biology", "C. Darwin", "10th grade"));
lessonList.add(new Lesson("Geology", "C. Darwin", "10th grade"));
lessonList.add(new Lesson("History", "I. Jones", "10th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "10th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "10th grade"));
lessonList.add(new Lesson("Drama", "I. Jones", "10th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "10th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "10th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "10th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "10th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "10th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "11th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "11th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "11th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "11th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "11th grade"));
lessonList.add(new Lesson("ICT", "A. Turing", "11th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "11th grade"));
lessonList.add(new Lesson("Chemistry", "M. Curie", "11th grade"));
lessonList.add(new Lesson("French", "M. Curie", "11th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "11th grade"));
lessonList.add(new Lesson("Geography", "C. Darwin", "11th grade"));
lessonList.add(new Lesson("Biology", "C. Darwin", "11th grade"));
lessonList.add(new Lesson("Geology", "C. Darwin", "11th grade"));
lessonList.add(new Lesson("History", "I. Jones", "11th grade"));
lessonList.add(new Lesson("History", "I. Jones", "11th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "11th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "11th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "11th grade"));
lessonList.add(new Lesson("Spanish", "P. Cruz", "11th grade"));
lessonList.add(new Lesson("Drama", "P. Cruz", "11th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "11th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "11th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "11th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "11th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "11th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "12th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "12th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "12th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "12th grade"));
lessonList.add(new Lesson("Math", "A. Turing", "12th grade"));
lessonList.add(new Lesson("ICT", "A. Turing", "12th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "12th grade"));
lessonList.add(new Lesson("Chemistry", "M. Curie", "12th grade"));
lessonList.add(new Lesson("French", "M. Curie", "12th grade"));
lessonList.add(new Lesson("Physics", "M. Curie", "12th grade"));
lessonList.add(new Lesson("Geography", "C. Darwin", "12th grade"));
lessonList.add(new Lesson("Biology", "C. Darwin", "12th grade"));
lessonList.add(new Lesson("Geology", "C. Darwin", "12th grade"));
lessonList.add(new Lesson("History", "I. Jones", "12th grade"));
lessonList.add(new Lesson("History", "I. Jones", "12th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "12th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "12th grade"));
lessonList.add(new Lesson("English", "P. Cruz", "12th grade"));
lessonList.add(new Lesson("Spanish", "P. Cruz", "12th grade"));
lessonList.add(new Lesson("Drama", "P. Cruz", "12th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "12th grade"));
lessonList.add(new Lesson("Art", "S. Dali", "12th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "12th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "12th grade"));
lessonList.add(new Lesson("Physical education", "C. Lewis", "12th grade"));
}
Lesson lesson = lessonList.get(0);
lesson.setTimeslot(timeslotList.get(0));
lesson.setRoom(roomList.get(0));
lessonRepository.persist(lessonList);
}
use of org.acme.schooltimetabling.domain.Lesson in project optaplanner-quickstarts by kiegroup.
the class TimeTableResource method save.
@Transactional
protected void save(TimeTable timeTable) {
for (Lesson lesson : timeTable.getLessonList()) {
// TODO this is awfully naive: optimistic locking causes issues if called by the SolverManager
Lesson attachedLesson = lessonRepository.findById(lesson.getId());
attachedLesson.setTimeslot(lesson.getTimeslot());
attachedLesson.setRoom(lesson.getRoom());
}
}
Aggregations