Package org.joget.apps.app.web

Source Code of org.joget.apps.app.web.LocalLocaleResolver

package org.joget.apps.app.web;

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import org.displaytag.localization.I18nResourceProvider;
import org.displaytag.localization.LocaleResolver;
import org.joget.apps.app.service.AppUtil;
import org.joget.commons.util.HostManager;
import org.joget.commons.util.LogUtil;
import org.joget.commons.util.ResourceBundleUtil;
import org.joget.commons.util.SetupManager;
import org.joget.directory.dao.UserDao;
import org.joget.directory.model.User;
import org.joget.workflow.model.service.WorkflowUserManager;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

public class LocalLocaleResolver extends SessionLocaleResolver implements LocaleResolver, I18nResourceProvider{
    public static final String UNDEFINED_KEY = "???"; //$NON-NLS-1$
    public static final String PARAM_NAME = "_lang";
    public static final Locale DEFAULT = new Locale("en", "US");
    public static final String DEFAULT_LOCALE_KEY = "defaultLocale";
    public static final String DEFAULT_LOCALE_EXPIRY_KEY = "locale_expiry";
    public static final String CURRENT_LOCALE_KEY = "currentLocale";
    private String paramValue;
   
    @Override
    protected Locale determineDefaultLocale(HttpServletRequest request){
        SetupManager setupManager = (SetupManager) AppUtil.getApplicationContext().getBean("setupManager");
       
        Locale locale = (Locale) request.getAttribute(DEFAULT_LOCALE_KEY);

        if (locale == null) {
            Long tempCacheDuration = 5000L; // 5 seconds
           
            // lookup in session
            boolean defaultLocaleExpired = true;
            Long defaultLocaleExpiry = (Long)request.getSession().getAttribute(DEFAULT_LOCALE_EXPIRY_KEY);
            if (defaultLocaleExpiry == null || defaultLocaleExpiry.compareTo(new Long(System.currentTimeMillis())) < 0) {
                request.getSession().removeAttribute(DEFAULT_LOCALE_KEY);
            } else {
                defaultLocaleExpired = false;
            }
            locale = (Locale) request.getSession().getAttribute(DEFAULT_LOCALE_KEY);
            if (locale == null) {
                locale = DEFAULT;
                try {
                    // reset profile and set hostname
                    HostManager.setCurrentProfile(null);
                    String hostname = request.getServerName();
                    HostManager.setCurrentHost(hostname);
                   
                    // set locale
                    String systemLocale = "";

                    String enableUserLocale = setupManager.getSettingValue("enableUserLocale");
                    if (enableUserLocale != null && enableUserLocale.equalsIgnoreCase("true")) {
                        WorkflowUserManager workflowUserManager = (WorkflowUserManager) AppUtil.getApplicationContext().getBean("workflowUserManager");
                        UserDao userDao = (UserDao) AppUtil.getApplicationContext().getBean("userDao");

                        String username = workflowUserManager.getCurrentUsername();
                        User user = userDao.getUser(username);
                        if (user != null && user.getLocale() != null && !user.getLocale().isEmpty()) {
                            systemLocale = user.getLocale();
                        }
                    }

                    if (systemLocale == null || systemLocale.isEmpty()) {
                        systemLocale = setupManager.getSettingValue("systemLocale");
                    }

                    if (systemLocale != null && systemLocale.trim().length() > 0) {
                        String[] temp = systemLocale.split("_");

                        if(temp.length == 1){
                            locale = new Locale(temp[0]);
                        }else if (temp.length == 2){
                            locale = new Locale(temp[0], temp[1]);
                        }else if (temp.length == 3){
                            locale = new Locale(temp[0], temp[1], temp[2]);
                        }

                        Locale.setDefault(DEFAULT);
                    }

                    request.setAttribute(DEFAULT_LOCALE_KEY, locale);
                   
                    // set locale and cache expiry in session
                    if (defaultLocaleExpired) {
                        Long expiry = System.currentTimeMillis() + tempCacheDuration;
                        request.getSession().setAttribute(DEFAULT_LOCALE_EXPIRY_KEY, expiry);
                        request.getSession().setAttribute(DEFAULT_LOCALE_KEY, locale);
                    }
                   
                } catch (Exception e) {
                    LogUtil.error(getClass().getName(), e, "Error setting system locale from setting, using default locale");
                }
            }
           
        }
       
        return locale;
    }
   
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale = (Locale) request.getAttribute(CURRENT_LOCALE_KEY);
       
        if (locale == null) {
            if (request != null && request.getParameter(PARAM_NAME) != null && !request.getParameter(PARAM_NAME).equals(paramValue)) {
                locale = null;
                paramValue = request.getParameter(PARAM_NAME);
                String[] temp = paramValue.split("_");

                if (temp.length == 1 && !temp[0].isEmpty()) {
                    locale = new Locale(temp[0]);
                } else if (temp.length == 2) {
                    locale = new Locale(temp[0], temp[1]);
                } else if (temp.length == 3) {
                    locale = new Locale(temp[0], temp[1], temp[2]);
                }
                if (locale != null) {
                    setLocale(request, null, locale);
                } else {
                    setLocale(request, null, null);
                }
            }
            locale = super.resolveLocale(request);
            request.setAttribute(CURRENT_LOCALE_KEY, locale);
        }
        return locale;
    }
   
    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale){
        super.setLocale(request, response, locale);
    }
   
    public String getResource(String resourceKey, String defaultValue, Tag tag, PageContext pageContext) {
        return ResourceBundleUtil.getMessage(resourceKey, defaultValue);
    }
}
TOP

Related Classes of org.joget.apps.app.web.LocalLocaleResolver

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.