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

import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.entity.Gebietsarteigenschaft;
import de.ivu.elect.business.gebietsbaum.entity.QGebietsarteigenschaft;
import de.ivu.elect.business.mandant.boundary.MandantExtendedDAO;
import de.ivu.elect.business.wahl.boundary.WahlartExtendedDAO;
import de.ivu.elect.jee.entity.QueryDsl;

public class GebietsarteigenschaftSearch extends AbstractGebietsarteigenschaftSearch {

  @Inject
  private transient WahlartExtendedDAO wahlartExtendedDAO;

  @Inject
  private transient GebietsartExtendedDAO gebietsartExtendedDAO;

  @Inject
  private transient MandantExtendedDAO mandantExtendedDAO;

  public GebietsarteigenschaftSearch() {
    super();
  }

  @Override
  protected List<Gebietsarteigenschaft> querySearchResult(GebietsarteigenschaftSearchParameters searchParameters) {
    QGebietsarteigenschaft gebietsarteigenschaft = QGebietsarteigenschaft.gebietsarteigenschaft;

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

    if (searchParameters.getWahlart()==null && searchParameters.getGebietsart() == null) {
      queryDsl.eq(gebietsarteigenschaft.wahlart.mandant, mandantExtendedDAO.attach(searchParameters.getMandant()));
    } else {
      queryDsl.eqIfNotNull(gebietsarteigenschaft.wahlart, wahlartExtendedDAO.attach(searchParameters.getWahlart()));
      queryDsl.eqIfNotNull(gebietsarteigenschaft.gebietsart, gebietsartExtendedDAO.attach(searchParameters.getGebietsart()));
    }

    queryDsl.orderBy(gebietsarteigenschaft.wahlart.name.asc(), gebietsarteigenschaft.gebietsart.position.asc());

    return queryDsl.list(gebietsarteigenschaft);
  }
}
