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

import java.util.Collection;

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.table.AbstractColumnEntry;

public abstract class AbstractGruppeImGebietWahlvorschlagVorhandenColumn extends AbstractColumnEntry<GruppeImGebiet> {

  private static final long serialVersionUID = 1L;

  private final EntityAufStimmzettelDaten entityAufStimmzettelDaten;

  public AbstractGruppeImGebietWahlvorschlagVorhandenColumn(Messages messages, EntityAufStimmzettelDaten entityAufStimmzettelDaten) {
    super(messages);

    this.entityAufStimmzettelDaten = entityAufStimmzettelDaten;
  }

  @Override
  public ColumnType getType() {
    return ColumnType.BOOLEAN;
  }

  @Override
  public Object getValue(GruppeImGebiet gruppeImGebiet) {
    return getValue(gruppeImGebiet, collectWahlvorschlaegeInWahl(gruppeImGebiet));
  }

  protected abstract boolean getValue(GruppeImGebiet gruppeImGebiet, Collection<Wahlvorschlag> wahlvorschlaegeInWahl);

  protected Collection<Wahlvorschlag> collectWahlvorschlaegeInWahl(GruppeImGebiet gruppeImGebiet) {
    return getEntityAufStimmzettelDaten().collectWahlvorschlaegeInWahl(gruppeImGebiet.getWahl());
  }

  protected EntityAufStimmzettelDaten getEntityAufStimmzettelDaten() {
    return entityAufStimmzettelDaten;
  }
}
