package org.watertemplate.interpreter;
import org.watertemplate.TemplateMap;
import org.watertemplate.interpreter.parser.AbstractSyntaxTree;
import java.util.Locale;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
class DefaultWaterInterpreter extends WaterInterpreter {
private final static ConcurrentMap<String, AbstractSyntaxTree> cache = new ConcurrentHashMap<>();
public DefaultWaterInterpreter(final String templateFilePath, final Locale defaultLocale) {
super(templateFilePath, defaultLocale);
}
@Override
public String string(final TemplateMap.Arguments arguments, final Locale locale) {
return cache.computeIfAbsent(cacheKey(locale), key ->
parse(lex(templateFileWith(locale)))).string(arguments, locale);
}
private String cacheKey(final Locale locale) {
return templateFilePath + locale;
}
}