
package de.ivu.elect.business.ergebnis.control;

import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.boundary.ErgebnisDAO;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.ergebnis.entity.Gewaehlt;
import de.ivu.elect.business.kandidatur.boundary.KandidaturDAO;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;

public class GewaehltCreate extends AbstractGewaehltCreate {

  @Inject
  private KandidaturDAO kandidaturDao;

  @Inject
  private ErgebnisDAO ergebnisDao;

  @Inject
  private ErgebnisCreate ergebnisCreate;

  @Override
  public void save(Gewaehlt gewaehlt) {
    save(gewaehlt.getKandidatur(), gewaehlt.getErgebnis(), gewaehlt);
  }

  private void save(Kandidatur kandidatur, Ergebnis ergebnis, Gewaehlt gewaehlt) {
    gewaehlt.setKandidatur(attach(kandidatur));
    gewaehlt.setErgebnis(attachOrCreate(ergebnis));

    super.save(gewaehlt);
  }

  private Kandidatur attach(Kandidatur kandidatur) {
    return kandidaturDao.attach(kandidatur);
  }

  private Ergebnis attachOrCreate(Ergebnis ergebnis) {
    Ergebnis entity = ergebnisDao.attach(ergebnis);

    if (entity == null) {
      ergebnisCreate.save(ergebnis);

      return ergebnis;
    }

    return entity;
  }
}
