Hi Mridul,

I like the idea on this commit but I see two problems.

* The modification on ModelForm break the threadsafe set by adrian. If I understand what he did, the boolean hideHeader should be rest final, and you don't update the ModelForm during the treatment. To improve it, insteade of *if (!modelForm.getHideHeader()) {* use more *if (!modelForm.getHideHeader() && !elementOnList) {* . After this isn't a good solution to use getHideHeader() to display the message "no element found" because if I create a form without header to display and only the list, :) I'm going to blame you !

* The message isn't call a flexibleStringExpander so you can't use translation and the default label need to use a common label.

Nicolas

Le 15/10/2016 à 15:19, mridulpat...@apache.org a écrit :
Author: mridulpathak
Date: Sat Oct 15 13:19:35 2016
New Revision: 1765058

URL: http://svn.apache.org/viewvc?rev=1765058&view=rev
Log:
Improved: In form widgets of list type empty header row should not render if 
list to render in file is empty.
(OFBIZ-7598)

Thanks: Suraj Khurana for contribution.

Modified:
     ofbiz/trunk/framework/widget/dtd/widget-form.xsd
     
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
     
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java
     
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java
     
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
     ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl

Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Sat Oct 15 13:19:35 2016
@@ -86,6 +86,7 @@ under the License.
              <xs:attribute name="style" type="xs:string" />
              <xs:attribute name="focus-field-name" type="xs:string" />
              <xs:attribute name="title" type="xs:string" />
+            <xs:attribute name="empty-form-data-message" type="xs:string" />
              <xs:attribute name="tooltip" type="xs:string" />
              <xs:attribute name="list-name" type="xs:string">
                  <xs:annotation>
@@ -327,6 +328,7 @@ under the License.
              <xs:attribute name="style" type="xs:string" />
              <xs:attribute name="focus-field-name" type="xs:string" />
              <xs:attribute name="title" type="xs:string" />
+            <xs:attribute name="empty-form-data-message" type="xs:string" />
              <xs:attribute name="tooltip" type="xs:string" />
              <xs:attribute name="list-name" type="xs:string">
                  <xs:annotation>

Modified: 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
 (original)
+++ 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java
 Sat Oct 15 13:19:35 2016
@@ -147,7 +147,7 @@ public abstract class ModelForm extends
      private final String formWidgetAreaStyle;
      private final boolean groupColumns;
      private final String headerRowStyle;
-    private final boolean hideHeader;
+    private boolean hideHeader;
      private final String itemIndexSeparator;
      private final List<String> lastOrderFields;
      private final String listEntryName;
@@ -184,6 +184,7 @@ public abstract class ModelForm extends
      private final String targetType;
      private final FlexibleStringExpander targetWindowExdr;
      private final String title;
+    private final String emptyFormDataMessage;
      private final String tooltip;
      private final String type;
      private final boolean useRowSubmit;
@@ -241,6 +242,13 @@ public abstract class ModelForm extends
              title = parentModel.title;
          }
          this.title = title;
