package de.ivu.elect.interfaces.core;

import java.io.Serializable;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
public class KandidaturReferenz implements Serializable {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = true)
  private KandidaturArt kandidaturArt;

  @XmlElement(required = true)
  private GruppeImGebietReferenz gruppeImGebietReferenz;

  @XmlElement(required = false)
  private Long listenposition;

  @XmlElement(required = false)
  private KandidaturReferenz uebergeordneteKandidatur;

  public KandidaturArt getKandidaturArt() {
    return kandidaturArt;
  }

  public void setKandidaturArt(KandidaturArt kandidaturArt) {
    this.kandidaturArt = kandidaturArt;
  }

  public GruppeImGebietReferenz getGruppeImGebietReferenz() {
    return gruppeImGebietReferenz;
  }

  public void setGruppeImGebietReferenz(GruppeImGebietReferenz gruppeImGebietReferenz) {
    this.gruppeImGebietReferenz = gruppeImGebietReferenz;
  }

  public Long getListenposition() {
    return listenposition;
  }

  public void setListenposition(Long listenposition) {
    this.listenposition = listenposition;
  }

  public KandidaturReferenz getUebergeordneteKandidatur() {
    return uebergeordneteKandidatur;
  }

  public void setUebergeordneteKandidatur(KandidaturReferenz uebergeordneteKandidatur) {
    this.uebergeordneteKandidatur = uebergeordneteKandidatur;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof KandidaturReferenz)) return false;

    KandidaturReferenz that = (KandidaturReferenz) o;

    if (!gruppeImGebietReferenz.equals(that.gruppeImGebietReferenz)) return false;
    if (kandidaturArt != that.kandidaturArt) return false;
    if (listenposition != null ? !listenposition.equals(that.listenposition) : that.listenposition != null)
      return false;
    if (uebergeordneteKandidatur != null ? !uebergeordneteKandidatur.equals(that.uebergeordneteKandidatur) : that.uebergeordneteKandidatur != null)
      return false;

    return true;
  }

  @Override
  public int hashCode() {
    int result = kandidaturArt.hashCode();
    result = 31 * result + gruppeImGebietReferenz.hashCode();
    result = 31 * result + (listenposition != null ? listenposition.hashCode() : 0);
    result = 31 * result + (uebergeordneteKandidatur != null ? uebergeordneteKandidatur.hashCode() : 0);
    return result;
  }

  @Override
  public String toString() {
    return "KandidaturReferenz{" +
        "kandidaturArt=" + kandidaturArt +
        ", gruppeImGebietReferenz=" + gruppeImGebietReferenz +
        ", listenposition=" + listenposition +
        ", uebergeordneteKandidatur=" + uebergeordneteKandidatur +
        '}';
  }
}
