
package de.ivu.elect.business.wahlvorschlagsperson.control;

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

import de.ivu.elect.business.person.control.EntityMitPersonendatenByNamenComparator;
import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPerson;
import de.ivu.elect.jee.faces.Messages;

public class WahlvorschlagsPersonByWahlvorschlagsPersonTypAndEingangssequenznummerAndNamenComparator implements Comparator<WahlvorschlagsPerson>, Serializable {

  private static final long serialVersionUID = 1L;

  private static final Comparator<WahlvorschlagsPerson> EINGANGSSEQUENZNUMMER_COMPARATOR = new WahlvorschlagsPersonByEingangssequenznummerComparator();

  private static final Comparator<WahlvorschlagsPerson> PERSONENDATEN_BY_NAMEN_COMPARATOR = new EntityMitPersonendatenByNamenComparator<>();

  private final Comparator<WahlvorschlagsPerson> wahlvorschlagsPersonTypComparator;

  public WahlvorschlagsPersonByWahlvorschlagsPersonTypAndEingangssequenznummerAndNamenComparator(Messages messages) {
    super();

    this.wahlvorschlagsPersonTypComparator = new WahlvorschlagsPersonByWahlvorschlagsPersonTypComparator(messages);
  }

  @Override
  public int compare(WahlvorschlagsPerson o1, WahlvorschlagsPerson o2) {
    int result = wahlvorschlagsPersonTypComparator.compare(o1, o2);

    if (result == 0) {
      result = EINGANGSSEQUENZNUMMER_COMPARATOR.compare(o1, o2);
    }

    if (result == 0) {
      result = PERSONENDATEN_BY_NAMEN_COMPARATOR.compare(o1, o2);
    }

    if (result == 0) {
      result = o1.getPk().compareTo(o2.getPk());
    }

    return result;
  }
}
