
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 WahlvorschlagReferenz implements Serializable {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = true)
  private GruppeImGebietReferenz gruppeImGebietReferenz;

  @XmlElement(required = false) // Abwärtskompatibilität
  private WahlvorschlagArt wahlvorschlagArt;

  @XmlElement(required = false) // Abwärtskompatibilität
  private Long position;

  public WahlvorschlagReferenz() {
    super();
  }

  public WahlvorschlagReferenz(WahlvorschlagArt wahlvorschlagArt, GruppeImGebietReferenz gruppeImGebietReferenz) {
    super();

    this.gruppeImGebietReferenz = gruppeImGebietReferenz;
    this.wahlvorschlagArt = wahlvorschlagArt;
    this.position = null;
  }

  public GruppeImGebietReferenz getGruppeImGebietReferenz() {
    return gruppeImGebietReferenz;
  }

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

  public WahlvorschlagArt getWahlvorschlagArt() {
    return wahlvorschlagArt;
  }

  public void setWahlvorschlagArt(WahlvorschlagArt wahlvorschlagArt) {
    this.wahlvorschlagArt = wahlvorschlagArt;
  }

  public Long getPosition() {
    if (position == null) {
      return 0L;
    }

    return position;
  }

  public void setPosition(Long position) {
    this.position = position;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    WahlvorschlagReferenz other = (WahlvorschlagReferenz) obj;
    if (gruppeImGebietReferenz == null) {
      if (other.gruppeImGebietReferenz != null) {
        return false;
      }
    } else if (!gruppeImGebietReferenz.equals(other.gruppeImGebietReferenz)) {
      return false;
    }
    if (position == null) {
      if (other.position != null) {
        return false;
      }
    } else if (!position.equals(other.position)) {
      return false;
    }
    if (wahlvorschlagArt != other.wahlvorschlagArt) {
      return false;
    }
    return true;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (gruppeImGebietReferenz == null ? 0 : gruppeImGebietReferenz.hashCode());
    result = prime * result + (position == null ? 0 : position.hashCode());
    result = prime * result + (wahlvorschlagArt == null ? 0 : wahlvorschlagArt.hashCode());
    return result;
  }

  @Override
  public String toString() {
    return "WahlvorschlagReferenz{" + "gruppeImGebietReferenz=" + gruppeImGebietReferenz + ", wahlvorschlagArt=" + wahlvorschlagArt + ", position=" + position + '}';
  }
}
