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

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.wahl.boundary.WahlExtendedDAO;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wertelisten.control.WertelistenByWertelistenArtAndNameComparator;
import de.ivu.elect.business.wertelisten.entity.QWertelisten;
import de.ivu.elect.business.wertelisten.entity.Wertelisten;
import de.ivu.elect.jee.entity.QueryDsl;

public class WertelistenSearch extends AbstractWertelistenSearch {

  private static final Comparator<Wertelisten> DEFAULT_COMPARATOR = new WertelistenByWertelistenArtAndNameComparator();

  @Inject
  private transient WahlExtendedDAO wahlDao;

  public WertelistenSearch() {
    super();
  }

  @Override
  protected List<Wertelisten> querySearchResult(WertelistenSearchParameters searchParameters) {
    QWertelisten wertelisten = QWertelisten.wertelisten;

    QueryDsl queryDsl = dao.getQueryDsl();
    queryDsl.from(wertelisten);

    queryDsl.eq(wertelisten.wahl, attach(searchParameters.getWahl()));
    queryDsl.eqIfNotNull(wertelisten.wertelistenArt, searchParameters.getWertelistenArt());
    queryDsl.likeIfNotBlank(wertelisten.name, searchParameters.getName());

    List<Wertelisten> result = queryDsl.list(wertelisten);
    Collections.sort(result, getDefaultComparator());

    return result;
  }

  private Wahl attach(Wahl wahl) {
    return wahlDao.attach(wahl);
  }

  protected Comparator<Wertelisten> getDefaultComparator() {
    return DEFAULT_COMPARATOR;
  }
}
