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

import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

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

import de.ivu.elect.business.geodata.control.GeodataPlzCreate;
import de.ivu.elect.business.geodata.entity.GeodataOrt;
import de.ivu.elect.business.geodata.entity.GeodataPlz;

@Stateless
public class GeodataOrtEdit extends AbstractGeodataOrtEdit {

  @Inject
  private transient GeodataPlzCreate geodataPlzCreate;

  public GeodataOrtEdit() {
    super();
  }

  @Override
  public void save(GeodataOrt geodataOrt) {
    Set<GeodataPlz> geodataPlzTemplates = new HashSet<>(geodataOrt.getGeodataPostleitzahlen());

    // NOTE, dass save (inkl. flush) ohne Verknüpfungen erfolgt, weil nicht alle verknüpften GeodataPlz schon persistent sein müssen.
    geodataOrt.removeGeodataPostleitzahlen();
    super.save(geodataOrt);

    geodataOrt = attach(geodataOrt);
    geodataOrt.addGeodataPostleitzahlen(attachAll(geodataPlzTemplates));
  }

  private GeodataOrt attach(GeodataOrt geodataOrt) {
    return dao.attach(geodataOrt);
  }

  private Collection<GeodataPlz> attachAll(Collection<GeodataPlz> geodataPlzTemplates) {
    return geodataPlzCreate.attachAll(geodataPlzTemplates);
  }
}
