
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 AbstractVeranstaltungColumn<Veranstaltung> gebietColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> veranstaltungArtColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> bezeichnungColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> ortColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> raumColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> veranstaltungStatusColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> beginnColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> endeColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> verknuepfteVeranstaltungColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> bemerkungColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> teilnehmerAnzahlColumn;

  private AbstractVeranstaltungColumn<Veranstaltung> schulungArtColumn;

  public VeranstaltungColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    gebietColumn = new VeranstaltungGebietColumn(getMessages());

    veranstaltungArtColumn = AbstractVeranstaltungColumn.createVeranstaltungVeranstaltungArtColumn(getMessages());
    schulungArtColumn = AbstractVeranstaltungColumn.createVeranstaltungSchulungArtColumn(getMessages());

    bezeichnungColumn = AbstractVeranstaltungColumn.createVeranstaltungBezeichnungColumn(getMessages());
    ortColumn = AbstractVeranstaltungColumn.createVeranstaltungVeranstaltungOrtColumn(getMessages());
    raumColumn = AbstractVeranstaltungColumn.createVeranstaltungRaumBezeichnungColumn(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);

    // ELECTKOM-1960
    result.add(bezeichnungColumn);
    result.add(ortColumn);
    result.add(raumColumn);

    result.add(veranstaltungStatusColumn);

    result.add(teilnehmerAnzahlColumn);

    result.add(beginnColumn);
    result.add(endeColumn);

    result.add(verknuepfteVeranstaltungColumn);

    result.add(bemerkungColumn);

    return result;
  }
}
