This is an automated email from the ASF dual-hosted git repository.
nmalin pushed a commit to branch release22.01
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/release22.01 by this push:
new 4caa15b Fixed: Attribute default-field-type hidden doesn't work for
auto-fields-service element (OFBIZ-12555)
4caa15b is described below
commit 4caa15b26a71f9f38d39e96d67773cb01fdeb573
Author: Nicolas Malin <[email protected]>
AuthorDate: Wed Feb 2 18:07:37 2022 +0100
Fixed: Attribute default-field-type hidden doesn't work for
auto-fields-service element (OFBIZ-12555)
When you define a widget form and wish populate hidden fields with the
element auto-fields-service, OFBiz rendering each as edit field type.
<form name="ListPartyQuals" ...>
<auto-fields-service service-name="updatePartyQual"
default-field-type="hidden"/>
</form>
The problem came from the function
ModelFormFieldBuilder.induceFieldInfoFromServiceParam didn't manage the case
"hidden"
By the way, this function is "if" forest, and simplify reading.
---
.../ofbiz/widget/model/ModelFormFieldBuilder.java | 107 ++++++++++++---------
1 file changed, 61 insertions(+), 46 deletions(-)
diff --git
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
index d01a8e6..cfbefab 100644
---
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
+++
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormFieldBuilder.java
@@ -20,10 +20,12 @@ package org.apache.ofbiz.widget.model;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.ofbiz.base.util.Debug;
+import org.apache.ofbiz.base.util.StringUtil;
import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilValidate;
import org.apache.ofbiz.base.util.UtilXml;
@@ -852,55 +854,68 @@ public class ModelFormFieldBuilder {
}
this.serviceName = modelService.getName();
this.attributeName = modelParam.getName();
- if ("find".equals(defaultFieldType)) {
- if (modelParam.getType().indexOf("Double") != -1 ||
modelParam.getType().indexOf("Float") != -1
- || modelParam.getType().indexOf("Long") != -1 ||
modelParam.getType().indexOf("Integer") != -1) {
- ModelFormField.RangeFindField textField = new
ModelFormField.RangeFindField(FieldInfo.SOURCE_AUTO_SERVICE, 6,
- null);
- this.setFieldInfo(textField);
- } else if (modelParam.getType().indexOf("Timestamp") != -1) {
- ModelFormField.DateFindField dateTimeField = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE,
- "timestamp");
- this.setFieldInfo(dateTimeField);
- } else if (modelParam.getType().indexOf("Date") != -1) {
- ModelFormField.DateFindField dateTimeField = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE,
- "date");
- this.setFieldInfo(dateTimeField);
- } else if (modelParam.getType().indexOf("Time") != -1) {
- ModelFormField.DateFindField dateTimeField = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE,
- "time");
- this.setFieldInfo(dateTimeField);
- } else {
- ModelFormField.TextFindField textField = new
ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_SERVICE, null);
- this.setFieldInfo(textField);
+ String modelParamFieldType =
computeFieldTypeToUse(modelParam.getType());
+ FieldInfo fieldInfo = null;
+ switch (defaultFieldType) {
+ case "display":
+ fieldInfo = new
ModelFormField.DisplayField(FieldInfo.SOURCE_AUTO_SERVICE, null);
+ break;
+ case "hidden":
+ fieldInfo = new
ModelFormField.HiddenField(FieldInfo.SOURCE_AUTO_SERVICE, null);
+ break;
+ case "find":
+ if ("text".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_SERVICE, null);
+ } else if ("numeric".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.RangeFindField(FieldInfo.SOURCE_AUTO_SERVICE, 6, null);
+ } else if ("timestamp".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "timestamp");
+ } else if ("date".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "date");
+ } else if ("time".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "time");
}
- } else if ("display".equals(defaultFieldType)) {
- ModelFormField.DisplayField displayField = new
ModelFormField.DisplayField(FieldInfo.SOURCE_AUTO_SERVICE, null);
- this.setFieldInfo(displayField);
- } else {
- // default to "edit"
- if (modelParam.getType().indexOf("Double") != -1 ||
modelParam.getType().indexOf("Float") != -1
- || modelParam.getType().indexOf("Long") != -1 ||
modelParam.getType().indexOf("Integer") != -1) {
- ModelFormField.TextField textField = new
ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, 6, null, null);
- this.setFieldInfo(textField);
- } else if (modelParam.getType().indexOf("Timestamp") != -1) {
- ModelFormField.DateTimeField dateTimeField = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE,
- "timestamp");
- this.setFieldInfo(dateTimeField);
- } else if (modelParam.getType().indexOf("Date") != -1) {
- ModelFormField.DateTimeField dateTimeField = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE,
- "date");
- this.setFieldInfo(dateTimeField);
- } else if (modelParam.getType().indexOf("Time") != -1) {
- ModelFormField.DateTimeField dateTimeField = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE,
- "time");
- this.setFieldInfo(dateTimeField);
- } else {
- ModelFormField.TextField textField = new
ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, null);
- this.setFieldInfo(textField);
+ break;
+ default: // default to "edit"
+ if ("text".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, null);
+ } else if ("numeric".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, 6, null, null);
+ } else if ("timestamp".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "timestamp");
+ } else if ("date".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "date");
+ } else if ("time".equals(modelParamFieldType)) {
+ fieldInfo = new
ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "time");
}
}
- return true;
+ this.setFieldInfo(fieldInfo);
+ return fieldInfo != null;
+ }
+
+ /**
+ * For a service model parameter type, return the logique field type to use
+ * If nothing found, return text
+ * @param modelParamType
+ * @return
+ */
+ private String computeFieldTypeToUse(String modelParamType) {
+ final Map<String, String> switchType = Map.of("Double", "numeric",
+ "Float", "numeric",
+ "Long", "numeric",
+ "Integer", "numeric",
+ "BigDecimal", "numeric",
+ "Timestamp", "timestamp",
+ "Date", "date",
+ "Time", "time");
+ String typeToConvert = "";
+ if (modelParamType.contains(".")) {
+ LinkedList<String> splitString = new
LinkedList<>(StringUtil.split(modelParamType, "."));
+ typeToConvert = splitString.getLast();
+ } else {
+ typeToConvert = modelParamType;
+ }
+ return switchType.containsKey(typeToConvert) ?
switchType.get(typeToConvert) : "text";
}
private boolean induceFieldInfoFromServiceParam(String defaultFieldType,
ModelReader entityModelReader,