You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by nm...@apache.org on 2023/01/27 16:28:05 UTC
[ofbiz-framework] branch trunk updated: Fixed: Use non string parameters on a update-area failed when comme from a JWToken (OFBIZ-12749)
This is an automated email from the ASF dual-hosted git repository.
nmalin 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 aaee98002e Fixed: Use non string parameters on a update-area failed when comme from a JWToken (OFBIZ-12749)
aaee98002e is described below
commit aaee98002e34b68da214a16d35ffc4372979b18d
Author: Nicolas Malin <ni...@nereide.fr>
AuthorDate: Fri Jan 27 17:27:03 2023 +0100
Fixed: Use non string parameters on a update-area failed when comme from a JWToken (OFBIZ-12749)
When define a update-area with some parameters as List or Map the conversion failed due to a bad management of this case when the creation come from a JWToken.
<actions>
<set field="myList" value="${groovy: ['myCase']}"/>
</actions>
<field name="myField"><hyperlink link-type="layered-modal" ...>
<set-callback area-target="myTarget">
<parameter param-name="myList"/>
</set-callback>
</hyperlink></field>
The link generate for the callback contains the variable myField with the class name and not serialized List "['myCase']"
---
.../ofbiz/widget/model/CommonWidgetModels.java | 22 +++++++
.../org/apache/ofbiz/widget/model/ModelForm.java | 4 +-
.../apache/ofbiz/widget/model/ModelFormTest.java | 75 ++++++++++++++++++++++
3 files changed, 99 insertions(+), 2 deletions(-)
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/CommonWidgetModels.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/CommonWidgetModels.java
index 258d6a9e59..9992ec14cb 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/CommonWidgetModels.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/CommonWidgetModels.java
@@ -31,6 +31,8 @@ import java.util.Map;
import java.util.TimeZone;
import org.apache.ofbiz.base.util.Debug;
+import org.apache.ofbiz.base.util.GeneralException;
+import org.apache.ofbiz.base.util.ObjectType;
import org.apache.ofbiz.base.util.UtilCodec;
import org.apache.ofbiz.base.util.UtilDateTime;
import org.apache.ofbiz.base.util.UtilGenerics;
@@ -774,4 +776,24 @@ public final class CommonWidgetModels {
return null;
}
}
+
+ /**
+ * Object dedicate to the creation of parameter object
+ */
+ public static class ParameterFactory {
+
+ /**
+ * For an entry map return a parameter after convert correctly the value
+ * @param entry
+ * @return
+ */
+ public static Parameter create(Map.Entry<String, Object> entry) {
+ try {
+ return new CommonWidgetModels.Parameter(entry.getKey(),
+ (String) ObjectType.simpleTypeOrObjectConvert(entry.getValue(), "String", null, null), false);
+ } catch (GeneralException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
}
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
index a7d1cdf19a..c214862cd7 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
@@ -2505,7 +2505,7 @@ public abstract class ModelForm extends ModelWidget {
}
/**
- * Retrieva Jwt from context, validate it and generate UpdateArea Object
+ * Retrieve a Jwt from context, validate it and generate UpdateArea Object
* @return UpdateArea object
*/
public static ModelForm.UpdateArea fromJwtToken(Map<String, Object> context) {
@@ -2541,7 +2541,7 @@ public abstract class ModelForm extends ModelWidget {
parameters != null
? parameters.entrySet()
.stream()
- .map(entry -> new CommonWidgetModels.Parameter(entry.getKey(), (String) entry.getValue(), false))
+ .map(entry -> CommonWidgetModels.ParameterFactory.create(entry))
.collect(Collectors.toList())
: new ArrayList<>());
}
diff --git a/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java b/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
new file mode 100644
index 0000000000..f3d6aef2c3
--- /dev/null
+++ b/framework/widget/src/test/java/org/apache/ofbiz/widget/model/ModelFormTest.java
@@ -0,0 +1,75 @@
+package org.apache.ofbiz.widget.model;
+
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.any;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.ofbiz.base.conversion.ConversionException;
+import org.apache.ofbiz.base.conversion.JSONConverters;
+import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.entity.Delegator;
+import org.apache.ofbiz.entity.GenericEntityException;
+import org.apache.ofbiz.webapp.control.JWTManager;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+public class ModelFormTest {
+ private HashMap<String, Object> context;
+ private Delegator delegator;
+
+ @Before
+ public void setUp() throws GenericEntityException {
+ context = new HashMap<>();
+ delegator = Mockito.mock(Delegator.class);
+ when(delegator.findList(any(), any(), any(), any(), any(), Mockito.anyBoolean()))
+ .thenReturn(new ArrayList<>());
+ }
+
+ @Test
+ public void testCreateUpdateAreaFromJWTAreaValues() {
+ context.put(CommonWidgetModels.JWT_CALLBACK, JWTManager.createJwt(delegator,
+ Map.of("areaId", "myAreaId",
+ "areaTarget", "myAreaTarget")));
+ ModelForm.UpdateArea updateArea = ModelForm.UpdateArea.fromJwtToken(context);
+ Assert.assertEquals("areaId not correct", updateArea.getAreaId(), "myAreaId");
+ Assert.assertEquals("areaTarget not correct", updateArea.getAreaTarget(), "myAreaTarget");
+ }
+
+ @Test
+ public void testCreateUpdateAreaFromJWTWithParametersMapString() throws ConversionException {
+ JSONConverters.MapToJSON converter = new JSONConverters.MapToJSON();
+ context.put(CommonWidgetModels.JWT_CALLBACK, JWTManager.createJwt(delegator,
+ Map.of("areaId", "myAreaId",
+ "areaTarget", "myAreaTarget",
+ "parameters", converter.convert(Map.of("entry1", "value1")).toString())));
+ ModelForm.UpdateArea updateArea = ModelForm.UpdateArea.fromJwtToken(context);
+ CommonWidgetModels.Parameter parameter = getParameterOnly(updateArea);
+ Assert.assertEquals("Parameters key name isn't the same", parameter.getName(), "entry1");
+ Assert.assertEquals("Parameters value isn't the same", parameter.getValue().toString(), "value1");
+ }
+
+ @Test
+ public void testCreateUpdateAreaFromJWTWithParametersMapList() throws ConversionException {
+ JSONConverters.MapToJSON converter = new JSONConverters.MapToJSON();
+ context.put(CommonWidgetModels.JWT_CALLBACK, JWTManager.createJwt(delegator,
+ Map.of("areaId", "myAreaId",
+ "areaTarget", "myAreaTarget",
+ "parameters", converter.convert(UtilMisc.toMap("entry1", List.of("1", "2"))).toString())));
+ ModelForm.UpdateArea updateArea = ModelForm.UpdateArea.fromJwtToken(context);
+ CommonWidgetModels.Parameter parameter = getParameterOnly(updateArea);
+ Assert.assertEquals("Parameters key name isn't the same", parameter.getName(), "entry1");
+ Assert.assertEquals("Parameters value isn't the same", parameter.getValue().toString(), "[1, 2]");
+ }
+
+ private static CommonWidgetModels.Parameter getParameterOnly(ModelForm.UpdateArea updateArea) {
+ Assert.assertNotNull(updateArea.getParameterList());
+ Assert.assertEquals("Parameter size should be one", updateArea.getParameterList().size(), 1);
+ return updateArea.getParameterList().get(0);
+ }
+
+}