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

import de.ivu.elect.business.gebietsbaum.control.GebietsbaumExchangeContext;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.jee.exchange.Violations;

import javax.ejb.Stateless;
import java.util.Collections;
import java.util.List;
import java.util.Map;

@Stateless
public class GebietAnschriftUndAnsprechpartnerAktualisierer extends AbstractGebietsbaumImportAktualisierer implements GebietsbaumImportAktualisierer {

  public GebietAnschriftUndAnsprechpartnerAktualisierer() {
    super();
  }

  @Override
  public GebietImportAktualisierenArt getAktualisierungsart() {
    return GebietImportAktualisierenArt.ANSCHRIFT_UND_ANPSRECHPARTNER_AKTUALISIEREN;
  }

  @Override
  public void validiere(Violations violations, GebietsbaumExchangeContext context, List<Gebiet> gebieteExternImportiert) {
    for (Gebiet gebietExtern : gebieteExternImportiert) {
      validiereGebietInDbExists(violations, context, gebietExtern, Collections.emptyList());
    }
  }

  @Override
  protected void aktualisiereGebiete(GebietsbaumExchangeContext context, Map<String, List<Gebiet>> gebieteInDbPerNummer, List<Gebiet> gebieteExternImportiert) {
    for (Gebiet gebietExtern : gebieteExternImportiert) {
      filterGebieteByNummerAndGebietsart(gebieteInDbPerNummer, gebietExtern).forEach(gebietInDb -> updateGebietInDb(context, attach(gebietInDb), gebietExtern));
    }
  }

  protected void updateGebietInDb(GebietsbaumExchangeContext context, Gebiet gebietInDb, Gebiet gebietExtern) {
    gebietExtern.getAnschrift().copyEntityAttributesToOtherEntity(gebietInDb.getAnschrift());
    gebietExtern.getAnsprechpartner().copyEntityAttributesToOtherEntity(gebietInDb.getAnsprechpartner());
  }
}
