blob: 148a55bfb86429f8190a19eb5e063230f0caaf15 [file] [log] [blame]
/*
* 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);
}
}