/* * Copyright 2011 Google Inc. * * Licensed 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 com.google.gwt.sample.dynatablerf.server; import com.google.gwt.sample.dynatablerf.domain.Schedule; import com.google.gwt.sample.dynatablerf.domain.TimeSlot; import java.util.ArrayList; import java.util.Random; import java.util.TreeSet; /** * Generates a list of random schedules. To facilitate the UI * TimeSlots are defined in whole hour blocks. */ public class ScheduleFuzzer { private static final int MAX_SCHED_ENTRIES = 5; private static final int MIN_SCHED_ENTRIES = 1; private static final int CLASS_LENGTH_MINS = 50; private static final int NUMBER_OF_SCHEDULES = PersonFuzzer.MAX_PEOPLE; public static Schedule generateRandomSchedule(Random rnd) { int range = MAX_SCHED_ENTRIES - MIN_SCHED_ENTRIES + 1; int howMany = MIN_SCHED_ENTRIES + rnd.nextInt(range); ArrayList<TimeSlot> timeSlots = generateTimeSlots(rnd, howMany); Schedule sched = new Schedule(); for (TimeSlot timeSlot : timeSlots) { sched.addTimeSlot(timeSlot); } return sched; } public static Schedule[] generateSchedules() { Random rnd = new Random(); Schedule[] toReturn = new Schedule[NUMBER_OF_SCHEDULES]; for (int i = 0; i < NUMBER_OF_SCHEDULES; i++) { Schedule sched = generateRandomSchedule(rnd); toReturn[i] = sched; } return toReturn; } private static ArrayList<TimeSlot> generateTimeSlots(Random rnd, int howMany) { TreeSet<TimeSlot> timeSlots = new TreeSet<TimeSlot>(); for (int i = 0; i < howMany; ++i) { int startHrs = 8 + rnd.nextInt(9); // 8 am - 5 pm int dayOfWeek = 1 + rnd.nextInt(5); // Mon - Fri int absStartMins = 60 * startHrs; // convert to minutes int absStopMins = absStartMins + CLASS_LENGTH_MINS; timeSlots.add(new TimeSlot(dayOfWeek, absStartMins, absStopMins)); } return new ArrayList<TimeSlot>(timeSlots); } }