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

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

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

import de.ivu.elect.business.gruppe.boundary.PolitischeGruppeDAO;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfigurationPropertyContext;
import de.ivu.elect.business.stimmen.boundary.StimmeLabelMessages;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.gruppe.GruppeSchluesselFormatter;

@Named(StimmeingabePlausiKonfigurationColumnBuilder.COMPONENT_NAME)
public class StimmeingabePlausiKonfigurationColumnBuilder extends AbstractColumnBuilder<StimmeingabePlausiKonfiguration> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "stimmeingabePlausiKonfigurationColumnBuilder";

  @Inject
  private transient WahlSessionSelect wahlSessionSelect;

  @Inject
  private transient PolitischeGruppeDAO politischeGruppeDAO;

  @Inject
  private transient StimmeLabelMessages stimmeLabelMessages;

  @Inject
  private transient GruppeSchluesselFormatter gruppeSchluesselFormatter;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationErgebniseingangsartColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationGebietsartColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationBeschreibungColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationFehlerschluesselColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationFehlermeldungFormatColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationFehlermeldungBeispielColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationCustomDataColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationFehlerartColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationStatusColumn;

  protected AbstractStimmeingabePlausiKonfigurationColumn<StimmeingabePlausiKonfiguration> stimmeingabePlausiKonfigurationStimmeingabePlausiKonfigurationDefaultOverriddenColumn;

  public StimmeingabePlausiKonfigurationColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    StimmeingabePlausiKonfigurationPropertyContext context = new StimmeingabePlausiKonfigurationPropertyContext(wahlSessionSelect.getEntity(), politischeGruppeDAO, gruppeSchluesselFormatter,
        messages);

    stimmeingabePlausiKonfigurationErgebniseingangsartColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationErgebniseingangsartColumn(getMessages());
    stimmeingabePlausiKonfigurationGebietsartColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationGebietsartColumn(getMessages());

    stimmeingabePlausiKonfigurationBeschreibungColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationBeschreibungColumn(getMessages());
    stimmeingabePlausiKonfigurationFehlerschluesselColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationFehlerschluesselColumn(getMessages());
    stimmeingabePlausiKonfigurationFehlermeldungFormatColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationFehlermeldungFormatColumn(getMessages());
    stimmeingabePlausiKonfigurationFehlermeldungBeispielColumn = new StimmeingabePlausiKonfigurationFehlermeldungBeispielColumn(stimmeLabelMessages);

    stimmeingabePlausiKonfigurationCustomDataColumn = new StimmeingabePlausiKonfigurationCustomDataColumn(getMessages(), context);

    stimmeingabePlausiKonfigurationFehlerartColumn = new StimmeingabePlausiKonfigurationFehlerartMitIconColumn(getMessages(), getIcons(),
        AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationFehlerartColumn(getMessages()));

    stimmeingabePlausiKonfigurationStatusColumn = AbstractStimmeingabePlausiKonfigurationColumn.createStimmeingabePlausiKonfigurationStatusColumn(getMessages());

    stimmeingabePlausiKonfigurationStimmeingabePlausiKonfigurationDefaultOverriddenColumn = new StimmeingabePlausiKonfigurationStimmeingabePlausiKonfigurationDefaultOverridden(getMessages());
  }

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

    result.add(stimmeingabePlausiKonfigurationErgebniseingangsartColumn);
    result.add(stimmeingabePlausiKonfigurationGebietsartColumn);

    result.add(stimmeingabePlausiKonfigurationBeschreibungColumn);
    result.add(stimmeingabePlausiKonfigurationFehlerschluesselColumn);
    result.add(stimmeingabePlausiKonfigurationFehlermeldungBeispielColumn);

    result.add(stimmeingabePlausiKonfigurationCustomDataColumn);

    result.add(stimmeingabePlausiKonfigurationFehlerartColumn);
    result.add(stimmeingabePlausiKonfigurationStatusColumn);

    result.add(stimmeingabePlausiKonfigurationStimmeingabePlausiKonfigurationDefaultOverriddenColumn);

    return result;
  }
}
