package com.juick.www.configuration; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; import com.juick.service.TagService; import com.juick.service.UserService; import com.juick.www.HelpService; import com.juick.www.WebApp; import com.juick.www.controllers.PageTemplates; import org.apache.commons.io.IOUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.cache.caffeine.CaffeineCacheManager; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import javax.annotation.Resource; import javax.inject.Inject; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.HashMap; /** * Created by aalexeev on 11/22/16. */ @Configuration @PropertySource("classpath:juick.conf") @EnableCaching public class WwwAppConfiguration { @Resource private Environment env; @Inject private UserService userService; @Inject private TagService tagService; @Inject private ObjectMapper jsonMapper; @Value("#{servletContext.contextPath}") private String servletContextPath; @Bean public WebApp webApp() throws IOException { WebApp app = new WebApp(); String manifestString = IOUtils.toString(getClass().getClassLoader().getResourceAsStream("manifest.json"), StandardCharsets.UTF_8); HashMap manifest = jsonMapper.readValue(manifestString, new TypeReference>() {}); app.setScriptsUrl(manifest.get("scripts.js")); app.setStyleUrl(manifest.get("style.css")); return app; } @Bean public PageTemplates templates() { return new PageTemplates(); } @Bean public CaffeineCacheManager cacheManager() { return new CaffeineCacheManager("help"); } @Bean public HelpService helpService() { return new HelpService("help"); } @Bean public ObjectMapper jsonMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); mapper.setSerializationInclusion(JsonInclude.Include.NON_DEFAULT); mapper.registerModule(new Jdk8Module()); return mapper; } }