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

import static de.ivu.elect.jee.entity.EntityUtil.castTo;

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 teilnahme) {
    if (teilnahme == null || teilnahme.getPersonendaten() == null) {
      return null;
    }

    Personendaten personendaten = teilnahme.getPersonendaten();

    if (personendaten.isInstanceOf(personendatenClass)) {
      return personendatenColumn.getDisplayValue(castTo(personendaten, personendatenClass));
    }

    return null;
  }
}
