
package de.ivu.elect.business.sitzberechnung.control.wahlneutral;

import de.ivu.elect.business.ergebniskonflikt.entity.ErgebnisKonfliktCustomData;
import de.ivu.elect.business.ergebniskonflikt.entity.KandidaturenReihenfolgeErgebnisKonfliktCustomData;

public abstract class AbstractLosentscheidTypKandidaturReihenfolgeErgebnisKonfliktCustomData<L extends LosentscheidTyp>
    extends
      KandidaturenReihenfolgeErgebnisKonfliktCustomData {

  private static final long serialVersionUID = 1L;

  private L losentscheidTyp;

  public L getLosentscheidTyp() {
    return losentscheidTyp;
  }

  public void setLosentscheidTyp(L losentscheidTyp) {
    notifyEntity(getLosentscheidTypName(), this.losentscheidTyp, this.losentscheidTyp = losentscheidTyp);
  }

  @Override
  public boolean isFachlichGleich(ErgebnisKonfliktCustomData other) {
    return super.isFachlichGleich(other) && equals(other);
  }

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

    AbstractLosentscheidTypKandidaturReihenfolgeErgebnisKonfliktCustomData that = (AbstractLosentscheidTypKandidaturReihenfolgeErgebnisKonfliktCustomData) o;

    if (losentscheidTyp != that.losentscheidTyp) {
      return false;
    }

    return super.equals(o);
  }

  @Override
  public int hashCode() {
    int result = losentscheidTyp != null ? losentscheidTyp.hashCode() : 0;
    result += super.hashCode();
    return result;
  }

  @Override
  public abstract String getClassName();

  protected abstract String getLosentscheidTypName();

}
