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 <[email protected]>
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);