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

import javax.annotation.Nullable;

import de.ivu.elect.business.person.entity.Personendaten;
import de.ivu.elect.business.veranstaltung.entity.Teilnahme;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.person.table.AbstractPersonendatenColumn;

public class TeilnahmePersonendatenWrapperColumnWrapper<P extends Personendaten> extends AbstractTeilnahmeColumn<Teilnahme> {

  private static final long serialVersionUID = 1L;

  private final AbstractPersonendatenColumn<P> personendatenColumn;

  private final Class<P> personendatenClass;

  public TeilnahmePersonendatenWrapperColumnWrapper(Messages messages, AbstractPersonendatenColumn<P> personendatenColumn,
      Class<P> personendatenClass) {
    super(TeilnahmePersonendatenWrapperColumnWrapper.class.getName() + /*ELECT-8483*/ "_" + personendatenColumn.getName(), messages, null, null, null);

    this.personendatenColumn = personendatenColumn;
    this.personendatenClass = personendatenClass;
  }

  @Override
  public ColumnType getType() {
    return personendatenColumn.getType();
  }

  @Override
  public String getHeader() {
    return personendatenColumn.getHeader();
  }

  @Nullable
  @Override
  public Object getValue(Teilnahme entity) {
    if (entity == null || entity.getPersonendaten() == null) {
      return null;
    }

    if (entity.getPersonendaten().isInstanceOf(personendatenClass)) {
      return personendatenColumn.getDisplayValue(entity.getPersonendaten().castTo(personendatenClass).getEntity());
    }

    return null;
  }
}
