This is an automated email from the ASF dual-hosted git repository.

tv pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/turbine-core.git


The following commit(s) were added to refs/heads/trunk by this push:
     new ed8cddd8 WIP: Further code reduction in the PipelineData/RunData class 
hierarchy
ed8cddd8 is described below

commit ed8cddd88788c01f2bd0af5e6974879303f49fe2
Author: Thomas Vandahl <[email protected]>
AuthorDate: Tue Dec 16 22:48:31 2025 +0100

    WIP: Further code reduction in the PipelineData/RunData class hierarchy
---
 .../turbine/pipeline/DefaultPipelineData.java      | 10 +++
 .../org/apache/turbine/pipeline/PipelineData.java  | 19 +++++
 .../services/rundata/DefaultTurbineRunData.java    | 84 +---------------------
 src/java/org/apache/turbine/util/RunData.java      | 16 ++++-
 4 files changed, 45 insertions(+), 84 deletions(-)

diff --git a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java 
b/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
index 1631b987..7695acc3 100644
--- a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
+++ b/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
@@ -3,6 +3,7 @@ package org.apache.turbine.pipeline;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.turbine.Turbine;
 import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.rundata.RunDataService;
 
@@ -45,6 +46,15 @@ public class DefaultPipelineData implements PipelineData
     private final Map<Class<?>, Map<Class<?>, ? super Object>> map =
         new HashMap<>();
 
+    /**
+     * Default constructor
+     */
+    public DefaultPipelineData()
+    {
+        // a map to hold information to be added to pipelineData
+        put(Turbine.class, new HashMap<>());
+    }
+
     /**
      * Put a configured map of objects into the pipeline data object
      *
diff --git a/src/java/org/apache/turbine/pipeline/PipelineData.java 
b/src/java/org/apache/turbine/pipeline/PipelineData.java
index 5c08be0a..37e29b90 100644
--- a/src/java/org/apache/turbine/pipeline/PipelineData.java
+++ b/src/java/org/apache/turbine/pipeline/PipelineData.java
@@ -1,6 +1,7 @@
 package org.apache.turbine.pipeline;
 
 import java.util.Map;
+import java.util.function.Function;
 
 import org.apache.turbine.util.RunData;
 import org.apache.turbine.util.TurbineRuntimeException;
@@ -69,6 +70,24 @@ public interface PipelineData extends AutoCloseable
      */
     <T> T get(Class<?> key, Class<T> innerKey);
 
+    /**
+     * Get a value from the configured map of objects for the given keys
+     *
+     * @param key the key class
+     * @param innerKey the key into the value map
+     * @return the inner value or null if no such keys exist
+     */
+    @SuppressWarnings("unchecked")
+    default <T> T computeIfAbsent(Class<?> key, Class<T> innerKey, Function<? 
super Class<?>, T> mappingFunction)
+    {
+        Map<Class<?>, ? super Object> innerMap = get(key);
+        if (innerMap == null)
+        {
+            return null;
+        }
+        return (T) innerMap.computeIfAbsent(innerKey, mappingFunction);
+    }
+
     /**
      * Get RunData from PipelineData
      *
diff --git 
a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java 
b/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
index 891ba15c..c7b58828 100644
--- a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
+++ b/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
@@ -43,10 +43,8 @@ import org.apache.turbine.om.security.User;
 import org.apache.turbine.pipeline.DefaultPipelineData;
 import org.apache.turbine.services.TurbineServices;
 import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.util.FormMessages;
 import org.apache.turbine.util.LocaleUtils;
 import org.apache.turbine.util.SystemError;
-import org.apache.turbine.util.template.TemplateInfo;
 
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
@@ -82,7 +80,7 @@ public class DefaultTurbineRunData
     /**
      * The disposed flag.
      */
-    private boolean disposed;
+    private boolean disposed = false;
 
     /** Cached action name to execute for this request. */
     private String action;
@@ -181,18 +179,6 @@ public class DefaultTurbineRunData
         return true;
     }
 
