
package de.ivu.elect.presentation.wahlrechtspruefung.action;

import javax.annotation.Nonnull;
import javax.inject.Inject;

import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahlrechtspruefung.boundary.WahlrechtspruefungEdit;
import de.ivu.elect.business.wahlrechtspruefung.boundary.WahlrechtspruefungExtendedDAO;
import de.ivu.elect.business.wahlrechtspruefung.entity.WahlrechtspruefStatus;
import de.ivu.elect.business.wahlrechtspruefung.entity.Wahlrechtspruefung;
import de.ivu.elect.presentation.security.AbstractGebietSecurity;

public abstract class AbstractWahlrechtspruefungSetzePruefungAction extends AbstractWahlrechtspruefungAction {

  private static final long serialVersionUID = 1L;


  @Inject
  private transient WahlrechtspruefungEdit wahlrechtspruefungEdit;


  @Inject
  private transient WahlrechtspruefungUpdateSearchTable wahlrechtspruefungUpdateSearchTable;

  @Inject
  protected transient WahlrechtspruefungExtendedDAO wahlrechtspruefungExtendedDAO;



  public AbstractWahlrechtspruefungSetzePruefungAction() {
    super();
  }

  @Override
  protected UseCasePermission getRequiredPermission() {
    return UseCasePermission.WAHLRECHTSPRUEFUNG_EDIT;
  }

  @Override
  protected AbstractGebietSecurity getGebietSecurity() {
    return getBearbeitenGebietSecurity();
  }

  @Override
  public boolean isDisabledInternal(@Nonnull Wahlrechtspruefung wahlrechtspruefung) {
    return getWahlrechtspruefStatus().equals(wahlrechtspruefung.getWahlrechtspruefStatus());
  }

  @Override
  protected String doIt(Wahlrechtspruefung wahlrechtspruefung) {
    return doItInternal(wahlrechtspruefungExtendedDAO.attach(wahlrechtspruefung));

  }
  public WahlrechtspruefungEdit getWahlrechtspruefungEdit() {
    return wahlrechtspruefungEdit;
  }
  public WahlrechtspruefungUpdateSearchTable getWahlrechtspruefungUpdateSearchTable() {
    return wahlrechtspruefungUpdateSearchTable;
  }


  protected String doItInternal(Wahlrechtspruefung wahlrechtspruefung) {
    getWahlrechtspruefungEdit().setzeWahlrechtspruefungStatus(wahlrechtspruefung, getWahlrechtspruefStatus());
    getWahlrechtspruefungUpdateSearchTable().updateSearchTable(wahlrechtspruefung);

    return null;
  }

  @Override
  public String getLabelKey() {
    return WahlrechtspruefStatus.class.getSimpleName() + "." + getWahlrechtspruefStatus() + ".action";
  }

  @Override
  public String getIcon() {
    return getWahlrechtspruefStatus().getIcon(appIcons);
  }

  protected abstract WahlrechtspruefStatus getWahlrechtspruefStatus();

}
