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 e0f61dceb7 Improved: Convert a display-entity to hyperlink if subhyperlink this empty (OFBIZ-12547) e0f61dceb7 is described below commit e0f61dceb7395a5e31d6e8416d93c635de9f12d5 Author: Nicolas Malin <nicolas.ma...@nereide.fr> AuthorDate: Fri Jul 1 18:21:17 2022 +0200 Improved: Convert a display-entity to hyperlink if subhyperlink this empty (OFBIZ-12547) When you define a display-entity you have the possibility to add a sub-hyperlink related to the element displayed. <field name="partyIdFrom"> <display-entity entity-name="PartyNameView" key-field-name="partyId" description="${groupName}${firstName} ${lastName}"> <sub-hyperlink target="viewprofile" description="view">...</sub-hyperlink> </display-entity> <field> This display the party name with a link "view" connected. When you use the name as link without a dedicate sub link, you need to change all the form to resolve the information to display for creating an hyperlink <row-actions> <entity-one entity-name="PartyNameView" value-field="partyName"> <field-map field-name="partyId" from-field="partyIdFrom"/> </entity-one> <set field="partyNameValue" value=" ${partyName.groupName}${partyName.firstName} ${partyName.lastName}"/> </row-actions> <field name="partyIdFrom"> <hyperlink target="viewprofile" description="${partyNameValue}">..</hyperlink> </field> We lost the advantage of the display-entity. With this case, we improve display-entity with the following rule : If the display-entity has a subhyperlink and the subhyperlink haven't description, the description of the link is the display-entity description. In the code, if a sub-hyperlink has an empty description, we convert the display entity as a hyperlink --- .../apache/ofbiz/widget/model/ModelFormField.java | 31 ++++++++++++++++++++++ .../widget/renderer/macro/MacroFormRenderer.java | 22 ++++++++++----- .../renderer/macro/MacroFormRendererTest.java | 4 +-- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java index 26db8ebae3..c1d16e3f26 100644 --- a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java +++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelFormField.java @@ -1568,6 +1568,30 @@ public final class ModelFormField { public SubHyperlink getSubHyperlink() { return this.subHyperlink; } + + /** + * Analyze if a sub hyperlink is associate to the display entity with an empty description + * @param context + * @return + */ + public boolean needConvertAsHyperlink(Map<String, Object> context) { + return getSubHyperlink() != null + && getSubHyperlink().shouldUse(context) + && getSubHyperlink().getDescription(context).isEmpty(); + } + + /** + * Convert the display entity as a Hyperlink for the rendering + * @param context + * @return + */ + public HyperlinkField asHyperlink(Map<String, Object> context) { + return new HyperlinkField(getModelFormField(), + getDescription(context), + getSubHyperlink().getLink(), + getAlsoHidden()); + } + } /** @@ -2801,6 +2825,13 @@ public final class ModelFormField { this.link = new Link(element); } + public HyperlinkField(ModelFormField modelFormField, String description, Link link, boolean alsoHidden) { + super(FieldInfo.SOURCE_EXPLICIT, FieldInfo.HYPERLINK, modelFormField); + this.alsoHidden = alsoHidden; + this.description = FlexibleStringExpander.getInstance(description); + this.link = link; + } + private HyperlinkField(HyperlinkField original, ModelFormField modelFormField) { super(original.getFieldSource(), original.getFieldType(), modelFormField); this.alsoHidden = original.alsoHidden; 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 d7501ae6a9..38fb5ebfdd 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 @@ -183,14 +183,21 @@ public final class MacroFormRenderer implements FormStringRenderer { } @Override - public void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField) { - writeFtlElement(writer, - renderableFtlFormElementsBuilder.displayField(context, displayField, this.javaScriptEnabled)); + public void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField) + throws IOException { + if (displayField instanceof DisplayEntityField + && ((DisplayEntityField) displayField).needConvertAsHyperlink(context)) { - if (displayField instanceof DisplayEntityField) { + // When we have a subHyperlink on a display entity, display all as a hyperlink + renderHyperlinkField(writer, context, ((DisplayEntityField) displayField).asHyperlink(context)); + } else { writeFtlElement(writer, - renderableFtlFormElementsBuilder.makeHyperlinkString(((DisplayEntityField) displayField).getSubHyperlink(), - context)); + renderableFtlFormElementsBuilder.displayField(context, displayField, this.javaScriptEnabled)); + if (displayField instanceof DisplayEntityField) { + writeFtlElement(writer, + renderableFtlFormElementsBuilder.makeHyperlinkString(((DisplayEntityField) displayField).getSubHyperlink(), + context)); + } } final ModelFormField modelFormField = displayField.getModelFormField(); @@ -198,7 +205,8 @@ public final class MacroFormRenderer implements FormStringRenderer { } @Override - public void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField) throws IOException { + public void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField) + throws IOException { this.request.setAttribute("image", hyperlinkField.getImageLocation(context)); ModelFormField modelFormField = hyperlinkField.getModelFormField(); String encodedAlternate = encode(hyperlinkField.getAlternate(context), modelFormField, context); 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 9951a29a0e..a30fb15b01 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 @@ -145,7 +145,7 @@ public class MacroFormRendererTest { } @Test - public void displayFieldRendersFieldWithTooltip(@Mocked ModelFormField.DisplayField displayField) { + public void displayFieldRendersFieldWithTooltip(@Mocked ModelFormField.DisplayField displayField) throws IOException { new Expectations() { { renderableFtlFormElementsBuilder.displayField(withNotNull(), withNotNull(), anyBoolean); @@ -163,7 +163,7 @@ public class MacroFormRendererTest { @Test public void displayEntityFieldRendersFieldWithLinkAndTooltip( @Mocked ModelFormField.DisplayEntityField displayEntityField, - @Mocked ModelFormField.SubHyperlink subHyperlink) { + @Mocked ModelFormField.SubHyperlink subHyperlink) throws IOException { new Expectations() { { renderableFtlFormElementsBuilder.displayField(withNotNull(), withNotNull(), anyBoolean);