
package de.ivu.elect.presentation.gebietsbaum.form;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.NoResultException;

import de.ivu.elect.business.gebietsbaum.boundary.GebietExtendedDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.GebietPK;
import de.ivu.elect.jee.faces.AbstractEntityFacesValidator;

@RequestScoped
public class GebietUniqueUKFacesValidator
    extends
    AbstractEntityFacesValidator<GebietPK> {

  private static final long serialVersionUID = 1L;

  @Inject
  GebietExtendedDAO dao;

  @Override
  protected boolean isValid(GebietPK gebietPK, Object o) {
    return isValid((Gebiet) o);

  }

  public boolean isValid(Gebiet o) {
    Gebiet gebiet = o;

    try {
      Gebiet inDB;
      if (gebiet.getWahl() == null) {
        inDB = dao.findByWahlterminAndNummerAndGebietsart(gebiet.getWahltermin(), gebiet.getNummer(), gebiet.getGebietsart());
      } else {
        inDB = dao.findByWahlAndNummerAndGebietsart(gebiet.getWahl(), gebiet.getNummer(), gebiet.getGebietsart());
      }

      if (inDB == null) {
        return true;
      }
      if (gebiet.isPersistent()) {
        return inDB.getId().equals(gebiet.getId());
      }
      return false;
    } catch (NoResultException e) {
      return true;
    }
  }
}
