svn commit: r1307784 - in /ofbiz/trunk/framework/widget: dtd/widget-form.xsd src/org/ofbiz/widget/form/ModelForm.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1307784 - in /ofbiz/trunk/framework/widget: dtd/widget-form.xsd src/org/ofbiz/widget/form/ModelForm.java

jleroux@apache.org
Author: jleroux
Date: Sat Mar 31 12:10:07 2012
New Revision: 1307784

URL: http://svn.apache.org/viewvc?rev=1307784&view=rev
Log:
A patch from Nicolas Malin "add possibility to sort field at the end form on widget form" https://issues.apache.org/jira/browse/OFBIZ-4518

When you use sort-field, you reorder only the form begin or you need list all file if you want reordered the end form.

Example

    <form>
    <field name="a"/>
    <field name="b"/>
    <field name="c"/>
    <field name="d"/>
    </form>

If you want put c at the end :

    <form>
    <field name="a"/>
    <field name="b"/>
    <field name="c"/>
    <field name="d"/>
    <sort-order>
    <sort-field name="a"/>
    <sort-field name="b"/>
    <sort-field name="d"/>
    <sort-field name="c"/>
    </sort-order>
    </form>

with the patch

    <form>
    <field name="a"/>
    <field name="b"/>
    <field name="c"/>
    <field name="d"/>
    <sort-order>
    <last-field name="c"/>
    </sort-order>
    </form>

It's really useful for inherited forms when you adding new fields, you just use last-field for instance for submit button.

Modified:
    ofbiz/trunk/framework/widget/dtd/widget-form.xsd
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java

Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=1307784&r1=1307783&r2=1307784&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Sat Mar 31 12:10:07 2012
@@ -299,6 +299,7 @@ under the License.
         <xs:complexType>
             <xs:choice minOccurs="0" maxOccurs="unbounded">
                 <xs:element ref="sort-field"/>
+                <xs:element ref="last-field"/>
                 <xs:element ref="field-group"/>
                 <xs:element ref="banner"/>
             </xs:choice>
@@ -362,6 +363,14 @@ under the License.
     <xs:attributeGroup name="attlist.sort-field">
         <xs:attribute name="name" type="xs:string" use="required"/>
     </xs:attributeGroup>
+    <xs:element name="last-field">
+        <xs:annotation>
+            <xs:documentation>last-field reorder the given field at the end form. This element is propagated to the inherited form</xs:documentation>
+        </xs:annotation>
+        <xs:complexType>
+            <xs:attributeGroup ref="attlist.sort-field"/>
+        </xs:complexType>
+    </xs:element>
     <!-- ================== Form Events ==================== -->
     <xs:attributeGroup name="attlist.on-form-event-update-area">
         <xs:attribute name="event-type" use="required">

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?rev=1307784&r1=1307783&r2=1307784&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Sat Mar 31 12:10:07 2012
@@ -133,6 +133,7 @@ public class ModelForm extends ModelWidg
     protected List<AltTarget> altTargets = FastList.newInstance();
     protected List<AutoFieldsService> autoFieldsServices = FastList.newInstance();
     protected List<AutoFieldsEntity> autoFieldsEntities = FastList.newInstance();
+    protected List<String> lastOrderFields = FastList.newInstance();
     protected List<SortField> sortOrderFields = FastList.newInstance();
     protected List<AltRowStyle> altRowStyles = FastList.newInstance();
 
@@ -320,6 +321,7 @@ public class ModelForm extends ModelWidg
 
                 this.fieldGroupMap = parent.fieldGroupMap;
                 this.fieldGroupList = parent.fieldGroupList;
+                this.lastOrderFields = parent.lastOrderFields;
 
             }
         }
@@ -543,6 +545,10 @@ public class ModelForm extends ModelWidg
                     String position = sortFieldElement.getAttribute("position");
                     this.sortOrderFields.add(new SortField(fieldName, position));
                     this.fieldGroupMap.put(fieldName, lastFieldGroup);
+                } else if (tagName.equals("last-field")) {
+                    String fieldName = sortFieldElement.getAttribute("name");
+                    this.fieldGroupMap.put(fieldName, lastFieldGroup);
+                    this.lastOrderFields.add(fieldName);
                 } else if (tagName.equals("banner")) {
                     Banner thisBanner = new Banner(sortFieldElement, this);
                     this.fieldGroupList.add(thisBanner);
@@ -588,6 +594,27 @@ public class ModelForm extends ModelWidg
             this.fieldList = sortedFields;
         }
 
+        if (UtilValidate.isNotEmpty(this.lastOrderFields)) {
+            List<ModelFormField> lastedFields = FastList.newInstance();
+            for (String fieldName: this.lastOrderFields) {
+                if (UtilValidate.isEmpty(fieldName)) {
+                    continue;
+                }
+             // get all fields with the given name from the existing list and put them in the lasted list
+                Iterator<ModelFormField> fieldIter = this.fieldList.iterator();
+                while (fieldIter.hasNext()) {
+                    ModelFormField modelFormField = fieldIter.next();
+                    if (fieldName.equals(modelFormField.getName())) {
+                        // matched the name; remove from the original last and add to the lasted list
+                        fieldIter.remove();
+                        lastedFields.add(modelFormField);
+                    }
+                }
+            }
+            //now put all lastedFields at the field list end
+            this.fieldList.addAll(lastedFields);
+        }
+
         // read all actions under the "actions" element
         Element actionsElement = UtilXml.firstChildElement(formElement, "actions");
         if (actionsElement != null) {