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.