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

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

import javax.inject.Inject;

import de.ivu.elect.business.staat.boundary.StaatDAO;
import de.ivu.elect.business.staat.entity.Staat;
import de.ivu.elect.business.staat.entity.StaatenGruppe;
import de.ivu.elect.business.wahl.boundary.WahlDAO;
import de.ivu.elect.business.wahl.boundary.WahlterminDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;

public class StaatenGruppeCreate extends AbstractStaatenGruppeCreate {

  @Inject
  private WahlterminDAO wahlterminDao;

  @Inject
  private WahlDAO wahlDao;

  @Inject
  private StaatDAO staatDao;

  public StaatenGruppeCreate() {
    super();
  }

  @Override
  public void save(StaatenGruppe staatenGruppe) {
    staatenGruppe.setWahltermin(attach(staatenGruppe.getWahltermin()));
    staatenGruppe.setWahl(attach(staatenGruppe.getWahl()));

    List<Staat> staatenZugeordnet = new ArrayList<>(staatenGruppe.getStaats());

    staatenGruppe.removeAllStaats();

    for (Staat staat : staatenZugeordnet) {
      staatenGruppe.addStaat(attach(staat));
    }

    super.save(staatenGruppe);
  }

  private Wahltermin attach(Wahltermin wahltermin) {
    return wahlterminDao.attach(wahltermin);
  }

  private Wahl attach(Wahl wahl) {
    return wahlDao.attach(wahl);
  }

  private Staat attach(Staat staat) {
    return staatDao.attach(staat);
  }
}
