
package de.ivu.elect.presentation.ergebnis.exchange;

import java.io.Serializable;
import java.util.Arrays;
import java.util.List;

import javax.annotation.PostConstruct;

import org.apache.deltaspike.core.api.scope.ViewAccessScoped;

import de.ivu.elect.business.ergebnis.boundary.ErgebnisDateiQuelle;
import de.ivu.elect.business.ergebnis.control.AbstractErgebnisImportContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnisart;
import de.ivu.elect.presentation.exchange.AbstractImportBestaetigenView;

@ViewAccessScoped
public abstract class AbstractErgebnisImportBestaetigenView<ImportObject, Context extends AbstractErgebnisImportContext> extends AbstractImportBestaetigenView<ImportObject, Context>
    implements
      Serializable {

  private static final long serialVersionUID = 1L;

  private Context context;

  public AbstractErgebnisImportBestaetigenView() {
    super();
  }

  @PostConstruct
  protected void init() {
    setContext(createDefaultContext());
  }

  @Override
  public Context getContext() {
    if (context == null) {
      context = createDefaultContext();
    }

    return context;
  }

  protected abstract Context createDefaultContext();

  protected void setContext(Context context) {
    this.context = context;
  }

  public void onQuelleChanged() {
    setRefreshRequired(true);
  }

  public ErgebnisDateiQuelle getQuelle() {
    return getContext().getQuelle();
  }

  public void setQuelle(ErgebnisDateiQuelle quelle) {
    getContext().setQuelle(quelle);
  }

  public void onZielChanged() {
    setRefreshRequired(true);
  }

  public Ergebnisart getZiel() {
    return getContext().getZiel();
  }

  public void setZiel(Ergebnisart ergebnisart) {
    getContext().setZiel(ergebnisart);
  }

  /**
   * @return die Liste der zulässigen Werte für die Ergebnisart/das Ziel
   */
  public List<Ergebnisart> getZielOptions() {
    return Arrays.asList(Ergebnisart.ENDGUELTIG, Ergebnisart.VORPERIODE);
  }

  /**
   * @return die Liste der zulässigen Werte für die Quelle
   */
  public List<ErgebnisDateiQuelle> getQuelleOptions() {
    return Arrays.asList(ErgebnisDateiQuelle.values());
  }
}
