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

import java.util.HashMap;
import java.util.Map;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.business.gebietsbaum.entity.GebietConstants;
import de.ivu.elect.business.gebietsbaum.entity.Gebietsart;
import de.ivu.elect.jee.faces.Messages;
import de.ivu.elect.jee.presentation.dynamictable.ColumnType;
import de.ivu.elect.presentation.gebietsbaum.tree.GebietsbaumTreeNodeIconResolver;
import de.ivu.elect.presentation.table.AbstractColumnEntry;

public class GebietGebietsartNameMitIconColumn extends AbstractColumnEntry<Gebiet> {

  private static final long serialVersionUID = 1L;

  private final GebietsbaumTreeNodeIconResolver gebietsbaumTreeNodeIconResolver;

  private final Map<Gebietsart, String> iconFuerGebietsartCache = new HashMap<>();

  public GebietGebietsartNameMitIconColumn(Messages messages, GebietsbaumTreeNodeIconResolver gebietsbaumTreeNodeIconResolver) {
    super(messages);

    this.gebietsbaumTreeNodeIconResolver = gebietsbaumTreeNodeIconResolver;
  }

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

  @Override
  public String getHeader() {
    return getMessage(GebietConstants.MESSAGE_KEY_GEBIETSART_ID_EINZAHL);
  }

  @Override
  public Object getValue(Gebiet gebiet) {
    return gebiet.getGebietsart().getTitelWennLeerName();
  }

  @Override
  public boolean isIconPresent() {
    return true;
  }

  @Override
  public boolean isIconRendered(Gebiet gebiet) {
    return true;
  }

  @Override
  public String getIcon(Gebiet gebiet) {
    if (gebiet == null) {
      return null;
    }

    Gebietsart gebietsart = gebiet.getGebietsart();

    if (!isIconCached(gebietsart)) {
      iconFuerGebietsartCache.put(gebietsart, gebietsbaumTreeNodeIconResolver.getIcon(gebiet));
    }

    return iconFuerGebietsartCache.get(gebietsart);
  }

  protected boolean isIconCached(Gebietsart gebietsart) {
    return iconFuerGebietsartCache.containsKey(gebietsart);
  }
}
