
package de.ivu.elect.presentation.wahlvorschlag;

import java.io.Serializable;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;

import de.ivu.elect.business.wahl.boundary.WahlSessionSelect;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahlvorschlag.boundary.WahlvorschlagExtendedDAO;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

/**
 *  on 10.06.2015.
 */
@Named(WahlvorschlagRequestCache.COMPONENT_NAME)
@RequestScoped
public class WahlvorschlagRequestCache implements Serializable {

  private static final long serialVersionUID = 1L;

  public static final String COMPONENT_NAME = "wahlvorschlagRequestCache";

  @Inject
  private WahlvorschlagExtendedDAO wahlvorschlagExtendedDAO;

  @Inject
  private WahlSessionSelect wahlSessionSelect;

  private Map<Wahl, List<Wahlvorschlag>> cache = new HashMap<>();

  public WahlvorschlagRequestCache() {
    super();
  }

  public List<Wahlvorschlag> getAlleWahlvorschlaege() {
    return getAlleWahlvorschlaege(wahlSessionSelect.getEntity());
  }

  public List<Wahlvorschlag> getAlleWahlvorschlaege(Wahl wahl) {
    if (wahl == null) {
      return Collections.emptyList();
    }
    return cache.computeIfAbsent(wahl, wahlvorschlagExtendedDAO::findByWahl);
  }

}
