
package de.ivu.elect.business.ergebniskonflikt.entity;

import java.util.Collection;
import java.util.List;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;
import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;
import de.ivu.elect.business.wahlvorschlag.entity.Listenverbindung;
import de.ivu.elect.jee.entity.customdata.CustomData;

public interface ErgebnisKonfliktCustomData extends CustomData {

  /**
   * ID des Views, der die Konfliktlösung darstellt
   */
  String getErgebnisKonfliktLoesungViewId();

  /**
   * liefer den Klassennamen des KonfliktCustomData
   */
  String getClassName();

  /**
   * Fachlich gleiche Konflikte beschreiben Konflikte, deren Problem gleich ist, aber nicht zwingenderweise deren Lösung
   */
  boolean isFachlichGleich(ErgebnisKonfliktCustomData other);

  <K extends Kandidatur> List<K> getBeteiligteKandidaturen(Collection<K> alleKandidaturen);

  List<Liste> getBeteiligteListen(Collection<Liste> alleListen);

  List<Listenverbindung> getBeteiligteListenverbindungen(Collection<Listenverbindung> alleListenverbindungen);

  List<PolitischeGruppe> getBeteiligtePolitischeGruppen(Collection<PolitischeGruppe> allePolitischenGruppen);

  boolean isKandidaturenBeteiligt();

  boolean isListenBeteiligt();

  boolean isListenverbindungenBeteiligt();

  boolean isPolitischeGruppenBeteiligt();

  <K extends Kandidatur> List<K> getGelosteKandidaturen(Collection<K> alleKandidaturen);

  List<Liste> getGelosteListen(Collection<Liste> alleListen);

  List<Listenverbindung> getGelosteListenverbindungen(Collection<Listenverbindung> alleListenverbindungen);

  List<PolitischeGruppe> getGelostePolitischeGruppen(Collection<PolitischeGruppe> allePolitischenGruppen);

  List<Wahldurchfuehrungsgebiet> getGelosteGebiete(Collection<Wahldurchfuehrungsgebiet> alleGebiete);

  boolean isKandidaturenGelost();

  boolean isListenGelost();

  boolean isListenverbindungenGelost();

  boolean isPolitischeGruppenGelost();

  Gebiet getGebiet(Collection<Kandidatur> alleKandidaturen, Collection<Liste> alleListen,
      Collection<Listenverbindung> alleListenverbindungen);

}
