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 2022/07/01 16:24:04 UTC
[ofbiz-framework] branch release22.01 updated: Improved: Convert a display-entity to hyperlink if subhyperlink this empty (OFBIZ-12547)
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 8cccb4b586 Improved: Convert a display-entity to hyperlink if subhyperlink this empty (OFBIZ-12547)
8cccb4b586 is described below
commit 8cccb4b586e120d5e550beeec820e72b73102455
Author: Nicolas Malin <ni...@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);