
package de.ivu.elect.business.stimmeingabe.boundary.bundestagswahl;

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.stimmeingabe.boundary.AbstractStimmeingabeErfassenModelBuilder;
import de.ivu.elect.business.stimmeingabe.boundary.DefaultStimmeingabeKopfzahlModelBuilder;
import de.ivu.elect.business.stimmeingabe.boundary.StimmeingabeGruppeStimmenErfassenModelBuilder;
import de.ivu.elect.business.stimmeingabe.boundary.StimmeingabeGruppeStimmenErfassenModelContext;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeErfassenContext;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeGruppeStimmen;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeGruppeStimmenErfassenModel;
import de.ivu.elect.business.wahl.entity.CommonWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;

public class BtwStimmeingabeErfassenModelBuilder extends AbstractStimmeingabeErfassenModelBuilder implements StimmeingabeGruppeStimmenErfassenModelBuilder {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient DefaultStimmeingabeKopfzahlModelBuilder stimmeingabeKopfzahlModelBuilder;

  @Inject
  private transient BtwStimmeingabeGruppeStimmenModelBuilder stimmeingabeGruppeStimmenModelBuilder;

  public BtwStimmeingabeErfassenModelBuilder() {
    super();
  }

  @Override
  public boolean isApplicable(Wahl wahl) {
    return CommonWahlart.BUNDESTAGSWAHL.equalsWahlart(wahl);
  }

  @Override
  protected DefaultStimmeingabeKopfzahlModelBuilder getStimmeingabeKopfzahlModelBuilder() {
    return stimmeingabeKopfzahlModelBuilder;
  }

  protected BtwStimmeingabeGruppeStimmenModelBuilder getStimmeingabeGruppeStimmenModelBuilder() {
    return stimmeingabeGruppeStimmenModelBuilder;
  }

  @Override
  public StimmeingabeGruppeStimmenErfassenModel createGruppeStimmenErfassenModel(StimmeingabeErfassenContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().createModelStimmeingabeGruppeStimmen(context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenSystemGruppeStimmen(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabeSystemGruppeStimmen(model, context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenGruppeStimmen(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabePolitischeGruppeStimmen(model, context);
  }

  @Override
  public List<StimmeingabeGruppeStimmen> layoutStimmeingabenSystemGruppeStimmenBottom(StimmeingabeGruppeStimmenErfassenModel model, StimmeingabeGruppeStimmenErfassenModelContext context) {
    return getStimmeingabeGruppeStimmenModelBuilder().layoutModelStimmeingabeSystemGruppeStimmenBottom(model, context);
  }
}
