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

import java.io.Serializable;
import java.text.DateFormat;

import javax.inject.Inject;

import de.ivu.elect.business.wahl.boundary.AbstractWahlterminDAO;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.wahl.entity.WahlterminUniqueUKValidator;
import de.ivu.elect.jee.exception.ElectCommonException;

public class WahlterminValidator implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient WahlterminNummerRelevant wahlterminNummerRelevant;

  @Inject
  private transient WahlterminUniqueUKValidator wahlterminUniqueUKValidator;

  public WahlterminValidator() {
    super();
  }

  public void validate(Wahltermin wahltermin, AbstractWahlterminDAO dao) {
    if (!wahlterminUniqueUKValidator.isValid(wahltermin, dao)) {
      throw new ElectCommonException(getWahlterminNonUniqueMessageKey(),
          DateFormat.getDateInstance().format(wahltermin.getWahldatum()), wahltermin.getNummer());
    }
  }

  private String getWahlterminNonUniqueMessageKey() {
    if (wahlterminNummerRelevant.isNummerRelevant()) {
      return "wahltermin.create.no.unique.wahlddatum.und.nummer.exception";
    }

    // NOTE, dass die Wahltermin-Nummer mitunter gar nicht an der Oberfläche auftaucht!
    return "wahltermin.create.no.unique.wahlddatum.exception";
  }

}
