
package de.ivu.elect.presentation.dokumente;

import static java.util.stream.Collectors.toList;

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

import javax.inject.Inject;

import de.ivu.elect.business.dokumente.control.DokumentKonverter;
import de.ivu.elect.business.dokumente.control.DokumentKonverterLookup;
import de.ivu.elect.business.dokumente.entity.DokumentVorlageArt;
import de.ivu.elect.jee.faces.EnumByLokalisierungComparator;
import de.ivu.elect.jee.faces.Messages;

public class DokumentVorlageAuswahl implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient Messages messages;

  @Inject
  private transient DokumentKonverterLookup dokumentKonverterLookup;

  @Inject
  private transient DokumentVorlageArtFilter dokumentVorlageArtFilter;

  private transient List<DokumentVorlageArt> dokumentVorlageArten;

  public DokumentVorlageAuswahl() {
    super();
  }

  public List<DokumentVorlageArt> getDokumentVorlageArten() {
    if (dokumentVorlageArten == null) {
      dokumentVorlageArten = collectDokumentVorlageArten();
    }

    return dokumentVorlageArten;
  }

  private List<DokumentVorlageArt> collectDokumentVorlageArten() {
    return dokumentVorlageArtFilter.filter(dokumentKonverterLookup.getAlleDokumentKonverter().stream() //
        .map(DokumentKonverter::getDokumentVorlageArt) //
        .sorted(new EnumByLokalisierungComparator<>(messages)) //
        .collect(toList()));
  }
}
