@Test public void renderSortFieldUsesQueryString(@Mocked ModelForm modelForm) throws IOException { final String paginateTarget = "TARGET"; final String qbeString = "field2=value2 with spaces"; final String linkFromQbeString = "LinkFromQBEString"; new Expectations() { { modelFormField.getModelForm(); result = modelForm; modelForm.getPaginateTarget(withNotNull()); result = paginateTarget; requestHandler.makeLink(null, null, withSubstring(qbeString)); result = linkFromQbeString; modelFormField.getSortFieldHelpText(withNotNull()); result = "HELPTEXT"; } }; final Map<String, Object> context = new HashMap<>(); context.put("_QBESTRING_", qbeString); context.put("listSize", 100); macroFormRenderer.renderSortField(appendable, context, modelFormField, ""); assertAndGetMacroString("renderSortField", ImmutableMap.of( "linkUrl", new FreemarkerRawString(linkFromQbeString))); }
public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) { boolean ajaxEnabled = false; ModelForm modelForm = modelFormField.getModelForm(); List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSortColumnUpdateAreas(); if (updateAreas == null) { updateAreas = modelForm.getOnPaginateUpdateAreas(); } if (this.javaScriptEnabled) { if (UtilValidate.isNotEmpty(updateAreas)) { ajaxEnabled = true; } } String paginateTarget = modelForm.getPaginateTarget(context); if (paginateTarget.isEmpty() && updateAreas == null) { Debug.logWarning("Cannot sort because the paginate target URL is empty for the form: " + modelForm.getName(), MODULE); return; } String oldSortField = modelForm.getSortField(context); String sortFieldStyle = modelFormField.getSortFieldStyle(); String columnField = modelFormField.getEntryName(); if (UtilValidate.isEmpty(columnField)) { columnField = modelFormField.getFieldName(); } String newSortField = columnField; if (UtilValidate.isNotEmpty(oldSortField)) { if (oldSortField.equals(columnField)) { newSortField = "-" + columnField; sortFieldStyle = modelFormField.getSortFieldStyleDesc(); } else if (("-" + columnField).equals(oldSortField)) { newSortField = columnField; sortFieldStyle = modelFormField.getSortFieldStyleAsc(); } } String queryString = UtilHttp.getQueryStringFromTarget(paginateTarget).replace("?", ""); Map<String, Object> paramMap = UtilHttp.getQueryStringOnlyParameterMap(queryString); String qbeString = (String) context.get("_QBESTRING_"); if (qbeString != null) { qbeString = qbeString.replaceAll("&amp;", "&"); paramMap.putAll(UtilHttp.getQueryStringOnlyParameterMap(qbeString)); } paramMap.put(modelForm.getSortFieldParameterName(), newSortField); UtilHttp.canonicalizeParameterMap(paramMap); String linkUrl = null; if (ajaxEnabled) { linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap, null, context); } else { StringBuilder sb = new StringBuilder("?"); Iterator<Map.Entry<String, Object>> iter = paramMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Object> entry = iter.next(); sb.append(entry.getKey()).append("=").append(entry.getValue()); if (iter.hasNext()) { sb.append("&amp;"); } } String newQueryString = sb.toString(); String urlPath = UtilHttp.removeQueryStringFromTarget(paginateTarget); linkUrl = rh.makeLink(this.request, this.response, urlPath.concat(newQueryString)); } StringWriter sr = new StringWriter(); sr.append("<@renderSortField "); sr.append(" style=\""); sr.append(sortFieldStyle); sr.append("\" title=\""); sr.append(titleText); sr.append("\" linkUrl=r\""); sr.append(linkUrl); sr.append("\" ajaxEnabled="); sr.append(Boolean.toString(ajaxEnabled)); String tooltip = modelFormField.getSortFieldHelpText(context); if (!tooltip.isEmpty()) { sr.append(" tooltip=\"").append(tooltip).append("\""); } sr.append(" />"); executeMacro(writer, sr.toString()); }
MacroFormRenderer implements FormStringRenderer { public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) { boolean ajaxEnabled = false; ModelForm modelForm = modelFormField.getModelForm(); List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSortColumnUpdateAreas(); if (updateAreas == null) { updateAreas = modelForm.getOnPaginateUpdateAreas(); } if (this.javaScriptEnabled) { if (UtilValidate.isNotEmpty(updateAreas)) { ajaxEnabled = true; } } String paginateTarget = modelForm.getPaginateTarget(context); if (paginateTarget.isEmpty() && updateAreas == null) { Debug.logWarning("Cannot sort because the paginate target URL is empty for the form: " + modelForm.getName(), MODULE); return; } String oldSortField = modelForm.getSortField(context); String sortFieldStyle = modelFormField.getSortFieldStyle(); String columnField = modelFormField.getEntryName(); if (UtilValidate.isEmpty(columnField)) { columnField = modelFormField.getFieldName(); } String newSortField = columnField; if (UtilValidate.isNotEmpty(oldSortField)) { if (oldSortField.equals(columnField)) { newSortField = "-" + columnField; sortFieldStyle = modelFormField.getSortFieldStyleDesc(); } else if (("-" + columnField).equals(oldSortField)) { newSortField = columnField; sortFieldStyle = modelFormField.getSortFieldStyleAsc(); } } String queryString = UtilHttp.getQueryStringFromTarget(paginateTarget).replace("?", ""); Map<String, Object> paramMap = UtilHttp.getQueryStringOnlyParameterMap(queryString); String qbeString = (String) context.get("_QBESTRING_"); if (qbeString != null) { qbeString = qbeString.replaceAll("&amp;", "&"); paramMap.putAll(UtilHttp.getQueryStringOnlyParameterMap(qbeString)); } paramMap.put(modelForm.getSortFieldParameterName(), newSortField); UtilHttp.canonicalizeParameterMap(paramMap); String linkUrl = null; if (ajaxEnabled) { linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap, null, context); } else { StringBuilder sb = new StringBuilder("?"); Iterator<Map.Entry<String, Object>> iter = paramMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Object> entry = iter.next(); sb.append(entry.getKey()).append("=").append(entry.getValue()); if (iter.hasNext()) { sb.append("&amp;"); } } String newQueryString = sb.toString(); String urlPath = UtilHttp.removeQueryStringFromTarget(paginateTarget); linkUrl = rh.makeLink(this.request, this.response, urlPath.concat(newQueryString)); } StringWriter sr = new StringWriter(); sr.append("<@renderSortField "); sr.append(" style=\""); sr.append(sortFieldStyle); sr.append("\" title=\""); sr.append(titleText); sr.append("\" linkUrl=r\""); sr.append(linkUrl); sr.append("\" ajaxEnabled="); sr.append(Boolean.toString(ajaxEnabled)); String tooltip = modelFormField.getSortFieldHelpText(context); if (!tooltip.isEmpty()) { sr.append(" tooltip=\"").append(tooltip).append("\""); } sr.append(" />"); executeMacro(writer, sr.toString()); } }
MacroFormRenderer implements FormStringRenderer { public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) { boolean ajaxEnabled = false; ModelForm modelForm = modelFormField.getModelForm(); List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSortColumnUpdateAreas(); if (updateAreas == null) { updateAreas = modelForm.getOnPaginateUpdateAreas(); } if (this.javaScriptEnabled) { if (UtilValidate.isNotEmpty(updateAreas)) { ajaxEnabled = true; } } String paginateTarget = modelForm.getPaginateTarget(context); if (paginateTarget.isEmpty() && updateAreas == null) { Debug.logWarning("Cannot sort because the paginate target URL is empty for the form: " + modelForm.getName(), MODULE); return; } String oldSortField = modelForm.getSortField(context); String sortFieldStyle = modelFormField.getSortFieldStyle(); String columnField = modelFormField.getEntryName(); if (UtilValidate.isEmpty(columnField)) { columnField = modelFormField.getFieldName(); } String newSortField = columnField; if (UtilValidate.isNotEmpty(oldSortField)) { if (oldSortField.equals(columnField)) { newSortField = "-" + columnField; sortFieldStyle = modelFormField.getSortFieldStyleDesc(); } else if (("-" + columnField).equals(oldSortField)) { newSortField = columnField; sortFieldStyle = modelFormField.getSortFieldStyleAsc(); } } String queryString = UtilHttp.getQueryStringFromTarget(paginateTarget).replace("?", ""); Map<String, Object> paramMap = UtilHttp.getQueryStringOnlyParameterMap(queryString); String qbeString = (String) context.get("_QBESTRING_"); if (qbeString != null) { qbeString = qbeString.replaceAll("&amp;", "&"); paramMap.putAll(UtilHttp.getQueryStringOnlyParameterMap(qbeString)); } paramMap.put(modelForm.getSortFieldParameterName(), newSortField); UtilHttp.canonicalizeParameterMap(paramMap); String linkUrl = null; if (ajaxEnabled) { linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap, null, context); } else { StringBuilder sb = new StringBuilder("?"); Iterator<Map.Entry<String, Object>> iter = paramMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Object> entry = iter.next(); sb.append(entry.getKey()).append("=").append(entry.getValue()); if (iter.hasNext()) { sb.append("&amp;"); } } String newQueryString = sb.toString(); String urlPath = UtilHttp.removeQueryStringFromTarget(paginateTarget); linkUrl = rh.makeLink(this.request, this.response, urlPath.concat(newQueryString)); } StringWriter sr = new StringWriter(); sr.append("<@renderSortField "); sr.append(" style=\""); sr.append(sortFieldStyle); sr.append("\" title=\""); sr.append(titleText); sr.append("\" linkUrl=r\""); sr.append(linkUrl); sr.append("\" ajaxEnabled="); sr.append(Boolean.toString(ajaxEnabled)); String tooltip = modelFormField.getSortFieldHelpText(context); if (!tooltip.isEmpty()) { sr.append(" tooltip=\"").append(tooltip).append("\""); } sr.append(" />"); executeMacro(writer, sr.toString()); } MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response);  MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response,
                             FtlWriter ftlWriter); @Deprecated  MacroFormRenderer(String macroLibraryPath, Appendable writer, HttpServletRequest request, HttpServletResponse response); }
MacroFormRenderer implements FormStringRenderer { public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) { boolean ajaxEnabled = false; ModelForm modelForm = modelFormField.getModelForm(); List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSortColumnUpdateAreas(); if (updateAreas == null) { updateAreas = modelForm.getOnPaginateUpdateAreas(); } if (this.javaScriptEnabled) { if (UtilValidate.isNotEmpty(updateAreas)) { ajaxEnabled = true; } } String paginateTarget = modelForm.getPaginateTarget(context); if (paginateTarget.isEmpty() && updateAreas == null) { Debug.logWarning("Cannot sort because the paginate target URL is empty for the form: " + modelForm.getName(), MODULE); return; } String oldSortField = modelForm.getSortField(context); String sortFieldStyle = modelFormField.getSortFieldStyle(); String columnField = modelFormField.getEntryName(); if (UtilValidate.isEmpty(columnField)) { columnField = modelFormField.getFieldName(); } String newSortField = columnField; if (UtilValidate.isNotEmpty(oldSortField)) { if (oldSortField.equals(columnField)) { newSortField = "-" + columnField; sortFieldStyle = modelFormField.getSortFieldStyleDesc(); } else if (("-" + columnField).equals(oldSortField)) { newSortField = columnField; sortFieldStyle = modelFormField.getSortFieldStyleAsc(); } } String queryString = UtilHttp.getQueryStringFromTarget(paginateTarget).replace("?", ""); Map<String, Object> paramMap = UtilHttp.getQueryStringOnlyParameterMap(queryString); String qbeString = (String) context.get("_QBESTRING_"); if (qbeString != null) { qbeString = qbeString.replaceAll("&amp;", "&"); paramMap.putAll(UtilHttp.getQueryStringOnlyParameterMap(qbeString)); } paramMap.put(modelForm.getSortFieldParameterName(), newSortField); UtilHttp.canonicalizeParameterMap(paramMap); String linkUrl = null; if (ajaxEnabled) { linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap, null, context); } else { StringBuilder sb = new StringBuilder("?"); Iterator<Map.Entry<String, Object>> iter = paramMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Object> entry = iter.next(); sb.append(entry.getKey()).append("=").append(entry.getValue()); if (iter.hasNext()) { sb.append("&amp;"); } } String newQueryString = sb.toString(); String urlPath = UtilHttp.removeQueryStringFromTarget(paginateTarget); linkUrl = rh.makeLink(this.request, this.response, urlPath.concat(newQueryString)); } StringWriter sr = new StringWriter(); sr.append("<@renderSortField "); sr.append(" style=\""); sr.append(sortFieldStyle); sr.append("\" title=\""); sr.append(titleText); sr.append("\" linkUrl=r\""); sr.append(linkUrl); sr.append("\" ajaxEnabled="); sr.append(Boolean.toString(ajaxEnabled)); String tooltip = modelFormField.getSortFieldHelpText(context); if (!tooltip.isEmpty()) { sr.append(" tooltip=\"").append(tooltip).append("\""); } sr.append(" />"); executeMacro(writer, sr.toString()); } MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response);  MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response,
                             FtlWriter ftlWriter); @Deprecated  MacroFormRenderer(String macroLibraryPath, Appendable writer, HttpServletRequest request, HttpServletResponse response); static String getAjaxParamsFromTarget(String target); boolean getRenderPagination(); void setRenderPagination(boolean renderPagination); void renderLabel(Appendable writer, Map<String, Object> context, ModelScreenWidget.Label label); @Override void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField); @Override void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField); @Override void renderMenuField(Appendable writer, Map<String, Object> context, MenuField menuField); @Override void renderTextField(Appendable writer, Map<String, Object> context, TextField textField); @Override void renderTextareaField(Appendable writer, Map<String, Object> context, TextareaField textareaField); @Override void renderDateTimeField(Appendable writer, Map<String, Object> context, DateTimeField dateTimeField); @Override void renderDropDownField(Appendable writer, Map<String, Object> context, DropDownField dropDownField); @Override void renderCheckField(Appendable writer, Map<String, Object> context, CheckField checkField); @Override void renderRadioField(Appendable writer, Map<String, Object> context, RadioField radioField); @Override void renderSubmitField(Appendable writer, Map<String, Object> context, SubmitField submitField); @Override void renderResetField(Appendable writer, Map<String, Object> context, ResetField resetField); @Override void renderHiddenField(Appendable writer, Map<String, Object> context, HiddenField hiddenField); @Override void renderHiddenField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String value); @Override void renderIgnoredField(Appendable writer, Map<String, Object> context, IgnoredField ignoredField); @Override void renderFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderSingleFormFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderMultiFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatListWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderEmptyFormDataMessage(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatListWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField,
                                              int positionSpan); @Override void renderFormatHeaderRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField); @Override void renderFormatHeaderRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowFormCellTitleSeparator(Appendable writer, Map<String, Object> context, ModelForm modelForm,
                                                            ModelFormField modelFormField, boolean isLast); @Override void renderFormatItemRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField,
                                            int positionSpan); @Override void renderFormatItemRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField); @Override void renderFormatItemRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatSingleWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatSingleWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowTitleCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowTitleCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowSpacerCell(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowWidgetCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions,
                                                   int positionSpan, Integer nextPositionInRow); @Override void renderFormatFieldRowWidgetCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions,
                                                    int positionSpan, Integer nextPositionInRow); @Override void renderFormatEmptySpace(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderTextFindField(Appendable writer, Map<String, Object> context, TextFindField textFindField); @Override void renderRangeFindField(Appendable writer, Map<String, Object> context, RangeFindField rangeFindField); @Override void renderDateFindField(Appendable writer, Map<String, Object> context, DateFindField dateFindField); @Override void renderLookupField(Appendable writer, Map<String, Object> context, LookupField lookupField); void renderNextPrev(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFileField(Appendable writer, Map<String, Object> context, FileField textField); @Override void renderPasswordField(Appendable writer, Map<String, Object> context, PasswordField passwordField); @Override void renderImageField(Appendable writer, Map<String, Object> context, ImageField imageField); @Override void renderFieldGroupOpen(Appendable writer, Map<String, Object> context, ModelForm.FieldGroup fieldGroup); @Override void renderFieldGroupClose(Appendable writer, Map<String, Object> context, ModelForm.FieldGroup fieldGroup); @Override void renderBanner(Appendable writer, Map<String, Object> context, ModelForm.Banner banner); void renderBeginningBoundaryComment(Appendable writer, String widgetType, ModelWidget modelWidget); void renderEndingBoundaryComment(Appendable writer, String widgetType, ModelWidget modelWidget); void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText); String createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea> updateAreas, String extraParams, Map<String, ? extends Object> context); void appendTooltip(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); void makeHyperlinkString(Appendable writer, ModelFormField.SubHyperlink subHyperlink, Map<String, Object> context); void addAsterisks(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); void appendContentUrl(Appendable writer, String location); void makeHyperlinkByType(Appendable writer, String linkType, String linkStyle, String targetType, String target, Map<String,
            String> parameterMap, String description, String targetWindow, String confirmation, ModelFormField modelFormField,
            HttpServletRequest request, HttpServletResponse response, Map<String, Object> context); void makeHyperlinkString(Appendable writer, String linkStyle, String targetType, String target, Map<String, String> parameterMap,
                                    String description, String confirmation, ModelFormField modelFormField, HttpServletRequest request,
                                    HttpServletResponse response, Map<String, Object> context, String targetWindow); void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, String confirmation, ModelFormField modelFormField,
                                         HttpServletRequest request, HttpServletResponse response, Map<String, Object> context); @Override void renderContainerFindField(Appendable writer, Map<String, Object> context, ContainerField containerField); }
MacroFormRenderer implements FormStringRenderer { public void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText) { boolean ajaxEnabled = false; ModelForm modelForm = modelFormField.getModelForm(); List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSortColumnUpdateAreas(); if (updateAreas == null) { updateAreas = modelForm.getOnPaginateUpdateAreas(); } if (this.javaScriptEnabled) { if (UtilValidate.isNotEmpty(updateAreas)) { ajaxEnabled = true; } } String paginateTarget = modelForm.getPaginateTarget(context); if (paginateTarget.isEmpty() && updateAreas == null) { Debug.logWarning("Cannot sort because the paginate target URL is empty for the form: " + modelForm.getName(), MODULE); return; } String oldSortField = modelForm.getSortField(context); String sortFieldStyle = modelFormField.getSortFieldStyle(); String columnField = modelFormField.getEntryName(); if (UtilValidate.isEmpty(columnField)) { columnField = modelFormField.getFieldName(); } String newSortField = columnField; if (UtilValidate.isNotEmpty(oldSortField)) { if (oldSortField.equals(columnField)) { newSortField = "-" + columnField; sortFieldStyle = modelFormField.getSortFieldStyleDesc(); } else if (("-" + columnField).equals(oldSortField)) { newSortField = columnField; sortFieldStyle = modelFormField.getSortFieldStyleAsc(); } } String queryString = UtilHttp.getQueryStringFromTarget(paginateTarget).replace("?", ""); Map<String, Object> paramMap = UtilHttp.getQueryStringOnlyParameterMap(queryString); String qbeString = (String) context.get("_QBESTRING_"); if (qbeString != null) { qbeString = qbeString.replaceAll("&amp;", "&"); paramMap.putAll(UtilHttp.getQueryStringOnlyParameterMap(qbeString)); } paramMap.put(modelForm.getSortFieldParameterName(), newSortField); UtilHttp.canonicalizeParameterMap(paramMap); String linkUrl = null; if (ajaxEnabled) { linkUrl = createAjaxParamsFromUpdateAreas(updateAreas, paramMap, null, context); } else { StringBuilder sb = new StringBuilder("?"); Iterator<Map.Entry<String, Object>> iter = paramMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, Object> entry = iter.next(); sb.append(entry.getKey()).append("=").append(entry.getValue()); if (iter.hasNext()) { sb.append("&amp;"); } } String newQueryString = sb.toString(); String urlPath = UtilHttp.removeQueryStringFromTarget(paginateTarget); linkUrl = rh.makeLink(this.request, this.response, urlPath.concat(newQueryString)); } StringWriter sr = new StringWriter(); sr.append("<@renderSortField "); sr.append(" style=\""); sr.append(sortFieldStyle); sr.append("\" title=\""); sr.append(titleText); sr.append("\" linkUrl=r\""); sr.append(linkUrl); sr.append("\" ajaxEnabled="); sr.append(Boolean.toString(ajaxEnabled)); String tooltip = modelFormField.getSortFieldHelpText(context); if (!tooltip.isEmpty()) { sr.append(" tooltip=\"").append(tooltip).append("\""); } sr.append(" />"); executeMacro(writer, sr.toString()); } MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response);  MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response,
                             FtlWriter ftlWriter); @Deprecated  MacroFormRenderer(String macroLibraryPath, Appendable writer, HttpServletRequest request, HttpServletResponse response); static String getAjaxParamsFromTarget(String target); boolean getRenderPagination(); void setRenderPagination(boolean renderPagination); void renderLabel(Appendable writer, Map<String, Object> context, ModelScreenWidget.Label label); @Override void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField); @Override void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField); @Override void renderMenuField(Appendable writer, Map<String, Object> context, MenuField menuField); @Override void renderTextField(Appendable writer, Map<String, Object> context, TextField textField); @Override void renderTextareaField(Appendable writer, Map<String, Object> context, TextareaField textareaField); @Override void renderDateTimeField(Appendable writer, Map<String, Object> context, DateTimeField dateTimeField); @Override void renderDropDownField(Appendable writer, Map<String, Object> context, DropDownField dropDownField); @Override void renderCheckField(Appendable writer, Map<String, Object> context, CheckField checkField); @Override void renderRadioField(Appendable writer, Map<String, Object> context, RadioField radioField); @Override void renderSubmitField(Appendable writer, Map<String, Object> context, SubmitField submitField); @Override void renderResetField(Appendable writer, Map<String, Object> context, ResetField resetField); @Override void renderHiddenField(Appendable writer, Map<String, Object> context, HiddenField hiddenField); @Override void renderHiddenField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String value); @Override void renderIgnoredField(Appendable writer, Map<String, Object> context, IgnoredField ignoredField); @Override void renderFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderSingleFormFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderMultiFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatListWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderEmptyFormDataMessage(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatListWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField,
                                              int positionSpan); @Override void renderFormatHeaderRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField); @Override void renderFormatHeaderRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatHeaderRowFormCellTitleSeparator(Appendable writer, Map<String, Object> context, ModelForm modelForm,
                                                            ModelFormField modelFormField, boolean isLast); @Override void renderFormatItemRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField,
                                            int positionSpan); @Override void renderFormatItemRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField); @Override void renderFormatItemRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatItemRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatSingleWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatSingleWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFormatFieldRowTitleCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowTitleCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowSpacerCell(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); @Override void renderFormatFieldRowWidgetCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions,
                                                   int positionSpan, Integer nextPositionInRow); @Override void renderFormatFieldRowWidgetCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions,
                                                    int positionSpan, Integer nextPositionInRow); @Override void renderFormatEmptySpace(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderTextFindField(Appendable writer, Map<String, Object> context, TextFindField textFindField); @Override void renderRangeFindField(Appendable writer, Map<String, Object> context, RangeFindField rangeFindField); @Override void renderDateFindField(Appendable writer, Map<String, Object> context, DateFindField dateFindField); @Override void renderLookupField(Appendable writer, Map<String, Object> context, LookupField lookupField); void renderNextPrev(Appendable writer, Map<String, Object> context, ModelForm modelForm); @Override void renderFileField(Appendable writer, Map<String, Object> context, FileField textField); @Override void renderPasswordField(Appendable writer, Map<String, Object> context, PasswordField passwordField); @Override void renderImageField(Appendable writer, Map<String, Object> context, ImageField imageField); @Override void renderFieldGroupOpen(Appendable writer, Map<String, Object> context, ModelForm.FieldGroup fieldGroup); @Override void renderFieldGroupClose(Appendable writer, Map<String, Object> context, ModelForm.FieldGroup fieldGroup); @Override void renderBanner(Appendable writer, Map<String, Object> context, ModelForm.Banner banner); void renderBeginningBoundaryComment(Appendable writer, String widgetType, ModelWidget modelWidget); void renderEndingBoundaryComment(Appendable writer, String widgetType, ModelWidget modelWidget); void renderSortField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String titleText); String createAjaxParamsFromUpdateAreas(List<ModelForm.UpdateArea> updateAreas, String extraParams, Map<String, ? extends Object> context); void appendTooltip(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); void makeHyperlinkString(Appendable writer, ModelFormField.SubHyperlink subHyperlink, Map<String, Object> context); void addAsterisks(Appendable writer, Map<String, Object> context, ModelFormField modelFormField); void appendContentUrl(Appendable writer, String location); void makeHyperlinkByType(Appendable writer, String linkType, String linkStyle, String targetType, String target, Map<String,
            String> parameterMap, String description, String targetWindow, String confirmation, ModelFormField modelFormField,
            HttpServletRequest request, HttpServletResponse response, Map<String, Object> context); void makeHyperlinkString(Appendable writer, String linkStyle, String targetType, String target, Map<String, String> parameterMap,
                                    String description, String confirmation, ModelFormField modelFormField, HttpServletRequest request,
                                    HttpServletResponse response, Map<String, Object> context, String targetWindow); void makeHiddenFormLinkAnchor(Appendable writer, String linkStyle, String description, String confirmation, ModelFormField modelFormField,
                                         HttpServletRequest request, HttpServletResponse response, Map<String, Object> context); @Override void renderContainerFindField(Appendable writer, Map<String, Object> context, ContainerField containerField);  }