Skip to content

Commit

Permalink
BAEL-86: Added localization and themes.
Browse files Browse the repository at this point in the history
  • Loading branch information
christian-raedel authored and slavisa-baeldung committed Nov 2, 2016
1 parent 3808960 commit 88a4f61
Show file tree
Hide file tree
Showing 23 changed files with 244 additions and 113 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-dispatcher-servlet</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>war</packaging>

<parent>
<groupId>com.baeldung.enterprise.patterns</groupId>
<artifactId>enterprise-patterns-parent</artifactId>
<groupId>com.baeldung</groupId>
<artifactId>parent-modules</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
Expand All @@ -25,22 +24,27 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.2.RELEASE</version>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.1.RELEASE</version>
<version>3.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.6.2</version>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
</dependencies>

Expand All @@ -49,6 +53,11 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Expand All @@ -61,7 +70,7 @@
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.0.M1</version>
<version>9.3.12.v20160915</version>
<configuration>
<webApp>
<contextPath>/</contextPath>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet;
package com.baeldung.spring.dispatcher.servlet;

import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
package com.baeldung.spring.dispatcher.servlet;

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.ui.context.support.ResourceBundleThemeSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.ThemeResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.theme.CookieThemeResolver;
import org.springframework.web.servlet.theme.ThemeChangeInterceptor;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ServletContextTemplateResolver;

import javax.servlet.ServletContext;
import java.util.Locale;

@Configuration
@ComponentScan("com.baeldung.enterprise.patterns.dispatcher.servlet.web")
@EnableWebMvc
public class WebConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/public/**")
.addResourceLocations("/public/");
}

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(themeChangeInterceptor());
}

@Bean
public ServletContextTemplateResolver templateResolver(ServletContext servletContext) {
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
return templateResolver;
}

@Bean
public SpringTemplateEngine templateEngine(ServletContextTemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}

@Bean
public ThymeleafViewResolver viewResolver(SpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}

@Bean
public MessageSource messageSource() {
ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("messages");
return messageSource;
}

@Bean
public LocaleResolver localeResolver() {
CookieLocaleResolver localeResolver = new CookieLocaleResolver();
localeResolver.setDefaultLocale(Locale.ENGLISH);
localeResolver.setCookieName("locale");
localeResolver.setCookieMaxAge(-1);
return localeResolver;
}

@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor();
localeChangeInterceptor.setParamName("lang");
localeChangeInterceptor.setIgnoreInvalidLocale(true);
return localeChangeInterceptor;
}

@Bean
public ResourceBundleThemeSource themeSource() {
ResourceBundleThemeSource themeSource = new ResourceBundleThemeSource();
themeSource.setBasenamePrefix("theme-");
themeSource.setFallbackToSystemLocale(false);
return themeSource;
}

@Bean
public ThemeResolver themeResolver() {
CookieThemeResolver themeResolver = new CookieThemeResolver();
themeResolver.setDefaultThemeName("robotask");
themeResolver.setCookieName("theme");
themeResolver.setCookieMaxAge(-1);
return themeResolver;
}

@Bean
public ThemeChangeInterceptor themeChangeInterceptor() {
ThemeChangeInterceptor themeChangeInterceptor = new ThemeChangeInterceptor();
themeChangeInterceptor.setParamName("theme");
return themeChangeInterceptor;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet;
package com.baeldung.spring.dispatcher.servlet;

import com.baeldung.spring.dispatcher.servlet.web.filters.RequestLoggingFilter;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.Filter;

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
Expand All @@ -15,6 +18,11 @@ protected Class<?>[] getServletConfigClasses() {

@Override
protected String[] getServletMappings() {
return new String[]{"/example/*"};
return new String[]{"/*"};
}

@Override
protected Filter[] getServletFilters() {
return new Filter[]{new RequestLoggingFilter()};
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet.models;
package com.baeldung.spring.dispatcher.servlet.models;

import org.springframework.format.annotation.DateTimeFormat;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
package com.baeldung.spring.dispatcher.servlet.web;

import org.springframework.core.annotation.AnnotationUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
package com.baeldung.spring.dispatcher.servlet.web;

import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Controller
@RequestMapping("/")
public class HomeController {
@Autowired
private Map<String, List<Task>> taskMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package com.baeldung.enterprise.patterns.dispatcher.servlet.web;
package com.baeldung.spring.dispatcher.servlet.web;

import com.baeldung.enterprise.patterns.dispatcher.servlet.models.Task;
import com.baeldung.spring.dispatcher.servlet.models.Task;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;

@Controller
Expand All @@ -24,7 +21,7 @@ public String listForm(
@PathVariable("username") String username
) {
List<Task> tasks = taskMap.get(username).stream()
.sorted((t1, t2) -> t1.getDue().compareTo(t2.getDue()))
.sorted(Comparator.comparing(Task::getDue))
.collect(Collectors.toList());
model.addAttribute("username", username);
model.addAttribute("tasks", tasks);
Expand Down
10 changes: 10 additions & 0 deletions spring-dispatcher-servlet/src/main/resources/messages.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
home.title=Welcome to TaskTools!
task.add.description=description
task.add.due=due
task.add.header=Adding a task to {0}''s list:
task.add.submit=Submit
task.add.title={0}: task add
task.list.add-new=Add new
task.list.header={0}''s tasks:
task.list.home=Home
task.list.title={0}: task list
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
home.title=Willkommen bei TaskTools!
task.add.description=Beschreibung
task.add.due=f\u00e4llig
task.add.header=F\u00fcge eine Aufgabe zu {0}''s Liste hinzu:
task.add.submit=Senden
task.add.title={0}: Task hinzuf\u00fcgen
task.list.add-new=Neuer Task
task.list.header={0}''s Tasks:
task.list.home=Startseite
task.list.title={0}: Task Liste
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
stylesheet=/public/css/themes/post_it.css
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
stylesheet=/public/css/themes/robotask.css
Loading

0 comments on commit 88a4f61

Please sign in to comment.