package com.google.sitebricks.compiler; import com.google.inject.Inject; import com.google.inject.Singleton; import com.google.sitebricks.Renderable; import com.google.sitebricks.Template; import com.google.sitebricks.rendering.control.WidgetRegistry; import com.google.sitebricks.routing.SystemMetrics; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Compiles non-XML templates. * * @author Dhanji R. Prasanna (dhanji@gmail com) * @see HtmlTemplateCompiler */ @Singleton public class FlatTemplateCompiler implements TemplateCompiler { private final SystemMetrics metrics; private final WidgetRegistry registry; @Inject public FlatTemplateCompiler(SystemMetrics metrics, WidgetRegistry registry) { this.metrics = metrics; this.registry = registry; } public Renderable compile(Class<?> page, Template template) { try { return registry.textWidget(template.getText(), new MvelEvaluatorCompiler(page)); } catch (ExpressionCompileException e) { final List<CompileError> errors = Arrays.asList( CompileError.in(template.getText()) .near(e.getError().getError().getLineNumber()) .causedBy(e) ); final List<CompileError> warnings = Collections.emptyList(); //log errors and abort compile metrics.logErrorsAndWarnings(page, errors, warnings); throw new TemplateCompileException(page, template.getText(), errors, warnings); } } }