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

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

import javax.inject.Inject;

import de.ivu.elect.business.gebietsbaum.boundary.GebietExtendedDAO;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.stimmzettel.boundary.EntityAufStimmzettelDatenExtendedDAOFactory;
import de.ivu.elect.business.wahlvorschlag.control.WahlvorschlagByStimmzettelPositionComparator;
import de.ivu.elect.business.wahlvorschlag.entity.EntityMitWahlvorschlag;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

public class WahlvorschlagSearchResultSorter implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  private transient GebietExtendedDAO gebietDao;

  @Inject
  private transient EntityAufStimmzettelDatenExtendedDAOFactory entityAufStimmzettelDatenExtendedDAOFactory;

  public WahlvorschlagSearchResultSorter() {
    super();
  }

  public void sortByWahlvorschlag(Gebiet gebiet, List< ? extends EntityMitWahlvorschlag> result) {
    Comparator< ? super Wahlvorschlag> wahlvorschlagComparator = createWahlvorschlagComparator(gebiet);

    result.sort((one, another) -> wahlvorschlagComparator.compare(one.getWahlvorschlag(), another.getWahlvorschlag()));
  }

  public void sort(Gebiet gebiet, List< ? extends Wahlvorschlag> result) {
    result.sort(createWahlvorschlagComparator(gebiet));
  }

  public Comparator< ? super Wahlvorschlag> createWahlvorschlagComparator(Gebiet gebiet) {
    return new WahlvorschlagByStimmzettelPositionComparator(gebietDao.attach(gebiet), entityAufStimmzettelDatenExtendedDAOFactory.getEntityAufStimmzettelDaten());
  }
}
