// Path: src/main/java/com/raibledesigns/Constants.java
// public final class Constants {
// 
//     private Constants() {
//         // hide me
//     }
//     //~ Static fields/initializers =============================================
// 
//     /**
//      * Assets Version constant
//      */
//     public static final String ASSETS_VERSION = "assetsVersion";
//     /**
//      * The name of the ResourceBundle used in this application
//      */
//     public static final String BUNDLE_KEY = "ApplicationResources";
// 
//     /**
//      * File separator from System properties
//      */
//     public static final String FILE_SEP = System.getProperty("file.separator");
// 
//     /**
//      * User home from System properties
//      */
//     public static final String USER_HOME = System.getProperty("user.home") + FILE_SEP;
// 
//     /**
//      * The name of the configuration hashmap stored in application scope.
//      */
//     public static final String CONFIG = "appConfig";
// 
//     /**
//      * Session scope attribute that holds the locale set by the user. By setting this key
//      * to the same one that Struts uses, we get synchronization in Struts w/o having
//      * to do extra work or have two session-level variables.
//      */
//     public static final String PREFERRED_LOCALE_KEY = "org.apache.struts2.action.LOCALE";
// 
//     /**
//      * The request scope attribute under which an editable user form is stored
//      */
//     public static final String USER_KEY = "userForm";
// 
//     /**
//      * The request scope attribute that holds the user list
//      */
//     public static final String USER_LIST = "userList";
// 
//     /**
//      * The request scope attribute for indicating a newly-registered user
//      */
//     public static final String REGISTERED = "registered";
// 
//     /**
//      * The name of the Administrator role, as specified in web.xml
//      */
//     public static final String ADMIN_ROLE = "ROLE_ADMIN";
// 
//     /**
//      * The name of the User role, as specified in web.xml
//      */
//     public static final String USER_ROLE = "ROLE_USER";
// 
//     /**
//      * The name of the user's role list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String USER_ROLES = "userRoles";
// 
//     /**
//      * The name of the available roles list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String AVAILABLE_ROLES = "availableRoles";
// 
//     /**
//      * The name of the CSS Theme setting.
//      * @deprecated No longer used to set themes.
//      */
//     public static final String CSS_THEME = "csstheme";
// }


import com.raibledesigns.Constants;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.core.Config;
import java.io.IOException;
import java.util.Locale;
package com.raibledesigns.webapp.filter;



/**
 * Filter to wrap request with a request including user preferred locale.
 */
public class LocaleFilter extends OncePerRequestFilter {

    /**
     * This method looks for a "locale" request parameter. If it finds one, it sets it as the preferred locale
     * and also configures it to work with JSTL.
     *
     * @param request the current request
     * @param response the current response
     * @param chain the chain
     * @throws IOException when something goes wrong
     * @throws ServletException when a communication failure happens
     */
    @SuppressWarnings("unchecked")
    public void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                 FilterChain chain)
            throws IOException, ServletException {

        String locale = request.getParameter("locale");
        Locale preferredLocale = null;

        if (locale != null) {
            int indexOfUnderscore = locale.indexOf('_');
            if (indexOfUnderscore != -1) {
                String language = locale.substring(0, indexOfUnderscore);
                String country = locale.substring(indexOfUnderscore + 1);
                preferredLocale = new Locale(language, country);
            } else {
                preferredLocale = new Locale(locale);
            }
        }

        HttpSession session = request.getSession(false);

        if (session != null) {
            if (preferredLocale == null) {
// Path: src/main/java/com/raibledesigns/Constants.java
// public final class Constants {
// 
//     private Constants() {
//         // hide me
//     }
//     //~ Static fields/initializers =============================================
// 
//     /**
//      * Assets Version constant
//      */
//     public static final String ASSETS_VERSION = "assetsVersion";
//     /**
//      * The name of the ResourceBundle used in this application
//      */
//     public static final String BUNDLE_KEY = "ApplicationResources";
// 
//     /**
//      * File separator from System properties
//      */
//     public static final String FILE_SEP = System.getProperty("file.separator");
// 
//     /**
//      * User home from System properties
//      */
//     public static final String USER_HOME = System.getProperty("user.home") + FILE_SEP;
// 
//     /**
//      * The name of the configuration hashmap stored in application scope.
//      */
//     public static final String CONFIG = "appConfig";
// 
//     /**
//      * Session scope attribute that holds the locale set by the user. By setting this key
//      * to the same one that Struts uses, we get synchronization in Struts w/o having
//      * to do extra work or have two session-level variables.
//      */
//     public static final String PREFERRED_LOCALE_KEY = "org.apache.struts2.action.LOCALE";
// 
//     /**
//      * The request scope attribute under which an editable user form is stored
//      */
//     public static final String USER_KEY = "userForm";
// 
//     /**
//      * The request scope attribute that holds the user list
//      */
//     public static final String USER_LIST = "userList";
// 
//     /**
//      * The request scope attribute for indicating a newly-registered user
//      */
//     public static final String REGISTERED = "registered";
// 
//     /**
//      * The name of the Administrator role, as specified in web.xml
//      */
//     public static final String ADMIN_ROLE = "ROLE_ADMIN";
// 
//     /**
//      * The name of the User role, as specified in web.xml
//      */
//     public static final String USER_ROLE = "ROLE_USER";
// 
//     /**
//      * The name of the user's role list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String USER_ROLES = "userRoles";
// 
//     /**
//      * The name of the available roles list, a request-scoped attribute
//      * when adding/editing a user.
//      */
//     public static final String AVAILABLE_ROLES = "availableRoles";
// 
//     /**
//      * The name of the CSS Theme setting.
//      * @deprecated No longer used to set themes.
//      */
//     public static final String CSS_THEME = "csstheme";
// }


// Path: src/main/java/com/raibledesigns/webapp/filter/LocaleFilter.java
import com.raibledesigns.Constants;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.jstl.core.Config;
import java.io.IOException;
import java.util.Locale;

package com.raibledesigns.webapp.filter;



/**
 * Filter to wrap request with a request including user preferred locale.
 */
public class LocaleFilter extends OncePerRequestFilter {

    /**
     * This method looks for a "locale" request parameter. If it finds one, it sets it as the preferred locale
     * and also configures it to work with JSTL.
     *
     * @param request the current request
     * @param response the current response
     * @param chain the chain
     * @throws IOException when something goes wrong
     * @throws ServletException when a communication failure happens
     */
    @SuppressWarnings("unchecked")
    public void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                 FilterChain chain)
            throws IOException, ServletException {

        String locale = request.getParameter("locale");
        Locale preferredLocale = null;

        if (locale != null) {
            int indexOfUnderscore = locale.indexOf('_');
            if (indexOfUnderscore != -1) {
                String language = locale.substring(0, indexOfUnderscore);
                String country = locale.substring(indexOfUnderscore + 1);
                preferredLocale = new Locale(language, country);
            } else {
                preferredLocale = new Locale(locale);
            }
        }

        HttpSession session = request.getSession(false);

        if (session != null) {
            if (preferredLocale == null) {
                preferredLocale = (Locale) session.getAttribute(Constants.PREFERRED_LOCALE_KEY);