You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ja...@apache.org on 2021/01/13 01:29:41 UTC
[ofbiz-framework] branch trunk updated: Improved: Rename
MultiBlockHtmlTemplateUtil to ScriptLinkHelper (OFBIZ-12134)
This is an automated email from the ASF dual-hosted git repository.
jamesyong pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 9c7dc7b Improved: Rename MultiBlockHtmlTemplateUtil to ScriptLinkHelper (OFBIZ-12134)
9c7dc7b is described below
commit 9c7dc7b8778022bb91733b74f7e0fc57e3867f65
Author: James Yong <ja...@apache.org>
AuthorDate: Wed Jan 13 09:26:42 2021 +0800
Improved: Rename MultiBlockHtmlTemplateUtil to ScriptLinkHelper (OFBIZ-12134)
Rename + Refactor
---
.../java/org/apache/ofbiz/common/CommonEvents.java | 4 +-
.../ofbiz/webapp/control/ControlEventListener.java | 4 +-
.../webapp/ftl/ScriptTagsFooterTransform.java | 4 +-
.../org/apache/ofbiz/widget/model/HtmlWidget.java | 26 ++----------
...HtmlTemplateUtil.java => ScriptLinkHelper.java} | 46 +++++++++++++++++-----
.../ofbiz/widget/renderer/ScreenRenderer.java | 6 +--
6 files changed, 50 insertions(+), 40 deletions(-)
diff --git a/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java b/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
index 89aad37..debfbcf 100644
--- a/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
+++ b/framework/common/src/main/java/org/apache/ofbiz/common/CommonEvents.java
@@ -62,7 +62,7 @@ import org.apache.ofbiz.entity.util.EntityUtilProperties;
import org.apache.ofbiz.webapp.control.JWTManager;
import org.apache.ofbiz.webapp.control.LoginWorker;
import org.apache.ofbiz.widget.model.ModelWidget;
-import org.apache.ofbiz.widget.model.MultiBlockHtmlTemplateUtil;
+import org.apache.ofbiz.widget.model.ScriptLinkHelper;
import org.apache.ofbiz.widget.model.ThemeFactory;
import org.apache.ofbiz.widget.renderer.VisualTheme;
@@ -189,7 +189,7 @@ public class CommonEvents {
public static String jsResponseFromRequest(HttpServletRequest request, HttpServletResponse response) {
String fileName = request.getParameter("name");
- String script = MultiBlockHtmlTemplateUtil.getScriptFromCache(request.getSession(), fileName);
+ String script = ScriptLinkHelper.getScriptFromCache(request.getSession(), fileName);
// return the JS String
Writer out;
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlEventListener.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlEventListener.java
index d8198ef..3435e3b 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlEventListener.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ControlEventListener.java
@@ -38,7 +38,7 @@ import org.apache.ofbiz.entity.serialize.XmlSerializer;
import org.apache.ofbiz.entity.transaction.TransactionUtil;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.security.CsrfUtil;
-import org.apache.ofbiz.widget.model.MultiBlockHtmlTemplateUtil;
+import org.apache.ofbiz.widget.model.ScriptLinkHelper;
/**
* HttpSessionListener that gathers and tracks various information and statistics
@@ -74,7 +74,7 @@ public class ControlEventListener implements HttpSessionListener {
HttpSession session = event.getSession();
CsrfUtil.cleanupTokenMap(session);
- MultiBlockHtmlTemplateUtil.cleanupScriptCache(session);
+ ScriptLinkHelper.cleanupScriptCache(session);
// Finalize the Visit
boolean beganTransaction = false;
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/ScriptTagsFooterTransform.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/ScriptTagsFooterTransform.java
index 8288ab5..fa7598e 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/ScriptTagsFooterTransform.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/ftl/ScriptTagsFooterTransform.java
@@ -24,7 +24,7 @@ import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
-import org.apache.ofbiz.widget.model.MultiBlockHtmlTemplateUtil;
+import org.apache.ofbiz.widget.model.ScriptLinkHelper;
import freemarker.core.Environment;
import freemarker.ext.beans.BeanModel;
@@ -51,7 +51,7 @@ public class ScriptTagsFooterTransform implements TemplateTransformModel {
BeanModel req = (BeanModel) env.getVariable("request");
if (req != null) {
HttpServletRequest request = (HttpServletRequest) req.getWrappedObject();
- Set<String> scriptSrcSet = MultiBlockHtmlTemplateUtil.getScriptLinksForFoot(request);
+ Set<String> scriptSrcSet = ScriptLinkHelper.getScriptLinksForBodyEnd(request);
if (scriptSrcSet != null) {
String srcList = "";
for (String scriptSrc : scriptSrcSet) {
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java
index cde3114..f175044 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/HtmlWidget.java
@@ -38,8 +38,6 @@ import org.apache.ofbiz.base.util.cache.UtilCache;
import org.apache.ofbiz.base.util.collections.MapStack;
import org.apache.ofbiz.base.util.string.FlexibleStringExpander;
import org.apache.ofbiz.base.util.template.FreeMarkerWorker;
-import org.apache.ofbiz.security.CsrfUtil;
-import org.apache.ofbiz.webapp.SeoConfigUtil;
import org.apache.ofbiz.widget.renderer.ScreenRenderer;
import org.apache.ofbiz.widget.renderer.ScreenStringRenderer;
import org.apache.ofbiz.widget.renderer.html.HtmlWidgetRenderer;
@@ -268,17 +266,17 @@ public class HtmlWidget extends ModelScreenWidget {
*/
String location = locationExdr.expandString(context);
StringWriter stringWriter = new StringWriter();
- Stack<StringWriter> stringWriterStack = UtilGenerics.cast(context.get(MultiBlockHtmlTemplateUtil.FTL_WRITER));
+ Stack<StringWriter> stringWriterStack = UtilGenerics.cast(context.get(ScriptLinkHelper.FTL_WRITER));
if (stringWriterStack == null) {
stringWriterStack = new Stack<>();
}
stringWriterStack.push(stringWriter);
- context.put(MultiBlockHtmlTemplateUtil.FTL_WRITER, stringWriterStack);
+ context.put(ScriptLinkHelper.FTL_WRITER, stringWriterStack);
renderHtmlTemplate(stringWriter, locationExdr, context);
stringWriterStack.pop();
// check if no more parent freemarker template before removing from context
if (stringWriterStack.empty()) {
- context.remove(MultiBlockHtmlTemplateUtil.FTL_WRITER);
+ context.remove(ScriptLinkHelper.FTL_WRITER);
}
String data = stringWriter.toString();
stringWriter.close();
@@ -323,24 +321,8 @@ public class HtmlWidget extends ModelScreenWidget {
if (fileName.endsWith(".ftl")) {
fileName = fileName.substring(0, fileName.length() - 4);
}
- String key = MultiBlockHtmlTemplateUtil.putScriptInCache(context, fileName, scripts.toString());
-
HttpServletRequest request = (HttpServletRequest) context.get("request");
- // construct script link
- String contextPath = request.getContextPath();
- String url = null;
- if (SeoConfigUtil.isCategoryUrlEnabled(contextPath)) {
- url = contextPath + "/getJs?name=" + key;
- } else {
- url = contextPath + "/control/getJs?name=" + key;
- }
-
- // add csrf token to script link
- String tokenValue = CsrfUtil.generateTokenForNonAjax(request, "getJs");
- url = CsrfUtil.addOrUpdateTokenInUrl(url, tokenValue);
-
- // store script link to be output by scriptTagsFooter freemarker macro
- MultiBlockHtmlTemplateUtil.addScriptLinkForFoot(request, url);
+ ScriptLinkHelper.prepareScriptLinkForBodyEnd(request, fileName, scripts.toString());
}
}
// the 'template' block
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MultiBlockHtmlTemplateUtil.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ScriptLinkHelper.java
similarity index 73%
rename from framework/widget/src/main/java/org/apache/ofbiz/widget/model/MultiBlockHtmlTemplateUtil.java
rename to framework/widget/src/main/java/org/apache/ofbiz/widget/model/ScriptLinkHelper.java
index 2352945..ffd5958 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/MultiBlockHtmlTemplateUtil.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ScriptLinkHelper.java
@@ -19,9 +19,12 @@
package org.apache.ofbiz.widget.model;
import org.apache.ofbiz.base.util.UtilGenerics;
+import org.apache.ofbiz.security.CsrfUtil;
+import org.apache.ofbiz.webapp.SeoConfigUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
@@ -33,17 +36,17 @@ import java.util.Set;
* These external javascript tags are placed at the bottom of the html page. The scripts are retrieved via the getJs
* request handler.
*/
-public final class MultiBlockHtmlTemplateUtil {
+public final class ScriptLinkHelper {
- private static final String MODULE = MultiBlockHtmlTemplateUtil.class.getName();
+ private static final String MODULE = ScriptLinkHelper.class.getName();
public static final String FTL_WRITER = "WriterForFTL";
- private static final String SCRIPT_LINKS_FOR_BODY_END = "ScriptLinksForBodyEnd";
+ public static final String SCRIPT_LINKS_FOR_BODY_END = "ScriptLinksForBodyEnd";
private static int maxScriptCacheSizePerUserSession = 15;
private static int estimatedConcurrentUserSessions = 250;
/**
* Store inline script extracted from freemarker template for a user session.
- * Number of inline scripts for a user session will be constraint by {@link MultiBlockHtmlTemplateUtil#maxScriptCacheSizePerUserSession}
- * {@link MultiBlockHtmlTemplateUtil#cleanupScriptCache(HttpSession)} will be called to remove entry when session ends.
+ * Number of inline scripts for a user session will be constraint by {@link ScriptLinkHelper#maxScriptCacheSizePerUserSession}
+ * {@link ScriptLinkHelper#cleanupScriptCache(HttpSession)} will be called to remove entry when session ends.
*/
private static LinkedHashMap<String, Map<String, String>> scriptCache =
new LinkedHashMap<String, Map<String, String>>() {
@@ -53,14 +56,14 @@ public final class MultiBlockHtmlTemplateUtil {
}
};
- private MultiBlockHtmlTemplateUtil() { }
+ private ScriptLinkHelper() { }
/**
* add script link for page footer.
* @param request
* @param filePath
*/
- public static void addScriptLinkForFoot(final HttpServletRequest request, final String filePath) {
+ private static void addScriptLinkForBodyEnd(final HttpServletRequest request, final String filePath) {
Set<String> scriptLinks = UtilGenerics.cast(request.getAttribute(SCRIPT_LINKS_FOR_BODY_END));
if (scriptLinks == null) {
// use of LinkedHashSet to maintain insertion order
@@ -75,7 +78,7 @@ public final class MultiBlockHtmlTemplateUtil {
* @param request
* @return
*/
- public static Set<String> getScriptLinksForFoot(HttpServletRequest request) {
+ public static Set<String> getScriptLinksForBodyEnd(HttpServletRequest request) {
Set<String> scriptLinks = UtilGenerics.cast(request.getAttribute(SCRIPT_LINKS_FOR_BODY_END));
return scriptLinks;
}
@@ -87,7 +90,7 @@ public final class MultiBlockHtmlTemplateUtil {
* @param fileContent
* @return key used to store the script
*/
- public static String putScriptInCache(Map<String, Object> context, String fileName, String fileContent) {
+ private static String putScriptInCache(Map<String, Object> context, String fileName, String fileContent) {
HttpSession session = (HttpSession) context.get("session");
String sessionId = session.getId();
Map<String, String> scriptMap = UtilGenerics.cast(scriptCache.get(sessionId));
@@ -135,4 +138,29 @@ public final class MultiBlockHtmlTemplateUtil {
public static void cleanupScriptCache(HttpSession session) {
scriptCache.remove(session.getId());
}
+
+ public static String prepareScriptLinkForBodyEnd(HttpServletRequest request, String fileName, String script) {
+
+ Map<String, Object> context = new HashMap<>();
+ context.put("session", request.getSession());
+ String key = putScriptInCache(context, fileName, script);
+
+ // construct script link
+ String contextPath = request.getContextPath();
+ String url = null;
+ if (SeoConfigUtil.isCategoryUrlEnabled(contextPath)) {
+ url = contextPath + "/getJs?name=" + key;
+ } else {
+ url = contextPath + "/control/getJs?name=" + key;
+ }
+
+ // add csrf token to script link
+ String tokenValue = CsrfUtil.generateTokenForNonAjax(request, "getJs");
+ url = CsrfUtil.addOrUpdateTokenInUrl(url, tokenValue);
+
+ // store script link to be output by scriptTagsFooter freemarker macro
+ addScriptLinkForBodyEnd(request, url);
+
+ return "success";
+ }
}
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/ScreenRenderer.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/ScreenRenderer.java
index 64a518d..523a942 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/ScreenRenderer.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/ScreenRenderer.java
@@ -60,7 +60,7 @@ import org.apache.ofbiz.widget.cache.GenericWidgetOutput;
import org.apache.ofbiz.widget.cache.ScreenCache;
import org.apache.ofbiz.widget.cache.WidgetContextCacheKey;
import org.apache.ofbiz.widget.model.ModelScreen;
-import org.apache.ofbiz.widget.model.MultiBlockHtmlTemplateUtil;
+import org.apache.ofbiz.widget.model.ScriptLinkHelper;
import org.apache.ofbiz.widget.model.ScreenFactory;
import org.apache.ofbiz.widget.model.ThemeFactory;
import org.xml.sax.SAXException;
@@ -140,8 +140,8 @@ public class ScreenRenderer {
}
} else {
context.put("renderFormSeqNumber", String.valueOf(renderFormSeqNumber));
- if (context.get(MultiBlockHtmlTemplateUtil.FTL_WRITER) != null) {
- Stack<StringWriter> stringWriterStack = UtilGenerics.cast(context.get(MultiBlockHtmlTemplateUtil.FTL_WRITER));
+ if (context.get(ScriptLinkHelper.FTL_WRITER) != null) {
+ Stack<StringWriter> stringWriterStack = UtilGenerics.cast(context.get(ScriptLinkHelper.FTL_WRITER));
modelScreen.renderScreenString(stringWriterStack.peek(), context, screenStringRenderer);
} else {
modelScreen.renderScreenString(writer, context, screenStringRenderer);