
package de.ivu.elect.business.stimmeingabe.control.plausi;

import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.stimmeingabe.entity.ErgebniseingangPK;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiFehlerart;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfigurationCustomData;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp;

public class StimmeingabePlausiKonfigurationCacheKey {

  private final ErgebniseingangPK ergebniseingangPK;
  private final StimmeingabePlausiTyp typ;
  private final StimmeingabePlausiFehlerart fehlerart;
  private final StimmeingabePlausiKonfigurationCustomData customData;

  public StimmeingabePlausiKonfigurationCacheKey(ErgebniseingangPK ergebniseingangPK, StimmeingabePlausiTyp typ, StimmeingabePlausiFehlerart fehlerart, StimmeingabePlausiKonfigurationCustomData customData) {
    this.ergebniseingangPK = ergebniseingangPK;
    this.typ = typ;
    this.fehlerart = fehlerart;
    this.customData = customData;
  }

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

    StimmeingabePlausiKonfigurationCacheKey that = (StimmeingabePlausiKonfigurationCacheKey) o;

    if (ergebniseingangPK != null ? !ergebniseingangPK.equals(that.ergebniseingangPK) : that.ergebniseingangPK != null) return false;
    if (typ != that.typ) return false;
    if (fehlerart != that.fehlerart) return false;
    return customData != null ? customData.equalsOtherCustomDataContent(that.customData) : that.customData == null;
  }

  @Override
  public int hashCode() {
    int result = ergebniseingangPK != null ? ergebniseingangPK.hashCode() : 0;
    result = 31 * result + (typ != null ? typ.hashCode() : 0);
    result = 31 * result + (fehlerart != null ? fehlerart.hashCode() : 0);
    result = 31 * result + (customData != null ? customData.getClass().hashCode() : 0);
    result = 31 * result + (customData != null && customData.getContent() != null ? customData.getContent().hashCode() : 0);
    return result;
  }
}
