package no.api.freemarker.java8.time; import freemarker.ext.beans.BeansWrapper; import freemarker.template.AdapterTemplateModel; import freemarker.template.TemplateHashModel; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; import freemarker.template.TemplateScalarModel; import java.time.temporal.Temporal; import java.time.temporal.TemporalUnit; public class TemporalDialerAdapter extends AbstractAdapter<Temporal> implements AdapterTemplateModel, TemplateScalarModel, TemplateHashModel { private final TemplateHashModel delegate; public TemporalDialerAdapter(Temporal obj, BeansWrapper wrapper, TemplateHashModel delegate) { super(obj, wrapper); this.delegate = delegate; } @Override protected TemplateModel getForType(String methodName) throws TemplateModelException { TemporalUnit temporalUnit = new MethodNameToTemporalUnitMapper().map(methodName); if (temporalUnit == null) { return delegate.get(methodName); } else { return new TemporalDialer(this.getObject(), temporalUnit); } } }