Class Configurable

java.lang.Object
freemarker.core.Configurable
Direct Known Subclasses:
Configuration, Environment, Template, TemplateConfiguration

public class Configurable extends Object
This is a common superclass of Configuration, Template, and Environment classes. It provides settings that are common to each of them. FreeMarker uses a three-level setting hierarchy - the return value of every setting getter method on Configurable objects inherits its value from its parent Configurable object, unless explicitly overridden by a call to a corresponding setter method on the object itself. The parent of an Environment object is a Template object, the parent of a Template object is a Configuration object.
  • Field Details

    • LOCALE_KEY_SNAKE_CASE

      public static final String LOCALE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • LOCALE_KEY_CAMEL_CASE

      public static final String LOCALE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • LOCALE_KEY

      public static final String LOCALE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • C_FORMAT_KEY_SNAKE_CASE

      public static final String C_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • C_FORMAT_KEY_CAMEL_CASE

      public static final String C_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • C_FORMAT_KEY

      public static final String C_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • NUMBER_FORMAT_KEY_SNAKE_CASE

      public static final String NUMBER_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • NUMBER_FORMAT_KEY_CAMEL_CASE

      public static final String NUMBER_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • NUMBER_FORMAT_KEY

      public static final String NUMBER_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE

      public static final String CUSTOM_NUMBER_FORMATS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE

      public static final String CUSTOM_NUMBER_FORMATS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CUSTOM_NUMBER_FORMATS_KEY

      public static final String CUSTOM_NUMBER_FORMATS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • TIME_FORMAT_KEY_SNAKE_CASE

      public static final String TIME_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TIME_FORMAT_KEY_CAMEL_CASE

      public static final String TIME_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TIME_FORMAT_KEY

      public static final String TIME_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • DATE_FORMAT_KEY_SNAKE_CASE

      public static final String DATE_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • DATE_FORMAT_KEY_CAMEL_CASE

      public static final String DATE_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • DATE_FORMAT_KEY

      public static final String DATE_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE

      public static final String CUSTOM_DATE_FORMATS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE

      public static final String CUSTOM_DATE_FORMATS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CUSTOM_DATE_FORMATS_KEY

      public static final String CUSTOM_DATE_FORMATS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • DATETIME_FORMAT_KEY_SNAKE_CASE

      public static final String DATETIME_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • DATETIME_FORMAT_KEY_CAMEL_CASE

      public static final String DATETIME_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • DATETIME_FORMAT_KEY

      public static final String DATETIME_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • TIME_ZONE_KEY_SNAKE_CASE

      public static final String TIME_ZONE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TIME_ZONE_KEY_CAMEL_CASE

      public static final String TIME_ZONE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TIME_ZONE_KEY

      public static final String TIME_ZONE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE

      public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE

      public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • SQL_DATE_AND_TIME_TIME_ZONE_KEY

      public static final String SQL_DATE_AND_TIME_TIME_ZONE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • CLASSIC_COMPATIBLE_KEY_SNAKE_CASE

      public static final String CLASSIC_COMPATIBLE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CLASSIC_COMPATIBLE_KEY_CAMEL_CASE

      public static final String CLASSIC_COMPATIBLE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • CLASSIC_COMPATIBLE_KEY

      public static final String CLASSIC_COMPATIBLE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE

      public static final String TEMPLATE_EXCEPTION_HANDLER_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE

      public static final String TEMPLATE_EXCEPTION_HANDLER_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • TEMPLATE_EXCEPTION_HANDLER_KEY

      public static final String TEMPLATE_EXCEPTION_HANDLER_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • ATTEMPT_EXCEPTION_REPORTER_KEY_SNAKE_CASE

      public static final String ATTEMPT_EXCEPTION_REPORTER_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.27
      See Also:
      Constant Field Values
    • ATTEMPT_EXCEPTION_REPORTER_KEY_CAMEL_CASE

      public static final String ATTEMPT_EXCEPTION_REPORTER_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.27
      See Also:
      Constant Field Values
    • ATTEMPT_EXCEPTION_REPORTER_KEY

      public static final String ATTEMPT_EXCEPTION_REPORTER_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • ARITHMETIC_ENGINE_KEY_SNAKE_CASE

      public static final String ARITHMETIC_ENGINE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • ARITHMETIC_ENGINE_KEY_CAMEL_CASE

      public static final String ARITHMETIC_ENGINE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • ARITHMETIC_ENGINE_KEY

      public static final String ARITHMETIC_ENGINE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • OBJECT_WRAPPER_KEY_SNAKE_CASE

      public static final String OBJECT_WRAPPER_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • OBJECT_WRAPPER_KEY_CAMEL_CASE

      public static final String OBJECT_WRAPPER_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • OBJECT_WRAPPER_KEY

      public static final String OBJECT_WRAPPER_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • BOOLEAN_FORMAT_KEY_SNAKE_CASE

      public static final String BOOLEAN_FORMAT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • BOOLEAN_FORMAT_KEY_CAMEL_CASE

      public static final String BOOLEAN_FORMAT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • BOOLEAN_FORMAT_KEY

      public static final String BOOLEAN_FORMAT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • OUTPUT_ENCODING_KEY_SNAKE_CASE

      public static final String OUTPUT_ENCODING_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • OUTPUT_ENCODING_KEY_CAMEL_CASE

      public static final String OUTPUT_ENCODING_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • OUTPUT_ENCODING_KEY

      public static final String OUTPUT_ENCODING_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • URL_ESCAPING_CHARSET_KEY_SNAKE_CASE

      public static final String URL_ESCAPING_CHARSET_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • URL_ESCAPING_CHARSET_KEY_CAMEL_CASE

      public static final String URL_ESCAPING_CHARSET_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • URL_ESCAPING_CHARSET_KEY

      public static final String URL_ESCAPING_CHARSET_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • STRICT_BEAN_MODELS_KEY_SNAKE_CASE

      public static final String STRICT_BEAN_MODELS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • STRICT_BEAN_MODELS_KEY_CAMEL_CASE

      public static final String STRICT_BEAN_MODELS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • STRICT_BEAN_MODELS_KEY

      public static final String STRICT_BEAN_MODELS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.22
      See Also:
      Constant Field Values
    • AUTO_FLUSH_KEY_SNAKE_CASE

      public static final String AUTO_FLUSH_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • AUTO_FLUSH_KEY_CAMEL_CASE

      public static final String AUTO_FLUSH_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • AUTO_FLUSH_KEY

      public static final String AUTO_FLUSH_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.17
      See Also:
      Constant Field Values
    • NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE

      public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE

      public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • NEW_BUILTIN_CLASS_RESOLVER_KEY

      public static final String NEW_BUILTIN_CLASS_RESOLVER_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.17
      See Also:
      Constant Field Values
    • SHOW_ERROR_TIPS_KEY_SNAKE_CASE

      public static final String SHOW_ERROR_TIPS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • SHOW_ERROR_TIPS_KEY_CAMEL_CASE

      public static final String SHOW_ERROR_TIPS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • SHOW_ERROR_TIPS_KEY

      public static final String SHOW_ERROR_TIPS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.21
      See Also:
      Constant Field Values
    • API_BUILTIN_ENABLED_KEY_SNAKE_CASE

      public static final String API_BUILTIN_ENABLED_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • API_BUILTIN_ENABLED_KEY_CAMEL_CASE

      public static final String API_BUILTIN_ENABLED_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • API_BUILTIN_ENABLED_KEY

      public static final String API_BUILTIN_ENABLED_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.22
      See Also:
      Constant Field Values
    • TRUNCATE_BUILTIN_ALGORITHM_KEY_SNAKE_CASE

      public static final String TRUNCATE_BUILTIN_ALGORITHM_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.29
      See Also:
      Constant Field Values
    • TRUNCATE_BUILTIN_ALGORITHM_KEY_CAMEL_CASE

      public static final String TRUNCATE_BUILTIN_ALGORITHM_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.29
      See Also:
      Constant Field Values
    • TRUNCATE_BUILTIN_ALGORITHM_KEY

      public static final String TRUNCATE_BUILTIN_ALGORITHM_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE

      public static final String LOG_TEMPLATE_EXCEPTIONS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE

      public static final String LOG_TEMPLATE_EXCEPTIONS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.23
      See Also:
      Constant Field Values
    • LOG_TEMPLATE_EXCEPTIONS_KEY

      public static final String LOG_TEMPLATE_EXCEPTIONS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.22
      See Also:
      Constant Field Values
    • WRAP_UNCHECKED_EXCEPTIONS_KEY_SNAKE_CASE

      public static final String WRAP_UNCHECKED_EXCEPTIONS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.27
      See Also:
      Constant Field Values
    • WRAP_UNCHECKED_EXCEPTIONS_KEY_CAMEL_CASE

      public static final String WRAP_UNCHECKED_EXCEPTIONS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.27
      See Also:
      Constant Field Values
    • WRAP_UNCHECKED_EXCEPTIONS_KEY

      public static final String WRAP_UNCHECKED_EXCEPTIONS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints. @since 2.3.27
      See Also:
      Constant Field Values
    • LAZY_IMPORTS_KEY_SNAKE_CASE

      public static final String LAZY_IMPORTS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • LAZY_IMPORTS_KEY_CAMEL_CASE

      public static final String LAZY_IMPORTS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • LAZY_IMPORTS_KEY

      public static final String LAZY_IMPORTS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE

      public static final String LAZY_AUTO_IMPORTS_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE

      public static final String LAZY_AUTO_IMPORTS_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • LAZY_AUTO_IMPORTS_KEY

      public static final String LAZY_AUTO_IMPORTS_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • AUTO_IMPORT_KEY_SNAKE_CASE

      public static final String AUTO_IMPORT_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • AUTO_IMPORT_KEY_CAMEL_CASE

      public static final String AUTO_IMPORT_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • AUTO_IMPORT_KEY

      public static final String AUTO_IMPORT_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • AUTO_INCLUDE_KEY_SNAKE_CASE

      public static final String AUTO_INCLUDE_KEY_SNAKE_CASE
      Legacy, snake case (like_this) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • AUTO_INCLUDE_KEY_CAMEL_CASE

      public static final String AUTO_INCLUDE_KEY_CAMEL_CASE
      Modern, camel case (likeThis) variation of the setting name. @since 2.3.25
      See Also:
      Constant Field Values
    • AUTO_INCLUDE_KEY

      public static final String AUTO_INCLUDE_KEY
      Alias to the ..._SNAKE_CASE variation due to backward compatibility constraints.
      See Also:
      Constant Field Values
    • STRICT_BEAN_MODELS

      @Deprecated public static final String STRICT_BEAN_MODELS
      Deprecated.
      See Also:
      Constant Field Values
  • Constructor Details

    • Configurable

      @Deprecated public Configurable()
      Deprecated.
      This shouldn't even be public; don't use it.
      Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values.
    • Configurable

      protected Configurable(Version incompatibleImprovements)
      Intended to be called from inside FreeMarker only. Creates a top-level configurable, one that doesn't inherit from a parent, and thus stores the default values. Called by the Configuration constructor.
    • Configurable

      public Configurable(Configurable parent)
      Creates a new instance. Normally you do not need to use this constructor, as you don't use Configurable directly, but its subclasses.
  • Method Details

    • clone

      protected Object clone() throws CloneNotSupportedException
      Overrides:
      clone in class Object
      Throws:
      CloneNotSupportedException
    • getParent

      public final Configurable getParent()
      Returns the parent Configurable object of this object. The parent stores the default setting values for this Configurable. For example, the parent of a Template object is a Configuration object, so values not specified on Template-level are get from the Configuration object.

      Note on the parent of Environment: If you set incompatible_improvements to at least 2.3.22, it will be always the "main" Template, that is, the template for whose processing the Environment was created. With lower incompatible_improvements, the current parent can temporary change during template execution, for example when your are inside an #include-d template (among others). Thus, don't build on which Template the parent of Environment is during template execution, unless you set incompatible_improvements to 2.3.22 or higher.

      Returns:
      The parent Configurable object, or null if this is the root Configurable object (i.e, if it's the Configuration object).
    • setClassicCompatible

      public void setClassicCompatible(boolean classicCompatibility)
      Toggles the "Classic Compatible" mode. For a comprehensive description of this mode, see isClassicCompatible().
    • setClassicCompatibleAsInt

      public void setClassicCompatibleAsInt(int classicCompatibility)
      Same as setClassicCompatible(boolean), but allows some extra values.
      Parameters:
      classicCompatibility - 0 means false, 1 means true, 2 means true but with emulating bugs in early 2.x classic-compatibility mode. Currently 2 affects how booleans are converted to string; with 1 it's always "true"/"", but with 2 it's "true"/"false" for values wrapped by BeansWrapper as then Boolean.toString() prevails. Note that someBoolean?string will always consistently format the boolean according the boolean_format setting, just like in FreeMarker 2.3 and later.
    • isClassicCompatible

      public boolean isClassicCompatible()
      Returns whether the engine runs in the "Classic Compatibile" mode. When this mode is active, the engine behavior is altered in following way: (these resemble the behavior of the 1.7.x line of FreeMarker engine, now named "FreeMarker Classic", hence the name).
      • handle undefined expressions gracefully. Namely when an expression "expr" evaluates to null:
        • in <assign varname=expr> directive, or in ${expr} directive, or in otherexpr == expr, or in otherexpr != expr, or in hash[expr], or in expr[keyOrIndex] (since 2.3.20), or in expr.key (since 2.3.20), then it's treated as empty string.
        • as argument of <list expr as item> or <foreach item in expr>, the loop body is not executed (as if it were a 0-length list)
        • as argument of <if> directive, or on other places where a boolean expression is expected, it's treated as false
      • Non-boolean models are accepted in <if> directive, or as operands of logical operators. "Empty" models (zero-length string, empty sequence or hash) are evaluated as false, all others are evaluated as true.
      • When boolean value is treated as a string (i.e. output in ${...} directive, or concatenated with other string), true values are converted to string "true", false values are converted to empty string. Except, if the value of the setting is 2, it will be formatted according the boolean_format setting, just like in 2.3.20 and later.
      • Scalar models supplied to <list> and <foreach> are treated as a one-element list consisting of the passed model.
      • Paths parameter of <include> will be interpreted as absolute path.
      In all other aspects, the engine is a 2.1 engine even in compatibility mode - you don't lose any of the new functionality by enabling it.
    • getClassicCompatibleAsInt

      public int getClassicCompatibleAsInt()
    • isClassicCompatibleSet

      public boolean isClassicCompatibleSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setLocale

      public void setLocale(Locale locale)
      Sets the locale used for number and date formatting (among others), also the locale used for searching localized template variations when no locale was explicitly requested. On the Configuration level it defaults to the default locale of system (of the JVM), for server-side application usually you should set it explicitly in the Configuration to use the preferred locale of your application instead.
      See Also:
      Configuration.getTemplate(String, Locale)
    • getLocale

      public Locale getLocale()
      Getter pair of setLocale(Locale). Not null.
    • isCFormatSet

      public boolean isCFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.32
    • setCFormat

      public void setCFormat(CFormat cFormat)
      Sets the format (usually a computer language) used for ?c, ?cn, and for the "c" ("computer" before 2.3.32) number_format, and the "c" boolean_format.

      The default value depends on incompatible_improvements. If that's 2.3.32 or higher, then it's "JavaScript or JSON", otherwise it's "legacy".

      Since:
      2.3.32
    • getCFormat

      public CFormat getCFormat()
      Getter pair of setCFormat(CFormat). Not null.
      Since:
      2.3.32
    • isLocaleSet

      public boolean isLocaleSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setTimeZone

      public void setTimeZone(TimeZone timeZone)
      Sets the time zone to use when formatting date/time values. Defaults to the system time zone (TimeZone.getDefault()), regardless of the "locale" FreeMarker setting, so in a server application you probably want to set it explicitly in the Environment to match the preferred time zone of target audience (like the Web page visitor).

      If you or the templates set the time zone, you should probably also set setSQLDateAndTimeTimeZone(TimeZone)!

      See Also:
      setSQLDateAndTimeTimeZone(TimeZone)
    • getTimeZone

      public TimeZone getTimeZone()
      The getter pair of setTimeZone(TimeZone).
    • isTimeZoneSet

      public boolean isTimeZoneSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setSQLDateAndTimeTimeZone

      public void setSQLDateAndTimeTimeZone(TimeZone tz)
      Sets the time zone used when dealing with java.sql.Date and java.sql.Time values. It defaults to null for backward compatibility, but in most applications this should be set to the JVM default time zone (server default time zone), because that's what most JDBC drivers will use when constructing the java.sql.Date and java.sql.Time values. If this setting is null, FreeMarker will use the value of (getTimeZone()) for java.sql.Date and java.sql.Time values, which often gives bad results.

      This setting doesn't influence the formatting of other kind of values (like of java.sql.Timestamp or plain java.util.Date values).

      To decide what value you need, a few things has to be understood:

      • Date-only and time-only values in SQL-oriented databases usually store calendar and clock field values directly (year, month, day, or hour, minute, seconds (with decimals)), as opposed to a set of points on the physical time line. Thus, unlike SQL timestamps, these values usually aren't meant to be shown differently depending on the time zone of the audience.
      • When a JDBC query has to return a date-only or time-only value, it has to convert it to a point on the physical time line, because that's what Date and its subclasses store (milliseconds since the epoch). Obviously, this is impossible to do. So JDBC just chooses a physical time which, when rendered with the JVM default time zone, will give the same field values as those stored in the database. (Actually, you can give JDBC a calendar, and so it can use other time zones too, but most application won't care using those overloads.) For example, assume that the system time zone is GMT+02:00. Then, 2014-07-12 in the database will be translated to physical time 2014-07-11 22:00:00 UTC, because that rendered in GMT+02:00 gives 2014-07-12 00:00:00. Similarly, 11:57:00 in the database will be translated to physical time 1970-01-01 09:57:00 UTC. Thus, the physical time stored in the returned value depends on the default system time zone of the JDBC client, not just on the content of the database. (This used to be the default behavior of ORM-s, like Hibernate, too.)
      • The value of the time_zone FreeMarker configuration setting sets the time zone used for the template output. For example, when a web page visitor has a preferred time zone, the web application framework may calls Environment.setTimeZone(TimeZone) with that time zone. Thus, the visitor will see java.sql.Timestamp and plain java.util.Date values as they look in his own time zone. While this is desirable for those types, as they meant to represent physical points on the time line, this is not necessarily desirable for date-only and time-only values. When sql_date_and_time_time_zone is null, time_zone is used for rendering all kind of date/time/dateTime values, including java.sql.Date and java.sql.Time, and then if, for example, time_zone is GMT+00:00, the values from the earlier examples will be shown as 2014-07-11 (one day off) and 09:57:00 (2 hours off). While those are the time zone correct renderings, those values are probably meant to be shown "as is".
      • You may wonder why this setting isn't simply "SQL time zone", that is, why's this time zone not applied to java.sql.Timestamp values as well. Timestamps in databases refer to a point on the physical time line, and thus doesn't have the inherent problem of date-only and time-only values. FreeMarker assumes that the JDBC driver converts time stamps coming from the database so that they store the distance from the epoch (1970-01-01 00:00:00 UTC), as requested by the Date API. Then time stamps can be safely rendered in different time zones, and thus need no special treatment.
      Parameters:
      tz - Maybe null, in which case java.sql.Date and java.sql.Time values will be formatted in the time zone returned by getTimeZone(). (Note that since null is an allowed value for this setting, it will not cause getSQLDateAndTimeTimeZone() to fall back to the parent configuration.)
      Since:
      2.3.21
      See Also:
      setTimeZone(TimeZone)
    • getSQLDateAndTimeTimeZone

      public TimeZone getSQLDateAndTimeTimeZone()
      Returns:
      null if the value of getTimeZone() should be used for formatting java.sql.Date and java.sql.Time values, otherwise the time zone that should be used to format the values of those two types.
      Since:
      2.3.21
    • isSQLDateAndTimeTimeZoneSet

      public boolean isSQLDateAndTimeTimeZoneSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setNumberFormat

      public void setNumberFormat(String numberFormat)
      Sets the number format used to convert numbers to strings. Currently, this is one of these:
      • "number": The number format returned by NumberFormat.getNumberInstance(Locale). This is the default.
      • "c" (recognized since 2.3.32): The number format used by FTL's c built-in (like in someNumber?c). So with this ${someNumber} will output the same as ${someNumber?c}. This should only be used if the template solely generates source code, configuration file, or other content that's not read by normal users. If the template contains parts that's read by normal users (like typical a web page), you are not supposed to use this.
      • "computer": The old (deprecated) name for "c". Recognized by all FreeMarker versions.
      • "currency": The number format returned by NumberFormat.getCurrencyInstance(Locale)
      • "percent": The number format returned by NumberFormat.getPercentInstance(Locale)
      • DecimalFormat pattern (like "0.##"). This syntax is extended by FreeMarker so that you can specify options like the rounding mode and the symbols used after a 2nd semicolon. For example, ",000;; roundingMode=halfUp groupingSeparator=_" will format numbers like ",000" would, but with half-up rounding mode, and _ as the group separator. See more about "extended Java decimal format" in the FreeMarker Manual.
      • If the string starts with @ character followed by a letter then it's interpreted as a custom number format, but only if either Configuration.getIncompatibleImprovements() is at least 2.3.24, or there's any custom formats defined (even if custom date/time/dateTime format). The format of a such string is "@name" or "@name parameters", where name is the key in the Map set by setCustomNumberFormats(Map), and parameters is parsed by the custom TemplateNumberFormat.

      Defaults to "number".

    • getNumberFormat

      public String getNumberFormat()
      Getter pair of setNumberFormat(String).
    • isNumberFormatSet

      public boolean isNumberFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • getCustomNumberFormats

      public Map<String,​? extends TemplateNumberFormatFactory> getCustomNumberFormats()
      Getter pair of setCustomNumberFormats(Map); do not modify the returned Map! To be consistent with other setting getters, if this setting was set directly on this Configurable object, this simply returns that value, otherwise it returns the value from the parent Configurable. So beware, the returned value doesn't reflect the Map key granularity fallback logic that FreeMarker actually uses for this setting (for that, use getCustomNumberFormat(String)). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this Configurable level (but usually it's well defined if until what point settings are possibly modified).

      The return value is never null; called on the Configuration (top) level, it defaults to an empty Map.

      Since:
      2.3.24
      See Also:
      getCustomNumberFormatsWithoutFallback()
    • getCustomNumberFormatsWithoutFallback

      public Map<String,​? extends TemplateNumberFormatFactory> getCustomNumberFormatsWithoutFallback()
      Like getCustomNumberFormats(), but doesn't fall back to the parent Configurable.
      Since:
      2.3.25
    • setCustomNumberFormats

      public void setCustomNumberFormats(Map<String,​? extends TemplateNumberFormatFactory> customNumberFormats)
      Associates names with formatter factories, which then can be referred by the number_format setting with values starting with @name. Beware, if you specify any custom formats here, an initial @ followed by a letter will have special meaning in number/date/time/datetime format strings, even if incompatible_improvements is less than 2.3.24 (starting with incompatible_improvements 2.3.24 @ always has special meaning).
      Parameters:
      customNumberFormats - Can't be null. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits (not _).
      Since:
      2.3.24
    • isCustomNumberFormatsSet

      public boolean isCustomNumberFormatsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • getCustomNumberFormat

      public TemplateNumberFormatFactory getCustomNumberFormat(String name)
      Gets the custom name format registered for the name.
      Since:
      2.3.24
    • hasCustomFormats

      public boolean hasCustomFormats()
      Tells if this configurable object or its parent defines any custom formats.
      Since:
      2.3.24
    • setBooleanFormat

      public void setBooleanFormat(String booleanFormat)
      The string value for the boolean true and false values, usually intended for human consumption (not for a computer language), separated with comma. For example, "yes,no". Note that white-space is significant, so "yes, no" is WRONG (unless you want that leading space before "no"). Because the proper way of formatting booleans depends on the context too much, it's probably the best to leave this setting on its default, which will enforce explicit formatting, like ${aBoolean?string('on', 'off')}.

      For backward compatibility the default is "true,false", but using that value is denied for automatic boolean-to-string conversion, like ${myBoolean} will fail with it. If you generate the piece of output for "computer audience" as opposed to "human audience", then you should write ${myBoolean?c}, which will print true or false. If you really want to always format for computer audience, then it's might be reasonable to set this setting to c.

      Note that automatic boolean-to-string conversion only exists since FreeMarker 2.3.20. Earlier this setting only influenced the result of myBool?string.

    • getBooleanFormat

      public String getBooleanFormat()
      The getter pair of setBooleanFormat(String).
    • isBooleanFormatSet

      public boolean isBooleanFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setTimeFormat

      public void setTimeFormat(String timeFormat)
      Sets the format used to convert Date-s that are time (no date part) values to string-s, also the format that someString?time will use to parse strings.

      For the possible values see setDateTimeFormat(String).

      Defaults to "", which is equivalent to "medium".

    • getTimeFormat

      public String getTimeFormat()
      The getter pair of setTimeFormat(String).
    • isTimeFormatSet

      public boolean isTimeFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setDateFormat

      public void setDateFormat(String dateFormat)
      Sets the format used to convert Date-s that are date-only (no time part) values to string-s, also the format that someString?date will use to parse strings.

      For the possible values see setDateTimeFormat(String).

      Defaults to "" which is equivalent to "medium".

    • getDateFormat

      public String getDateFormat()
      The getter pair of setDateFormat(String).
    • isDateFormatSet

      public boolean isDateFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setDateTimeFormat

      public void setDateTimeFormat(String dateTimeFormat)
      Sets the format used to convert Date-s that are date-time (timestamp) values to string-s, also the format that someString?datetime will use to parse strings.

      The possible setting values are (the quotation marks aren't part of the value itself):

      • Patterns accepted by Java's SimpleDateFormat, for example "dd.MM.yyyy HH:mm:ss" (where HH means 24 hours format) or "MM/dd/yyyy hh:mm:ss a" (where a prints AM or PM, if the current language is English).

      • "xs" for XML Schema format, or "iso" for ISO 8601:2004 format. These formats allow various additional options, separated with space, like in "iso m nz" (or with _, like in "iso_m_nz"; this is useful in a case like lastModified?string.iso_m_nz). The options and their meanings are:

        • Accuracy options:
          ms = Milliseconds, always shown with all 3 digits, even if it's all 0-s. Example: 13:45:05.800
          s = Seconds (fraction seconds are dropped even if non-0), like 13:45:05
          m = Minutes, like 13:45. This isn't allowed for "xs".
          h = Hours, like 13. This isn't allowed for "xs".
          Neither = Up to millisecond accuracy, but trailing millisecond 0-s are removed, also the whole milliseconds part if it would be 0 otherwise. Example: 13:45:05.8

        • Time zone offset visibility options:
          fz = "Force Zone", always show time zone offset (even for for java.sql.Date and java.sql.Time values). But, because ISO 8601 doesn't allow for dates (means date without time of the day) to show the zone offset, this option will have no effect in the case of "iso" with dates.
          nz = "No Zone", never show time zone offset
          Neither = always show time zone offset, except for java.sql.Date and java.sql.Time, and for "iso" date values.

        • Time zone options:
          u = Use UTC instead of what the time_zone setting suggests. However, java.sql.Date and java.sql.Time aren't affected by this (see setSQLDateAndTimeTimeZone(TimeZone) to understand why)
          fu = "Force UTC", that is, use UTC instead of what the time_zone or the sql_date_and_time_time_zone setting suggests. This also effects java.sql.Date and java.sql.Time values
          Neither = Use the time zone suggested by the time_zone or the sql_date_and_time_time_zone configuration setting (setTimeZone(TimeZone) and setSQLDateAndTimeTimeZone(TimeZone)).

        The options can be specified in any order.

        Options from the same category are mutually exclusive, like using m and s together is an error.

        The accuracy and time zone offset visibility options don't influence parsing, only formatting. For example, even if you use "iso m nz", "2012-01-01T15:30:05.125+01" will be parsed successfully and with milliseconds accuracy. The time zone options (like "u") influence what time zone is chosen only when parsing a string that doesn't contain time zone offset.

        Parsing with "iso" understands both extend format and basic format, like 20141225T235018. It doesn't, however, support the parsing of all kind of ISO 8601 strings: if there's a date part, it must use year, month and day of the month values (not week of the year), and the day can't be omitted.

        The output of "iso" is deliberately so that it's also a good representation of the value with XML Schema format, except for 0 and negative years, where it's impossible. Also note that the time zone offset is omitted for date values in the "iso" format, while it's preserved for the "xs" format.

      • "short", "medium", "long", or "full", which that has locale-dependent meaning defined by the Java platform (see in the documentation of DateFormat). For date-time values, you can specify the length of the date and time part independently, be separating them with _, like "short_medium". ("medium" means "medium_medium" for date-time values.)

      • Anything that starts with "@" followed by a letter is interpreted as a custom date/time/dateTime format, but only if either Configuration.getIncompatibleImprovements() is at least 2.3.24, or there's any custom formats defined (even if custom number format). The format of such string is "@name" or "@name parameters", where name is the key in the Map set by setCustomDateFormats(Map), and parameters is parsed by the custom number format.

      Defaults to "", which is equivalent to "medium_medium".

    • getDateTimeFormat

      public String getDateTimeFormat()
      The getter pair of setDateTimeFormat(String).
    • isDateTimeFormatSet

      public boolean isDateTimeFormatSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • getCustomDateFormats

      public Map<String,​? extends TemplateDateFormatFactory> getCustomDateFormats()
      Getter pair of setCustomDateFormats(Map); do not modify the returned Map! To be consistent with other setting getters, if this setting was set directly on this Configurable object, this simply returns that value, otherwise it returns the value from the parent Configurable. So beware, the returned value doesn't reflect the Map key granularity fallback logic that FreeMarker actually uses for this setting (for that, use getCustomDateFormat(String)). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this Configurable level (but usually it's well defined if until what point settings are possibly modified).

      The return value is never null; called on the Configuration (top) level, it defaults to an empty Map.

      Since:
      2.3.24
      See Also:
      getCustomDateFormatsWithoutFallback()
    • getCustomDateFormatsWithoutFallback

      public Map<String,​? extends TemplateDateFormatFactory> getCustomDateFormatsWithoutFallback()
      Like getCustomDateFormats(), but doesn't fall back to the parent Configurable, nor does it provide a non-null default when called as the method of a Configuration.
      Since:
      2.3.25
    • setCustomDateFormats

      public void setCustomDateFormats(Map<String,​? extends TemplateDateFormatFactory> customDateFormats)
      Associates names with formatter factories, which then can be referred by the date_format, time_format, and datetime_format settings with values starting with @name. Beware, if you specify any custom formats here, an initial @ followed by a letter will have special meaning in number/date/time/datetime format strings, even if incompatible_improvements is less than 2.3.24 (starting with incompatible_improvements 2.3.24 @ always has special meaning).
      Parameters:
      customDateFormats - Can't be null. The name must start with an UNICODE letter, and can only contain UNICODE letters and digits.
      Since:
      2.3.24
    • isCustomDateFormatsSet

      public boolean isCustomDateFormatsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • getCustomDateFormat

      public TemplateDateFormatFactory getCustomDateFormat(String name)
      Gets the custom name format registered for the name.
      Since:
      2.3.24
    • setTemplateExceptionHandler

      public void setTemplateExceptionHandler(TemplateExceptionHandler templateExceptionHandler)
      Sets the exception handler used to handle exceptions occurring inside templates. The default is TemplateExceptionHandler.DEBUG_HANDLER. The recommended values are:

      All of these will let the exception propagate further, so that you can catch it around Template.process(Object, Writer) for example. The difference is in what they print on the output before they do that.

      Note that the TemplateExceptionHandler is not meant to be used for generating HTTP error pages. Neither is it meant to be used to roll back the printed output. These should be solved outside template processing when the exception raises from Template.process. TemplateExceptionHandler meant to be used if you want to include special content in the template output, or if you want to suppress certain exceptions. If you suppress an exception, and the getLogTemplateExceptions() returns false, then it's the responsibility of the TemplateExceptionHandler to log the exception (if you want it to be logged).

      See Also:
      setLogTemplateExceptions(boolean), setAttemptExceptionReporter(AttemptExceptionReporter)
    • getTemplateExceptionHandler

      public TemplateExceptionHandler getTemplateExceptionHandler()
    • isTemplateExceptionHandlerSet

      public boolean isTemplateExceptionHandlerSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setAttemptExceptionReporter

      public void setAttemptExceptionReporter(AttemptExceptionReporter attemptExceptionReporter)
      Specifies how exceptions handled (and hence suppressed) by an #attempt blocks will be logged or otherwise reported. The default value is AttemptExceptionReporter.LOG_ERROR_REPORTER.

      Note that #attempt is not supposed to be a general purpose error handler mechanism, like try is in Java. It's for decreasing the impact of unexpected errors, by making it possible that only part of the page is going down, instead of the whole page. But it's still an error, something that someone should fix. So the error should be reported, not just ignored in a custom AttemptExceptionReporter-s.

      The AttemptExceptionReporter is invoked regardless of the value of the log_template_exceptions setting. The AttemptExceptionReporter is not invoked if the TemplateExceptionHandler has suppressed the exception.

      Since:
      2.3.27
    • getAttemptExceptionReporter

      public AttemptExceptionReporter getAttemptExceptionReporter()
      Since:
      2.3.27
    • isAttemptExceptionReporterSet

      public boolean isAttemptExceptionReporterSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.27
    • setArithmeticEngine

      public void setArithmeticEngine(ArithmeticEngine arithmeticEngine)
      Sets the arithmetic engine used to perform arithmetic operations. The default is ArithmeticEngine.BIGDECIMAL_ENGINE.
    • getArithmeticEngine

      public ArithmeticEngine getArithmeticEngine()
    • isArithmeticEngineSet

      public boolean isArithmeticEngineSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setObjectWrapper

      public void setObjectWrapper(ObjectWrapper objectWrapper)
      Sets the ObjectWrapper used to wrap objects to TemplateModel-s when using this Configurable.

      On Configuration level, the default is a DefaultObjectWrapper instance with the same incompatible_improvements setting value as of the Configuration. (Also, with very low incompatible improvements it's ObjectWrapper.DEFAULT_WRAPPER.). Untill you called this method, the default value will be automatically replaced when Configuration.setIncompatibleImprovements(Version) is called, to follow the value of the incompatible_improvements setting.

      Below Configuration level it's usually unset, so we fall back to what's coming from Configuration.

      Parameters:
      objectWrapper - Not null.
    • getObjectWrapper

      public ObjectWrapper getObjectWrapper()
    • isObjectWrapperSet

      public boolean isObjectWrapperSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setOutputEncoding

      public void setOutputEncoding(String outputEncoding)
      Informs FreeMarker about the charset used for the output. As FreeMarker outputs character stream (not byte stream), it's not aware of the output charset unless the software that encloses it tells it with this setting. Some templates may use FreeMarker features that require this information. Setting this to null means that the output encoding is not known.

      Defaults to null (unknown).

    • getOutputEncoding

      public String getOutputEncoding()
    • isOutputEncodingSet

      public boolean isOutputEncodingSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setURLEscapingCharset

      public void setURLEscapingCharset(String urlEscapingCharset)
      Sets the URL escaping (URL encoding, percentage encoding) charset. If null, the output encoding (setOutputEncoding(String)) will be used for URL escaping. Defaults to null.
    • getURLEscapingCharset

      public String getURLEscapingCharset()
    • isURLEscapingCharsetSet

      public boolean isURLEscapingCharsetSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setNewBuiltinClassResolver

      public void setNewBuiltinClassResolver(TemplateClassResolver newBuiltinClassResolver)
      Sets the TemplateClassResolver that is used when the new built-in is called in a template. That is, when a template contains the "com.example.SomeClassName"?new expression, this object will be called to resolve the "com.example.SomeClassName" string to a class. The default value is TemplateClassResolver.UNRESTRICTED_RESOLVER in FreeMarker 2.3.x, and TemplateClassResolver.SAFER_RESOLVER starting from FreeMarker 2.4.0. If you allow users to upload templates, it's important to use a custom restrictive TemplateClassResolver.

      Note that the MemberAccessPolicy used by the ObjectWrapper also influences what constructors are available. Allowing the resolution of the class here is not enough in itself, as the MemberAccessPolicy has to allow exposing the particular constructor you try to call as well.

      Since:
      2.3.17
    • getNewBuiltinClassResolver

      public TemplateClassResolver getNewBuiltinClassResolver()
      Retrieves the TemplateClassResolver used to resolve classes when "SomeClassName"?new is called in a template.
      Since:
      2.3.17
    • isNewBuiltinClassResolverSet

      public boolean isNewBuiltinClassResolverSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setAutoFlush

      public void setAutoFlush(boolean autoFlush)
      Sets whether the output Writer is automatically flushed at the end of Template.process(Object, Writer) (and its overloads). The default is true.

      Using false is needed for example when a Web page is composed from several boxes (like portlets, GUI panels, etc.) that aren't inserted with #include (or with similar directives) into a master FreeMarker template, rather they are all processed with a separate Template.process(Object, Writer) call. In a such scenario the automatic flushes would commit the HTTP response after each box, hence interfering with full-page buffering, and also possibly decreasing performance with too frequent and too early response buffer flushes.

      Since:
      2.3.17
    • getAutoFlush

      public boolean getAutoFlush()
      Since:
      2.3.17
    • isAutoFlushSet

      public boolean isAutoFlushSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setShowErrorTips

      public void setShowErrorTips(boolean showTips)
      Sets if tips should be shown in error messages of errors arising during template processing. The default is true.
      Since:
      2.3.21
    • getShowErrorTips

      public boolean getShowErrorTips()
      Since:
      2.3.21
    • isShowErrorTipsSet

      public boolean isShowErrorTipsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setAPIBuiltinEnabled

      public void setAPIBuiltinEnabled(boolean value)
      Specifies if ?api can be used in templates. Defaults to false so that updating FreeMarker won't decrease the security of existing applications.
      Since:
      2.3.22
    • isAPIBuiltinEnabled

      public boolean isAPIBuiltinEnabled()
      Since:
      2.3.22
    • isAPIBuiltinEnabledSet

      public boolean isAPIBuiltinEnabledSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setTruncateBuiltinAlgorithm

      public void setTruncateBuiltinAlgorithm(TruncateBuiltinAlgorithm truncateBuiltinAlgorithm)
      Specifies the algorithm used for ?truncate, ?truncate_w, and ?truncate_c. Defaults to DefaultTruncateBuiltinAlgorithm.ASCII_INSTANCE. Most customization needs can be addressed by creating a new DefaultTruncateBuiltinAlgorithm with the proper constructor parameters. Otherwise, users may use their own TruncateBuiltinAlgorithm implementation.

      In case you need to set this with Properties, or a similar configuration approach that doesn't let you create the value in Java, see examples at setSetting(String, String).

      Since:
      2.3.29
    • getTruncateBuiltinAlgorithm

      public TruncateBuiltinAlgorithm getTruncateBuiltinAlgorithm()
      Since:
      2.3.29
    • isTruncateBuiltinAlgorithmSet

      public boolean isTruncateBuiltinAlgorithmSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.29
    • setLogTemplateExceptions

      public void setLogTemplateExceptions(boolean value)
      Specifies if TemplateException-s thrown by template processing are logged by FreeMarker or not. The default is true for backward compatibility, but that results in logging the exception twice in properly written applications, because there the TemplateException thrown by the public FreeMarker API is also logged by the caller (even if only as the cause exception of a higher level exception). Hence, in modern applications it should be set to false. Note that this setting has no effect on the logging of exceptions caught by #attempt; by default those are always logged as errors (because those exceptions won't bubble up to the API caller), however, that can be changed with the attempt_exception_reporter setting.
      Since:
      2.3.22
    • getLogTemplateExceptions

      public boolean getLogTemplateExceptions()
      Since:
      2.3.22
    • isLogTemplateExceptionsSet

      public boolean isLogTemplateExceptionsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.24
    • setWrapUncheckedExceptions

      public void setWrapUncheckedExceptions(boolean wrapUncheckedExceptions)
      Specifies if unchecked exceptions thrown during expression evaluation or during executing custom directives (and transform) will be wrapped into TemplateException-s, or will bubble up to the caller of Template.process(Object, Writer, ObjectWrapper) as is. The default is false for backward compatibility (as some applications catch certain unchecked exceptions thrown by the template processing to do something special), but the recommended value is true. When this is true, the unchecked exceptions will be wrapped into a TemplateException-s, thus the exception will include the location in the template (not just the Java stack trace). Another consequence of the wrapping is that the TemplateExceptionHandler will be invoked for the exception (as that only handles TemplateException-s, it wasn't invoked for unchecked exceptions). When this setting is false, unchecked exception will be thrown by Template.process(Object, Writer, ObjectWrapper). Note that plain Java methods called from templates aren't user defined TemplateMethodModel-s, and have always wrapped the thrown exception into TemplateException, regardless of this setting.
      Since:
      2.3.27
    • getWrapUncheckedExceptions

      public boolean getWrapUncheckedExceptions()
      Since:
      2.3.27
    • isWrapUncheckedExceptionsSet

      public boolean isWrapUncheckedExceptionsSet()
      Since:
      2.3.27
    • getLazyImports

      public boolean getLazyImports()
      The getter pair of setLazyImports(boolean).
      Since:
      2.3.25
    • setLazyImports

      public void setLazyImports(boolean lazyImports)
      Specifies if <#import ...> (and Environment.importLib(String, String)) should delay the loading and processing of the imported templates until the content of the imported namespace is actually accessed. This makes the overhead of unused imports negligible. Note that turning on lazy importing isn't entirely transparent, as accessing global variables (usually created with <#global ...=...>) that should be created by the imported template won't trigger the loading and processing of the lazily imported template (because globals aren't accessed through the namespace variable), so the global variable will just be missing. In general, you lose the strict control over when the namespace initializing code in the imported template will be executed, though it shouldn't mater for most well designed imported templates. Another drawback is that importing a missing or otherwise broken template will be successful, and the problem will remain hidden until (and if) the namespace content is actually used. Note that the namespace initializing code will run with the same locale as it was at the point of the <#import ...> call (other settings won't be handled specially like that).

      The default is false (and thus imports are eager) for backward compatibility, which can cause perceivable overhead if you have many imports and only a few of them is actually used.

      This setting also affects auto-imports, unless you have set a non-null value with setLazyAutoImports(Boolean).

      Since:
      2.3.25
      See Also:
      setLazyAutoImports(Boolean)
    • isLazyImportsSet

      public boolean isLazyImportsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.25
    • getLazyAutoImports

      public Boolean getLazyAutoImports()
      The getter pair of setLazyAutoImports(Boolean).
      Since:
      2.3.25
    • setLazyAutoImports

      public void setLazyAutoImports(Boolean lazyAutoImports)
      Specifies if auto-imports will be lazy imports. This is useful to make the overhead of unused auto-imports negligible. If this is set to null, getLazyImports() specifies the behavior of auto-imports too. The default value is null.
      Since:
      2.3.25
    • isLazyAutoImportsSet

      public boolean isLazyAutoImportsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.25
    • addAutoImport

      public void addAutoImport(String namespaceVarName, String templateName)
      Adds an invisible #import templateName as namespaceVarName at the beginning of the main template (that's the top-level template that wasn't included/imported from another template). While it only affects the main template directly, as the imports will create a global variable there, the imports will be visible from the further imported templates too (note that Configuration.getIncompatibleImprovements() set to 2.3.24 fixes a rarely surfacing bug with that).

      It's recommended to set the lazy_auto_imports setting (setLazyAutoImports(Boolean)) to true when using this, so that auto-imports that are unused in a template won't degrade performance by unnecessary loading and initializing the imported library.

      If the imports aren't lazy, the order of the imports will be the same as the order in which they were added with this method. (Calling this method with an already added namespaceVarName will move that to the end of the auto-import order.)

      The auto-import is added directly to the Configurable on which this method is called (not to the parents or children), but when the main template is processed, the auto-imports are collected from all the Configurable levels, in parent-to-child order: Configuration, Template (the main template), Environment. If the same namespaceVarName occurs on multiple levels, the one on the child level is used, and the clashing import from the parent level is skipped.

      If there are also auto-includes (see addAutoInclude(String)), those will be executed after the auto-imports.

      See Also:
      setAutoImports(Map)
    • removeAutoImport

      public void removeAutoImport(String namespaceVarName)
      Removes an auto-import from this Configurable level (not from the parents or children); see addAutoImport(String, String). Does nothing if the auto-import doesn't exist.
    • setAutoImports

      public void setAutoImports(Map map)
      Removes all auto-imports, then calls addAutoImport(String, String) for each Map-entry (the entry key is the namespaceVarName). The order of the auto-imports will be the same as Map.keySet() returns the keys (but the order of imports doesn't mater for properly designed libraries anyway).
      Parameters:
      map - Maps the namespace variable names to the template names; not null
    • getAutoImports

      public Map<String,​String> getAutoImports()
      Getter pair of setAutoImports(Map); do not modify the returned Map! To be consistent with other setting getters, if this setting was set directly on this Configurable object, this simply returns that value, otherwise it returns the value from the parent Configurable. So beware, the returned value doesn't reflect the Map key granularity fallback logic that FreeMarker actually uses for this setting. The returned value is not the same Map object that was set with setAutoImports(Map), only its content is the same. The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this Configurable level (but usually it's well defined if until what point settings are possibly modified).

      The return value is never null; called on the Configuration (top) level, it defaults to an empty Map.

      Since:
      2.3.25
      See Also:
      getAutoImportsWithoutFallback()
    • isAutoImportsSet

      public boolean isAutoImportsSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.25
    • getAutoImportsWithoutFallback

      public Map<String,​String> getAutoImportsWithoutFallback()
      Like getAutoImports(), but doesn't fall back to the parent Configurable (and so it can be null).
      Since:
      2.3.25
    • addAutoInclude

      public void addAutoInclude(String templateName)
      Adds an invisible #include templateName at the beginning of the main template (that's the top-level template that wasn't included/imported from another template).

      The order of the inclusions will be the same as the order in which they were added with this method.

      The auto-include is added directly to the Configurable on which this method is called (not to the parents or children), but when the main template is processed, the auto-includes are collected from all the Configurable levels, in parent-to-child order: Configuration, Template (the main template), Environment.

      If there are also auto-imports (addAutoImport(String, String)), those imports will be executed before the auto-includes, hence the namespace variables are accessible for the auto-included templates.

      Calling addAutoInclude(String) with an already added template name will just move that to the end of the auto-include list (within the same Configurable level). This works even if the same template name appears on different Configurable levels, in which case only the inclusion on the lowest (child) level will be executed.

      See Also:
      setAutoIncludes(List)
    • setAutoIncludes

      public void setAutoIncludes(List templateNames)
      Removes all auto-includes, then calls addAutoInclude(String) for each List items.

      Before incompatible improvements 2.3.25 it doesn't filter out duplicates from the list if this method was called on a Configuration instance.

    • getAutoIncludes

      public List<String> getAutoIncludes()
      Getter pair of setAutoIncludes(List); do not modify the returned List! To be consistent with other setting getters, if this setting was set directly on this Configurable object, this simply returns that value, otherwise it returns the value from the parent Configurable. So beware, the returned value doesn't reflect the List concatenation logic that FreeMarker actually uses for this setting. The returned value is not the same List object that was set with setAutoIncludes(List), only its content is the same (except that duplicate are removed). The returned value isn't a snapshot; it may or may not shows the changes later made to this setting on this Configurable level (but usually it's well defined if until what point settings are possibly modified).

      The return value is never null; called on the Configuration (top) level, it defaults to an empty List.

      Since:
      2.3.25
      See Also:
      getAutoIncludesWithoutFallback()
    • isAutoIncludesSet

      public boolean isAutoIncludesSet()
      Tells if this setting is set directly in this object or its value is coming from the parent.
      Since:
      2.3.25
    • getAutoIncludesWithoutFallback

      public List<String> getAutoIncludesWithoutFallback()
      Like getAutoIncludes(), but doesn't fall back to the parent Configurable (and so it can be null).
      Since:
      2.3.25
    • removeAutoInclude

      public void removeAutoInclude(String templateName)
      Removes the auto-include from this Configurable level (not from the parents or children); see addAutoInclude(String). Does nothing if the template is not there.
    • setSetting

      public void setSetting(String name, String value) throws TemplateException
      Sets a FreeMarker setting by a name and string value. If you can configure FreeMarker directly with Java (or other programming language), you should use the dedicated setter methods instead (like setObjectWrapper(ObjectWrapper). This meant to be used only when you get settings from somewhere as String-String name-value pairs (typically, as a Properties object). Below you find an overview of the settings available.

      Note: As of FreeMarker 2.3.23, setting names can be written in camel case too. For example, instead of date_format you can also use dateFormat. It's likely that camel case will become to the recommended convention in the future.

      The list of settings commonly supported in all Configurable subclasses:

      Configuration (a subclass of Configurable) also understands these:

      Regarding object builder expressions (used by the setting values where it was indicated):

      • Before FreeMarker 2.3.21 it had to be a fully qualified class name, and nothing else.

      • Since 2.3.21, the generic syntax is: className(constrArg1, constrArg2, ... constrArgN, propName1=propValue1, propName2=propValue2, ... propNameN=propValueN), where className is the fully qualified class name of the instance to create (except if we have builder class or INSTANCE field around, but see that later), constrArg-s are the values of constructor arguments, and propName=propValue-s set JavaBean properties (like x=1 means setX(1)) on the created instance. You can have any number of constructor arguments and property setters, including 0. Constructor arguments must precede any property setters.

      • Example: com.example.MyObjectWrapper(1, 2, exposeFields=true, cacheSize=5000) is nearly equivalent with this Java code: obj = new com.example.MyObjectWrapper(1, 2); obj.setExposeFields(true); obj.setCacheSize(5000);
      • If you have no constructor arguments and property setters, and the className class has a public static INSTANCE field, the value of that filed will be the value of the expression, and the constructor won't be called. Note that if you use the backward compatible syntax, where there's no parenthesis after the class name, then it will not look for INSTANCE.

      • If there exists a class named classNameBuilder, then that class will be instantiated instead with the given constructor arguments, and the JavaBean properties of that builder instance will be set. After that, the public build() method of the instance will be called, whose return value will be the value of the whole expression. (The builder class and the build() method is simply found by name, there's no special interface to implement.) Note that if you use the backward compatible syntax, where these's no parenthesis after the class name, then it will not look for builder class. Note that if you have a builder class, you don't actually need a className class (since 2.3.24); after all, classNameBuilder.build() can return any kind of object.

      • Currently, the values of arguments and properties can only be one of these:

        • A numerical literal, like 123 or -1.5. The value will be automatically converted to the type of the target (just like in FTL). However, a target type is only available if the number will be a parameter to a method or constructor, not when it's a value (or key) in a List or Map literal. Thus in the last case the type of number will be like in Java language, like 1 is an int, and 1.0 is a double, and 1.0f is a float, etc. In all cases, the standard Java type postfixes can be used ("f", "d", "l"), plus "bd" for BigDecimal and "bi" for BigInteger.
        • A boolean literal: true or false
        • The null literal: null
        • A string literal with FTL syntax, except that it can't contain ${...}-s and #{...}-s. Examples: "Line 1\nLine 2" or r"C:\temp".
        • A list literal (since 2.3.24) with FTL-like syntax, for example [ 'foo', 2, true ]. If the parameter is expected to be array, the list will be automatically converted to array. The list items can be any kind of expression, like even object builder expressions.
        • A map literal (since 2.3.24) with FTL-like syntax, for example { 'foo': 2, 'bar': true }. The keys and values can be any kind of expression, like even object builder expressions. The resulting Java object will be a Map that keeps the item order (LinkedHashMap as of this writing).
        • A reference to a public static filed, like Configuration.AUTO_DETECT_TAG_SYNTAX or com.example.MyClass.MY_CONSTANT.
        • An object builder expression. That is, object builder expressions can be nested into each other.
      • The same kind of expression as for parameters can also be used as top-level expressions (though it's rarely useful, apart from using null).
      • The top-level object builder expressions may omit (). In that case, for backward compatibility, the INSTANCE field and the builder class is not searched, so the instance will be always created with its parameterless constructor. (This behavior will possibly change in 2.4.) The () can't be omitted for nested expressions.

      • The following classes can be referred to with simple (unqualified) name instead of fully qualified name: DefaultObjectWrapper, BeansWrapper, SimpleObjectWrapper, Locale, TemplateConfiguration, PathGlobMatcher, FileNameGlobMatcher, PathRegexMatcher, AndMatcher, OrMatcher, NotMatcher, ConditionalTemplateConfigurationFactory, MergingTemplateConfigurationFactory, FirstMatchTemplateConfigurationFactory, HTMLOutputFormat, XMLOutputFormat, RTFOutputFormat, PlainTextOutputFormat, UndefinedOutputFormat, Configuration, DefaultTruncateBuiltinAlgorithm.

      • TimeZone objects can be created like TimeZone("UTC"), despite that there's no a such constructor (since 2.3.24).

      • TemplateMarkupOutputModel objects can be created like markup(HTMLOutputFormat(), "<h1>Example</h1>") (since 2.3.29). Of course the 1st argument can be any other MarkupOutputFormat too.

      • The classes and methods that the expression meant to access must be all public.

      Parameters:
      name - the name of the setting.
      value - the string that describes the new value of the setting.
      Throws:
      Configurable.UnknownSettingException - if the name is wrong.
      TemplateException - if the new value of the setting can't be set for any other reasons.
    • getSettingNames

      public Set<String> getSettingNames(boolean camelCase)
      Returns the valid setting names that aren't Configuration-only.
      Parameters:
      camelCase - If we want the setting names with camel case naming convention, or with snake case (legacy) naming convention.
      Since:
      2.3.24
      See Also:
      Configuration.getSettingNames(boolean)
    • setStrictBeanModels

      @Deprecated public void setStrictBeanModels(boolean strict)
      Deprecated.
      Set this on the ObjectWrapper itself.
    • getSetting

      @Deprecated public String getSetting(String key)
      Deprecated.
      It's not possible in general to convert setting values to string, and thus it's impossible to ensure that setSetting(String, String) will work with the returned value correctly.
      Returns the textual representation of a setting.
      Parameters:
      key - the setting key. Can be any of standard XXX_KEY constants, or a custom key.
    • getSettings

      @Deprecated public Map getSettings()
      Deprecated.
      This method was always defective, and certainly it always will be. Don't use it. (Simply, it's hardly possible in general to convert setting values to text in a way that ensures that setSettings(Properties) will work with them correctly.)
      This meant to return the String-to-String Map of the settings. So it actually should return a Properties object, but it doesn't by mistake. The returned Map is read-only, but it will reflect the further configuration changes (aliasing effect).
    • getEnvironment

      protected Environment getEnvironment()
    • unknownSettingException

      protected TemplateException unknownSettingException(String name)
      Creates the exception that should be thrown when a setting name isn't recognized.
    • getCorrectedNameForUnknownSetting

      protected String getCorrectedNameForUnknownSetting(String name)
      Parameters:
      name - The wrong name
      Returns:
      The corrected name, or null if there's no known correction
      Since:
      2.3.21
    • settingValueAssignmentException

      protected TemplateException settingValueAssignmentException(String name, String value, Throwable cause)
      Since:
      2.3.21
    • invalidSettingValueException

      protected TemplateException invalidSettingValueException(String name, String value)
    • setSettings

      public void setSettings(Properties props) throws TemplateException
      Set the settings stored in a Properties object.
      Throws:
      TemplateException - if the Properties object contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.
    • setSettings

      public void setSettings(InputStream propsIn) throws TemplateException, IOException
      Reads a setting list (key and element pairs) from the input stream. The stream has to follow the usual .properties format.
      Throws:
      TemplateException - if the stream contains invalid keys, or invalid setting values, or any other error occurs while changing the settings.
      IOException - if an error occurred when reading from the input stream.
    • setCustomAttribute

      public void setCustomAttribute(String name, Object value)
      Sets a named custom attribute for this configurable.
      Parameters:
      name - the name of the custom attribute
      value - the value of the custom attribute. You can set the value to null, however note that there is a semantic difference between an attribute set to null and an attribute that is not present, see removeCustomAttribute(String).
    • getCustomAttributeNames

      public String[] getCustomAttributeNames()
      Returns an array with names of all custom attributes defined directly on this configurable. (That is, it doesn't contain the names of custom attributes defined indirectly on its parent configurables.) The returned array is never null, but can be zero-length. The order of elements in the returned array is not defined and can change between invocations.
    • removeCustomAttribute

      public void removeCustomAttribute(String name)
      Removes a named custom attribute for this configurable. Note that this is different than setting the custom attribute value to null. If you set the value to null, getCustomAttribute(String) will return null, while if you remove the attribute, it will return the value of the attribute in the parent configurable (if there is a parent configurable, that is).
      Parameters:
      name - the name of the custom attribute
    • getCustomAttribute

      public Object getCustomAttribute(String name)
      Retrieves a named custom attribute for this configurable. If the attribute is not present in the configurable, and the configurable has a parent, then the parent is looked up as well.
      Parameters:
      name - the name of the custom attribute
      Returns:
      the value of the custom attribute. Note that if the custom attribute was created with <#ftl attributes={...}>, then this value is already unwrapped (i.e. it's a String, or a List, or a Map, ...etc., not a FreeMarker specific class).
    • doAutoImportsAndIncludes

      protected void doAutoImportsAndIncludes(Environment env) throws TemplateException, IOException
      Executes the auto-imports and auto-includes for the main template of this environment. This is not meant to be called or overridden by code outside of FreeMarker.
      Throws:
      TemplateException
      IOException
    • parseAsList

      protected ArrayList parseAsList(String text) throws ParseException
      Throws:
      ParseException
    • parseAsSegmentedList

      protected ArrayList parseAsSegmentedList(String text) throws ParseException
      Throws:
      ParseException
    • parseAsImportList

      protected HashMap parseAsImportList(String text) throws ParseException
      Throws:
      ParseException