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

import de.ivu.elect.business.ergebnis.entity.Stimmabgabeart;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsgruppierung;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.gruppe.entity.PolitischeGruppe;

public class PolitischeGruppeUndGebietUndStimmabgabeart extends GebietUndStimmabgabeart {

  private final PolitischeGruppe politischeGruppe;

  public PolitischeGruppeUndGebietUndStimmabgabeart(PolitischeGruppe politischeGruppe, Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet, Stimmabgabeart stimmabgabeart) {
    this(politischeGruppe, new GebietUndStimmabgabeart(wahldurchfuehrungsgebiet, stimmabgabeart));
  }

  public PolitischeGruppeUndGebietUndStimmabgabeart(PolitischeGruppe politischeGruppe, GebietUndStimmabgabeart gebietUndStimmabgabeart) {
    super(gebietUndStimmabgabeart);

    this.politischeGruppe = politischeGruppe;
  }

  public PolitischeGruppe getPolitischeGruppe() {
    return politischeGruppe;
  }

  @Override // ELECT-11713, immer Konstruktoren mit ALLEN Parametern verwenden...
  protected GebietUndStimmabgabeart copyInternal(Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet, Gebietsgruppierung gebietsgruppierung, Stimmabgabeart stimmabgabeart) {
    return new PolitischeGruppeUndGebietUndStimmabgabeart(getPolitischeGruppe(), super.copyInternal(wahldurchfuehrungsgebiet, gebietsgruppierung, stimmabgabeart));
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (!(o instanceof PolitischeGruppeUndGebietUndStimmabgabeart)) {
      return false;
    }
    if (!super.equals(o)) {
      return false;
    }

    PolitischeGruppeUndGebietUndStimmabgabeart that = (PolitischeGruppeUndGebietUndStimmabgabeart) o;

    if (!politischeGruppe.equals(that.politischeGruppe)) {
      return false;
    }

    return true;
  }

  @Override
  public int hashCode() {
    int result = super.hashCode();
    result = 31 * result + politischeGruppe.hashCode();
    return result;
  }
}
