
package de.ivu.elect.presentation.stimmeingabe;

import java.util.Comparator;

import de.ivu.elect.business.stimmeingabe.control.StimmeingabefehlerComparator;
import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabefehler;
import de.ivu.elect.util.NullComparator;

public class StimmeingabePlausiFehlerByStimmeingabeBezugComparator implements Comparator<StimmeingabePlausiFehler> {

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

  private static final Comparator<String> STIMMEINGABE_BEZUG_COMPARATOR = new AlphanumComparator();

  private static final Comparator<Stimmeingabefehler> STIMMEINGABEFEHLER_COMPARATOR = new StimmeingabefehlerComparator();

  public StimmeingabePlausiFehlerByStimmeingabeBezugComparator() {
    super();
  }

  @Override
  public int compare(StimmeingabePlausiFehler one, StimmeingabePlausiFehler another) {
    if (one == null || another == null) {
      return NULL_COMPARATOR.compare(one, another);
    }

    int comparedByStimmeingabeBezug = compareByStimmeingabeBezug(one, another);

    if (comparedByStimmeingabeBezug == 0) {
      return compareByStimmeingabefehler(one, another);
    }

    return comparedByStimmeingabeBezug;
  }

  private int compareByStimmeingabeBezug(StimmeingabePlausiFehler one, StimmeingabePlausiFehler another) {
    return STIMMEINGABE_BEZUG_COMPARATOR.compare(one.getStimmeingabeBezug(), another.getStimmeingabeBezug());
  }

  private int compareByStimmeingabefehler(StimmeingabePlausiFehler one, StimmeingabePlausiFehler another) {
    return STIMMEINGABEFEHLER_COMPARATOR.compare(one.getStimmeingabefehler(), another.getStimmeingabefehler());
  }
}
