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

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.email.entity.EmailVorlage;
import de.ivu.elect.business.email.entity.QEmailVorlage;
import de.ivu.elect.business.wahl.boundary.WahlSessionSelector;
import de.ivu.elect.business.wahl.boundary.WahlterminSessionSelect;
import de.ivu.elect.jee.entity.QueryDsl;

@Stateless
public class EmailVorlageSearch extends AbstractEmailVorlageSearch {

  @Inject
  private transient WahlterminSessionSelect wahlterminSessionSelect;

  @Inject
  private transient WahlSessionSelector wahlSessionSelector;

  public EmailVorlageSearch() {
    super();
  }

  @Override
  protected List<EmailVorlage> querySearchResult(EmailVorlageSearchParameters searchParameters) {
    QueryDsl queryDsl = dao.getQueryDsl();

    QEmailVorlage emailVorlage = QEmailVorlage.emailVorlage;

    queryDsl.from(emailVorlage);

    queryDsl.likeIfNotBlank(emailVorlage.bezeichnung, searchParameters.getBezeichnung());
    queryDsl.eqIfNotNull(emailVorlage.emailLayout, searchParameters.getEmailLayout());
    queryDsl.eqIfNotNull(emailVorlage.wahltermin, wahlterminSessionSelect.getEntity());
    queryDsl.eqIfNotNull(emailVorlage.wahl, wahlSessionSelector.getEntity());

    queryDsl.getQuery().orderBy(emailVorlage.bezeichnung.asc());

    return queryDsl.list(emailVorlage);
  }
}
