BeanAccessor.java

package org.klojang.templates;

import org.klojang.invoke.BeanReader;

final class BeanAccessor<T> implements Accessor<T> {

  private final BeanReader<T> br;
  private final NameMapper nm;

  BeanAccessor(BeanReader<T> beanReader, NameMapper nm) {
    this.br = beanReader;
    this.nm = nm;
  }

  @Override
  public Object access(T data, String name) throws RenderException {
    String prop = nm == null ? name : nm.map(name);
    if (br.canRead(prop)) {
      return br.read(data, prop);
    }
    return UNDEFINED;
  }

}