NavigationManager navigationManager = NavigationManager.lookup();
UserStatus userStatus = UserStatus.lookup();
RequestContext requestContext = RequestContext.lookup();
// ---- Apply locale information, --------------
LocaleManager localeManager = LocaleManager.lookup();
// First check if a locale parameter is present in the URI query string.
Locale localeToSet = null;
String localeParam = request.getParameter(LOCALE_PARAMETER);
if (localeParam != null && localeParam.trim().length() > 0) {
localeToSet = localeManager.getLocaleById(localeParam);
if (localeToSet != null) {
localeManager.setCurrentLocale(localeToSet);
}
}
// No friendly -> nothing to do.
if (!servletPath.startsWith(FRIENDLY_MAPPING)) return true;
String contextPath = request.getContextPath();
requestContext.consumeURIPart(FRIENDLY_MAPPING);
navigationManager.setShowingConfig(false);
String requestUri = request.getRequestURI();
String relativeUri = requestUri.substring(contextPath == null ? 0 : (contextPath.length()));
relativeUri = relativeUri.substring(servletPath == null ? 0 : (servletPath.length()));
// Empty URI -> nothing to do.
if (StringUtils.isBlank(relativeUri)) return true;
/*
* Check if the locale information is in the URI value in order to consume it.
* Locale information is expected in the URI after "/workspace".
* Examples:
* - /workspace/en/....
* - /workspace/es/....
* - /workspace/en_ES/....
* NOTES:
* - Available locales matched in the URI parameter are obtained from JVM available locales.
* - If the locale is found as platform available, the locale is set.
* - Otherwise, do nothing, the locale used will be the last one set or default.
* - In both cases URI locale parameter will be consumed.
*/
int startLocaleUri = relativeUri.indexOf("/");
int endLocaleUri = relativeUri.indexOf("/", startLocaleUri + 1);
endLocaleUri = endLocaleUri > 0 ? endLocaleUri : relativeUri.length();
String localeUri = relativeUri.substring(startLocaleUri + 1, endLocaleUri);
Locale uriLocale = localeManager.getLocaleById(localeUri);
if (uriLocale != null) {
requestContext.consumeURIPart("/" + localeUri);
relativeUri = relativeUri.substring(localeUri.length() + 1);
// Use the locale specified in the URI value only if no locale specified in the qeury string.
if (localeToSet == null) localeManager.setCurrentLocale(uriLocale);
}
// Tokenize the friendly URI.
StringTokenizer tokenizer = new StringTokenizer(relativeUri, "/", false);
List tokens = new ArrayList();