
org.thymeleaf.standard.expression.StandardExpressionObjectFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of thymeleaf Show documentation
Show all versions of thymeleaf Show documentation
Modern server-side Java template engine for both web and standalone environments
/*
* =============================================================================
*
* Copyright (c) 2011-2018, The THYMELEAF team (http://www.thymeleaf.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* =============================================================================
*/
package org.thymeleaf.standard.expression;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import org.thymeleaf.context.IExpressionContext;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.context.IWebContext;
import org.thymeleaf.expression.Aggregates;
import org.thymeleaf.expression.Arrays;
import org.thymeleaf.expression.Bools;
import org.thymeleaf.expression.Calendars;
import org.thymeleaf.expression.Conversions;
import org.thymeleaf.expression.Dates;
import org.thymeleaf.expression.ExecutionInfo;
import org.thymeleaf.expression.IExpressionObjectFactory;
import org.thymeleaf.expression.Ids;
import org.thymeleaf.expression.Lists;
import org.thymeleaf.expression.Maps;
import org.thymeleaf.expression.Messages;
import org.thymeleaf.expression.Numbers;
import org.thymeleaf.expression.Objects;
import org.thymeleaf.expression.Sets;
import org.thymeleaf.expression.Strings;
import org.thymeleaf.expression.Uris;
/**
*
* Builds the expression objects to be used by Standard dialects.
*
*
* @author Daniel Fernández
*
* @since 3.0.0
*
*/
public class StandardExpressionObjectFactory implements IExpressionObjectFactory {
/*
* Any new objects added here should also be added to the "ALL_EXPRESSION_OBJECT_NAMES" See below.
*/
public static final String CONTEXT_EXPRESSION_OBJECT_NAME = "ctx";
public static final String ROOT_EXPRESSION_OBJECT_NAME = "root";
public static final String VARIABLES_EXPRESSION_OBJECT_NAME = "vars";
public static final String SELECTION_TARGET_EXPRESSION_OBJECT_NAME = "object";
public static final String LOCALE_EXPRESSION_OBJECT_NAME = "locale";
public static final String REQUEST_EXPRESSION_OBJECT_NAME = "request";
public static final String RESPONSE_EXPRESSION_OBJECT_NAME = "response";
public static final String SESSION_EXPRESSION_OBJECT_NAME = "session";
public static final String SERVLET_CONTEXT_EXPRESSION_OBJECT_NAME = "servletContext";
public static final String CONVERSIONS_EXPRESSION_OBJECT_NAME = "conversions";
public static final String URIS_EXPRESSION_OBJECT_NAME = "uris";
public static final String CALENDARS_EXPRESSION_OBJECT_NAME = "calendars";
public static final String DATES_EXPRESSION_OBJECT_NAME = "dates";
public static final String BOOLS_EXPRESSION_OBJECT_NAME = "bools";
public static final String NUMBERS_EXPRESSION_OBJECT_NAME = "numbers";
public static final String OBJECTS_EXPRESSION_OBJECT_NAME = "objects";
public static final String STRINGS_EXPRESSION_OBJECT_NAME = "strings";
public static final String ARRAYS_EXPRESSION_OBJECT_NAME = "arrays";
public static final String LISTS_EXPRESSION_OBJECT_NAME = "lists";
public static final String SETS_EXPRESSION_OBJECT_NAME = "sets";
public static final String MAPS_EXPRESSION_OBJECT_NAME = "maps";
public static final String AGGREGATES_EXPRESSION_OBJECT_NAME = "aggregates";
public static final String MESSAGES_EXPRESSION_OBJECT_NAME = "messages";
public static final String IDS_EXPRESSION_OBJECT_NAME = "ids";
public static final String EXECUTION_INFO_OBJECT_NAME = "execInfo";
/*
* These two objects, "#httpServletRequest" and "#httpSession" are still supported but deprecated
* since Thymeleaf 3.0. They will start issuing warnings in 3.1, and disappear in 3.2.
* They have been replaced by the simpler names "#request" and "#session".
*/
public static final String HTTP_SERVLET_REQUEST_EXPRESSION_OBJECT_NAME = "httpServletRequest";
public static final String HTTP_SESSION_EXPRESSION_OBJECT_NAME = "httpSession";
protected static final Set ALL_EXPRESSION_OBJECT_NAMES =
Collections.unmodifiableSet(new LinkedHashSet(java.util.Arrays.asList(
new String[]{
CONTEXT_EXPRESSION_OBJECT_NAME,
ROOT_EXPRESSION_OBJECT_NAME,
VARIABLES_EXPRESSION_OBJECT_NAME,
SELECTION_TARGET_EXPRESSION_OBJECT_NAME,
LOCALE_EXPRESSION_OBJECT_NAME,
REQUEST_EXPRESSION_OBJECT_NAME,
RESPONSE_EXPRESSION_OBJECT_NAME,
SESSION_EXPRESSION_OBJECT_NAME,
SERVLET_CONTEXT_EXPRESSION_OBJECT_NAME,
CONVERSIONS_EXPRESSION_OBJECT_NAME,
URIS_EXPRESSION_OBJECT_NAME,
CALENDARS_EXPRESSION_OBJECT_NAME,
DATES_EXPRESSION_OBJECT_NAME,
BOOLS_EXPRESSION_OBJECT_NAME,
NUMBERS_EXPRESSION_OBJECT_NAME,
OBJECTS_EXPRESSION_OBJECT_NAME,
STRINGS_EXPRESSION_OBJECT_NAME,
ARRAYS_EXPRESSION_OBJECT_NAME,
LISTS_EXPRESSION_OBJECT_NAME,
SETS_EXPRESSION_OBJECT_NAME,
MAPS_EXPRESSION_OBJECT_NAME,
AGGREGATES_EXPRESSION_OBJECT_NAME,
MESSAGES_EXPRESSION_OBJECT_NAME,
IDS_EXPRESSION_OBJECT_NAME,
EXECUTION_INFO_OBJECT_NAME,
HTTP_SERVLET_REQUEST_EXPRESSION_OBJECT_NAME,
HTTP_SESSION_EXPRESSION_OBJECT_NAME
}
)));
private static final Uris URIS_EXPRESSION_OBJECT = new Uris();
private static final Bools BOOLS_EXPRESSION_OBJECT = new Bools();
private static final Objects OBJECTS_EXPRESSION_OBJECT = new Objects();
private static final Arrays ARRAYS_EXPRESSION_OBJECT = new Arrays();
private static final Lists LISTS_EXPRESSION_OBJECT = new Lists();
private static final Sets SETS_EXPRESSION_OBJECT = new Sets();
private static final Maps MAPS_EXPRESSION_OBJECT = new Maps();
private static final Aggregates AGGREGATES_EXPRESSION_OBJECT = new Aggregates();
public StandardExpressionObjectFactory() {
super();
}
public Set getAllExpressionObjectNames() {
return ALL_EXPRESSION_OBJECT_NAMES;
}
public boolean isCacheable(final String expressionObjectName) {
// Only #object is non-cacheable (template-scope)
return (expressionObjectName != null && !expressionObjectName.equals(SELECTION_TARGET_EXPRESSION_OBJECT_NAME));
}
public Object buildObject(
final IExpressionContext context,
final String expressionObjectName) {
if (SELECTION_TARGET_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof ITemplateContext) {
final ITemplateContext templateContext = (ITemplateContext) context;
if (templateContext.hasSelectionTarget()) {
return templateContext.getSelectionTarget();
}
}
return context;
}
if (ROOT_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return context;
}
if (VARIABLES_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return context;
}
if (CONTEXT_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return context;
}
if (LOCALE_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return context.getLocale();
}
if (REQUEST_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof IWebContext) {
return ((IWebContext) context).getRequest();
}
return null;
}
if (RESPONSE_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof IWebContext) {
return ((IWebContext) context).getResponse();
}
return null;
}
if (SESSION_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof IWebContext) {
return ((IWebContext) context).getSession();
}
return null;
}
if (SERVLET_CONTEXT_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof IWebContext) {
return ((IWebContext) context).getServletContext();
}
return null;
}
if (HTTP_SERVLET_REQUEST_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
/*
* NOTE "#httpServletRequest" is still usable, but deprecated since Thymeleaf 3.0.
* Its usage will issue warnings in 3.1, and the object will be removed in 3.2
*/
if (context instanceof IWebContext) {
return ((IWebContext) context).getRequest();
}
return null;
}
if (HTTP_SESSION_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
/*
* NOTE "#httpSession" is still usable, but deprecated since Thymeleaf 3.0.
* Its usage will issue warnings in 3.1, and the object will be removed in 3.2
*/
if (context instanceof IWebContext) {
return ((IWebContext) context).getSession();
}
return null;
}
if (CONVERSIONS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return new Conversions(context);
}
if (URIS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return URIS_EXPRESSION_OBJECT;
}
if (CALENDARS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return new Calendars(context.getLocale());
}
if (DATES_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return new Dates(context.getLocale());
}
if (BOOLS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return BOOLS_EXPRESSION_OBJECT;
}
if (NUMBERS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return new Numbers(context.getLocale());
}
if (OBJECTS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return OBJECTS_EXPRESSION_OBJECT;
}
if (STRINGS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return new Strings(context.getLocale());
}
if (ARRAYS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return ARRAYS_EXPRESSION_OBJECT;
}
if (LISTS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return LISTS_EXPRESSION_OBJECT;
}
if (SETS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return SETS_EXPRESSION_OBJECT;
}
if (MAPS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return MAPS_EXPRESSION_OBJECT;
}
if (AGGREGATES_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
return AGGREGATES_EXPRESSION_OBJECT;
}
if (MESSAGES_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof ITemplateContext) {
return new Messages((ITemplateContext) context);
}
return null;
}
if (IDS_EXPRESSION_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof ITemplateContext) {
return new Ids((ITemplateContext) context);
}
return null;
}
if (EXECUTION_INFO_OBJECT_NAME.equals(expressionObjectName)) {
if (context instanceof ITemplateContext) {
return new ExecutionInfo((ITemplateContext) context);
}
return null;
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy