/**
   * Updates an calendar.
   *
   * @throws Exception
   */
  public void updateCalendar(
      Long id,
      String name,
      String description,
      String[] roles,
      String[] groups,
      Long eventTypeId,
      Session session)
      throws Exception {
    Calendar calendar = getCalendar(id, session);
    EventType eventType = EventTypeController.getController().getEventType(eventTypeId, session);

    updateCalendar(calendar, name, description, roles, groups, eventType, session);
  }
  /** This method is used to create a new Calendar object in the database inside a transaction. */
  public Calendar createCalendar(
      String name,
      String description,
      String[] roles,
      String[] groups,
      Long eventTypeId,
      Session session)
      throws HibernateException, Exception {
    EventType eventType = EventTypeController.getController().getEventType(eventTypeId, session);

    Calendar calendar = new Calendar();
    calendar.setName(name);
    calendar.setDescription(description);

    calendar.setEventType(eventType);
    session.save(calendar);

    for (int i = 0; i < roles.length; i++) {
      Role role = new Role();
      String roleName = roles[i];
      role.setName(roleName);
      role.setCalendar(calendar);
      session.save(role);
      calendar.getOwningRoles().add(role);
    }

    for (int i = 0; i < groups.length; i++) {
      Group group = new Group();
      String groupName = groups[i];
      group.setName(groupName);
      group.setCalendar(calendar);
      session.save(group);
      calendar.getOwningGroups().add(group);
    }

    return calendar;
  }