MonetaExtension.java
package org.freshmarker.money;
import org.freshmarker.api.Formatter;
import org.freshmarker.api.TypeMapper;
import org.freshmarker.api.extension.BuiltInProvider;
import org.freshmarker.api.extension.FormatterProvider;
import org.freshmarker.api.extension.Register;
import org.freshmarker.api.extension.TypeMapperProvider;
import org.freshmarker.api.extension.support.BuiltInRegister;
import org.freshmarker.core.model.TemplateObject;
import org.freshmarker.core.model.primitive.TemplateNumber;
import org.javamoney.moneta.Money;
import org.javamoney.moneta.spi.JDKCurrencyAdapter;
import java.util.Map;
public final class MonetaExtension implements BuiltInProvider, TypeMapperProvider, FormatterProvider {
@Override
public Register<Class<? extends TemplateObject>, String, org.freshmarker.api.BuiltIn> provideBuiltInRegister() {
BuiltInRegister register = new BuiltInRegister();
register.add(TemplateMoney.class, "currency", (x, y, e) -> new TemplateConcurrency((JDKCurrencyAdapter) ((TemplateMoney) x).getValue().getCurrency()));
register.add(TemplateMoney.class, "amount", (x, y, e) -> new TemplateNumber(((TemplateMoney) x).getValue().getNumberStripped()));
return register;
}
@Override
public Map<Class<?>, TypeMapper> providerTypeMapper() {
return Map.of(
Money.class, o -> new TemplateMoney((Money) o),
JDKCurrencyAdapter.class, o -> new TemplateConcurrency((JDKCurrencyAdapter) o));
}
@Override
public Map<Class<? extends TemplateObject>, Formatter> providerFormatter() {
return Map.of(TemplateMoney.class, new MonetaryFormatter());
}
}