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

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

import javax.inject.Named;

import de.ivu.elect.business.veranstaltung.entity.Veranstaltung;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;

@Named(VeranstaltungColumnBuilder.COMPONENT_NAME)
public class VeranstaltungColumnBuilder extends AbstractColumnBuilder<Veranstaltung> {

  public static final String COMPONENT_NAME = "veranstaltungColumnBuilder";

  private static final long serialVersionUID = 1L;

  private VeranstaltungGebietColumn gebietColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> veranstaltungArtColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> bezeichnungColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> veranstaltungStatusColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> beginnColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> endeColumn;

  private VeranstaltungVerknuepfteVeranstaltungColumn verknuepfteVeranstaltungColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> bemerkungColumn;

  private VeranstaltungTeilnehmerAnzahlColumn teilnehmerAnzahlColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> schulungArtColumn;

  @Override
  protected void initColumns() {
    gebietColumn = new VeranstaltungGebietColumn(getMessages());
    veranstaltungArtColumn = AbstractVeranstaltungColumn.createVeranstaltungVeranstaltungArtColumn(getMessages());
    schulungArtColumn = AbstractVeranstaltungColumn.createVeranstaltungSchulungArtColumn(getMessages());
    bezeichnungColumn = AbstractVeranstaltungColumn.createVeranstaltungBezeichnungColumn(getMessages());
    veranstaltungStatusColumn = AbstractVeranstaltungColumn.createVeranstaltungVeranstaltungStatusColumn(getMessages());
    beginnColumn = AbstractVeranstaltungColumn.createVeranstaltungBeginnColumn(getMessages());
    endeColumn = AbstractVeranstaltungColumn.createVeranstaltungEndeColumn(getMessages());
    verknuepfteVeranstaltungColumn = new VeranstaltungVerknuepfteVeranstaltungColumn(getMessages());
    bemerkungColumn = AbstractVeranstaltungColumn.createVeranstaltungBemerkungColumn(getMessages());
    teilnehmerAnzahlColumn = new VeranstaltungTeilnehmerAnzahlColumn(getMessages(), getUserLocale(), getIcons());
  }

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

    result.add(gebietColumn);
    result.add(veranstaltungArtColumn);
    result.add(schulungArtColumn);
    result.add(bezeichnungColumn);
    result.add(veranstaltungStatusColumn);
    result.add(teilnehmerAnzahlColumn);
    result.add(beginnColumn);
    result.add(endeColumn);
    result.add(verknuepfteVeranstaltungColumn);
    result.add(bemerkungColumn);

    return result;
  }
}
