
package de.ivu.elect.business.wahlrechtspruefung.boundary;

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.wahl.boundary.WahlExtendedDAO;
import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;
import de.ivu.elect.business.wahlrechtspruefung.entity.QPruefkriterium;
import de.ivu.elect.jee.entity.QueryDsl;

public class PruefkriteriumSearch extends AbstractPruefkriteriumSearch {

  @Inject
  private transient WahlExtendedDAO wahlExtendedDAO;

  @Inject
  private transient PruefkriteriumExtendedDAO pruefkriteriumExtendedDAO;

  public PruefkriteriumSearch() {
    super();
  }

  @Override
  protected List<Pruefkriterium> querySearchResult(PruefkriteriumSearchParameters searchParameters) {
    QueryDsl qdsl = pruefkriteriumExtendedDAO.getQueryDsl();

    QPruefkriterium pruefkriteriumTabelle = QPruefkriterium.pruefkriterium;

    qdsl.from(pruefkriteriumTabelle);
    qdsl.eq(pruefkriteriumTabelle.wahl, wahlExtendedDAO.attach(searchParameters.getWahl()));
    if (searchParameters.isTeilDerSofortpruefung()) {
      qdsl.eq(pruefkriteriumTabelle.teilDerSofortpruefung, Boolean.TRUE);
    }

    if (searchParameters.isWahlrechtlichRelevant()) {
      qdsl.eq(pruefkriteriumTabelle.wahlrechtlichRelevant, Boolean.TRUE);
    }

    qdsl.eqIfNotNull(pruefkriteriumTabelle.pruefkriteriumBezug, searchParameters.getPruefkriteriumBezug());
    qdsl.likeIfNotBlank(pruefkriteriumTabelle.kategorie, searchParameters.getKategorie());
    qdsl.likeIfNotBlank(pruefkriteriumTabelle.unterkategorie, searchParameters.getUnterkategorie());
    qdsl.orderBy(pruefkriteriumTabelle.position.asc());

    return qdsl.list(pruefkriteriumTabelle);
  }
}
