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

import java.util.Comparator;

import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPerson;
import de.ivu.elect.business.wahlvorschlagsperson.entity.WahlvorschlagsPersonTyp;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.util.NullComparator;

public class WahlvorschlagsPersonByWahlvorschlagsPersonTypComparator implements Comparator<WahlvorschlagsPerson> {

  private static final Comparator<Object> NULL_COMPARATOR = NullComparator.NULL_BEFORE_NON_NULL_COMPARATOR;

  private final Messages messages;

  public WahlvorschlagsPersonByWahlvorschlagsPersonTypComparator(Messages messages) {
    super();

    this.messages = messages;
  }

  @Override
  public int compare(WahlvorschlagsPerson o1, WahlvorschlagsPerson o2) {
    if (o1 == null || o2 == null) {
      return NULL_COMPARATOR.compare(o1, o2);
    }

    return compareByTyp(o1.getWahlvorschlagsPersonTyp(), o2.getWahlvorschlagsPersonTyp());
  }

  private int compareByTyp(WahlvorschlagsPersonTyp typ1, WahlvorschlagsPersonTyp typ2) {
    if (typ1 == null || typ2 == null) {
      return NULL_COMPARATOR.compare(typ1, typ2);
    }

    return compareByMessage(messages.lokalisiere(typ1), messages.lokalisiere(typ2));
  }

  private int compareByMessage(String message1, String message2) {
    return message1.compareTo(message2);
  }
}
