package pl.matisoft.soy.holder; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.template.soy.tofu.SoyTofu; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import pl.matisoft.soy.compile.EmptyTofuCompiler; import pl.matisoft.soy.compile.TofuCompiler; import pl.matisoft.soy.config.SoyViewConfigDefaults; import pl.matisoft.soy.template.EmptyTemplateFilesResolver; import pl.matisoft.soy.template.TemplateFilesResolver; import java.io.IOException; import java.net.URL; import java.util.Collection; /** * Created with IntelliJ IDEA. * User: mati * Date: 02/11/2013 * Time: 14:04 */ public class DefaultCompiledTemplatesHolder implements InitializingBean, CompiledTemplatesHolder { private static final Logger logger = LoggerFactory.getLogger(DefaultCompiledTemplatesHolder.class); private boolean hotReloadMode = SoyViewConfigDefaults.DEFAULT_HOT_RELOAD_MODE; private TofuCompiler tofuCompiler = new EmptyTofuCompiler(); private TemplateFilesResolver templatesFileResolver = new EmptyTemplateFilesResolver(); private Optional<SoyTofu> compiledTemplates = Optional.absent(); private boolean preCompileTemplates = SoyViewConfigDefaults.DEFAULT_PRECOMPILE_TEMPLATES; public Optional<SoyTofu> compiledTemplates() throws IOException { if (shouldCompileTemplates()) { this.compiledTemplates = Optional.fromNullable(compileTemplates()); } return compiledTemplates; } private boolean shouldCompileTemplates() { return isHotReloadMode() || !compiledTemplates.isPresent(); } @Override public void afterPropertiesSet() throws Exception { logger.debug("TemplatesHolder init..."); if (preCompileTemplates) { this.compiledTemplates = Optional.fromNullable(compileTemplates()); } } private SoyTofu compileTemplates() throws IOException { Preconditions.checkNotNull(templatesFileResolver, "templatesRenderer cannot be null!"); Preconditions.checkNotNull(tofuCompiler, "tofuCompiler cannot be null!"); final Collection<URL> templateFiles = templatesFileResolver.resolve(); if (templateFiles != null && templateFiles.size() > 0) { logger.debug("Compiling templates, no:{}", templateFiles.size()); return tofuCompiler.compile(templateFiles); } throw new IOException("0 template files have been found, check your templateFilesResolver!"); } public void setHotReloadMode(final boolean hotReloadMode) { this.hotReloadMode = hotReloadMode; } public boolean isHotReloadMode() { return hotReloadMode; } public boolean isHotReloadModeOff() { return !hotReloadMode; } public void setTofuCompiler(TofuCompiler tofuCompiler) { this.tofuCompiler = tofuCompiler; } public void setTemplatesFileResolver(TemplateFilesResolver templatesFileResolver) { this.templatesFileResolver = templatesFileResolver; } public void setPreCompileTemplates(boolean preCompileTemplates) { this.preCompileTemplates = preCompileTemplates; } }