Code Convention

We will use the conventions from sun. The default ones in NetBeans I guess: simply press ALT+SHIFT+F.

Exception Handling

Please only use the following exception and try to avoid implementing your own:
  • IllegalArgumentException
  • UnsupportedOperationException
  • NullPointerException
  • NoSuchElementException
  • IllegalStateException
Here you can find an explanation of this strategy.

Requirements

Definition

  • all objects should have ids
  • all terms with a capital letter at the beginning have equivalent Java classes.
  • Event: has a starting and an ending time (so it has a duration). It has a reference to a collection of Events or EventGroups
  • EventGroup: a collection of Events (like class)
  • Resource: an object that is required or should be available for Events or EventGroups. (like Person or Room)
  • Person: has a name (like student and teacher)
  • Location: has a capacity
  • Role: every person has a specific exercise in an EventGroup (like teacher or student)
  • timeslot: some milliseconds

Configuration

  • a class should have a reference to every single student or should contain the number of students
  • Number of students in each grade
  • number of teacher
  • number of periods per day
  • number of days per week
  • define the timeslot unit (how many milliseconds are one timeslot)
provide a dialog with these variables and allow later changes

Operations

The following operations should be possible within the GUI for events and for resources:
  • create, read, update ('edit') and delete. Sometimes people say 'CRUD' to it. Look into the source where I have implemented this via DataAccess objects. So that we can start even without the database hassle.
  • add or remove resources to events
  • add or remove events to resources

Algorithm

provide at least one automatic timetabling algorithm (either from gstpl, drools or unitime)
  • Fully automatic timetable scheduler needs no manual intervention. It allots timetable as per the norms given.
  • Semi automatic timetable scheduler is needed, since all schools are not following ideal timetabling practice.

Details
  • Some persons should get higher priority with assigning then others (e.g. teacher 'over' students).
  • Allowing the definition of different evaluation for the timeslots in a week for every persons. E.g. a teacher won't be available once in a week. So, the assigned timeslots of his events shouldn't clash with this unavailable timeslots.
  • A form, to get details about possible resources that can be controlled manually, is needed.
  • A resource alarm to let the user know about number of staff and class needed for the given student strength and current availability in the school.

Planner

  • A graphical planner to display the timetable of the EventGroups (classes) and an individual person (e.g. staff or students). This planner should display the current timetable and the calculated one. So that the timetabler could choose the right.
  • Storing the timetable. (database or xml file)
  • Printing the timetable.
Details
  1. Implement a 'grid'. Use Visual Library from NetBeans
  2. The resources will be on y axis and the days will be on x axis. The hours of a day can be either on x axis OR on y axis. The switch should be easy. (Button or sth. else)
  3. The planner should be a separate library, so that it can be used from any other program as a library. The only dependency should be on the de.timefinder.core.data.* classes.
  4. It should be easy to go to the next/previous day, week or year. (Button or sth. else)
  5. Different modes should be possible:
    1. view
    2. edit
    3. print (shrink size to a minimum, only important stuff!)
    4. export to pdf
    5. export to html.
  6. Events with small duration should be handled (they will be very small!).
  7. Drag and drop to change starttime and duration in edit mode.
  8. Selection of one event will color all events in the group grey
  9. Handle overlapping events. So it is possible to circulate with Page Up/Down over the overlapping to see all events under the selected one, i.e. put the next available event on the top. Introduce a z axis for every event?
  10. The resource list on the x axis should be filterable (or sortable) against the resource type: person, room etc.
  11. Searchable planner against event names and properties

The result should like the calendar of the zimbra suite, which is not for the desktop. Maybe the calendar demo of Openlaszlo is even better: http://www.openlaszlo.org/demos