/**
   * Receives notification that report generation has completed, the report footer was printed, no
   * more output is done. This is a helper event to shut down the output service.
   *
   * @param event The event.
   */
  public void reportDone(final ReportEvent event) {
    if (event.isDeepTraversing()) {
      return;
    }

    if (FunctionUtilities.isDefinedPrepareRunLevel(this, event)) {
      final Iterator iterator = dataStorage.entrySet().iterator();
      while (iterator.hasNext()) {
        final Map.Entry entry = (Map.Entry) iterator.next();
        final String key = (String) entry.getKey();
        final IndexDataHolder data = (IndexDataHolder) entry.getValue();
        model.addRow(
            new Object[] {
              data.getData(),
              data.getPagesText(indexSeparator, condensedStyle),
              data.getPages(),
              key
            });
      }
    } else if (FunctionUtilities.isLayoutLevel(event)) {
      final int rowCount = model.getRowCount();
      for (int i = 0; i < rowCount; i++) {
        final String key = (String) model.getValueAt(i, 3);
        final IndexDataHolder dataHolder = dataStorage.get(key);
        model.setValueAt(dataHolder.getPagesText(indexSeparator, condensedStyle), i, 1);
        model.setValueAt(dataHolder.getPages(), i, 2);
      }
    }
  }