
package de.ivu.elect.presentation.wahl.dokumente;

import static java.util.Collections.singletonList;

import java.util.List;

import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.presentation.hilfe.OnlineHilfeId;
import org.apache.deltaspike.core.api.scope.ViewAccessScoped;

import de.ivu.elect.business.dokumente.boundary.AbstractDokumentGenerator;
import de.ivu.elect.business.security.UseCasePermission;
import de.ivu.elect.business.wahl.boundary.WahlterminDokumentGenerator;
import de.ivu.elect.business.wahl.control.WahlterminDokumentContext;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.presentation.View;
import de.ivu.elect.presentation.dokumente.AbstractDokumentErzeugenView;
import de.ivu.elect.presentation.dokumente.ElectDokumentContextGenerator;

@ViewAccessScoped
@OnlineHilfeId("791")
@Named(WahlterminDokumentErzeugenView.COMPONENT_NAME)
@View(viewId = WahlterminDokumentErzeugenView.VIEW_ID, useCase = UseCasePermission.WAHLTERMIN_DOKUMENT_ERZEUGEN)
public class WahlterminDokumentErzeugenView extends AbstractDokumentErzeugenView<Wahltermin, WahlterminDokumentContext> {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlterminDokumentErzeugenView";

  public static final String VIEW_ID = "/wahl/wahltermin-dokument-erzeugen-view.xhtml";

  @Inject
  private transient ElectDokumentContextGenerator electDokumentContextGenerator;

  @Inject
  private transient WahlterminDokumentGenerator dokumentGenerator;

  public WahlterminDokumentErzeugenView() {
    super();
  }

  @Override
  public String getViewId() {
    return VIEW_ID;
  }

  @Override
  protected List<Wahltermin> getEntities() {
    return singletonList(getSelectedWahltermin());
  }

  @Override
  protected WahlterminDokumentContext getContext() {
    return new WahlterminDokumentContext(electDokumentContextGenerator.createElectDokumentContext());
  }

  @Override
  protected AbstractDokumentGenerator<Wahltermin, WahlterminDokumentContext> getDokumentGenerator() {
    return dokumentGenerator;
  }

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

}
