/**
   * Méthode en charge de construire la liste des items pour un thème du modèle. Il s'agit de
   * construire un item par catégorie et par thème/catégorie.
   *
   * @param grille La grille.
   * @param theme Le thème.
   * @return La liste des items correspondants aux catégories.
   */
  private Collection<Item> buildItems(final Grille grille, final Theme theme) {
    final SortedSet<Item> items = new TreeSet<Item>(new ItemComparator());

    // Gestion des thèmes qui sont aussi des catégories
    if (BooleanUtils.isTrue(theme.isCategorie())) {
      items.add(this.buildItem(grille, theme, null));
    }

    // gestion des catégories.
    for (final Categorie categorie : theme.getCategories()) {
      items.add(this.buildItem(grille, theme, categorie));
    }
    return items;
  }
  /**
   * Méthode en charge de constuire un item à partir d'un thème, d'une grille et d'une catégorie.
   *
   * @param theme Le thème
   * @param grille La grille
   * @param La catégorie
   * @return L'item.
   */
  private Item buildItem(final Grille grille, final Theme theme, final Categorie categorie) {
    final Item item = this.itemFactory.getInitializedObject();
    item.setTheme(theme.getNom());
    item.setGrille(grille);
    if (categorie != null) {
      item.setCategorie(categorie.getLibelle());
      item.setActe(categorie.getActe());
      item.getRegles().addAll(categorie.getRegles());
      for (final Regle regle : item.getRegles()) {
        regle.getItems().add(item);
      }

    }
    // Cas d'un thème qui est aussi une catégorie.
    else if (theme.isCategorie()) {
      item.getRegles().addAll(theme.getRegles());
      for (final Regle regle : item.getRegles()) {
        regle.getItems().add(item);
      }
    }
    return item;
  }