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

import java.io.Serializable;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.gruppeimgebiet.control.GruppeImGebietByPositionAbgeleitetComparator;
import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;

public class GruppeByPositionComparator implements Comparator<Gruppe>, Serializable {

  private static final long serialVersionUID = 1L;

  GruppeImGebietByPositionAbgeleitetComparator gruppeImGebietByPositionAbgeleitetComparator = new GruppeImGebietByPositionAbgeleitetComparator();

  private final Map<Gruppe, GruppeImGebiet> gruppeImGebietFuerGruppe;

  public GruppeByPositionComparator(Collection<GruppeImGebiet> gig) {
    gruppeImGebietFuerGruppe = new HashMap<>();
    for (GruppeImGebiet gruppeImGebiet : gig) {
      if (gruppeImGebietFuerGruppe.put(gruppeImGebiet.getGruppe(), gruppeImGebiet) != null) {
        throw new IllegalArgumentException("Für die Gruppe: " + gruppeImGebiet.getGruppe()
            + " sind mehrere GruppenImGebiet übergeben worden!");
      }
    }
  }

  @Override
  public int compare(Gruppe o1, Gruppe o2) {
    return gruppeImGebietByPositionAbgeleitetComparator.compare(gruppeImGebietFuerGruppe.get(o1),
        gruppeImGebietFuerGruppe.get(o2));
  }
}