-    /**
-     * Constructs a run data object.
-     */
-    public DefaultTurbineRunData()
-    {
-        super();
-
-        // a map to hold information to be added to pipelineData
-        put(Turbine.class, new HashMap<>());
-        recycle();
-    }
-
     /**
      * Recycles the object by removing its disposed flag.
      */
@@ -435,25 +421,6 @@ public class DefaultTurbineRunData
         templateEncoding = encoding;
     }
 
-    /**
-     * Gets the template info. Creates a new one if needed.
-     *
-     * @return a template info.
-     */
-    @Override
-    public TemplateInfo getTemplateInfo()
-    {
-        TemplateInfo templateInfo = get(Turbine.class, TemplateInfo.class);
-
-        if (templateInfo == null)
-        {
-            templateInfo = new TemplateInfo(this);
-            get(Turbine.class).put(TemplateInfo.class, templateInfo);
-        }
-
-        return templateInfo;
-    }
-
     /**
      * Whether or not a message has been defined.
      *
@@ -532,36 +499,6 @@ public class DefaultTurbineRunData
         get(Turbine.class).remove(StringBuilder.class);
     }
 
-    /**
-     * Gets a FormMessages object where all the messages to the
-     * user should be stored.
-     *
-     * @return a FormMessages.
-     */
-    @Override
-    public FormMessages getMessages()
-    {
-        FormMessages messages = get(Turbine.class, FormMessages.class);
-        if (messages == null)
-        {
-            messages = new FormMessages();
-            setMessages(messages);
-        }
-
-        return messages;
-    }
-
-    /**
-     * Sets the FormMessages object for the request.
-     *
-     * @param msgs A FormMessages.
-     */
-    @Override
-    public void setMessages(FormMessages msgs)
-    {
-        get(Turbine.class).put(FormMessages.class, msgs);
-    }
-
     /**
      * Gets the title of the page.
      *
@@ -692,13 +629,7 @@ public class DefaultTurbineRunData
     @Override
     public Locale getLocale()
     {
-        Locale locale = get(Turbine.class, Locale.class);
-        if (locale == null)
-        {
-            locale = LocaleUtils.getDefaultLocale();
-            setLocale(locale);
-        }
-        return locale;
+        return computeIfAbsent(Turbine.class, Locale.class, k -> 
LocaleUtils.getDefaultLocale());
     }
 
     /**
@@ -738,16 +669,7 @@ public class DefaultTurbineRunData
     @Override
     public Charset getCharset()
     {
-        Charset charSet = get(Turbine.class, Charset.class);
-
-        if (charSet == null)
-        {
-            log.debug("Charset was null!");
-            charSet =  LocaleUtils.getDefaultCharset();
-            setCharset(charSet);
-        }
-
-        return charSet;
+        return computeIfAbsent(Turbine.class, Charset.class, k -> 
LocaleUtils.getDefaultCharset());
     }
 
     /**
diff --git a/src/java/org/apache/turbine/util/RunData.java 
b/src/java/org/apache/turbine/util/RunData.java
index d13fe2f3..750d7bae 100644
--- a/src/java/org/apache/turbine/util/RunData.java
+++ b/src/java/org/apache/turbine/util/RunData.java
@@ -295,7 +295,11 @@ public interface RunData extends PipelineData
      *
      * @return a template info.
      */
-    TemplateInfo getTemplateInfo();
+    default TemplateInfo getTemplateInfo()
+    {
+        return computeIfAbsent(Turbine.class, TemplateInfo.class,
+                k -> new TemplateInfo(this));
+    }
 
     /**
      * Whether or not a message has been defined.
@@ -346,14 +350,20 @@ public interface RunData extends PipelineData
      *
      * @return a FormMessages.
      */
-    FormMessages getMessages();
+    default FormMessages getMessages()
+    {
+        return computeIfAbsent(Turbine.class, FormMessages.class, k -> new 
FormMessages());
+    }
 
     /**
      * Sets the FormMessages object for the request.
      *
      * @param msgs A FormMessages.
      */
-    void setMessages(FormMessages msgs);
+    default void setMessages(FormMessages msgs)
+    {
+        get(Turbine.class).put(FormMessages.class, msgs);
+    }
 
     /**
      * Gets the title of the page.

Reply via email to