freemarker-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ddek...@apache.org
Subject [1/2] incubator-freemarker git commit: Renamed "customAttribute" (just "attribute" in FM2) to "customSetting". So what happened is that FM2 attributes were split to two separate concepts: custom state scopes (see CustomStateScope interface) and custom se
Date Sat, 03 Jun 2017 11:47:02 GMT
Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 dc689993a -> 24673a17b


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-core/src/main/java/org/apache/freemarker/core/Template.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/Template.java b/freemarker-core/src/main/java/org/apache/freemarker/core/Template.java
index f165990..feac008 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/Template.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/Template.java
@@ -111,12 +111,12 @@ public class Template implements ProcessingConfiguration, CustomStateScope
{
     private Map prefixToNamespaceURILookup = new HashMap();
     private Map namespaceURIToPrefixLookup = new HashMap();
     /** Custom attributes specified inside the template with the #ftl directive. Maybe {@code
null}. */
-    private Map<String, Serializable> headerCustomAttributes;
+    private Map<String, Serializable> headerCustomSettings;
     /**
-     * In case {@link #headerCustomAttributes} is not {@code null} and the {@link TemplateConfiguration}
also specifies
+     * In case {@link #headerCustomSettings} is not {@code null} and the {@link TemplateConfiguration}
also specifies
      * custom attributes, this is the two set of custom attributes merged. Otherwise it's
{@code null}.
      */
-    private transient Map<Serializable, Object> tcAndHeaderCustomAttributes;
+    private transient Map<Serializable, Object> tcAndHeaderCustomSettings;
 
     private AutoEscapingPolicy autoEscapingPolicy;
     // Values from template content that are detected automatically:
@@ -345,8 +345,8 @@ public class Template implements ProcessingConfiguration, CustomStateScope
{
      * protected when construction is done.
      */
     private void finishConstruction() {
-        headerCustomAttributes = _CollectionUtil.unmodifiableMap(headerCustomAttributes);
-        tcAndHeaderCustomAttributes = _CollectionUtil.unmodifiableMap(tcAndHeaderCustomAttributes);
+        headerCustomSettings = _CollectionUtil.unmodifiableMap(headerCustomSettings);
+        tcAndHeaderCustomSettings = _CollectionUtil.unmodifiableMap(tcAndHeaderCustomSettings);
         writeProtected = true;
     }
 
@@ -1068,24 +1068,24 @@ public class Template implements ProcessingConfiguration, CustomStateScope
{
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
     @Override
-    public Map<Serializable, Object> getCustomAttributesSnapshot(boolean includeInherited)
{
+    public Map<Serializable, Object> getCustomSettingsSnapshot(boolean includeInherited)
{
         boolean nonInheritedAttrsFinal;
         Map<? extends Serializable, ? extends Object> nonInheritedAttrs;
-        if (tcAndHeaderCustomAttributes != null) {
-            nonInheritedAttrs = tcAndHeaderCustomAttributes;
+        if (tcAndHeaderCustomSettings != null) {
+            nonInheritedAttrs = tcAndHeaderCustomSettings;
             nonInheritedAttrsFinal = writeProtected;
-        } else if (headerCustomAttributes != null) {
-            nonInheritedAttrs = headerCustomAttributes;
+        } else if (headerCustomSettings != null) {
+            nonInheritedAttrs = headerCustomSettings;
             nonInheritedAttrsFinal = writeProtected;
         } else if (tCfg != null) {
-            nonInheritedAttrs =  tCfg.getCustomAttributesSnapshot(false);
+            nonInheritedAttrs =  tCfg.getCustomSettingsSnapshot(false);
             nonInheritedAttrsFinal = true;
         } else {
             nonInheritedAttrs = Collections.emptyMap();
             nonInheritedAttrsFinal = true;
         }
 
-        Map<Serializable, Object> inheritedAttrs = includeInherited ? cfg.getCustomAttributesSnapshot(true)
+        Map<Serializable, Object> inheritedAttrs = includeInherited ? cfg.getCustomSettingsSnapshot(true)
                 : Collections.<Serializable, Object>emptyMap();
 
         LinkedHashMap<Serializable, Object> mergedAttrs;
@@ -1103,65 +1103,65 @@ public class Template implements ProcessingConfiguration, CustomStateScope
{
     }
 
     @Override
-    public boolean isCustomAttributeSet(Serializable key) {
-        if (tcAndHeaderCustomAttributes != null) {
-            return tcAndHeaderCustomAttributes.containsKey(key);
+    public boolean isCustomSettingSet(Serializable key) {
+        if (tcAndHeaderCustomSettings != null) {
+            return tcAndHeaderCustomSettings.containsKey(key);
         }
-        return headerCustomAttributes != null && headerCustomAttributes.containsKey(key)
-                || tCfg != null && tCfg.isCustomAttributeSet(key);
+        return headerCustomSettings != null && headerCustomSettings.containsKey(key)
+                || tCfg != null && tCfg.isCustomSettingSet(key);
     }
 
     @Override
-    public Object getCustomAttribute(Serializable key) {
-        return getCustomAttribute(key, null, false);
+    public Object getCustomSetting(Serializable key) {
+        return getCustomSetting(key, null, false);
     }
 
     @Override
-    public Object getCustomAttribute(Serializable key, Object defaultValue) {
-        return getCustomAttribute(key, defaultValue, true);
+    public Object getCustomSetting(Serializable key, Object defaultValue) {
+        return getCustomSetting(key, defaultValue, true);
     }
 
-    private Object getCustomAttribute(Serializable key, Object defaultValue, boolean useDefaultValue)
{
-        if (tcAndHeaderCustomAttributes != null) {
-            Object value = tcAndHeaderCustomAttributes.get(key);
-            if (value != null || tcAndHeaderCustomAttributes.containsKey(key)) {
+    private Object getCustomSetting(Serializable key, Object defaultValue, boolean useDefaultValue)
{
+        if (tcAndHeaderCustomSettings != null) {
+            Object value = tcAndHeaderCustomSettings.get(key);
+            if (value != null || tcAndHeaderCustomSettings.containsKey(key)) {
                 return value;
             }
         } else {
-            if (headerCustomAttributes != null) {
-                Object value = headerCustomAttributes.get(key);
-                if (value != null || headerCustomAttributes.containsKey(key)) {
+            if (headerCustomSettings != null) {
+                Object value = headerCustomSettings.get(key);
+                if (value != null || headerCustomSettings.containsKey(key)) {
                     return value;
                 }
             }
             if (tCfg != null) {
-                Object value = tCfg.getCustomAttribute(key, MISSING_VALUE_MARKER);
+                Object value = tCfg.getCustomSetting(key, MISSING_VALUE_MARKER);
                 if (value != MISSING_VALUE_MARKER) {
                     return value;
                 }
             }
         }
-        return useDefaultValue ? cfg.getCustomAttribute(key, defaultValue) : cfg.getCustomAttribute(key);
+        return useDefaultValue ? cfg.getCustomSetting(key, defaultValue) : cfg.getCustomSetting(key);
     }
 
     /**
      * Should be called by the parser, for example to add the attributes specified in the
#ftl header.
      */
-    void setHeaderCustomAttribute(String attName, Serializable attValue) {
+    void setHeaderCustomSetting(String attName, Serializable attValue) {
         checkWritable();
 
-        if (headerCustomAttributes == null) {
-            headerCustomAttributes = new LinkedHashMap<>();
+        if (headerCustomSettings == null) {
+            headerCustomSettings = new LinkedHashMap<>();
         }
-        headerCustomAttributes.put(attName, attValue);
+        headerCustomSettings.put(attName, attValue);
 
         if (tCfg != null) {
-            Map<Serializable, Object> tcCustAttrs = tCfg.getCustomAttributesSnapshot(false);
+            Map<Serializable, Object> tcCustAttrs = tCfg.getCustomSettingsSnapshot(false);
             if (!tcCustAttrs.isEmpty()) {
-                if (tcAndHeaderCustomAttributes == null) {
-                    tcAndHeaderCustomAttributes = new LinkedHashMap<>(tcCustAttrs);
+                if (tcAndHeaderCustomSettings == null) {
+                    tcAndHeaderCustomSettings = new LinkedHashMap<>(tcCustAttrs);
                 }
-                tcAndHeaderCustomAttributes.put(attName, attValue);
+                tcAndHeaderCustomSettings.put(attName, attValue);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-core/src/main/java/org/apache/freemarker/core/TemplateConfiguration.java
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/java/org/apache/freemarker/core/TemplateConfiguration.java
b/freemarker-core/src/main/java/org/apache/freemarker/core/TemplateConfiguration.java
index f727002..ca37fa6 100644
--- a/freemarker-core/src/main/java/org/apache/freemarker/core/TemplateConfiguration.java
+++ b/freemarker-core/src/main/java/org/apache/freemarker/core/TemplateConfiguration.java
@@ -83,7 +83,7 @@ public final class TemplateConfiguration implements ParsingAndProcessingConfigur
     private final Boolean lazyImports;
     private final Boolean lazyAutoImports;
     private final boolean lazyAutoImportsSet;
-    private final Map<Serializable, Object> customAttributes;
+    private final Map<Serializable, Object> customSettings;
     
     private final TemplateLanguage templateLanguage;
     private final TagSyntax tagSyntax;
@@ -124,7 +124,7 @@ public final class TemplateConfiguration implements ParsingAndProcessingConfigur
         lazyImports = builder.isLazyImportsSet() ? builder.getLazyImports() : null;
         lazyAutoImportsSet = builder.isLazyAutoImportsSet();
         lazyAutoImports = lazyAutoImportsSet ? builder.getLazyAutoImports() : null;
-        customAttributes = builder.getCustomAttributesSnapshot(false);
+        customSettings = builder.getCustomSettingsSnapshot(false);
 
         templateLanguage = builder.isTemplateLanguageSet() ? builder.getTemplateLanguage()
: null;
         tagSyntax = builder.isTagSyntaxSet() ? builder.getTagSyntax() : null;
@@ -634,28 +634,28 @@ public final class TemplateConfiguration implements ParsingAndProcessingConfigur
      * Note that the {@code includeInherited} has no effect here, as {@link TemplateConfiguration}-s
has no parent.
      */
     @Override
-    public Map<Serializable, Object> getCustomAttributesSnapshot(boolean includeInherited)
{
-        return customAttributes;
+    public Map<Serializable, Object> getCustomSettingsSnapshot(boolean includeInherited)
{
+        return customSettings;
     }
 
     @Override
-    public boolean isCustomAttributeSet(Serializable key) {
-        return customAttributes.containsKey(key);
+    public boolean isCustomSettingSet(Serializable key) {
+        return customSettings.containsKey(key);
     }
 
     @Override
-    public Object getCustomAttribute(Serializable key) {
-        Object result = getCustomAttribute(key, MISSING_VALUE_MARKER);
+    public Object getCustomSetting(Serializable key) {
+        Object result = getCustomSetting(key, MISSING_VALUE_MARKER);
         if (result == MISSING_VALUE_MARKER) {
-            throw new CustomAttributeNotSetException(key);
+            throw new CustomSettingNotSetException(key);
         }
         return result;
     }
 
     @Override
-    public Object getCustomAttribute(Serializable key, Object defaultValue) {
-        Object attValue = customAttributes.get(key);
-        if (attValue != null || customAttributes.containsKey(key)) {
+    public Object getCustomSetting(Serializable key, Object defaultValue) {
+        Object attValue = customSettings.get(key);
+        if (attValue != null || customSettings.containsKey(key)) {
             return attValue;
         }
         return defaultValue;
@@ -804,16 +804,16 @@ public final class TemplateConfiguration implements ParsingAndProcessingConfigur
         }
 
         @Override
-        protected Object getDefaultCustomAttribute(Serializable key, Object defaultValue,
boolean useDefaultValue) {
+        protected Object getDefaultCustomSetting(Serializable key, Object defaultValue, boolean
useDefaultValue) {
             // We don't inherit from anything.
             if (useDefaultValue) {
                 return defaultValue;
             }
-            throw new CustomAttributeNotSetException(key);
+            throw new CustomSettingNotSetException(key);
         }
 
         @Override
-        protected void collectDefaultCustomAttributesSnapshot(Map<Serializable, Object>
target) {
+        protected void collectDefaultCustomSettingsSnapshot(Map<Serializable, Object>
target) {
             // We don't inherit from anything.
         }
 
@@ -934,9 +934,9 @@ public final class TemplateConfiguration implements ParsingAndProcessingConfigur
                         tc.isAutoIncludesSet() ? tc.getAutoIncludes() : null));
             }
 
-            setCustomAttributesMap(mergeMaps(
-                    getCustomAttributesSnapshot(false),
-                    tc.getCustomAttributesSnapshot(false),
+            setCustomSettingsMap(mergeMaps(
+                    getCustomSettingsSnapshot(false),
+                    tc.getCustomSettingsSnapshot(false),
                     true));
         }
 

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-core/src/main/javacc/FTL.jj
----------------------------------------------------------------------
diff --git a/freemarker-core/src/main/javacc/FTL.jj b/freemarker-core/src/main/javacc/FTL.jj
index 0be9d81..552f236 100644
--- a/freemarker-core/src/main/javacc/FTL.jj
+++ b/freemarker-core/src/main/javacc/FTL.jj
@@ -3955,9 +3955,9 @@ void HeaderElement() :
                                 }
                             } catch (TemplateModelException tme) {
                             }
-                        } else if (ks.equalsIgnoreCase("attributes")) {
+                        } else if (ks.equalsIgnoreCase("custom_settings") || ks.equals("customSettings"))
{
                             if (!(value instanceof TemplateHashModelEx)) {
-                                throw new ParseException("Expecting a hash of attribute names
to values.", exp);
+                                throw new ParseException("Expecting a hash value for custom
settings.", exp);
                             }
                             TemplateHashModelEx attributeMap = (TemplateHashModelEx) value;
                             try {
@@ -3967,11 +3967,11 @@ void HeaderElement() :
                                         Object attValue = DeepUnwrap.unwrap(attributeMap.get(attName));
                                         if (attValue != null && !(attValue instanceof
Serializable)) {
                                             throw new ParseException(
-                                                    "Value of attribute " + _StringUtil.jQuote(attName)
+                                                    "Value of custom setting " + _StringUtil.jQuote(attName)
                                                     + " should implement java.io.Serializable.",
                                                     exp);
                                         }
-                                        template.setHeaderCustomAttribute(attName, (Serializable)
attValue);
+                                        template.setHeaderCustomSetting(attName, (Serializable)
attValue);
                                 }
                             } catch (TemplateModelException tme) {
                             }
@@ -3979,6 +3979,9 @@ void HeaderElement() :
                             String correctName;
 	                        if (ks.equals("charset") || ks.equals("source_encoding") || ks.equals("sourceEncoding"))
{
 	                            correctName = "encoding";
+	                        } else if (ks.equals("attributes")) {
+	                            correctName = token_source.namingConvention == NamingConvention.CAMEL_CASE
+	                                    ? "customSettings" : "custom_settings";
 	                        } else if (ks.equals("xmlns")) {
 	                            // [2.4] If camel case will be the default, update this
                                 correctName

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
----------------------------------------------------------------------
diff --git a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
index f4a4895..016e24d 100644
--- a/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
+++ b/freemarker-servlet/src/main/java/org/apache/freemarker/servlet/FreemarkerServlet.java
@@ -902,7 +902,7 @@ public class FreemarkerServlet extends HttpServlet {
     }
 
     private ContentType getTemplateSpecificContentType(final Template template) {
-        Object contentTypeAttr = template.getCustomAttribute("content_type", null);
+        Object contentTypeAttr = template.getCustomSetting("content_type", null);
         if (contentTypeAttr != null) {
             // Converted with toString() for backward compatibility.
             return new ContentType(contentTypeAttr.toString());

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/FreemarkerServletTest.java
----------------------------------------------------------------------
diff --git a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/FreemarkerServletTest.java
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/FreemarkerServletTest.java
index e3c05d4..2b25a29 100644
--- a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/FreemarkerServletTest.java
+++ b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/FreemarkerServletTest.java
@@ -44,8 +44,6 @@ import org.apache.freemarker.core.templateresolver.FirstMatchTemplateConfigurati
 import org.apache.freemarker.core.templateresolver.TemplateConfigurationFactory;
 import org.apache.freemarker.core.templateresolver.TemplateLoader;
 import org.apache.freemarker.core.templateresolver.impl.ByteArrayTemplateLoader;
-import org.apache.freemarker.servlet.FreemarkerServlet;
-import org.apache.freemarker.servlet.FreemarkerServletConfigurationBuilder;
 import org.junit.Before;
 import org.junit.Test;
 import org.springframework.mock.web.MockHttpServletRequest;
@@ -314,7 +312,7 @@ public class FreemarkerServletTest {
         } catch (ServletException e) {
             assertThat(e.getCause().getCause().getMessage(), containsString(FreemarkerServlet.INIT_PARAM_VALUE_LEGACY));
         }
-        // But the legacy content_type template attribute can still set the output charset:
+        // But the legacy content_type template custom setting can still set the output charset:
         assertOutputEncodingEquals(
                 StandardCharsets.UTF_8, // <- expected response.characterEncoding
                 StandardCharsets.UTF_8, // <- expected env.outputEncoding
@@ -349,7 +347,7 @@ public class FreemarkerServletTest {
         } catch (ServletException e) {
             assertThat(e.getCause().getCause().getMessage(), containsString(FreemarkerServlet.INIT_PARAM_VALUE_LEGACY));
         }
-        // The legacy content_type template attribute can still specify an output charset,
though it will be ignored:
+        // The legacy content_type template custom setting can still specify an output charset,
though it will be ignored:
         assertOutputEncodingEquals(
                 SERVLET_RESPONSE_DEFAULT_CHARSET, // <- expected response.characterEncoding
                 SERVLET_RESPONSE_DEFAULT_CHARSET, // <- expected env.outputEncoding
@@ -394,7 +392,7 @@ public class FreemarkerServletTest {
         } catch (ServletException e) {
             assertThat(e.getCause().getCause().getMessage(), containsString(FreemarkerServlet.INIT_PARAM_VALUE_LEGACY));
         }
-        // The legacy content_type template attribute can still specify an output charset,
though it will be overridden:
+        // The legacy content_type template custom setting can still specify an output charset,
though it will be overridden:
         assertOutputEncodingEquals(
                 StandardCharsets.UTF_16LE, // <- expected response.characterEncoding
                 StandardCharsets.UTF_16LE, // <- expected env.outputEncoding
@@ -583,10 +581,10 @@ public class FreemarkerServletTest {
                         .getBytes(StandardCharsets.UTF_8));
                 tl.putTemplate(FOO_OUT_UTF8_FTL, "foo"
                         .getBytes(StandardCharsets.UTF_8));
-                tl.putTemplate(CONTENT_TYPE_ATTR_FTL, "<#ftl attributes={ 'content_type':
'text/plain' }>foo"
+                tl.putTemplate(CONTENT_TYPE_ATTR_FTL, "<#ftl customSettings={ 'content_type':
'text/plain' }>foo"
                         .getBytes(StandardCharsets.UTF_8));
                 tl.putTemplate(CONTENT_TYPE_ATTR_WITH_CHARSET_FTL,
-                        "<#ftl attributes={ 'content_type': 'text/plain; charset=UTF-8'
}>foo"
+                        "<#ftl customSettings={ 'content_type': 'text/plain; charset=UTF-8'
}>foo"
                         .getBytes(StandardCharsets.UTF_8));
                 tl.putTemplate(OUTPUT_FORMAT_HEADER_FTL, "<#ftl outputFormat='plainText'>foo"
                         .getBytes(StandardCharsets.UTF_8));

http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/24673a17/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/RealServletContainertTest.java
----------------------------------------------------------------------
diff --git a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/RealServletContainertTest.java
b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/RealServletContainertTest.java
index 053ef32..32412a9 100644
--- a/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/RealServletContainertTest.java
+++ b/freemarker-servlet/src/test/java/org/apache/freemarker/servlet/jsp/RealServletContainertTest.java
@@ -87,7 +87,7 @@ public class RealServletContainertTest extends WebAppTestCase {
     }
 
     @Test
-    public void basicCustomAttributes() throws Exception {
+    public void basicServletScopeAttributes() throws Exception {
         restartWebAppIfStarted(WEBAPP_BASIC);  // To clear the application scope attributes
         assertExpectedEqualsOutput(WEBAPP_BASIC, "attributes.txt", "tester"
                 + "?action=" + AllKindOfContainersModel2Action.class.getName()


Mime
View raw message