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

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

import de.ivu.elect.business.person.control.EntityMitPersonendatenByNamenComparator;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.veranstaltung.entity.Teilnahme;

public class TeilnahmeDefaultComparator implements Comparator<Teilnahme>, Serializable {

  private static final long serialVersionUID = 1L;

  private static final Comparator<Personendaten> PERSONENDATEN_DEFAULT_COMPARATOR = new EntityMitPersonendatenByNamenComparator<>();

  public TeilnahmeDefaultComparator() {
    super();
  }

  @Override
  public int compare(Teilnahme one, Teilnahme another) {
    int result = compareByTeilnehmerRolle(one, another);

    if (result == 0) {
      result = compareByTeilnehmerStatus(one, another);
    }

    if (result == 0) {
      result = compareByPersonendaten(one, another);
    }

    return result;
  }

  protected int compareByTeilnehmerRolle(Teilnahme one, Teilnahme another) {
    return one.getTeilnehmerRolle().compareTo(another.getTeilnehmerRolle());
  }

  protected int compareByTeilnehmerStatus(Teilnahme one, Teilnahme another) {
    return one.getTeilnehmerStatus().compareTo(another.getTeilnehmerStatus());
  }

  protected int compareByPersonendaten(Teilnahme one, Teilnahme another) {
    return PERSONENDATEN_DEFAULT_COMPARATOR.compare(one.getPersonendaten(), another.getPersonendaten());
  }
}
