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

import javax.inject.Inject;

import de.ivu.elect.business.gruppeimgebiet.boundary.GruppeImGebietDAO;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;
import de.ivu.elect.jee.faces.Messages;

public class ReferendumOptionCreate extends AbstractReferendumOptionCreate {

  @Inject
  private transient GruppeImGebietDAO gruppeImGebietDao;

  @Inject
  private transient UniqueReferendumOptionUkValidator uniqueReferendumOptionUkValidator;

  @Inject
  private transient Messages messages;

  @Override
  public void save(ReferendumOption referendumOption) {
    save(referendumOption.getGruppeImGebiet(), referendumOption);
  }

  private void save(GruppeImGebiet referendumVorlageImGebiet, ReferendumOption referendumOption) {
    referendumOption.setGruppeImGebiet(attach(referendumVorlageImGebiet));

    assertUniqueWahlvorschlagUk(referendumOption);

    super.save(referendumOption);
  }

  private void assertUniqueWahlvorschlagUk(ReferendumOption referendumOption) {
    if (!isUniqueWahlvorschlagUk(referendumOption)) {
      throw new NonUniqueWahlvorschlagUkException(referendumOption.getWahlvorschlagUK(), messages);
    }
  }

  private boolean isUniqueWahlvorschlagUk(ReferendumOption referendumOption) {
    return uniqueReferendumOptionUkValidator.isUniqueReferendumOptionUk(referendumOption);
  }

  private GruppeImGebiet attach(GruppeImGebiet referendumVorlageImGebiet) {
    return gruppeImGebietDao.attach(referendumVorlageImGebiet);
  }
}
