
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.Gruppe;

public class GruppeUndGebietUndStimmabgabeart extends GebietUndStimmabgabeart {

  private final Gruppe gruppe;

  public GruppeUndGebietUndStimmabgabeart(Gruppe gruppe, Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet, Stimmabgabeart stimmabgabeart) {
    this(gruppe, new GebietUndStimmabgabeart(wahldurchfuehrungsgebiet, stimmabgabeart));
  }

  public GruppeUndGebietUndStimmabgabeart(Gruppe gruppe, GebietUndStimmabgabeart gebietUndStimmabgabeart) {
    super(gebietUndStimmabgabeart);

    this.gruppe = gruppe;
  }

  public Gruppe getGruppe() {
    return gruppe;
  }

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

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

    GruppeUndGebietUndStimmabgabeart that = (GruppeUndGebietUndStimmabgabeart) o;

    if (gruppe == null) {
      if (that.gruppe == null) {
        return true;
      }
      return false;
    }

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

    return true;
  }

  @Override
  public int hashCode() {
    int result = super.hashCode();

    int hashCodeGruppe = 0;
    if (gruppe != null) {
      hashCodeGruppe = gruppe.hashCode();
    }

    result = 31 * result + hashCodeGruppe;

    return result;
  }
}
