Skip to content

Instantly share code, notes, and snippets.

@matiwinnetou
Last active December 27, 2015 07:48
Show Gist options
  • Save matiwinnetou/7291135 to your computer and use it in GitHub Desktop.
Save matiwinnetou/7291135 to your computer and use it in GitHub Desktop.
package pl.matisoft.soy.example;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.ContentNegotiatingViewResolver;
import org.springframework.web.servlet.view.json.MappingJacksonJsonView;
import pl.matisoft.soy.SoyTemplateViewResolver;
import pl.matisoft.soy.ajax.SoyAjaxController;
import pl.matisoft.soy.ajax.auth.AuthManager;
import pl.matisoft.soy.ajax.auth.ConfigurableAuthManager;
import pl.matisoft.soy.ajax.hash.HashFileGenerator;
import pl.matisoft.soy.ajax.hash.MD5HashFileGenerator;
import pl.matisoft.soy.ajax.process.OutputProcessor;
import pl.matisoft.soy.ajax.process.google.GoogleClosureOutputProcessor;
import pl.matisoft.soy.ajax.url.DefaultTemplateUrlComposer;
import pl.matisoft.soy.ajax.url.TemplateUrlComposer;
import pl.matisoft.soy.bundle.EmptySoyMsgBundleResolver;
import pl.matisoft.soy.compile.DefaultTofuCompiler;
import pl.matisoft.soy.compile.TofuCompiler;
import pl.matisoft.soy.data.DefaultToSoyDataConverter;
import pl.matisoft.soy.data.ToSoyDataConverter;
import pl.matisoft.soy.global.compile.CompileTimeGlobalModelResolver;
import pl.matisoft.soy.global.compile.EmptyCompileTimeGlobalModelResolver;
import pl.matisoft.soy.global.runtime.DefaultGlobalModelResolver;
import pl.matisoft.soy.global.runtime.GlobalModelResolver;
import pl.matisoft.soy.global.runtime.resolvers.*;
import pl.matisoft.soy.holder.CompiledTemplatesHolder;
import pl.matisoft.soy.holder.DefaultCompiledTemplatesHolder;
import pl.matisoft.soy.locale.LocaleProvider;
import pl.matisoft.soy.locale.SpringLocaleProvider;
import pl.matisoft.soy.render.DefaultTemplateRenderer;
import pl.matisoft.soy.render.TemplateRenderer;
import pl.matisoft.soy.template.DefaultTemplateFilesResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"pl.matisoft.soy.example"})
public class SoyConfiguration extends WebMvcConfigurerAdapter {
@Autowired
private javax.servlet.ServletContext context;
private boolean hotReloadMode = false;
@Bean
public DefaultTemplateFilesResolver templateFilesResolver() throws Exception {
final DefaultTemplateFilesResolver defaultTemplateFilesResolver = new DefaultTemplateFilesResolver();
defaultTemplateFilesResolver.setHotReloadMode(hotReloadMode);
defaultTemplateFilesResolver.setRecursive(true);
defaultTemplateFilesResolver.setServletContext(context);
defaultTemplateFilesResolver.afterPropertiesSet();
return defaultTemplateFilesResolver;
}
@Bean
public CompileTimeGlobalModelResolver compileTimeGlobalModelResolver() {
return new EmptyCompileTimeGlobalModelResolver();
}
@Bean
public GlobalModelResolver globalModelResolver() {
final DefaultGlobalModelResolver defaultGlobalModelResolver = new DefaultGlobalModelResolver();
defaultGlobalModelResolver.setResolvers(Lists.newArrayList(
new RequestParametersDataResolver(),
new RequestHeadersDataResolver(),
new CookieDataResolver(),
requestContextResolver(),
new HttpSessionDataResolver(),
webApplicationContextResolver(),
servletContextResolver()
));
return defaultGlobalModelResolver;
}
@Bean
public ServletContextResolver servletContextResolver() {
return new ServletContextDataResolver();
}
@Bean
public WebApplicationContextResolver webApplicationContextResolver() {
return new WebApplicationContextDataResolver();
}
@Bean
public RequestContextResolver requestContextResolver() {
return new RequestContextDataResolver();
}
@Bean
public LocaleProvider localeProvider() {
return new SpringLocaleProvider();
}
@Bean
public EmptySoyMsgBundleResolver soyMsgBundleResolver() {
return new EmptySoyMsgBundleResolver();
}
@Bean
public ToSoyDataConverter toSoyDataConverter() {
return new DefaultToSoyDataConverter();
}
public TemplateRenderer templateRenderer() {
final DefaultTemplateRenderer defaultTemplateRenderer = new DefaultTemplateRenderer();
defaultTemplateRenderer.setToSoyDataConverter(toSoyDataConverter());
defaultTemplateRenderer.setHotReloadModel(hotReloadMode);
return defaultTemplateRenderer;
}
@Bean
public TofuCompiler tofuCompiler() {
final DefaultTofuCompiler defaultTofuCompiler = new DefaultTofuCompiler();
defaultTofuCompiler.setCompileTimeGlobalModelResolver(compileTimeGlobalModelResolver());
defaultTofuCompiler.setHotReloadModel(hotReloadMode);
return defaultTofuCompiler;
}
@Bean
public ViewResolver viewResolver() throws Exception {
final SoyTemplateViewResolver soyTemplateViewResolver = new SoyTemplateViewResolver();
soyTemplateViewResolver.setHotReloadModel(hotReloadMode);
soyTemplateViewResolver.setTemplateRenderer(templateRenderer());
soyTemplateViewResolver.setGlobalModelResolver(globalModelResolver());
soyTemplateViewResolver.setLocaleProvider(localeProvider());
soyTemplateViewResolver.setSoyMsgBundleResolver(soyMsgBundleResolver());
soyTemplateViewResolver.setCompiledTemplatesHolder(compiledTemplatesHolder());
return soyTemplateViewResolver;
}
@Bean
public CompiledTemplatesHolder compiledTemplatesHolder() throws Exception {
final DefaultCompiledTemplatesHolder defaultCompiledTemplatesHolder = new DefaultCompiledTemplatesHolder();
defaultCompiledTemplatesHolder.setHotReloadModel(hotReloadMode);
defaultCompiledTemplatesHolder.setTemplatesFileResolver(templateFilesResolver());
defaultCompiledTemplatesHolder.setTofuCompiler(tofuCompiler());
return defaultCompiledTemplatesHolder;
}
@Bean
public OutputProcessor closureCompilerProcessor() {
return new GoogleClosureOutputProcessor();
}
@Bean
public ViewResolver contentNegotiatingViewResolver() throws Exception {
final ContentNegotiatingViewResolver contentNegotiatingViewResolver = new ContentNegotiatingViewResolver();
contentNegotiatingViewResolver.setViewResolvers(Lists.newArrayList(viewResolver()));
contentNegotiatingViewResolver.setDefaultViews(Lists.<View>newArrayList(new MappingJacksonJsonView()));
return contentNegotiatingViewResolver;
}
@Bean
public TemplateUrlComposer templateUrlComposer() throws Exception {
final DefaultTemplateUrlComposer urlComposer = new DefaultTemplateUrlComposer();
urlComposer.setSiteUrl("http://localhost:8080/");
urlComposer.setTemplateFilesResolver(templateFilesResolver());
urlComposer.setHashFileGenerator(hashFileGenerator());
return urlComposer;
}
@Bean
public HashFileGenerator hashFileGenerator() {
final MD5HashFileGenerator md5HashFileGenerator = new MD5HashFileGenerator();
md5HashFileGenerator.setHotReloadModel(hotReloadMode);
return md5HashFileGenerator;
}
@Bean
public SoyAjaxController soyAjaxController() throws Exception {
final SoyAjaxController soyAjaxController = new SoyAjaxController();
soyAjaxController.setHotReloadModel(hotReloadMode);
soyAjaxController.setLocaleProvider(localeProvider());
soyAjaxController.setSoyMsgBundleResolver(soyMsgBundleResolver());
soyAjaxController.setTemplateFilesResolver(templateFilesResolver());
soyAjaxController.setTofuCompiler(tofuCompiler());
soyAjaxController.setOutputProcessors(Lists.newArrayList(closureCompilerProcessor()));
soyAjaxController.setAuthManager(authManager());
return soyAjaxController;
}
@Bean
public AuthManager authManager() {
return new ConfigurableAuthManager(Lists.newArrayList("templates/client-words.soy", "templates/server-time.soy"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment