svn commit: r702236 - in /ofbiz/trunk/framework: example/widget/example/ images/webapp/images/ widget/dtd/ widget/src/org/ofbiz/widget/form/ widget/src/org/ofbiz/widget/html/

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

svn commit: r702236 - in /ofbiz/trunk/framework: example/widget/example/ images/webapp/images/ widget/dtd/ widget/src/org/ofbiz/widget/form/ widget/src/org/ofbiz/widget/html/

bibryam
Author: bibryam
Date: Mon Oct  6 12:29:40 2008
New Revision: 702236

URL: http://svn.apache.org/viewvc?rev=702236&view=rev
Log:
Applied the patch from JIRA Issue # List-Multi form column sorting". Thanks to Bruno Busco for helping and patience.
As this is my first commit to framework, I'd really appreciate if you could review this commit.

Modified:
    ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
    ofbiz/trunk/framework/images/webapp/images/maincss.css
    ofbiz/trunk/framework/widget/dtd/widget-form.xsd
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
    ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java

Modified: ofbiz/trunk/framework/example/widget/example/ExampleForms.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/example/widget/example/ExampleForms.xml?rev=702236&r1=702235&r2=702236&view=diff
==============================================================================
--- ofbiz/trunk/framework/example/widget/example/ExampleForms.xml (original)
+++ ofbiz/trunk/framework/example/widget/example/ExampleForms.xml Mon Oct  6 12:29:40 2008
@@ -49,15 +49,16 @@
             <service service-name="performFind" result-map-name="result" result-map-list-name="listIt">
                 <field-map field-name="inputFields" env-name="exampleCtx"/>
                 <field-map field-name="entityName" value="Example"/>
+                <field-map field-name="orderBy" env-name="parameters.sortField"/>
             </service>
         </actions>
         <field name="exampleId" title="${uiLabelMap.ExampleExampleId}" widget-style="buttontext">
             <hyperlink also-hidden="false" description="${exampleId}" target="EditExample?exampleId=${exampleId}"/>
         </field>
-        <field name="exampleName" title="${uiLabelMap.CommonName}"><display/></field>
+        <field name="exampleName" title="${uiLabelMap.CommonName}" sort-field="true"><display/></field>
         <field name="exampleTypeId" title="${uiLabelMap.CommonType}"><display-entity entity-name="ExampleType"/></field>
         <field name="statusId" title="${uiLabelMap.CommonStatus}"><display-entity entity-name="StatusItem"/></field>
-        <field name="description" title="${uiLabelMap.CommonDescription}"><display/></field>
+        <field name="description" title="${uiLabelMap.CommonDescription}" sort-field="true"><display/></field>
     </form>
 
     <!-- Typically, this extended form wouldn't be necessary. The parent form (ListExamples) would

Modified: ofbiz/trunk/framework/images/webapp/images/maincss.css
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/images/webapp/images/maincss.css?rev=702236&r1=702235&r2=702236&view=diff
==============================================================================
--- ofbiz/trunk/framework/images/webapp/images/maincss.css (original)
+++ ofbiz/trunk/framework/images/webapp/images/maincss.css Mon Oct  6 12:29:40 2008
@@ -1501,6 +1501,23 @@
 text-align: left;
 }
 
+/* ===== Sort field style ===== */
+.basic-table .header-row-2 th .sort-order-asc,
+.basic-table .header-row-2 td .sort-order-asc{
+background: url(/images/arrow-gr-up.png) no-repeat right;
+padding-right: 20px;
+}
+.basic-table .header-row-2 th .sort-order-desc,
+.basic-table .header-row-2 td .sort-order-desc{
+background: url(/images/arrow-gr-dw.png) no-repeat right;
+padding-right: 20px;
+}
+.basic-table .header-row-2 th .sort-order,
+.basic-table .header-row-2 td .sort-order{
+background: url(/images/arrow-gr.png) no-repeat right;
+padding-right: 20px;
+}
+
 /* ===== Table decorator - Hover bar ===== */
 
 .hover-bar tr:hover {

Modified: ofbiz/trunk/framework/widget/dtd/widget-form.xsd
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/dtd/widget-form.xsd?rev=702236&r1=702235&r2=702236&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/dtd/widget-form.xsd (original)
+++ ofbiz/trunk/framework/widget/dtd/widget-form.xsd Mon Oct  6 12:29:40 2008
@@ -101,6 +101,15 @@
         <xs:attribute type="xs:string" name="default-widget-style"/>
         <xs:attribute type="xs:string" name="default-tooltip-style"/>
         <xs:attribute type="xs:string" name="default-required-field-style"/>
+        <xs:attribute type="xs:string" name="default-sort-field-style">
+            <xs:annotation><xs:documentation>CSS style to used for form sort fields. Defaults to "sort-order".</xs:documentation></xs:annotation>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="default-sort-field-asc-style">
+            <xs:annotation><xs:documentation>CSS style to used for form sort fields. Defaults to "sort-order-asc".</xs:documentation></xs:annotation>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="default-sort-field-desc-style">
+            <xs:annotation><xs:documentation>CSS style to used for form sort fields. Defaults to "sort-order-desc".</xs:documentation></xs:annotation>
+        </xs:attribute>                  
         <xs:attribute name="paginate" default="true">
             <xs:simpleType>
                 <xs:restriction base="xs:token">
@@ -446,6 +455,23 @@
         <xs:attribute type="xs:string" name="required-field-style">
             <xs:annotation><xs:documentation>The name of a style (like a CSS class) to apply to the title of this field if required. Will default to form's default-required-field-style. If field is required, but required-field-style is empty, an '*' will be placed to the right of text, textarea and password fields.</xs:documentation></xs:annotation>
         </xs:attribute>
+        <xs:attribute name="sort-field" default="false">
+            <xs:simpleType>
+                <xs:restriction base="xs:token">
+                    <xs:enumeration value="true"/>
+                    <xs:enumeration value="false"/>
+                </xs:restriction>
+            </xs:simpleType>
+        </xs:attribute>
+        <xs:attribute type="xs:string" name="sort-field-style">
+            <xs:annotation><xs:documentation>The name of a style (like a CSS class) to apply to the sort field link. Will default to form's default-sort-field-style.</xs:documentation></xs:annotation>
+        </xs:attribute>          
+        <xs:attribute type="xs:string" name="sort-field-asc-style">
+            <xs:annotation><xs:documentation>The name of a style (like a CSS class) to apply to the sort field link ordered ascending. Will default to form's default-sort-field-asc-style.</xs:documentation></xs:annotation>
+        </xs:attribute>  
+        <xs:attribute type="xs:string" name="sort-field-desc-style">
+            <xs:annotation><xs:documentation>The name of a style (like a CSS class) to apply to the sort field link ordered descending. Will default to form's default-sort-field-desc-style.</xs:documentation></xs:annotation>
+        </xs:attribute>  
     </xs:attributeGroup>
 
   <!-- ================== FIELD TYPES ==================== -->

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=702236&r1=702235&r2=702236&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 Mon Oct  6 12:29:40 2008
@@ -115,6 +115,9 @@
     protected boolean useRowSubmit = false;
     protected FlexibleStringExpander targetWindowExdr;
     protected String defaultRequiredFieldStyle;
+    protected String defaultSortFieldStyle;    
+    protected String defaultSortFieldAscStyle;
+    protected String defaultSortFieldDescStyle;    
     protected String oddRowStyle;
     protected String evenRowStyle;
     protected String defaultTableStyle;
@@ -176,6 +179,11 @@
     public static String DEFAULT_PAG_NEXT_STYLE = "nav-next";
     public static String DEFAULT_PAG_LAST_STYLE = "nav-last";
     
+    /** Sort field default styles. */
+    public static String DEFAULT_SORT_FIELD_STYLE = "sort-order";
+    public static String DEFAULT_SORT_FIELD_ASC_STYLE = "sort-order-asc";
+    public static String DEFAULT_SORT_FIELD_DESC_STYLE = "sort-order-desc";
+    
     protected List<ModelFormAction> actions;
     protected List<ModelFormAction> rowActions;
     protected FlexibleStringExpander rowCountExdr;
@@ -387,6 +395,15 @@
         if (this.defaultRequiredFieldStyle == null || formElement.hasAttribute("default-required-field-style")) {
             this.defaultRequiredFieldStyle = formElement.getAttribute("default-required-field-style");
         }
+        if (this.defaultSortFieldStyle == null || formElement.hasAttribute("default-sort-field-style")) {
+            this.defaultSortFieldStyle = formElement.getAttribute("default-sort-field-style");
+        }        
+        if (this.defaultSortFieldAscStyle == null || formElement.hasAttribute("default-sort-field-asc-style")) {
+            this.defaultSortFieldAscStyle = formElement.getAttribute("default-sort-field-asc-style");
+        }
+        if (this.defaultSortFieldDescStyle == null || formElement.hasAttribute("default-sort-field-desc-style")) {
+            this.defaultSortFieldDescStyle = formElement.getAttribute("default-sort-field-desc-style");
+        }        
 
         // pagination settings
         if (this.paginateTarget == null || formElement.hasAttribute("paginate-target")) {
@@ -1794,6 +1811,18 @@
     public String getDefaultRequiredFieldStyle() {
         return this.defaultRequiredFieldStyle;
     }
+    
+    public String getDefaultSortFieldStyle() {
+        return (UtilValidate.isEmpty(this.defaultSortFieldStyle) ? DEFAULT_SORT_FIELD_STYLE : this.defaultSortFieldStyle);
+    }
+    
+    public String getDefaultSortFieldAscStyle() {
+        return (UtilValidate.isEmpty(this.defaultSortFieldAscStyle) ? DEFAULT_SORT_FIELD_ASC_STYLE : this.defaultSortFieldAscStyle);
+    }
+    
+    public String getDefaultSortFieldDescStyle() {
+        return (UtilValidate.isEmpty(this.defaultSortFieldDescStyle) ? DEFAULT_SORT_FIELD_DESC_STYLE : this.defaultSortFieldDescStyle);
+    }    
 
 
     /**
@@ -2589,6 +2618,25 @@
         return inbetweenList;
     }
     
+    public String getSortField(Map<String, Object> context) {
+        String field = "sortField";
+        String value = null;
+
+        try {
+            value = (String)context.get(field);
+            if (value == null) {
+                Map parameters = (Map) context.get("parameters");
+                if (parameters != null) {
+                    value = (String)parameters.get(field);
+                }
+            }
+        } catch (Exception e) {
+            Debug.logWarning(e, "Error getting sortField: " + e.toString(), module);
+        }
+        
+        return value;
+    }    
+    
     /* Returns the list of ModelForm.UpdateArea objects.
      */
     public List<UpdateArea> getOnSubmitUpdateAreas() {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java?rev=702236&r1=702235&r2=702236&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java Mon Oct  6 12:29:40 2008
@@ -92,6 +92,9 @@
     protected String widgetStyle;
     protected String tooltipStyle;
     protected String requiredFieldStyle;
+    protected String sortFieldStyle;
+    protected String sortFieldAscStyle;
+    protected String sortFieldDescStyle;
     protected Integer position = null;
     protected String redWhen;
     protected String event;
@@ -102,6 +105,7 @@
     protected String idName;
     protected boolean separateColumn = false;
     protected Boolean requiredField = null;
+    protected Boolean sortField = null;
     protected String headerLink;
     protected String headerLinkStyle;
 
@@ -135,6 +139,9 @@
         this.widgetStyle = fieldElement.getAttribute("widget-style");
         this.tooltipStyle = fieldElement.getAttribute("tooltip-style");
         this.requiredFieldStyle = fieldElement.getAttribute("required-field-style");
+        this.sortFieldStyle = fieldElement.getAttribute("sort-field-style");        
+        this.sortFieldAscStyle = fieldElement.getAttribute("sort-field-asc-style");
+        this.sortFieldDescStyle = fieldElement.getAttribute("sort-field-desc-style");        
         this.redWhen = fieldElement.getAttribute("red-when");
         this.event = fieldElement.getAttribute("event");
         this.setAction(fieldElement.hasAttribute("action")? fieldElement.getAttribute("action"): null);
@@ -144,6 +151,7 @@
         if (sepColumns != null && sepColumns.equalsIgnoreCase("true"))
             separateColumn = true;
         this.requiredField = fieldElement.hasAttribute("required-field") ? "true".equals(fieldElement.getAttribute("required-field")) : null;
+        this.sortField = fieldElement.hasAttribute("sort-field") ? "true".equals(fieldElement.getAttribute("sort-field")) : null;
         this.headerLink = fieldElement.getAttribute("header-link");
         this.headerLinkStyle = fieldElement.getAttribute("header-link-style");
 
@@ -271,7 +279,8 @@
             this.tooltip = overrideFormField.tooltip;
         if (overrideFormField.requiredField != null)
             this.requiredField = overrideFormField.requiredField;
-
+        if (overrideFormField.sortField != null)
+            this.sortField = overrideFormField.sortField;
         if (UtilValidate.isNotEmpty(overrideFormField.titleAreaStyle))
             this.titleAreaStyle = overrideFormField.titleAreaStyle;
         if (UtilValidate.isNotEmpty(overrideFormField.widgetAreaStyle))
@@ -1070,6 +1079,27 @@
             return this.modelForm.getDefaultRequiredFieldStyle();
         }
     }
+        
+    public String getSortFieldStyle() {
+        if (UtilValidate.isNotEmpty(this.sortFieldStyle)) {
+            return this.sortFieldStyle;
+        }
+        return this.modelForm.getDefaultSortFieldStyle();
+    }
+    
+    public String getSortFieldStyleAsc() {
+        if (UtilValidate.isNotEmpty(this.sortFieldAscStyle)) {
+            return this.sortFieldAscStyle;
+        }
+        return this.modelForm.getDefaultSortFieldAscStyle();
+    }
+    
+    public String getSortFieldStyleDesc() {
+        if (UtilValidate.isNotEmpty(this.sortFieldDescStyle)) {
+            return this.sortFieldDescStyle;
+        }
+        return this.modelForm.getDefaultSortFieldDescStyle();
+    }
 
     /**
      * @return
@@ -1378,6 +1408,20 @@
     }
     
     /**
+     * @return
+     */
+    public boolean isSortField() {
+        return this.sortField != null ? this.sortField.booleanValue() : false;
+    }
+    
+    /**
+     * @param boolean
+     */
+    public void setSortField(boolean sort) {
+        this.sortField = Boolean.valueOf(sort);
+    }    
+    
+    /**
      * @param ModelForm
      */
     public void setModelForm(ModelForm modelForm) {

Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java?rev=702236&r1=702235&r2=702236&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java (original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/html/HtmlFormRenderer.java Mon Oct  6 12:29:40 2008
@@ -2416,6 +2416,85 @@
         appendWhitespace(writer);
     }
 
+    public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) throws IOException {
+        boolean ajaxEnabled = false;
+        ModelForm modelForm = modelFormField.getModelForm();
+        List<ModelForm.UpdateArea> updateAreas = modelForm.getOnPaginateUpdateAreas();
+        String targetService = modelForm.getPaginateTarget(context);
+        if (this.javaScriptEnabled) {
+            if (UtilValidate.isNotEmpty(updateAreas)) {
+                ajaxEnabled = true;
+            }
+        }
+        if (targetService == null) {
+            targetService = "${targetService}";
+        }
+        if (UtilValidate.isEmpty(targetService) && updateAreas == null) {
+            Debug.logWarning("Cannot sort because TargetService is empty for the form: " + modelForm.getName(), module);
+            return;
+        }
+
+        String str = (String) context.get("_QBESTRING_");
+        String oldSortField = modelForm.getSortField(context);
+        String sortFieldStyle = modelFormField.getSortFieldStyle();
+        
+        // if the entry-name is defined use this instead of field name
+        String coulumnField = modelFormField.getEntryName();
+        if (UtilValidate.isEmpty(coulumnField)) {
+            coulumnField = modelFormField.getFieldName();
+        }
+
+        // switch beetween asc/desc order
+        String newSortField = coulumnField;
+        if (UtilValidate.isNotEmpty(oldSortField)) {
+            if (oldSortField.equals(coulumnField)) {
+                newSortField = "-" + coulumnField;
+                sortFieldStyle = modelFormField.getSortFieldStyleDesc();
+            } else if (oldSortField.equals("-" + coulumnField)) {
+                newSortField = coulumnField;
+                sortFieldStyle = modelFormField.getSortFieldStyleAsc();
+            }
+        }
+
+        //  strip sortField param from the query string
+        HashSet<String> paramName = new HashSet<String>();
+        paramName.add("sortField");
+        String queryString = UtilHttp.stripNamedParamsFromQueryString(str, paramName);        
+        String urlPath = UtilHttp.removeQueryStringFromTarget(targetService);
+        String prepLinkText = UtilHttp.getQueryStringFromTarget(targetService);
+        if (prepLinkText == null) {
+            prepLinkText = "";
+        }
+        if (prepLinkText.indexOf("?") < 0) {
+            prepLinkText += "?";
+        } else if (!prepLinkText.endsWith("?")) {
+            prepLinkText += "&amp;";
+        }
+        if (!UtilValidate.isEmpty(queryString) && !queryString.equals("null")) {
+            prepLinkText += queryString + "&amp;";
+        }
+        prepLinkText += "sortField" + "=" + newSortField;
+        if (ajaxEnabled) {        
+            prepLinkText = prepLinkText.replace("?", "");
+            prepLinkText = prepLinkText.replace("&amp;", "&");
+        }
+
+        writer.append("<a");
+        if (UtilValidate.isNotEmpty(sortFieldStyle)) {
+            writer.append(" class=\"");
+            writer.append(sortFieldStyle);            
+            writer.append("\"");
+        }
+
+        writer.append(" href=\"");        
+        if (ajaxEnabled) {
+            writer.append("javascript:ajaxUpdateAreas('" + createAjaxParamsFromUpdateAreas(updateAreas, prepLinkText, context) + "')");
+        } else {
+            writer.append(rh.makeLink(this.request, this.response, urlPath + prepLinkText));
+        }
+        writer.append("\">" + titleText + "</a>");
+    }    
+    
     /* (non-Javadoc)
      * @see org.ofbiz.widget.form.FormStringRenderer#renderFileField(java.io.Writer, java.util.Map, org.ofbiz.widget.form.ModelFormField.FileField)
      */
@@ -2679,6 +2758,8 @@
              targetType="plain";
             }
             makeHyperlinkString(writer, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), titleText, null, null, null);
+        } else if (modelFormField.isSortField()) {
+            renderSortField (writer, context, modelFormField, titleText);        
         } else if (modelFormField.isRowSubmit()) {
             if (UtilValidate.isNotEmpty(titleText)) writer.append(titleText + "<br/>");
             writer.append("<input type=\"checkbox\" name=\"selectAll\" value=\"Y\" onclick=\"javascript:toggleAll(this, '");