
package de.ivu.elect.business.wahl.boundary;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.ejb.Stateless;
import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietsarteigenschaftDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.business.gebietsbaum.entity.GebietsartTK;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsarteigenschaft;
import de.ivu.elect.business.wahl.control.GebietsarteigenschaftFuerWahlartCreator;
import de.ivu.elect.business.wahl.entity.Wahlart;

@Stateless
@Specializes
public class CommonWahlartEdit extends WahlartEdit {

  @Inject
  private transient GebietsarteigenschaftDAO gebietsarteigenschaftDAO;

  @Inject
  private transient GebietsarteigenschaftFuerWahlartCreator gebietsarteigenschaftFuerWahlartCreator;

  public CommonWahlartEdit() {
    super();
  }

  @Override
  public Set<GebietsartTK> save(Wahlart wahlart, List<Gebietsart> gebietsarten) {
    Set<GebietsartTK> result = gebietsarteigenschaftFuerWahlartCreator.aktualisiereGebietsarteigenschaften(wahlart, new HashSet<>(gebietsarten));
    result.addAll(super.save(wahlart, gebietsarten));

    return result;
  }

  @Override
  public void delete(Wahlart wahlart) {
    for (Gebietsarteigenschaft gebietsarteigenschaft : gebietsarteigenschaftDAO.findByWahlartBeiAufteilung(wahlart)) {
      gebietsarteigenschaft.setWahlartBeiAufteilung(null); // Vor dem Löschen entfernen (bleibt sonst im Cache)...
    }

    super.delete(wahlart);
  }
}