+        String emptyFormDataMessage = 
formElement.getAttribute("empty-form-data-message");
+        if (emptyFormDataMessage.isEmpty() && parentModel != null) {
+            emptyFormDataMessage = parentModel.emptyFormDataMessage;
+        } else if (emptyFormDataMessage.isEmpty()) {
+            emptyFormDataMessage = "No records found";
+        }
+        this.emptyFormDataMessage = emptyFormDataMessage;
          String tooltip = formElement.getAttribute("tooltip");
          if (tooltip.isEmpty() && parentModel != null) {
              tooltip = parentModel.tooltip;
@@ -1015,6 +1023,10 @@ public abstract class ModelForm extends
      public boolean getHideHeader() {
          return this.hideHeader;
      }
+    public boolean setHideHeader(Boolean hideHeader) {
+        this.hideHeader = hideHeader;
+        return hideHeader;
+    }
public String getItemIndexSeparator() {
          if (UtilValidate.isNotEmpty(this.itemIndexSeparator)) {
@@ -1384,6 +1396,10 @@ public abstract class ModelForm extends
          return this.title;
      }
+ public String getEmptyFormDataMessage() {
+        return this.emptyFormDataMessage;
+    }
+
      public String getTooltip() {
          return this.tooltip;
      }

Modified: 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java
 (original)
+++ 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormRenderer.java
 Sat Oct 15 13:19:35 2016
@@ -48,6 +48,7 @@ import org.apache.ofbiz.widget.model.*;
  import org.apache.ofbiz.widget.model.ModelForm.FieldGroup;
  import org.apache.ofbiz.widget.model.ModelForm.FieldGroupBase;
  import org.apache.ofbiz.widget.model.ModelFormField;
+import org.apache.ofbiz.widget.model.ModelFormField.DisplayField;
/**
   * A form rendering engine.
@@ -925,9 +926,12 @@ public class FormRenderer {
          formStringRenderer.renderFormatListWrapperOpen(writer, context, 
modelForm);
int numOfColumns = 0;
+        this.checkFormDataAndSetHeader(context);
          // ===== render header row =====
          if (!modelForm.getHideHeader()) {
              numOfColumns = this.renderHeaderRow(writer, context);
+        } else {
+            formStringRenderer.renderEmptyFormDataMessage(writer, context, 
modelForm);
          }
// ===== render the item rows =====
@@ -951,9 +955,12 @@ public class FormRenderer {
          formStringRenderer.renderFormatListWrapperOpen(writer, context, 
modelForm);
int numOfColumns = 0;
+        this.checkFormDataAndSetHeader(context);
          // ===== render header row =====
          if (!modelForm.getHideHeader()) {
              numOfColumns = this.renderHeaderRow(writer, context);
+        } else {
+            formStringRenderer.renderEmptyFormDataMessage(writer, context, 
modelForm);
          }
// ===== render the item rows =====
@@ -967,6 +974,32 @@ public class FormRenderer {
} + private void checkFormDataAndSetHeader(Map<String, Object> context) {
+        String lookupName = modelForm.getListName();
+        Object obj = context.get(lookupName);
+        if (obj == null) {
+            if (Debug.verboseOn())
+                Debug.logVerbose("No object for list or iterator name [" + lookupName + 
"] found, so not rendering rows.", module);
+            return;
+        }
+        // if list is empty, do not render rows
+        Iterator<?> iter = null;
+        if (obj instanceof Iterator<?>) {
+            iter = (Iterator<?>) obj;
+        } else if (obj instanceof List<?>) {
+            iter = ((List<?>) obj).listIterator();
+        }
+        int itemIndex = -1;
+        Object item = null;
+        while ((item = safeNext(iter)) != null) {
+            itemIndex++;
+            break;
+        }
+        if (itemIndex < 0) {
+            modelForm.setHideHeader(true);
+        }
+    }
+
      private void renderSingleFormString(Appendable writer, Map<String, 
Object> context,
              int positions) throws IOException {
          List<ModelFormField> tempFieldList = new LinkedList<ModelFormField>();

Modified: 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java
 (original)
+++ 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/FormStringRenderer.java
 Sat Oct 15 13:19:35 2016
@@ -99,4 +99,5 @@ public interface FormStringRenderer {
      public void renderContainerFindField(Appendable writer, Map<String, 
Object> context, ModelFormField.ContainerField containerField) throws IOException;
      public void renderFieldGroupOpen(Appendable writer, Map<String, Object> 
context, ModelForm.FieldGroup fieldGroup) throws IOException;
      public void renderFieldGroupClose(Appendable writer, Map<String, Object> 
context, ModelForm.FieldGroup fieldGroup) throws IOException;
+    public void renderEmptyFormDataMessage(Appendable writer, Map<String, 
Object> context, ModelForm modelForm) throws IOException;
  }

Modified: 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
 (original)
+++ 
ofbiz/trunk/framework/widget/src/main/java/org/apache/ofbiz/widget/renderer/macro/MacroFormRenderer.java
 Sat Oct 15 13:19:35 2016
@@ -1538,7 +1538,16 @@ public final class MacroFormRenderer imp
              renderEndingBoundaryComment(writer, "Grid Widget - Grid Element", 
modelForm);
          }
      }
-
+
+    public void renderEmptyFormDataMessage(Appendable writer, Map<String, 
Object> context, ModelForm modelForm) throws IOException {
+        StringWriter sr = new StringWriter();
+        sr.append("<@renderEmptyFormDataMessage");
+        sr.append(" message=\"");
+        sr.append(modelForm.getEmptyFormDataMessage());
+        sr.append("\" />");
+        executeMacro(writer, sr.toString());
+    }
+
      public void renderFormatHeaderOpen(Appendable writer, Map<String, Object> 
context, ModelForm modelForm) throws IOException {
          StringWriter sr = new StringWriter();
          sr.append("<@renderFormatHeaderOpen ");

Modified: ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl
URL: 
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl?rev=1765058&r1=1765057&r2=1765058&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl (original)
+++ ofbiz/trunk/framework/widget/templates/HtmlFormMacroLibrary.ftl Sat Oct 15 
13:19:35 2016
@@ -326,6 +326,10 @@ under the License.
    </label><#t/>
  </#macro>
+<#macro renderEmptyFormDataMessage message>
+  <h3><#if message?has_content>${message}</#if></h3>
+</#macro>
+
  <#macro renderSingleFormFieldTitle></#macro>
<#macro renderFormOpen linkUrl formType targetWindow containerId containerStyle autocomplete name viewIndexField viewSizeField viewIndex viewSize useRowSubmit>




Reply via email to