
package de.ivu.elect.presentation.benutzerverwaltung.table;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.benutzerverwaltung.boundary.BenutzerExtendedDAO;
import de.ivu.elect.business.benutzerverwaltung.entity.Nachricht;
import de.ivu.elect.business.benutzerverwaltung.entity.NachrichtMeta;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.person.PersonendatenFormatter;

@Named(NachrichtColumnBuilder.COMPONENT_NAME)
public class NachrichtColumnBuilder extends AbstractColumnBuilder<Nachricht> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "nachrichtColumnBuilder";

  @Inject
  private BenutzerExtendedDAO benutzerDao;

  @Inject
  private NachrichtMeta nachrichtMeta;

  @Inject
  private PersonendatenFormatter personendatenFormatter;

  private AbstractNachrichtColumn<Nachricht> nachrichtZeitpunktColumn;

  private NachrichtSenderColumn<Nachricht> nachrichtSenderColumn;

  private NachrichtEmpfaengerGruppeArtColumn<Nachricht> nachrichtEmpfaengerGruppeArtColumn;

  private NachrichtEmpfaengerRolleColumn<Nachricht> nachrichtEmpfaengerRolleColumn;

  private NachrichtTextColumn<Nachricht> nachrichtTextColumn;

  public NachrichtColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    nachrichtZeitpunktColumn = AbstractNachrichtColumn.createNachrichtZeitpunktColumn(getMessages());
    nachrichtSenderColumn = new NachrichtSenderColumn<>(getMessages(), nachrichtMeta, benutzerDao, personendatenFormatter);
    nachrichtEmpfaengerGruppeArtColumn = new NachrichtEmpfaengerGruppeArtColumn<>(getMessages(), nachrichtMeta);
    nachrichtEmpfaengerRolleColumn = new NachrichtEmpfaengerRolleColumn<>(getMessages(), nachrichtMeta);
    nachrichtTextColumn = new NachrichtTextColumn<>(getMessages(), nachrichtMeta);
  }

  @Override
  protected List<ColumnEntry< ? super Nachricht>> getColumnEntriesSorted() {
    List<ColumnEntry< ? super Nachricht>> result = new ArrayList<>();

    result.add(nachrichtZeitpunktColumn);
    result.add(nachrichtTextColumn);

    result.add(nachrichtSenderColumn);

    result.add(nachrichtEmpfaengerGruppeArtColumn);
    result.add(nachrichtEmpfaengerRolleColumn);

    return result;
  }
}
