This is an automated email from the ASF dual-hosted git repository.

mleila 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 693da97fba Fixed: Display of grid and forms within a same xml file 
(OFBIZ-13127) (#828)
693da97fba is described below

commit 693da97fba82ee5d44840c8423770d209c950d50
Author: MLeila <mle...@apache.org>
AuthorDate: Fri Aug 30 09:18:22 2024 +0200

    Fixed: Display of grid and forms within a same xml file (OFBIZ-13127) (#828)
    
    This correct display of form extending a form within a file containing a
    grid
    
    Co-authored-by: Leila <leila.mek...@nereide.fr>
---
 .../org/apache/ofbiz/widget/model/ModelGrid.java   | 23 +++++++++++++++++++-
 .../apache/ofbiz/widget/model/ModelSingleForm.java | 25 ++++++++++++++++++++++
 2 files changed, 47 insertions(+), 1 deletion(-)

diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelGrid.java 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelGrid.java
index 69285be878..8c19ebe642 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelGrid.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelGrid.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import org.apache.ofbiz.base.util.Debug;
 import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.base.util.UtilXml;
 import org.apache.ofbiz.base.util.string.FlexibleStringExpander;
 import org.apache.ofbiz.entity.model.ModelReader;
@@ -82,13 +83,33 @@ public class ModelGrid extends ModelForm {
                     Debug.logError(e, "Failed to load parent grid definition 
'" + parentGrid
                             + "' at resource '" + parentResource + "'", 
MODULE);
                 }
+                if (parentModel == null) {
+                    // Backwards compatibility - look for form definitions
+                    try {
+                        parentModel = 
FormFactory.getFormFromLocation(parentResource, parentGrid, entityModelReader,
+                                visualTheme, dispatchContext);
+                    } catch (Exception e) {
+                        Debug.logError(e, "Failed to load parent grid 
definition '" + parentGrid
+                                + "' at resource '" + parentResource + "'", 
MODULE);
+                    }
+                }
+
             } else if (!parentGrid.equals(gridElement.getAttribute("name"))) {
                 // try to find a grid definition in the same file
                 Element rootElement = 
gridElement.getOwnerDocument().getDocumentElement();
                 List<? extends Element> gridElements = 
UtilXml.childElementList(rootElement, "grid");
-                if (gridElements.isEmpty()) {
+                if (gridElements.stream()
+                        .noneMatch(grid -> 
grid.getAttribute("name").equals(parentGrid))) {
                     // Backwards compatibility - look for form definitions
                     gridElements = UtilXml.childElementList(rootElement, 
"form");
+                    Element parentElement = gridElements.stream()
+                            .filter(form -> 
form.getAttribute("name").equals(parentGrid))
+                            .findFirst().orElseGet(null);
+                    if (UtilValidate.isNotEmpty(parentElement)) {
+                        parentModel = 
FormFactory.createModelForm(parentElement, entityModelReader, visualTheme,
+                                dispatchContext, parentResource, parentGrid);
+                        return parentModel;
+                    }
                 }
                 for (Element parentElement : gridElements) {
                     if (parentElement.getAttribute("name").equals(parentGrid)) 
{
diff --git 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelSingleForm.java
 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelSingleForm.java
index b6fb312224..d41524e5a9 100644
--- 
a/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelSingleForm.java
+++ 
b/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelSingleForm.java
@@ -23,6 +23,7 @@ import java.util.List;
 import java.util.Map;
 import org.apache.ofbiz.base.util.Debug;
 import org.apache.ofbiz.base.util.UtilMisc;
+import org.apache.ofbiz.base.util.UtilValidate;
 import org.apache.ofbiz.base.util.UtilXml;
 import org.apache.ofbiz.base.util.string.FlexibleStringExpander;
 import org.apache.ofbiz.entity.model.ModelReader;
@@ -82,12 +83,36 @@ public class ModelSingleForm extends ModelForm {
                     Debug.logError(e, "Failed to load parent form definition 
'" + parentForm + "' at resource '" + parentResource
                             + "'", MODULE);
                 }
+                if (parent == null) {
+                    try {
+                        // Backwards compatibility - look for grid definitions
+                        parent = 
GridFactory.getGridFromLocation(parentResource, parentForm, entityModelReader,
+                                visualTheme, dispatchContext);
+                    } catch (Exception e) {
+                        Debug.logError(e, "Failed to load parent form 
definition '" + parentForm + "' at resource '" + parentResource
+                                + "'", MODULE);
+                    }
+                }
+
             } else if (!parentForm.equals(formElement.getAttribute("name"))) {
                 // try to find a form definition in the same file
                 Element rootElement = 
formElement.getOwnerDocument().getDocumentElement();
                 List<? extends Element> formElements = 
UtilXml.childElementList(rootElement, "form");
                 //Uncomment below to add support for abstract forms
                 //formElements.addAll(UtilXml.childElementList(rootElement, 
"abstract-form"));
+                if (formElements.stream()
+                        .noneMatch(form -> 
form.getAttribute("name").equals(parentForm))) {
+                    // Backwards compatibility - look for grid definitions
+                    formElements = UtilXml.childElementList(rootElement, 
"grid");
+                    Element parentElement = formElements.stream()
+                            .filter(grid -> 
grid.getAttribute("name").equals(parentForm))
+                            .findFirst().orElseGet(null);
+                    if (UtilValidate.isNotEmpty(parentElement)) {
+                        parent = GridFactory.createModelGrid(parentElement, 
entityModelReader, visualTheme,
+                                dispatchContext, parentResource, parentForm);
+                        return parent;
+                    }
+                }
                 for (Element parentElement : formElements) {
                     if (parentElement.getAttribute("name").equals(parentForm)) 
{
                         parent = FormFactory.createModelForm(parentElement, 
entityModelReader, visualTheme,

Reply via email to