FreeMarkerWrapper.java
package io.github.giulong.spectrum.utils;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import io.github.giulong.spectrum.interfaces.SessionHook;
import io.github.giulong.spectrum.utils.Configuration.FreeMarker;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;
import static lombok.AccessLevel.PRIVATE;
@Slf4j
@NoArgsConstructor(access = PRIVATE)
public final class FreeMarkerWrapper implements SessionHook {
private static final FreeMarkerWrapper INSTANCE = new FreeMarkerWrapper();
private final io.github.giulong.spectrum.utils.Configuration spectrumConfiguration = io.github.giulong.spectrum.utils.Configuration.getInstance();
private final FileUtils fileUtils = FileUtils.getInstance();
private Configuration configuration;
public static FreeMarkerWrapper getInstance() {
return INSTANCE;
}
@Override
public void sessionOpened() {
log.debug("Session opened hook");
final FreeMarker freeMarker = spectrumConfiguration.getFreeMarker();
final String version = freeMarker.getVersion();
log.debug("Configuring FreeMarker version {}", version);
this.configuration = new Configuration(new Version(version));
this.configuration.setLocale(freeMarker.getLocale());
this.configuration.setNumberFormat(freeMarker.getNumberFormat());
}
@SneakyThrows
public String interpolate(final String source, final Map<String, Object> vars) {
final Template template = new Template("freemarker", new StringReader(source), configuration);
final Writer writer = new StringWriter();
template.process(vars, writer);
return writer.toString();
}
public String interpolateTemplate(final String templateName, final Map<String, Object> vars) {
return interpolate(fileUtils.readTemplate(templateName), vars);
}
}