package de.ivu.elect.presentation.gebietsbaum.tree;

import java.io.Serializable;

import javax.annotation.Nullable;

import de.ivu.elect.business.wahl.entity.WahlPK;
import de.ivu.elect.business.wahl.entity.WahlterminPK;

/**
 *  on 03.11.2016.
 */
public class LazyGebietsbaumStoreReferenz implements Serializable {

  private final String lastViewId;

  private final WahlterminPK lastWahlterminPK;

  private final WahlPK lastWahlPK;

  public LazyGebietsbaumStoreReferenz(String lastViewId, WahlterminPK lastWahlterminPK, WahlPK lastWahlPK) {
    this.lastViewId = normalize(lastViewId);
    this.lastWahlterminPK = lastWahlterminPK;
    this.lastWahlPK = lastWahlPK;
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    LazyGebietsbaumStoreReferenz that = (LazyGebietsbaumStoreReferenz) o;

    if (lastViewId != null ? !lastViewId.equals(that.lastViewId) : that.lastViewId != null) return false;
    if (lastWahlterminPK != null ? !lastWahlterminPK.equals(that.lastWahlterminPK) : that.lastWahlterminPK != null)
      return false;
    return lastWahlPK != null ? lastWahlPK.equals(that.lastWahlPK) : that.lastWahlPK == null;

  }

  @Override
  public int hashCode() {
    int result = lastViewId != null ? lastViewId.hashCode() : 0;
    result = 31 * result + (lastWahlterminPK != null ? lastWahlterminPK.hashCode() : 0);
    result = 31 * result + (lastWahlPK != null ? lastWahlPK.hashCode() : 0);
    return result;
  }

  @Override
  public String toString() {
    return "LazyGebietsbaumStoreReferenz{" +
        "lastViewId='" + lastViewId + '\'' +
        ", lastWahlterminPK=" + lastWahlterminPK +
        ", lastWahlPK=" + lastWahlPK +
        '}';
  }

  @Nullable
  private static String normalize(String lastViewId) {
    if (lastViewId == null) {
      return null;
    }
    return lastViewId.trim().toUpperCase();
  }
}
