
package de.ivu.elect.presentation.anschrift.form;

import static org.apache.commons.lang3.StringUtils.isNotBlank;
import static org.apache.commons.lang3.StringUtils.trimToEmpty;

import java.io.Serializable;

import de.ivu.elect.business.anschrift.entity.Anschrift;
import de.ivu.elect.business.geodata.entity.GeodataOrt;
import de.ivu.elect.business.geodata.entity.GeodataPlz;

public class AnschriftPlzAutoCompleteOption implements Serializable {

  private static final long serialVersionUID = 1L;

  private final String plz;

  private final String ortsname;

  private final String ortsteilname;

  public AnschriftPlzAutoCompleteOption(Anschrift anschrift) {
    this(anschrift.getPlz(), "", "");
  }

  public AnschriftPlzAutoCompleteOption(GeodataPlz geodataPlz, GeodataOrt geodataOrt) {
    this(geodataPlz.getPlz(), geodataOrt.getOrtsname(), geodataOrt.getOrtsteilname());
  }

  public AnschriftPlzAutoCompleteOption(String plz, String ortsname, String ortsteilname) {
    super();

    this.plz = trimToEmpty(plz);
    this.ortsname = trimToEmpty(ortsname);
    this.ortsteilname = trimToEmpty(ortsteilname);
  }

  public boolean isBlank() {
    return !(hasPlz() || hasOrtsname() || hasOrtsteilname());
  }

  public boolean hasPlz() {
    return isNotBlank(getPlz());
  }

  public String getPlz() {
    return plz;
  }

  public boolean hasOrtsname() {
    return isNotBlank(getOrtsname());
  }

  public String getOrtsname() {
    return ortsname;
  }

  public boolean hasOrtsteilname() {
    return isNotBlank(getOrtsteilname());
  }

  public String getOrtsteilname() {
    return ortsteilname;
  }

  @Override
  // Auto-generated!
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + (ortsname == null ? 0 : ortsname.hashCode());
    result = prime * result + (ortsteilname == null ? 0 : ortsteilname.hashCode());
    result = prime * result + (plz == null ? 0 : plz.hashCode());
    return result;
  }

  @Override
  // Auto-generated!
  public boolean equals(Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    AnschriftPlzAutoCompleteOption other = (AnschriftPlzAutoCompleteOption) obj;
    if (ortsname == null) {
      if (other.ortsname != null) {
        return false;
      }
    } else if (!ortsname.equals(other.ortsname)) {
      return false;
    }
    if (ortsteilname == null) {
      if (other.ortsteilname != null) {
        return false;
      }
    } else if (!ortsteilname.equals(other.ortsteilname)) {
      return false;
    }
    if (plz == null) {
      if (other.plz != null) {
        return false;
      }
    } else if (!plz.equals(other.plz)) {
      return false;
    }
    return true;
  }
}
