
package de.ivu.elect.presentation.person.table;

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

import javax.annotation.Nullable;

import de.ivu.elect.business.anschrift.entity.Anschrift;
import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.person.entity.PersonendatenConstants;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;

public class PersonendatenAnschriftColumn<E extends Personendaten> extends AbstractPersonendatenColumn<E> {

  private static final long serialVersionUID = 1L;

  public PersonendatenAnschriftColumn(Messages messages) {
    super("Personendaten-Anschrift", messages, PersonendatenConstants.MESSAGE_KEY_ANSCHRIFT_ID_EINZAHL, ColumnType.STRING, null);
  }

  @Nullable
  @Override
  public Object getValue(E personendaten) {
    if (personendaten == null || personendaten.getAnschrift() == null) {
      return null;
    }

    StringBuilder result = new StringBuilder();

    Anschrift anschrift = personendaten.getAnschrift();

    if (isNotBlank(anschrift.getStrasse())) {
      result.append(anschrift.getStrasse());
    }

    if (isNotBlank(anschrift.getHausnummer())) {
      if (result.length() > 0) {
        result.append(" ");
      }

      result.append(anschrift.getHausnummer());
    }

    if (isNotBlank(anschrift.getHausnummerzusatz())) {
      if (result.length() > 0) {
        result.append(" ");
      }

      result.append(anschrift.getHausnummerzusatz());
    }

    if (isNotBlank(anschrift.getPlz())) {
      if (result.length() > 0) {
        result.append(", ");
      }

      result.append(anschrift.getPlz());
    }

    if (isNotBlank(anschrift.getOrt())) {
      if (result.length() > 0) {
        result.append(" ");
      }

      result.append(anschrift.getOrt());
    }

    return result.toString();
  }
}
