You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by da...@apache.org on 2022/10/21 14:54:55 UTC
[ofbiz-framework] 02/02: Improved: MacroFormRenderer refactoring of textarea fields
This is an automated email from the ASF dual-hosted git repository.
danwatford pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
commit a4157641e3571aa49d2eed303d70a5edc7dea649
Author: Daniel Watford <da...@watfordconsulting.com>
AuthorDate: Tue Oct 4 09:40:59 2022 +0100
Improved: MacroFormRenderer refactoring of textarea fields
(OFBIZ-12125)
Part of the OFBIZ-11456 MacroFormRenderer refactoring effort.
Rather than MacroFormRenderer producing and evaulating FTL strings, it now
uses RenderableFtlElementsBuilder to create RenderableFtlMacroCall objects
which are then passed to an FtlWriter for evaluation.
---
.../widget/renderer/macro/MacroFormRenderer.java | 85 +---------------------
.../macro/RenderableFtlFormElementsBuilder.java | 70 ++++++++++++++++++
.../macro/renderable/RenderableFtlMacroCall.java | 4 +
.../renderer/macro/MacroFormRendererTest.java | 18 ++---
.../RenderableFtlFormElementsBuilderTest.java | 51 +++++++++++++
5 files changed, 134 insertions(+), 94 deletions(-)
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
index bc995cdd00..89d917edd9 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
@@ -245,88 +245,9 @@ public final class MacroFormRenderer implements FormStringRenderer {
@Override
public void renderTextareaField(Appendable writer, Map<String, Object> context, TextareaField textareaField) {
- ModelFormField modelFormField = textareaField.getModelFormField();
- String name = modelFormField.getParameterName(context);
- String cols = Integer.toString(textareaField.getCols());
- String rows = Integer.toString(textareaField.getRows());
- String id = modelFormField.getCurrentContainerId(context);
- String className = "";
- String alert = "false";
- if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
- className = modelFormField.getWidgetStyle();
- if (modelFormField.shouldBeRed(context)) {
- alert = "true";
- }
- }
- //check for required field style on single forms
- if (shouldApplyRequiredField(modelFormField)) {
- String requiredStyle = modelFormField.getRequiredFieldStyle();
- if (UtilValidate.isEmpty(requiredStyle)) {
- requiredStyle = "required";
- }
- if (UtilValidate.isEmpty(className)) {
- className = requiredStyle;
- } else {
- className = requiredStyle + " " + className;
- }
- }
- String visualEditorEnable = "";
- String buttons = "";
- if (textareaField.getVisualEditorEnable()) {
- visualEditorEnable = "true";
- buttons = textareaField.getVisualEditorButtons(context);
- if (UtilValidate.isEmpty(buttons)) {
- buttons = "maxi";
- }
- }
- String readonly = "";
- if (textareaField.isReadOnly()) {
- readonly = "readonly";
- }
- Map<String, Object> userLogin = UtilGenerics.cast(context.get("userLogin"));
- String language = "en";
- if (userLogin != null) {
- language = UtilValidate.isEmpty((String) userLogin.get("lastLocale")) ? "en" : (String) userLogin.get("lastLocale");
- }
- String maxlength = "";
- if (textareaField.getMaxlength() != null) {
- maxlength = Integer.toString(textareaField.getMaxlength());
- }
- String tabindex = modelFormField.getTabindex();
- String value = modelFormField.getEntry(context, textareaField.getDefaultValue(context));
- boolean disabled = modelFormField.getDisabled(context);
- StringWriter sr = new StringWriter();
- sr.append("<@renderTextareaField ");
- sr.append("name=\"");
- sr.append(name);
- sr.append("\" className=\"");
- sr.append(className);
- sr.append("\" alert=\"");
- sr.append(alert);
- sr.append("\" value=\"");
- sr.append(value);
- sr.append("\" cols=\"");
- sr.append(cols);
- sr.append("\" rows=\"");
- sr.append(rows);
- sr.append("\" maxlength=\"");
- sr.append(maxlength);
- sr.append("\" id=\"");
- sr.append(id);
- sr.append("\" readonly=\"");
- sr.append(readonly);
- sr.append("\" visualEditorEnable=\"");
- sr.append(visualEditorEnable);
- sr.append("\" language=\"");
- sr.append(language);
- sr.append("\" buttons=\"");
- sr.append(buttons);
- sr.append("\" tabindex=\"");
- sr.append(tabindex);
- sr.append("\" disabled=");
- sr.append(Boolean.toString(disabled));
- sr.append(" />");
- executeMacro(writer, sr.toString());
+ writeFtlElement(writer, renderableFtlFormElementsBuilder.textArea(context, textareaField));
+
+ final ModelFormField modelFormField = textareaField.getModelFormField();
this.addAsterisks(writer, context, modelFormField);
this.appendTooltip(writer, context, modelFormField);
}
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
index 591026be33..8d256c5924 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilder.java
@@ -20,6 +20,7 @@ package org.apache.ofbiz.widget.renderer.macro;
import java.io.StringWriter;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -300,6 +301,69 @@ public final class RenderableFtlFormElementsBuilder {
.build();
}
+ public RenderableFtl textArea(final Map<String, Object> context, final ModelFormField.TextareaField textareaField) {
+
+ final ModelFormField modelFormField = textareaField.getModelFormField();
+
+ final RenderableFtlMacroCallBuilder builder = RenderableFtlMacroCall.builder()
+ .name("renderTextareaField")
+ .stringParameter("name", modelFormField.getParameterName(context));
+
+ builder.intParameter("cols", textareaField.getCols());
+ builder.intParameter("rows", textareaField.getRows());
+
+ builder.stringParameter("id", modelFormField.getCurrentContainerId(context));
+
+ builder.stringParameter("alert", "false");
+
+ ArrayList<String> classNames = new ArrayList<>();
+ if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) {
+ classNames.add(modelFormField.getWidgetStyle());
+ if (modelFormField.shouldBeRed(context)) {
+ builder.stringParameter("alert", "true");
+ }
+ }
+
+ if (shouldApplyRequiredField(modelFormField)) {
+ String requiredStyle = modelFormField.getRequiredFieldStyle();
+ if (UtilValidate.isEmpty(requiredStyle)) {
+ requiredStyle = "required";
+ }
+ classNames.add(requiredStyle);
+ }
+ builder.stringParameter("className", String.join(" ", classNames));
+
+ if (textareaField.getVisualEditorEnable()) {
+ builder.booleanParameter("visualEditorEnable", true);
+
+ String buttons = textareaField.getVisualEditorButtons(context);
+ builder.stringParameter("buttons", UtilValidate.isEmpty(buttons) ? "maxi" : buttons);
+ }
+
+ if (textareaField.isReadOnly()) {
+ builder.stringParameter("readonly", "readonly");
+ }
+
+ Map<String, Object> userLogin = UtilGenerics.cast(context.get("userLogin"));
+ String language = "en";
+ if (userLogin != null) {
+ language = UtilValidate.isEmpty((String) userLogin.get("lastLocale")) ? "en" : (String) userLogin.get("lastLocale");
+ }
+ builder.stringParameter("language", language);
+
+ if (textareaField.getMaxlength() != null) {
+ builder.intParameter("maxlength", textareaField.getMaxlength());
+ }
+
+ builder.stringParameter("tabindex", modelFormField.getTabindex());
+
+ builder.stringParameter("value", modelFormField.getEntry(context, textareaField.getDefaultValue(context)));
+
+ builder.booleanParameter("disabled", modelFormField.getDisabled(context));
+
+ return builder.build();
+ }
+
public RenderableFtl makeHyperlinkString(final ModelFormField.SubHyperlink subHyperlink,
final Map<String, Object> context) {
if (subHyperlink == null || !subHyperlink.shouldUse(context)) {
@@ -633,6 +697,12 @@ public final class RenderableFtlFormElementsBuilder {
return wholeFormContext;
}
+ private boolean shouldApplyRequiredField(ModelFormField modelFormField) {
+ return ("single".equals(modelFormField.getModelForm().getType())
+ || "upload".equals(modelFormField.getModelForm().getType()))
+ && modelFormField.getRequiredField();
+ }
+
/**
* Extracts parameters from a target URL string, prepares them for an Ajax
* JavaScript call. This method is currently set to return a parameter string
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/renderable/RenderableFtlMacroCall.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/renderable/RenderableFtlMacroCall.java
index b82070f023..7ef5674724 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/renderable/RenderableFtlMacroCall.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/renderable/RenderableFtlMacroCall.java
@@ -69,6 +69,10 @@ public final class RenderableFtlMacroCall implements RenderableFtl {
return parameter(parameterName, parameterValue);
}
+ public RenderableFtlMacroCallBuilder intParameter(final String parameterName, final int parameterValue) {
+ return parameter(parameterName, parameterValue);
+ }
+
public RenderableFtlMacroCallBuilder booleanParameter(final String parameterName, final boolean parameterValue) {
return parameter(parameterName, parameterValue);
}
diff --git a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
index 03daf5ddf9..eb5b3e244e 100644
--- a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
+++ b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRendererTest.java
@@ -225,23 +225,17 @@ public class MacroFormRendererTest {
public void textAreaMacroRendered(@Mocked ModelFormField.TextareaField textareaField) throws IOException {
new Expectations() {
{
- modelFormField.getEntry(withNotNull(), anyString);
- result = "TEXTAREAVALUE";
-
- textareaField.getCols();
- result = 11;
-
- textareaField.getRows();
- result = 22;
+ renderableFtlFormElementsBuilder.textArea(withNotNull(), textareaField);
+ result = genericMacroCall;
}
};
+ genericTooltipRenderedExpectation(textareaField);
+
macroFormRenderer.renderTextareaField(appendable, ImmutableMap.of(), textareaField);
- assertAndGetMacroString("renderTextareaField", ImmutableMap.of(
- "value", "TEXTAREAVALUE",
- "cols", "11",
- "rows", "22"));
+ genericSingleMacroRenderedVerification();
+ genericTooltipRenderedVerification();
}
@Test
diff --git a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
index 67e9bb9cb1..03f05ccd85 100644
--- a/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
+++ b/framework/widget/src/test/java/org/apache/ofbiz/widget/renderer/macro/RenderableFtlFormElementsBuilderTest.java
@@ -236,6 +236,57 @@ public class RenderableFtlFormElementsBuilderTest {
+ "areaId2,http://host.domain/target2,")));
}
+ @Test
+ public void textareaFieldSetsIdValueLengthAndSize(@Mocked final ModelFormField.TextareaField textareaField) {
+ final int maxLength = 142;
+ final int cols = 80;
+ final int rows = 5;
+ new Expectations() {
+ {
+ modelFormField.getCurrentContainerId(withNotNull());
+ result = "CurrentTextareaId";
+
+ modelFormField.getEntry(withNotNull(), anyString);
+ result = "TEXTAREAVALUE";
+
+ textareaField.getMaxlength();
+ result = maxLength;
+
+ textareaField.getCols();
+ result = cols;
+
+ textareaField.getRows();
+ result = rows;
+ }
+ };
+
+ final HashMap<String, Object> context = new HashMap<>();
+
+ final RenderableFtl renderableFtl = renderableFtlFormElementsBuilder.textArea(context, textareaField);
+ assertThat(renderableFtl, MacroCallMatcher.hasNameAndParameters("renderTextareaField",
+ MacroCallParameterMatcher.hasNameAndStringValue("id", "CurrentTextareaId"),
+ MacroCallParameterMatcher.hasNameAndStringValue("value", "TEXTAREAVALUE"),
+ MacroCallParameterMatcher.hasNameAndIntegerValue("cols", cols),
+ MacroCallParameterMatcher.hasNameAndIntegerValue("rows", rows),
+ MacroCallParameterMatcher.hasNameAndIntegerValue("maxlength", maxLength)));
+ }
+
+ @Test
+ public void textareaFieldSetsDisabledParameters(@Mocked final ModelFormField.TextareaField textareaField) {
+ new Expectations() {
+ {
+ modelFormField.getDisabled(withNotNull());
+ result = true;
+ }
+ };
+
+ final HashMap<String, Object> context = new HashMap<>();
+
+ final RenderableFtl renderableFtl = renderableFtlFormElementsBuilder.textArea(context, textareaField);
+ assertThat(renderableFtl, MacroCallMatcher.hasNameAndParameters("renderTextareaField",
+ MacroCallParameterMatcher.hasNameAndBooleanValue("disabled", true)));
+ }
+
@Test
public void fieldGroupOpenRendersCollapsibleAreaId(@Mocked final ModelForm.FieldGroup fieldGroup) {
new Expectations() {