
package de.ivu.elect.business.person.entity;

import static de.ivu.elect.business.AttributeCopy.copyAttribute;
import static org.apache.commons.lang3.StringUtils.isNotBlank;

import java.util.Date;

/**
 * Achtung, neue Attribute in Copy-Methode(n) aufnehmen de.ivu.elect.business.person.entity.EntityMitPersonendaten#copy
 */
public interface EntityMitPersonendaten {

  default boolean hasOrdnungsmerkmal() {
    return isNotBlank(getOrdnungsmerkmal());
  }

  String getOrdnungsmerkmal();

  void setOrdnungsmerkmal(String ordnungsmerkmal);

  String getFamilienname();

  void setFamilienname(String familienname);

  String getFamiliennameBestandteil();

  void setFamiliennameBestandteil(String familiennameBestandteil);

  String getRufname();

  void setRufname(String rufname);

  String getVornamen();

  void setVornamen(String vornamen);

  Date getGeburtsdatum();

  void setGeburtsdatum(Date geburtsdatum);

  Geschlecht getGeschlecht();

  void setGeschlecht(Geschlecht geschlecht);

  default boolean copyPersonendatenTo(EntityMitPersonendaten to) {
    boolean result;
    result = copyAttribute(this::getOrdnungsmerkmal, to::setOrdnungsmerkmal, to::getOrdnungsmerkmal);
    result |= copyAttribute(this::getFamilienname, to::setFamilienname, to::getFamilienname);
    result |= copyAttribute(this::getFamiliennameBestandteil, to::setFamiliennameBestandteil, to::getFamiliennameBestandteil);
    result |= copyAttribute(this::getRufname, to::setRufname, to::getRufname);
    result |= copyAttribute(this::getVornamen, to::setVornamen, to::getVornamen);
    result |= copyAttribute(this::getGeburtsdatum, to::setGeburtsdatum, to::getGeburtsdatum);
    result |= copyAttribute(this::getGeschlecht, to::setGeschlecht, to::getGeschlecht);
    return result;
  }

  static void copy(EntityMitPersonendaten from, EntityMitPersonendaten to) {
    from.copyPersonendatenTo(to);
  }
}
