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

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

import de.ivu.elect.jee.presentation.dynamictable.AbstractColumnBuilder;
import de.ivu.elect.jee.presentation.dynamictable.ColumnEntry;
import de.ivu.elect.presentation.personenregister.AbstractEntityMitPersonendatenSearchResultEntry;

public abstract class AbstractEntityMitPersonendatenSearchResultEntryColumnBuilder<E extends AbstractEntityMitPersonendatenSearchResultEntry> extends AbstractColumnBuilder<E> {

  private static final long serialVersionUID = 1L;

  protected AbstractEntityMitPersonendatenSearchResultEntryPersonendatenColumn<E> familiennameColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryPersonendatenColumn<E> rufnameColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryPersonendatenColumn<E> vornamenColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryPersonendatenColumn<E> geschlechtColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryPersonendatenColumn<E> geburtsdatumColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryAnschriftdatenColumn<E> anschriftFormattedColumn;

  protected AbstractEntityMitPersonendatenSearchResultEntryAnschriftdatenColumn<E> anschriftOrtColumn;

  public AbstractEntityMitPersonendatenSearchResultEntryColumnBuilder() {
    super();
  }

  @Override
  protected void initColumns() {
    familiennameColumn = new EntityMitPersonendatenSearchResultEntryFamiliennameColumn<>(getMessages());
    rufnameColumn = new EntityMitPersonendatenSearchResultEntryRufnameColumn<>(getMessages());
    vornamenColumn = new EntityMitPersonendatenSearchResultEntryVornamenColumn<>(getMessages());

    geschlechtColumn = new EntityMitPersonendatenSearchResultEntryGeschlechtColumn<>(getMessages());
    geburtsdatumColumn = new EntityMitPersonendatenSearchResultEntryGeburtsdatumColumn<>(getMessages());

    anschriftFormattedColumn = new EntityMitPersonendatenSearchResultEntryAnschriftFormattedColumn<>(getMessages());
    anschriftOrtColumn = new EntityMitPersonendatenSearchResultEntryAnschriftOrtColumn<>(getMessages());
  }

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

    addAllPersonendatenColumnEntriesSorted(result);
    addAllAnschriftdatenColumnEntriesSorted(result);

    return result;
  }

  protected void addAllPersonendatenColumnEntriesSorted(List<ColumnEntry< ? super E>> result) {
    result.add(familiennameColumn);
    result.add(rufnameColumn);
    result.add(vornamenColumn);

    result.add(geburtsdatumColumn);
    result.add(geschlechtColumn);
  }

  protected void addAllAnschriftdatenColumnEntriesSorted(List<ColumnEntry< ? super E>> result) {
    result.add(anschriftFormattedColumn);
    result.add(anschriftOrtColumn);
  }
}
