
package de.ivu.elect.dokumente.ergebnistabelle.referendum;

import de.ivu.elect.business.ergebnis.entity.Stimmenart;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;

public class ReferendumErgebnistabelleSpaltenSchluessel {

  private final Gruppe referendumVorlage;

  private final Stimmenart stimmenart;

  private final Gruppe gruppe;

  private final ReferendumOption referendumOption;

  public ReferendumErgebnistabelleSpaltenSchluessel(Gruppe referendumVorlage, Stimmenart stimmenart, Gruppe gruppe) {
    this(referendumVorlage, stimmenart, gruppe, null);
  }

  public ReferendumErgebnistabelleSpaltenSchluessel(Gruppe referendumVorlage, Stimmenart stimmenart, ReferendumOption referendumOption) {
    this(referendumVorlage, stimmenart, referendumVorlage, referendumOption);
  }

  private ReferendumErgebnistabelleSpaltenSchluessel(Gruppe referendumVorlage, Stimmenart stimmenart, Gruppe gruppe, ReferendumOption referendumOption) {
    super();

    this.referendumVorlage = referendumVorlage;

    this.stimmenart = stimmenart;
    this.gruppe = gruppe;
    this.referendumOption = referendumOption;
  }

  public String getGruppierung() {
    // ELECTBB-326
    return "Abstimmungsfrage";
  }

  public Gruppe getReferendumVorlage() {
    return referendumVorlage;
  }

  public Stimmenart getStimmenart() {
    return stimmenart;
  }

  public Gruppe getGruppe() {
    return gruppe;
  }

  public ReferendumOption getReferendumOption() {
    return referendumOption;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (gruppe == null ? 0 : gruppe.hashCode());
    result = prime * result + (referendumOption == null ? 0 : referendumOption.hashCode());
    result = prime * result + (referendumVorlage == null ? 0 : referendumVorlage.hashCode());
    result = prime * result + (stimmenart == null ? 0 : stimmenart.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    ReferendumErgebnistabelleSpaltenSchluessel other = (ReferendumErgebnistabelleSpaltenSchluessel) obj;
    if (gruppe == null) {
      if (other.gruppe != null) {
        return false;
      }
    } else if (!gruppe.equals(other.gruppe)) {
      return false;
    }
    if (referendumOption == null) {
      if (other.referendumOption != null) {
        return false;
      }
    } else if (!referendumOption.equals(other.referendumOption)) {
      return false;
    }
    if (referendumVorlage == null) {
      if (other.referendumVorlage != null) {
        return false;
      }
    } else if (!referendumVorlage.equals(other.referendumVorlage)) {
      return false;
    }
    if (stimmenart != other.stimmenart) {
      return false;
    }
    return true;
  }
}
