content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.camel.quarkus.component.optaplanner.it.bootstrap;
  
  import java.time.DayOfWeek;
  import java.time.LocalTime;
  import java.util.ArrayList;
  import java.util.List;
  
  import io.quarkus.runtime.StartupEvent;
  import jakarta.enterprise.context.ApplicationScoped;
  import jakarta.enterprise.event.Observes;
  import org.apache.camel.quarkus.component.optaplanner.it.domain.Lesson;
  import org.apache.camel.quarkus.component.optaplanner.it.domain.Room;
  import org.apache.camel.quarkus.component.optaplanner.it.domain.TimeTable;
  import org.apache.camel.quarkus.component.optaplanner.it.domain.Timeslot;
  
  /**
   * adapted from optaplanner quarkus quickstart :
   * https://github.com/kiegroup/optaplanner-quickstarts/tree/stable/use-cases/school-timetabling
   **/
  @ApplicationScoped
  public class DataGenerator {
  
      public static List<Timeslot> timeslotList;
  
      public static List<Room> roomList;
  
      public static List<Lesson> lessonList;
  
      public static TimeTable timeTable;
  
      public void generateDemoData(@Observes StartupEvent startupEvent) {
          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)));
  
          roomList = new ArrayList<>(3);
          roomList.add(new Room("Room A"));
          roomList.add(new Room("Room B"));
          roomList.add(new Room("Room C"));
  
          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"));
  
          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"));
  
          timeTable = new TimeTable(
                  DataGenerator.timeslotList,
                  DataGenerator.roomList,
                  DataGenerator.lessonList);
      }
  
  }
  