
package de.ivu.elect.exchange.gebietsbaum.csv;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietDAO;
import de.ivu.elect.business.gebietsbaum.boundary.GebietFactory;
import de.ivu.elect.business.gebietsbaum.boundary.GebietImportAktualisierenArt;
import de.ivu.elect.business.gebietsbaum.control.EntityMitWurzelgebietDAO;
import de.ivu.elect.business.gebietsbaum.control.GebietsbaumExchangeContext;
import de.ivu.elect.business.wahl.boundary.WahlFactory;
import de.ivu.elect.exchange.gebietsbaum.GebietsbaumImportMapper;

public abstract class AbstractGebietsbaumImportMapper implements GebietsbaumImportMapper {

  @Inject
  protected transient WahlFactory wahlFactory;

  @Inject
  protected transient GebietFactory gebietFactory;

  @Inject
  protected transient GebietDAO gebietDAO;

  public AbstractGebietsbaumImportMapper() {
    super();
  }

  @Override
  public boolean isAcceptContext(GebietsbaumExchangeContext context) {
    if (context.hasWahl()) {
      if (context.getWahl().isWurzelgebietVorhanden(EntityMitWurzelgebietDAO.fromDao(gebietDAO))) {
        return isAcceptContextWurzelgebietVorhanden(context);
      }

      return isAcceptContextWurzelgebietNichtVorhanden(context);
    }

    if (context.hasWahltermin()) {
      if (context.getWahltermin().isWurzelgebietVorhanden(EntityMitWurzelgebietDAO.fromDao(gebietDAO))) {
        return isAcceptContextWurzelgebietVorhanden(context);
      }

      return isAcceptContextWurzelgebietNichtVorhanden(context);
    }

    return false;
  }

  protected boolean isAcceptContextWurzelgebietVorhanden(GebietsbaumExchangeContext context) {
    return false;
  }

  protected abstract boolean isAcceptContextWurzelgebietNichtVorhanden(GebietsbaumExchangeContext context);

  @Override
  public GebietImportAktualisierenArt getGebietImportAktualisierenArt() {
    return GebietImportAktualisierenArt.NICHTS_AKTUALISIEREN;
  }
}
