Added: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java?rev=1652852&view=auto ============================================================================== --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java (added) +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/renderer/macro/MacroFormRenderer.java Sun Jan 18 21:03:40 2015 @@ -0,0 +1,3132 @@ +/******************************************************************************* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + *******************************************************************************/ +package org.ofbiz.widget.renderer.macro; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.rmi.server.UID; +import java.sql.Timestamp; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.WeakHashMap; + +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.ofbiz.base.util.Debug; +import org.ofbiz.base.util.StringUtil; +import org.ofbiz.base.util.UtilCodec; +import org.ofbiz.base.util.UtilFormatOut; +import org.ofbiz.base.util.UtilGenerics; +import org.ofbiz.base.util.UtilHttp; +import org.ofbiz.base.util.UtilMisc; +import org.ofbiz.base.util.UtilProperties; +import org.ofbiz.base.util.UtilValidate; +import org.ofbiz.base.util.string.FlexibleStringExpander; +import org.ofbiz.base.util.template.FreeMarkerWorker; +import org.ofbiz.entity.Delegator; +import org.ofbiz.webapp.control.RequestHandler; +import org.ofbiz.webapp.taglib.ContentUrlTag; +import org.ofbiz.widget.WidgetWorker; +import org.ofbiz.widget.model.CommonWidgetModels; +import org.ofbiz.widget.model.FieldInfo; +import org.ofbiz.widget.model.ModelForm; +import org.ofbiz.widget.model.ModelFormField; +import org.ofbiz.widget.model.ModelFormField.CheckField; +import org.ofbiz.widget.model.ModelFormField.ContainerField; +import org.ofbiz.widget.model.ModelFormField.DateFindField; +import org.ofbiz.widget.model.ModelFormField.DateTimeField; +import org.ofbiz.widget.model.ModelFormField.DisplayEntityField; +import org.ofbiz.widget.model.ModelFormField.DisplayField; +import org.ofbiz.widget.model.ModelFormField.DropDownField; +import org.ofbiz.widget.model.ModelFormField.FieldInfoWithOptions; +import org.ofbiz.widget.model.ModelFormField.FileField; +import org.ofbiz.widget.model.ModelFormField.HiddenField; +import org.ofbiz.widget.model.ModelFormField.HyperlinkField; +import org.ofbiz.widget.model.ModelFormField.IgnoredField; +import org.ofbiz.widget.model.ModelFormField.ImageField; +import org.ofbiz.widget.model.ModelFormField.LookupField; +import org.ofbiz.widget.model.ModelFormField.PasswordField; +import org.ofbiz.widget.model.ModelFormField.RadioField; +import org.ofbiz.widget.model.ModelFormField.RangeFindField; +import org.ofbiz.widget.model.ModelFormField.ResetField; +import org.ofbiz.widget.model.ModelFormField.SubmitField; +import org.ofbiz.widget.model.ModelFormField.TextField; +import org.ofbiz.widget.model.ModelFormField.TextFindField; +import org.ofbiz.widget.model.ModelFormField.TextareaField; +import org.ofbiz.widget.model.ModelFormFieldBuilder; +import org.ofbiz.widget.model.ModelScreenWidget; +import org.ofbiz.widget.model.ModelWidget; +import org.ofbiz.widget.renderer.FormRenderer; +import org.ofbiz.widget.renderer.FormStringRenderer; +import org.ofbiz.widget.renderer.Paginator; +import org.ofbiz.widget.renderer.UtilHelpText; + +import com.ibm.icu.util.Calendar; + +import freemarker.core.Environment; +import freemarker.template.Template; +import freemarker.template.TemplateException; + +/** + * Widget Library - Form Renderer implementation based on Freemarker macros + * + */ +public final class MacroFormRenderer implements FormStringRenderer { + + public static final String module = MacroFormRenderer.class.getName(); + private final Template macroLibrary; + private final WeakHashMap<Appendable, Environment> environments = new WeakHashMap<Appendable, Environment>(); + private final UtilCodec.SimpleEncoder internalEncoder; + private final RequestHandler rh; + private final HttpServletRequest request; + private final HttpServletResponse response; + private final boolean javaScriptEnabled; + private boolean renderPagination = true; + private boolean widgetCommentsEnabled = false; + + public MacroFormRenderer(String macroLibraryPath, HttpServletRequest request, HttpServletResponse response) throws TemplateException, IOException { + macroLibrary = FreeMarkerWorker.getTemplate(macroLibraryPath); + this.request = request; + this.response = response; + ServletContext ctx = (ServletContext) request.getAttribute("servletContext"); + this.rh = (RequestHandler) ctx.getAttribute("_REQUEST_HANDLER_"); + this.javaScriptEnabled = UtilHttp.isJavaScriptEnabled(request); + internalEncoder = UtilCodec.getEncoder("string"); + } + + @Deprecated + public MacroFormRenderer(String macroLibraryPath, Appendable writer, HttpServletRequest request, HttpServletResponse response) throws TemplateException, IOException { + this(macroLibraryPath, request, response); + } + + public boolean getRenderPagination() { + return this.renderPagination; + } + + public void setRenderPagination(boolean renderPagination) { + this.renderPagination = renderPagination; + } + + private void executeMacro(Appendable writer, String macro) throws IOException { + try { + Environment environment = getEnvironment(writer); + Reader templateReader = new StringReader(macro); + Template template = new Template(new UID().toString(), templateReader, FreeMarkerWorker.getDefaultOfbizConfig()); + templateReader.close(); + environment.include(template); + } catch (TemplateException e) { + Debug.logError(e, "Error rendering screen thru ftl macro: " + macro, module); + } catch (IOException e) { + Debug.logError(e, "Error rendering screen thru ftl, macro: " + macro, module); + } + } + + private Environment getEnvironment(Appendable writer) throws TemplateException, IOException { + Environment environment = environments.get(writer); + if (environment == null) { + Map<String, Object> input = UtilMisc.toMap("key", null); + environment = FreeMarkerWorker.renderTemplate(macroLibrary, input, writer); + environments.put(writer, environment); + } + return environment; + } + + private void appendWhitespace(Appendable writer) throws IOException { + // appending line ends for now, but this could be replaced with a simple space or something + writer.append("\r\n"); + //writer.append(' '); + } + + private String encode(String value, ModelFormField modelFormField, Map<String, Object> context) { + if (UtilValidate.isEmpty(value)) { + return value; + } + UtilCodec.SimpleEncoder encoder = (UtilCodec.SimpleEncoder) context.get("simpleEncoder"); + if (modelFormField.getEncodeOutput() && encoder != null) { + value = encoder.encode(value); + } else { + value = internalEncoder.encode(value); + } + return value; + } + + public void renderLabel(Appendable writer, Map<String, Object> context, ModelScreenWidget.Label label) throws IOException { + String labelText = label.getText(context); + if (UtilValidate.isEmpty(labelText)) { + // nothing to render + return; + } + StringWriter sr = new StringWriter(); + sr.append("<@renderLabel "); + sr.append("text=\""); + sr.append(labelText); + sr.append("\""); + sr.append(" />"); + executeMacro(writer, sr.toString()); + } + + public void renderDisplayField(Appendable writer, Map<String, Object> context, DisplayField displayField) throws IOException { + ModelFormField modelFormField = displayField.getModelFormField(); + String idName = modelFormField.getCurrentContainerId(context); + String description = displayField.getDescription(context); + String type = displayField.getType(); + String imageLocation = displayField.getImageLocation(context); + Integer size = Integer.valueOf("0"); + String title = ""; + if (UtilValidate.isNotEmpty(displayField.getSize())) { + try { + size = Integer.parseInt(displayField.getSize()); + } catch (NumberFormatException nfe) { + Debug.logError(nfe, "Error reading size of a field fieldName=" + displayField.getModelFormField().getFieldName() + " FormName= " + displayField.getModelFormField().getModelForm().getName(), module); + } + } + ModelFormField.InPlaceEditor inPlaceEditor = displayField.getInPlaceEditor(); + boolean ajaxEnabled = inPlaceEditor != null && this.javaScriptEnabled; + if (UtilValidate.isNotEmpty(description) && size > 0 && description.length() > size) { + title = description; + description = description.substring(0, size - 8) + "..." + description.substring(description.length() - 5); + } + StringWriter sr = new StringWriter(); + sr.append("<@renderDisplayField "); + sr.append("type=\""); + sr.append(type); + sr.append("\" imageLocation=\""); + sr.append(imageLocation); + sr.append("\" idName=\""); + sr.append(idName); + sr.append("\" description=\""); + sr.append(FreeMarkerWorker.encodeDoubleQuotes(description)); + sr.append("\" title=\""); + sr.append(title); + sr.append("\" class=\""); + sr.append(modelFormField.getWidgetStyle()); + sr.append("\" alert=\""); + sr.append(modelFormField.shouldBeRed(context) ? "true" : "false"); + if (ajaxEnabled) { + String url = inPlaceEditor.getUrl(context); + String extraParameter = "{"; + Map<String, Object> fieldMap = inPlaceEditor.getFieldMap(context); + if (fieldMap != null) { + Set<Entry<String, Object>> fieldSet = fieldMap.entrySet(); + Iterator<Entry<String, Object>> fieldIterator = fieldSet.iterator(); + int count = 0; + while (fieldIterator.hasNext()) { + count++; + Entry<String, Object> field = fieldIterator.next(); + extraParameter += field.getKey() + ":'" + (String) field.getValue() + "'"; + if (count < fieldSet.size()) { + extraParameter += ','; + } + } + + } + extraParameter += "}"; + sr.append("\" inPlaceEditorUrl=\""); + sr.append(url); + sr.append("\" inPlaceEditorParams=\""); + StringWriter inPlaceEditorParams = new StringWriter(); + inPlaceEditorParams.append("{name: '"); + if (UtilValidate.isNotEmpty(inPlaceEditor.getParamName())) { + inPlaceEditorParams.append(inPlaceEditor.getParamName()); + } else { + inPlaceEditorParams.append(modelFormField.getFieldName()); + } + inPlaceEditorParams.append("'"); + inPlaceEditorParams.append(", method: 'POST'"); + inPlaceEditorParams.append(", submitdata: " + extraParameter); + inPlaceEditorParams.append(", type: 'textarea'"); + inPlaceEditorParams.append(", select: 'true'"); + inPlaceEditorParams.append(", onreset: function(){jQuery('#cc_" + idName + "').css('background-color', 'transparent');}"); + if (UtilValidate.isNotEmpty(inPlaceEditor.getCancelText())) { + inPlaceEditorParams.append(", cancel: '" + inPlaceEditor.getCancelText() + "'"); + } else { + inPlaceEditorParams.append(", cancel: 'Cancel'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getClickToEditText())) { + inPlaceEditorParams.append(", tooltip: '" + inPlaceEditor.getClickToEditText() + "'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getFormClassName())) { + inPlaceEditorParams.append(", cssclass: '" + inPlaceEditor.getFormClassName() + "'"); + } else { + inPlaceEditorParams.append(", cssclass: 'inplaceeditor-form'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getLoadingText())) { + inPlaceEditorParams.append(", indicator: '" + inPlaceEditor.getLoadingText() + "'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getOkControl())) { + inPlaceEditorParams.append(", submit: "); + if (!"false".equals(inPlaceEditor.getOkControl())) { + inPlaceEditorParams.append("'"); + } + inPlaceEditorParams.append(inPlaceEditor.getOkControl()); + if (!"false".equals(inPlaceEditor.getOkControl())) { + inPlaceEditorParams.append("'"); + } + } else { + inPlaceEditorParams.append(", submit: 'OK'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getRows())) { + inPlaceEditorParams.append(", rows: '" + inPlaceEditor.getRows() + "'"); + } + if (UtilValidate.isNotEmpty(inPlaceEditor.getCols())) { + inPlaceEditorParams.append(", cols: '" + inPlaceEditor.getCols() + "'"); + } + inPlaceEditorParams.append("}"); + sr.append(inPlaceEditorParams.toString()); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + if (displayField instanceof DisplayEntityField) { + makeHyperlinkString(writer, ((DisplayEntityField) displayField).getSubHyperlink(), context); + } + this.appendTooltip(writer, context, modelFormField); + } + + public void renderHyperlinkField(Appendable writer, Map<String, Object> context, HyperlinkField hyperlinkField) throws IOException { + this.request.setAttribute("image", hyperlinkField.getImageLocation(context)); + ModelFormField modelFormField = hyperlinkField.getModelFormField(); + String encodedAlternate = encode(hyperlinkField.getAlternate(context), modelFormField, context); + String encodedImageTitle = encode(hyperlinkField.getImageTitle(context), modelFormField, context); + this.request.setAttribute("alternate", encodedAlternate); + this.request.setAttribute("imageTitle", encodedImageTitle); + this.request.setAttribute("descriptionSize", hyperlinkField.getSize()); + makeHyperlinkByType(writer, hyperlinkField.getLinkType(), modelFormField.getWidgetStyle(), hyperlinkField.getUrlMode(), hyperlinkField.getTarget(context), hyperlinkField.getParameterMap(context), hyperlinkField.getDescription(context), hyperlinkField.getTargetWindow(context), + hyperlinkField.getConfirmation(context), modelFormField, this.request, this.response, context); + this.appendTooltip(writer, context, modelFormField); + this.request.removeAttribute("image"); + this.request.removeAttribute("descriptionSize"); + } + + public void renderTextField(Appendable writer, Map<String, Object> context, TextField textField) throws IOException { + ModelFormField modelFormField = textField.getModelFormField(); + String name = modelFormField.getParameterName(context); + String className = ""; + String alert = "false"; + String mask = ""; + String placeholder = textField.getPlaceholder(context); + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + String value = modelFormField.getEntry(context, textField.getDefaultValue(context)); + String textSize = Integer.toString(textField.getSize()); + String maxlength = ""; + if (textField.getMaxlength() != null) { + maxlength = Integer.toString(textField.getMaxlength()); + } + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + String id = modelFormField.getCurrentContainerId(context); + String clientAutocomplete = "false"; + //check for required field style on single forms + if ("single".equals(modelFormField.getModelForm().getType()) && modelFormField.getRequiredField()) { + String requiredStyle = modelFormField.getRequiredFieldStyle(); + if (UtilValidate.isEmpty(requiredStyle)) + requiredStyle = "required"; + if (UtilValidate.isEmpty(className)) + className = requiredStyle; + else + className = requiredStyle + " " + className; + } + List<ModelForm.UpdateArea> updateAreas = modelFormField.getOnChangeUpdateAreas(); + boolean ajaxEnabled = updateAreas != null && this.javaScriptEnabled; + if (textField.getClientAutocompleteField() || ajaxEnabled) { + clientAutocomplete = "true"; + } + if (UtilValidate.isNotEmpty(textField.getMask())) { + mask = textField.getMask(); + } + String ajaxUrl = createAjaxParamsFromUpdateAreas(updateAreas, "", context); + boolean disabled = textField.getDisabled(); + StringWriter sr = new StringWriter(); + sr.append("<@renderTextField "); + sr.append("name=\""); + sr.append(name); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" textSize=\""); + sr.append(textSize); + sr.append("\" maxlength=\""); + sr.append(maxlength); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" disabled="); + sr.append(Boolean.toString(disabled)); + sr.append(" clientAutocomplete=\""); + sr.append(clientAutocomplete); + sr.append("\" ajaxUrl=\""); + sr.append(ajaxUrl); + sr.append("\" ajaxEnabled="); + sr.append(Boolean.toString(ajaxEnabled)); + sr.append(" mask=\""); + sr.append(mask); + sr.append("\" placeholder=\""); + sr.append(placeholder); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + ModelFormField.SubHyperlink subHyperlink = textField.getSubHyperlink(); + if (subHyperlink != null && subHyperlink.shouldUse(context)) { + makeHyperlinkString(writer, subHyperlink, context); + } + this.addAsterisks(writer, context, modelFormField); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderTextareaField(Appendable writer, Map<String, Object> context, TextareaField textareaField) throws IOException { + ModelFormField modelFormField = textareaField.getModelFormField(); + String name = modelFormField.getParameterName(context); + String cols = Integer.toString(textareaField.getCols()); + String rows = Integer.toString(textareaField.getRows()); + String id = modelFormField.getCurrentContainerId(context); + String className = ""; + String alert = "false"; + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + //check for required field style on single forms + if ("single".equals(modelFormField.getModelForm().getType()) && modelFormField.getRequiredField()) { + String requiredStyle = modelFormField.getRequiredFieldStyle(); + if (UtilValidate.isEmpty(requiredStyle)) + requiredStyle = "required"; + if (UtilValidate.isEmpty(className)) + className = requiredStyle; + else + className = requiredStyle + " " + className; + } + String visualEditorEnable = ""; + String buttons = ""; + if (textareaField.getVisualEditorEnable()) { + visualEditorEnable = "true"; + buttons = textareaField.getVisualEditorButtons(context); + if (UtilValidate.isEmpty(buttons)) { + buttons = "maxi"; + } + } + String readonly = ""; + if (textareaField.isReadOnly()) { + readonly = "readonly"; + } + Map<String, Object> userLogin = UtilGenerics.checkMap(context.get("userLogin")); + String language = "en"; + if (userLogin != null) { + language = UtilValidate.isEmpty((String) userLogin.get("lastLocale")) ? "en" : (String) userLogin.get("lastLocale"); + } + String value = modelFormField.getEntry(context, textareaField.getDefaultValue(context)); + StringWriter sr = new StringWriter(); + sr.append("<@renderTextareaField "); + sr.append("name=\""); + sr.append(name); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" cols=\""); + sr.append(cols); + sr.append("\" rows=\""); + sr.append(rows); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" readonly=\""); + sr.append(readonly); + sr.append("\" visualEditorEnable=\""); + sr.append(visualEditorEnable); + sr.append("\" language=\""); + sr.append(language); + sr.append("\" buttons=\""); + sr.append(buttons); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.addAsterisks(writer, context, modelFormField); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderDateTimeField(Appendable writer, Map<String, Object> context, DateTimeField dateTimeField) throws IOException { + ModelFormField modelFormField = dateTimeField.getModelFormField(); + String paramName = modelFormField.getParameterName(context); + String defaultDateTimeString = dateTimeField.getDefaultDateTimeString(context); + String className = ""; + String alert = "false"; + String name = ""; + String formattedMask = ""; + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + boolean useTimeDropDown = "time-dropdown".equals(dateTimeField.getInputMethod()); + String stepString = dateTimeField.getStep(); + int step = 1; + StringBuilder timeValues = new StringBuilder(); + if (useTimeDropDown && UtilValidate.isNotEmpty(step)) { + try { + step = Integer.valueOf(stepString).intValue(); + } catch (IllegalArgumentException e) { + Debug.logWarning("Inavalid value for step property for field[" + paramName + "] with input-method=\"time-dropdown\" " + " Found Value [" + stepString + "] " + e.getMessage(), module); + } + timeValues.append("["); + for (int i = 0; i <= 59;) { + if (i != 0) { + timeValues.append(", "); + } + timeValues.append(i); + i += step; + } + timeValues.append("]"); + } + Map<String, String> uiLabelMap = UtilGenerics.checkMap(context.get("uiLabelMap")); + if (uiLabelMap == null) { + Debug.logWarning("Could not find uiLabelMap in context", module); + } + String localizedInputTitle = "", localizedIconTitle = ""; + // whether the date field is short form, yyyy-mm-dd + boolean shortDateInput = ("date".equals(dateTimeField.getType()) || useTimeDropDown ? true : false); + if (useTimeDropDown) { + name = UtilHttp.makeCompositeParam(paramName, "date"); + } else { + name = paramName; + } + // the default values for a timestamp + int size = 25; + int maxlength = 30; + if (shortDateInput) { + size = maxlength = 10; + if (uiLabelMap != null) { + localizedInputTitle = uiLabelMap.get("CommonFormatDate"); + } + } else if ("time".equals(dateTimeField.getType())) { + size = maxlength = 8; + if (uiLabelMap != null) { + localizedInputTitle = uiLabelMap.get("CommonFormatTime"); + } + } else { + if (uiLabelMap != null) { + localizedInputTitle = uiLabelMap.get("CommonFormatDateTime"); + } + } + /* + * FIXME: Using a builder here is a hack. Replace the builder with appropriate code. + */ + ModelFormFieldBuilder builder = new ModelFormFieldBuilder(modelFormField); + boolean memEncodeOutput = modelFormField.getEncodeOutput(); + if (useTimeDropDown) + // If time-dropdown deactivate encodingOutput for found hour and minutes + // FIXME: Encoding should be controlled by the renderer, not by the model. + builder.setEncodeOutput(false); + // FIXME: modelFormField.getEntry ignores shortDateInput when converting Date objects to Strings. + if (useTimeDropDown) { + builder.setEncodeOutput(memEncodeOutput); + } + modelFormField = builder.build(); + String contextValue = modelFormField.getEntry(context, dateTimeField.getDefaultValue(context)); + String value = contextValue; + if (UtilValidate.isNotEmpty(value)) { + if (value.length() > maxlength) { + value = value.substring(0, maxlength); + } + } + String id = modelFormField.getCurrentContainerId(context); + ModelForm modelForm = modelFormField.getModelForm(); + String formName = FormRenderer.getCurrentFormName(modelForm, context); + String timeDropdown = dateTimeField.getInputMethod(); + String timeDropdownParamName = ""; + String classString = ""; + boolean isTwelveHour = false; + String timeHourName = ""; + int hour2 = 0, hour1 = 0, minutes = 0; + String timeMinutesName = ""; + String amSelected = "", pmSelected = "", ampmName = ""; + String compositeType = ""; + // search for a localized label for the icon + if (uiLabelMap != null) { + localizedIconTitle = uiLabelMap.get("CommonViewCalendar"); + } + if (!"time".equals(dateTimeField.getType())) { + String tempParamName; + if (useTimeDropDown) { + tempParamName = UtilHttp.makeCompositeParam(paramName, "date"); + } else { + tempParamName = paramName; + } + timeDropdownParamName = tempParamName; + defaultDateTimeString = UtilHttp.encodeBlanks(modelFormField.getEntry(context, defaultDateTimeString)); + } + // if we have an input method of time-dropdown, then render two + // dropdowns + if (useTimeDropDown) { + className = modelFormField.getWidgetStyle(); + classString = (className != null ? className : ""); + isTwelveHour = "12".equals(dateTimeField.getClock()); + // set the Calendar to the default time of the form or now() + Calendar cal = null; + try { + Timestamp defaultTimestamp = Timestamp.valueOf(contextValue); + cal = Calendar.getInstance(); + cal.setTime(defaultTimestamp); + } catch (IllegalArgumentException e) { + Debug.logWarning("Form widget field [" + paramName + "] with input-method=\"time-dropdown\" was not able to understand the default time [" + defaultDateTimeString + "]. The parsing error was: " + e.getMessage(), module); + } + timeHourName = UtilHttp.makeCompositeParam(paramName, "hour"); + if (cal != null) { + int hour = cal.get(Calendar.HOUR_OF_DAY); + hour2 = hour; + if (hour == 0) { + hour = 12; + } + if (hour > 12) { + hour -= 12; + } + hour1 = hour; + minutes = cal.get(Calendar.MINUTE); + } + timeMinutesName = UtilHttp.makeCompositeParam(paramName, "minutes"); + compositeType = UtilHttp.makeCompositeParam(paramName, "compositeType"); + // if 12 hour clock, write the AM/PM selector + if (isTwelveHour) { + amSelected = ((cal != null && cal.get(Calendar.AM_PM) == Calendar.AM) ? "selected" : ""); + pmSelected = ((cal != null && cal.get(Calendar.AM_PM) == Calendar.PM) ? "selected" : ""); + ampmName = UtilHttp.makeCompositeParam(paramName, "ampm"); + } + } + //check for required field style on single forms + if ("single".equals(modelFormField.getModelForm().getType()) && modelFormField.getRequiredField()) { + String requiredStyle = modelFormField.getRequiredFieldStyle(); + if (UtilValidate.isEmpty(requiredStyle)) + requiredStyle = "required"; + if (UtilValidate.isEmpty(className)) + className = requiredStyle; + else + className = requiredStyle + " " + className; + } + String mask = dateTimeField.getMask(); + if ("Y".equals(mask)) { + if ("date".equals(dateTimeField.getType())) { + formattedMask = "9999-99-99"; + } else if ("time".equals(dateTimeField.getType())) { + formattedMask = "99:99:99"; + } else if ("timestamp".equals(dateTimeField.getType())) { + formattedMask = "9999-99-99 99:99:99"; + } + } + StringWriter sr = new StringWriter(); + sr.append("<@renderDateTimeField "); + sr.append("name=\""); + sr.append(name); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" title=\""); + sr.append(localizedInputTitle); + sr.append("\" size=\""); + sr.append(Integer.toString(size)); + sr.append("\" maxlength=\""); + sr.append(Integer.toString(maxlength)); + sr.append("\" step=\""); + sr.append(Integer.toString(step)); + sr.append("\" timeValues=\""); + sr.append(timeValues.toString()); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" event=\""); + sr.append(event); + sr.append("\" action=\""); + sr.append(action); + sr.append("\" dateType=\""); + sr.append(dateTimeField.getType()); + sr.append("\" shortDateInput="); + sr.append(Boolean.toString(shortDateInput)); + sr.append(" timeDropdownParamName=\""); + sr.append(timeDropdownParamName); + sr.append("\" defaultDateTimeString=\""); + sr.append(defaultDateTimeString); + sr.append("\" localizedIconTitle=\""); + sr.append(localizedIconTitle); + sr.append("\" timeDropdown=\""); + sr.append(timeDropdown); + sr.append("\" timeHourName=\""); + sr.append(timeHourName); + sr.append("\" classString=\""); + sr.append(classString); + sr.append("\" hour1="); + sr.append(Integer.toString(hour1)); + sr.append(" hour2="); + sr.append(Integer.toString(hour2)); + sr.append(" timeMinutesName=\""); + sr.append(timeMinutesName); + sr.append("\" minutes="); + sr.append(Integer.toString(minutes)); + sr.append(" isTwelveHour="); + sr.append(Boolean.toString(isTwelveHour)); + sr.append(" ampmName=\""); + sr.append(ampmName); + sr.append("\" amSelected=\""); + sr.append(amSelected); + sr.append("\" pmSelected=\""); + sr.append(pmSelected); + sr.append("\" compositeType=\""); + sr.append(compositeType); + sr.append("\" formName=\""); + sr.append(formName); + sr.append("\" mask=\""); + sr.append(formattedMask); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.addAsterisks(writer, context, modelFormField); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderDropDownField(Appendable writer, Map<String, Object> context, DropDownField dropDownField) throws IOException { + ModelFormField modelFormField = dropDownField.getModelFormField(); + ModelForm modelForm = modelFormField.getModelForm(); + String currentValue = modelFormField.getEntry(context); + List<ModelFormField.OptionValue> allOptionValues = dropDownField.getAllOptionValues(context, WidgetWorker.getDelegator(context)); + ModelFormField.AutoComplete autoComplete = dropDownField.getAutoComplete(); + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + Integer textSize = Integer.valueOf(0); + if (UtilValidate.isNotEmpty(dropDownField.getTextSize())) { + try { + textSize = Integer.parseInt(dropDownField.getTextSize()); + } catch (NumberFormatException nfe) { + Debug.logError(nfe, "Error reading size of a field fieldName=" + dropDownField.getModelFormField().getFieldName() + " FormName= " + dropDownField.getModelFormField().getModelForm().getName(), module); + } + if (textSize > 0 && UtilValidate.isNotEmpty(currentValue) && currentValue.length() > textSize) { + currentValue = currentValue.substring(0, textSize - 8) + "..." + currentValue.substring(currentValue.length() - 5); + } + } + boolean ajaxEnabled = autoComplete != null && this.javaScriptEnabled; + String className = ""; + String alert = "false"; + String name = modelFormField.getParameterName(context); + String id = modelFormField.getCurrentContainerId(context); + String multiple = dropDownField.getAllowMultiple() ? "multiple" : ""; + String otherFieldName = ""; + String formName = modelForm.getName(); + String size = dropDownField.getSize(); + String dDFCurrent = dropDownField.getCurrent(); + String firstInList = ""; + String explicitDescription = ""; + String allowEmpty = ""; + StringBuilder options = new StringBuilder(); + StringBuilder ajaxOptions = new StringBuilder(); + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + //check for required field style on single forms + if ("single".equals(modelFormField.getModelForm().getType()) && modelFormField.getRequiredField()) { + String requiredStyle = modelFormField.getRequiredFieldStyle(); + if (UtilValidate.isEmpty(requiredStyle)) + requiredStyle = "required"; + if (UtilValidate.isEmpty(className)) + className = requiredStyle; + else + className = requiredStyle + " " + className; + } + String currentDescription = null; + if (UtilValidate.isNotEmpty(currentValue)) { + for (ModelFormField.OptionValue optionValue : allOptionValues) { + if (optionValue.getKey().equals(currentValue)) { + currentDescription = optionValue.getDescription(); + break; + } + } + } + int otherFieldSize = dropDownField.getOtherFieldSize(); + if (otherFieldSize > 0) { + otherFieldName = dropDownField.getParameterNameOther(context); + } + // if the current value should go first, stick it in + if (UtilValidate.isNotEmpty(currentValue) && "first-in-list".equals(dropDownField.getCurrent())) { + firstInList = "first-in-list"; + } + explicitDescription = (currentDescription != null ? currentDescription : dropDownField.getCurrentDescription(context)); + if (UtilValidate.isEmpty(explicitDescription)) { + explicitDescription = (FieldInfoWithOptions.getDescriptionForOptionKey(currentValue, allOptionValues)); + } + if (textSize > 0 && UtilValidate.isNotEmpty(explicitDescription) && explicitDescription.length() > textSize) { + explicitDescription = explicitDescription.substring(0, textSize - 8) + "..." + explicitDescription.substring(explicitDescription.length() - 5); + } + explicitDescription = encode(explicitDescription, modelFormField, context); + // if allow empty is true, add an empty option + if (dropDownField.getAllowEmpty()) { + allowEmpty = "Y"; + } + List<String> currentValueList = null; + if (UtilValidate.isNotEmpty(currentValue) && dropDownField.getAllowMultiple()) { + // If currentValue is Array, it will start with [ + if (currentValue.startsWith("[")) { + currentValueList = StringUtil.toList(currentValue); + } else { + currentValueList = UtilMisc.toList(currentValue); + } + } + options.append("["); + Iterator<ModelFormField.OptionValue> optionValueIter = allOptionValues.iterator(); + int count = 0; + while (optionValueIter.hasNext()) { + ModelFormField.OptionValue optionValue = optionValueIter.next(); + if (options.length() > 1) { + options.append(","); + } + options.append("{'key':'"); + String key = encode(optionValue.getKey(), modelFormField, context); + options.append(key); + options.append("'"); + options.append(",'description':'"); + String description = optionValue.getDescription(); + if (textSize > 0 && description.length() > textSize) { + description = description.substring(0, textSize - 8) + "..." + description.substring(description.length() - 5); + } + options.append(encode(description, modelFormField, context)); + + if (UtilValidate.isNotEmpty(currentValueList)) { + options.append("'"); + options.append(",'selected':'"); + if (currentValueList.contains(optionValue.getKey())) { + options.append("selected"); + } else { + options.append(""); + } + } + + options.append("'}"); + if (ajaxEnabled) { + count++; + ajaxOptions.append(optionValue.getKey()).append(": "); + ajaxOptions.append(" '").append(optionValue.getDescription()).append("'"); + if (count != allOptionValues.size()) { + ajaxOptions.append(", "); + } + } + } + options.append("]"); + String noCurrentSelectedKey = dropDownField.getNoCurrentSelectedKey(context); + String otherValue = "", fieldName = ""; + // Adapted from work by Yucca Korpela + // http://www.cs.tut.fi/~jkorpela/forms/combo.html + if (otherFieldSize > 0) { + fieldName = modelFormField.getParameterName(context); + Map<String, ? extends Object> dataMap = modelFormField.getMap(context); + if (dataMap == null) { + dataMap = context; + } + Object otherValueObj = dataMap.get(otherFieldName); + otherValue = (otherValueObj == null) ? "" : otherValueObj.toString(); + } + String frequency = ""; + String minChars = ""; + String choices = ""; + String autoSelect = ""; + String partialSearch = ""; + String partialChars = ""; + String ignoreCase = ""; + String fullSearch = ""; + if (ajaxEnabled) { + frequency = autoComplete.getFrequency(); + minChars = autoComplete.getMinChars(); + choices = autoComplete.getChoices(); + autoSelect = autoComplete.getAutoSelect(); + partialSearch = autoComplete.getPartialSearch(); + partialChars = autoComplete.getPartialChars(); + ignoreCase = autoComplete.getIgnoreCase(); + fullSearch = autoComplete.getFullSearch(); + } + StringWriter sr = new StringWriter(); + sr.append("<@renderDropDownField "); + sr.append("name=\""); + sr.append(name); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" multiple=\""); + sr.append(multiple); + sr.append("\" formName=\""); + sr.append(formName); + sr.append("\" otherFieldName=\""); + sr.append(otherFieldName); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" size=\""); + sr.append(size); + sr.append("\" firstInList=\""); + sr.append(firstInList); + sr.append("\" currentValue=\""); + sr.append(currentValue); + sr.append("\" explicitDescription=\""); + sr.append(explicitDescription); + sr.append("\" allowEmpty=\""); + sr.append(allowEmpty); + sr.append("\" options="); + sr.append(options.toString()); + sr.append(" fieldName=\""); + sr.append(fieldName); + sr.append("\" otherFieldName=\""); + sr.append(otherFieldName); + sr.append("\" otherValue=\""); + sr.append(otherValue); + sr.append("\" otherFieldSize="); + sr.append(Integer.toString(otherFieldSize)); + sr.append(" dDFCurrent=\""); + sr.append(dDFCurrent); + sr.append("\" ajaxEnabled="); + sr.append(Boolean.toString(ajaxEnabled)); + sr.append(" noCurrentSelectedKey=\""); + sr.append(noCurrentSelectedKey); + sr.append("\" ajaxOptions=\""); + sr.append(ajaxOptions.toString()); + sr.append("\" frequency=\""); + sr.append(frequency); + sr.append("\" minChars=\""); + sr.append(minChars); + sr.append("\" choices=\""); + sr.append(choices); + sr.append("\" autoSelect=\""); + sr.append(autoSelect); + sr.append("\" partialSearch=\""); + sr.append(partialSearch); + sr.append("\" partialChars=\""); + sr.append(partialChars); + sr.append("\" ignoreCase=\""); + sr.append(ignoreCase); + sr.append("\" fullSearch=\""); + sr.append(fullSearch); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + ModelFormField.SubHyperlink subHyperlink = dropDownField.getSubHyperlink(); + if (subHyperlink != null && subHyperlink.shouldUse(context)) { + makeHyperlinkString(writer, subHyperlink, context); + } + this.appendTooltip(writer, context, modelFormField); + } + + public void renderCheckField(Appendable writer, Map<String, Object> context, CheckField checkField) throws IOException { + ModelFormField modelFormField = checkField.getModelFormField(); + modelFormField.getModelForm(); + String currentValue = modelFormField.getEntry(context); + Boolean allChecked = checkField.isAllChecked(context); + String id = modelFormField.getCurrentContainerId(context); + String className = ""; + String alert = "false"; + String name = modelFormField.getParameterName(context); + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + StringBuilder items = new StringBuilder(); + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + List<ModelFormField.OptionValue> allOptionValues = checkField.getAllOptionValues(context, WidgetWorker.getDelegator(context)); + items.append("["); + for (ModelFormField.OptionValue optionValue : allOptionValues) { + if (items.length() > 1) { + items.append(","); + } + items.append("{'value':'"); + items.append(optionValue.getKey()); + items.append("', 'description':'" + encode(optionValue.getDescription(), modelFormField, context)); + items.append("'}"); + } + items.append("]"); + StringWriter sr = new StringWriter(); + sr.append("<@renderCheckField "); + sr.append("items="); + sr.append(items.toString()); + sr.append(" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" allChecked="); + sr.append((allChecked != null ? Boolean.toString(allChecked) : "\"\"")); + sr.append(" currentValue=\""); + sr.append(currentValue); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderRadioField(Appendable writer, Map<String, Object> context, RadioField radioField) throws IOException { + ModelFormField modelFormField = radioField.getModelFormField(); + modelFormField.getModelForm(); + List<ModelFormField.OptionValue> allOptionValues = radioField.getAllOptionValues(context, WidgetWorker.getDelegator(context)); + String currentValue = modelFormField.getEntry(context); + String className = ""; + String alert = "false"; + String name = modelFormField.getParameterName(context); + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + StringBuilder items = new StringBuilder(); + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + String noCurrentSelectedKey = radioField.getNoCurrentSelectedKey(context); + items.append("["); + for (ModelFormField.OptionValue optionValue : allOptionValues) { + if (items.length() > 1) { + items.append(","); + } + items.append("{'key':'"); + items.append(optionValue.getKey()); + items.append("', 'description':'" + encode(optionValue.getDescription(), modelFormField, context)); + items.append("'}"); + } + items.append("]"); + StringWriter sr = new StringWriter(); + sr.append("<@renderRadioField "); + sr.append("items="); + sr.append(items.toString()); + sr.append(" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" currentValue=\""); + sr.append(currentValue); + sr.append("\" noCurrentSelectedKey=\""); + sr.append(noCurrentSelectedKey); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderSubmitField(Appendable writer, Map<String, Object> context, SubmitField submitField) throws IOException { + ModelFormField modelFormField = submitField.getModelFormField(); + ModelForm modelForm = modelFormField.getModelForm(); + String event = modelFormField.getEvent(); + String action = modelFormField.getAction(context); + String title = modelFormField.getTitle(context); + String name = modelFormField.getParameterName(context); + String buttonType = submitField.getButtonType(); + String formName = FormRenderer.getCurrentFormName(modelForm, context); + String imgSrc = submitField.getImageLocation(context); + String confirmation = submitField.getConfirmation(context); + String className = ""; + String alert = "false"; + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + String formId = FormRenderer.getCurrentContainerId(modelForm, context); + List<ModelForm.UpdateArea> updateAreas = modelForm.getOnSubmitUpdateAreas(); + // This is here for backwards compatibility. Use on-event-update-area + // elements instead. + String backgroundSubmitRefreshTarget = submitField.getBackgroundSubmitRefreshTarget(context); + if (UtilValidate.isNotEmpty(backgroundSubmitRefreshTarget)) { + if (updateAreas == null) { + updateAreas = new LinkedList<ModelForm.UpdateArea>(); + } + updateAreas.add(new ModelForm.UpdateArea("submit", formId, backgroundSubmitRefreshTarget)); + } + boolean ajaxEnabled = (UtilValidate.isNotEmpty(updateAreas) || UtilValidate.isNotEmpty(backgroundSubmitRefreshTarget)) && this.javaScriptEnabled; + String ajaxUrl = ""; + if (ajaxEnabled) { + ajaxUrl = createAjaxParamsFromUpdateAreas(updateAreas, "", context); + } + StringWriter sr = new StringWriter(); + sr.append("<@renderSubmitField "); + sr.append("buttonType=\""); + sr.append(buttonType); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" formName=\""); + sr.append(formName); + sr.append("\" title=\""); + sr.append(encode(title, modelFormField, context)); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" imgSrc=\""); + sr.append(imgSrc); + sr.append("\" containerId=\""); + if (ajaxEnabled) { + sr.append(formId); + } + sr.append("\" confirmation =\""); + sr.append(confirmation); + sr.append("\" ajaxUrl=\""); + if (ajaxEnabled) { + sr.append(ajaxUrl); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderResetField(Appendable writer, Map<String, Object> context, ResetField resetField) throws IOException { + ModelFormField modelFormField = resetField.getModelFormField(); + String name = modelFormField.getParameterName(context); + String className = ""; + String alert = "false"; + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + String title = modelFormField.getTitle(context); + StringWriter sr = new StringWriter(); + sr.append("<@renderResetField "); + sr.append(" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" title=\""); + sr.append(title); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderHiddenField(Appendable writer, Map<String, Object> context, HiddenField hiddenField) throws IOException { + ModelFormField modelFormField = hiddenField.getModelFormField(); + String value = hiddenField.getValue(context); + this.renderHiddenField(writer, context, modelFormField, value); + } + + public void renderHiddenField(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, String value) throws IOException { + String name = modelFormField.getParameterName(context); + String action = modelFormField.getAction(context); + String event = modelFormField.getEvent(); + String id = modelFormField.getCurrentContainerId(context); + StringWriter sr = new StringWriter(); + sr.append("<@renderHiddenField "); + sr.append(" name=\""); + sr.append(name); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" id=\""); + sr.append(id); + sr.append("\" event=\""); + if (event != null) { + sr.append(event); + } + sr.append("\" action=\""); + if (action != null) { + sr.append(action); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderIgnoredField(Appendable writer, Map<String, Object> context, IgnoredField ignoredField) { + // do nothing, it's an ignored field; could add a comment or something if we wanted to + } + + public void renderFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException { + String titleText = modelFormField.getTitle(context); + String style = modelFormField.getTitleStyle(); + String id = modelFormField.getCurrentContainerId(context); + StringBuilder sb = new StringBuilder(); + if (UtilValidate.isNotEmpty(titleText)) { + if (" ".equals(titleText)) { + executeMacro(writer, "<@renderFormatEmptySpace />"); + } else { + titleText = UtilHttp.encodeAmpersands(titleText); + titleText = encode(titleText, modelFormField, context); + if (UtilValidate.isNotEmpty(modelFormField.getHeaderLink())) { + StringBuilder targetBuffer = new StringBuilder(); + FlexibleStringExpander target = FlexibleStringExpander.getInstance(modelFormField.getHeaderLink()); + String fullTarget = target.expandString(context); + targetBuffer.append(fullTarget); + String targetType = CommonWidgetModels.Link.DEFAULT_URL_MODE; + if (UtilValidate.isNotEmpty(targetBuffer.toString()) && targetBuffer.toString().toLowerCase().startsWith("javascript:")) { + targetType = "plain"; + } + StringWriter sr = new StringWriter(); + makeHyperlinkString(sr, modelFormField.getHeaderLinkStyle(), targetType, targetBuffer.toString(), null, titleText, "", modelFormField, this.request, this.response, context, ""); + String title = sr.toString().replace("\"", "\'"); + sr = new StringWriter(); + sr.append("<@renderHyperlinkTitle "); + sr.append(" name=\""); + sr.append(modelFormField.getModelForm().getName()); + sr.append("\" title=\""); + sr.append(FreeMarkerWorker.encodeDoubleQuotes(title)); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } else if (modelFormField.isSortField()) { + renderSortField(writer, context, modelFormField, titleText); + } else if (modelFormField.isRowSubmit()) { + StringWriter sr = new StringWriter(); + sr.append("<@renderHyperlinkTitle "); + sr.append(" name=\""); + sr.append(modelFormField.getModelForm().getName()); + sr.append("\" title=\""); + sr.append(titleText); + sr.append("\" showSelectAll=\"Y\"/>"); + executeMacro(writer, sr.toString()); + } else { + sb.append(titleText); + } + } + } + if (!sb.toString().isEmpty()) { + //check for required field style on single forms + if ("single".equals(modelFormField.getModelForm().getType()) && modelFormField.getRequiredField()) { + String requiredStyle = modelFormField.getRequiredFieldStyle(); + if (UtilValidate.isNotEmpty(requiredStyle)) { + style = requiredStyle; + } + } + StringWriter sr = new StringWriter(); + sr.append("<@renderFieldTitle "); + sr.append(" style=\""); + sr.append(style); + String displayHelpText = UtilProperties.getPropertyValue("widget.properties", "widget.form.displayhelpText"); + if ("Y".equals(displayHelpText)) { + Delegator delegator = WidgetWorker.getDelegator(context); + Locale locale = (Locale) context.get("locale"); + String entityName = modelFormField.getEntityName(); + String fieldName = modelFormField.getFieldName(); + String helpText = UtilHelpText.getEntityFieldDescription(entityName, fieldName, delegator, locale); + + sr.append("\" fieldHelpText=\""); + sr.append(FreeMarkerWorker.encodeDoubleQuotes(helpText)); + } + sr.append("\" title=\""); + sr.append(sb.toString()); + if (UtilValidate.isNotEmpty(id)) { + sr.append("\" id=\""); + sr.append(id); + sr.append("_title"); + // Render "for" + sr.append("\" for=\""); + sr.append(id); + } + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + } + + public void renderSingleFormFieldTitle(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException { + renderFieldTitle(writer, context, modelFormField); + } + + public void renderFormOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + this.widgetCommentsEnabled = ModelWidget.widgetBoundaryCommentsEnabled(context); + renderBeginningBoundaryComment(writer, "Form Widget - Form Element", modelForm); + String targetType = modelForm.getTargetType(); + String targ = modelForm.getTarget(context, targetType); + StringBuilder linkUrl = new StringBuilder(); + if (UtilValidate.isNotEmpty(targ)) { + //this.appendOfbizUrl(writer, "/" + targ); + WidgetWorker.buildHyperlinkUrl(linkUrl, targ, targetType, null, null, false, false, true, request, response, context); + } + String formType = modelForm.getType(); + String targetWindow = modelForm.getTargetWindow(context); + String containerId = FormRenderer.getCurrentContainerId(modelForm, context); + String containerStyle = modelForm.getContainerStyle(); + String autocomplete = ""; + String name = FormRenderer.getCurrentFormName(modelForm, context); + String viewIndexField = modelForm.getMultiPaginateIndexField(context); + String viewSizeField = modelForm.getMultiPaginateSizeField(context); + int viewIndex = Paginator.getViewIndex(modelForm, context); + int viewSize = Paginator.getViewSize(modelForm, context); + boolean useRowSubmit = modelForm.getUseRowSubmit(); + if (!modelForm.getClientAutocompleteFields()) { + autocomplete = "off"; + } + StringWriter sr = new StringWriter(); + sr.append("<@renderFormOpen "); + sr.append(" linkUrl=\""); + sr.append(linkUrl); + sr.append("\" formType=\""); + sr.append(formType); + sr.append("\" targetWindow=\""); + sr.append(targetWindow); + sr.append("\" containerId=\""); + sr.append(containerId); + sr.append("\" containerStyle=\""); + sr.append(containerStyle); + sr.append("\" autocomplete=\""); + sr.append(autocomplete); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" viewIndexField=\""); + sr.append(viewIndexField); + sr.append("\" viewSizeField=\""); + sr.append(viewSizeField); + sr.append("\" viewIndex=\""); + sr.append(Integer.toString(viewIndex)); + sr.append("\" viewSize=\""); + sr.append(Integer.toString(viewSize)); + sr.append("\" useRowSubmit="); + sr.append(Boolean.toString(useRowSubmit)); + sr.append(" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + String focusFieldName = FormRenderer.getFocusFieldName(modelForm, context); + String formName = FormRenderer.getCurrentFormName(modelForm, context); + String containerId = FormRenderer.getCurrentContainerId(modelForm, context); + String hasRequiredField = ""; + for (ModelFormField formField : modelForm.getFieldList()) { + if (formField.getRequiredField()) { + hasRequiredField = "Y"; + break; + } + } + StringWriter sr = new StringWriter(); + sr.append("<@renderFormClose "); + sr.append(" focusFieldName=\""); + sr.append(focusFieldName); + sr.append("\" formName=\""); + sr.append(formName); + sr.append("\" containerId=\""); + sr.append(containerId); + sr.append("\" hasRequiredField=\""); + sr.append(hasRequiredField); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + renderEndingBoundaryComment(writer, "Form Widget - Form Element", modelForm); + } + + public void renderMultiFormClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + //FIXME copy from HtmlFormRenderer.java (except for the closing form tag itself, that is now converted) + Iterator<ModelFormField> submitFields = modelForm.getMultiSubmitFields().iterator(); + while (submitFields.hasNext()) { + ModelFormField submitField = submitFields.next(); + if (submitField != null && submitField.shouldUse(context)) { + // Threw this in that as a hack to keep the submit button from expanding the first field + // Needs a more rugged solution + // WARNING: this method (renderMultiFormClose) must be called after the + // table that contains the list has been closed (to avoid validation errors) so + // we cannot call here the methods renderFormatItemRowCell*: for this reason + // they are now commented. + // this.renderFormatItemRowCellOpen(writer, context, modelForm, submitField); + // this.renderFormatItemRowCellClose(writer, context, modelForm, submitField); + // this.renderFormatItemRowCellOpen(writer, context, modelForm, submitField); + submitField.renderFieldString(writer, context, this); + // this.renderFormatItemRowCellClose(writer, context, modelForm, submitField); + } + } + StringWriter sr = new StringWriter(); + sr.append("<@renderMultiFormClose />"); + executeMacro(writer, sr.toString()); + // see if there is anything that needs to be added outside of the multi-form + Map<String, Object> wholeFormContext = UtilGenerics.checkMap(context.get("wholeFormContext")); + Appendable postMultiFormWriter = wholeFormContext != null ? (Appendable) wholeFormContext.get("postMultiFormWriter") : null; + if (postMultiFormWriter != null) { + writer.append(postMultiFormWriter.toString()); + appendWhitespace(writer); + } + renderEndingBoundaryComment(writer, "Form Widget - Form Element (Multi)", modelForm); + } + + public void renderFormatListWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + Map<String, Object> inputFields = UtilGenerics.checkMap(context.get("requestParameters")); + Map<String, Object> queryStringMap = UtilGenerics.toMap(context.get("queryStringMap")); + if (UtilValidate.isNotEmpty(queryStringMap)) { + inputFields.putAll(queryStringMap); + } + if (modelForm.getType().equals("multi")) { + inputFields = UtilHttp.removeMultiFormParameters(inputFields); + } + String queryString = UtilHttp.urlEncodeArgs(inputFields); + context.put("_QBESTRING_", queryString); + renderBeginningBoundaryComment(writer, "Form Widget", modelForm); + if (this.renderPagination) { + this.renderNextPrev(writer, context, modelForm); + } + List<ModelFormField> childFieldList = modelForm.getFieldList(); + List<String> columnStyleList = new LinkedList<String>(); + List<String> fieldNameList = new LinkedList<String>(); + for (ModelFormField childField : childFieldList) { + int childFieldType = childField.getFieldInfo().getFieldType(); + if (childFieldType == FieldInfo.HIDDEN || childFieldType == FieldInfo.IGNORED) { + continue; + } + String areaStyle = childField.getTitleAreaStyle(); + if (UtilValidate.isEmpty(areaStyle)) { + areaStyle = ""; + } + if (fieldNameList.contains(childField.getName())) { + if (UtilValidate.isNotEmpty(areaStyle)) { + columnStyleList.set(fieldNameList.indexOf(childField.getName()), areaStyle); + } + } else { + columnStyleList.add(areaStyle); + fieldNameList.add(childField.getName()); + } + } + columnStyleList = StringUtil.quoteStrList(columnStyleList); + String columnStyleListString = StringUtil.join(columnStyleList, ", "); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatListWrapperOpen "); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\" style=\""); + sr.append(FlexibleStringExpander.expandString(modelForm.getDefaultTableStyle(), context)); + sr.append("\" columnStyles=["); + if (UtilValidate.isNotEmpty(columnStyleListString)) { + // this is a fix for forms with no fields + sr.append(columnStyleListString); + } + sr.append("] />"); + executeMacro(writer, sr.toString()); + + } + + public void renderFormatListWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatListWrapperClose"); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + if (this.renderPagination) { + this.renderNextPrev(writer, context, modelForm); + } + renderEndingBoundaryComment(writer, "Form Widget - Formal List Wrapper", modelForm); + } + + public void renderFormatHeaderRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + String headerStyle = FlexibleStringExpander.expandString(modelForm.getHeaderRowStyle(), context); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowOpen "); + sr.append(" style=\""); + sr.append(headerStyle); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, int positionSpan) throws IOException { + String areaStyle = modelFormField.getTitleAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowCellOpen "); + sr.append(" style=\""); + sr.append(areaStyle); + sr.append("\" positionSpan="); + sr.append(Integer.toString(positionSpan)); + sr.append(" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowCellClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + String areaStyle = modelForm.getFormTitleAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowFormCellOpen "); + sr.append(" style=\""); + sr.append(areaStyle); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowFormCellClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatHeaderRowFormCellTitleSeparator(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, boolean isLast) throws IOException { + String titleStyle = modelFormField.getTitleStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatHeaderRowFormCellTitleSeparator "); + sr.append(" style=\""); + sr.append(titleStyle); + sr.append("\" isLast="); + sr.append(Boolean.toString(isLast)); + sr.append(" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + Integer itemIndex = (Integer) context.get("itemIndex"); + String altRowStyles = ""; + String evenRowStyle = ""; + String oddRowStyle = ""; + if (itemIndex != null) { + altRowStyles = modelForm.getStyleAltRowStyle(context); + if (itemIndex.intValue() % 2 == 0) { + evenRowStyle = modelForm.getEvenRowStyle(); + } else { + oddRowStyle = FlexibleStringExpander.expandString(modelForm.getOddRowStyle(), context); + } + } + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowOpen "); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\" itemIndex="); + sr.append(Integer.toString(itemIndex)); + sr.append(" altRowStyles=\""); + sr.append(altRowStyles); + sr.append("\" evenRowStyle=\""); + sr.append(evenRowStyle); + sr.append("\" oddRowStyle=\""); + sr.append(oddRowStyle); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowClose "); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\"/>"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField, int positionSpan) throws IOException { + String areaStyle = modelFormField.getWidgetAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowCellOpen "); + sr.append(" fieldName=\""); + sr.append(modelFormField.getName()); + sr.append("\" style=\""); + sr.append(areaStyle); + sr.append("\" positionSpan="); + sr.append(Integer.toString(positionSpan)); + sr.append(" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm, ModelFormField modelFormField) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowCellClose"); + sr.append(" fieldName=\""); + sr.append(modelFormField.getName()); + sr.append("\"/>"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowFormCellOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + String areaStyle = modelForm.getFormTitleAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowFormCellOpen "); + sr.append(" style=\""); + sr.append(areaStyle); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatItemRowFormCellClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatItemRowFormCellClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatSingleWrapperOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + String style = FlexibleStringExpander.expandString(modelForm.getDefaultTableStyle(), context); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatSingleWrapperOpen "); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\" style=\""); + sr.append(style); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatSingleWrapperClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatSingleWrapperClose"); + sr.append(" formName=\""); + sr.append(modelForm.getName()); + sr.append("\"/>"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowOpen(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowOpen />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowClose(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowTitleCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException { + String style = modelFormField.getTitleAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowTitleCellOpen "); + sr.append(" style=\""); + sr.append(style); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowTitleCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowTitleCellClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowSpacerCell(Appendable writer, Map<String, Object> context, ModelFormField modelFormField) throws IOException { + } + + public void renderFormatFieldRowWidgetCellOpen(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions, int positionSpan, Integer nextPositionInRow) throws IOException { + String areaStyle = modelFormField.getWidgetAreaStyle(); + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowWidgetCellOpen "); + sr.append(" positionSpan="); + sr.append(Integer.toString(positionSpan)); + sr.append(" style=\""); + sr.append(areaStyle); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatFieldRowWidgetCellClose(Appendable writer, Map<String, Object> context, ModelFormField modelFormField, int positions, int positionSpan, Integer nextPositionInRow) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatFieldRowWidgetCellClose />"); + executeMacro(writer, sr.toString()); + } + + public void renderFormatEmptySpace(Appendable writer, Map<String, Object> context, ModelForm modelForm) throws IOException { + StringWriter sr = new StringWriter(); + sr.append("<@renderFormatEmptySpace />"); + executeMacro(writer, sr.toString()); + } + + public void renderTextFindField(Appendable writer, Map<String, Object> context, TextFindField textFindField) throws IOException { + ModelFormField modelFormField = textFindField.getModelFormField(); + String defaultOption = textFindField.getDefaultOption(); + String className = ""; + String alert = "false"; + String opEquals = ""; + String opBeginsWith = ""; + String opContains = ""; + String opIsEmpty = ""; + String opNotEqual = ""; + String name = modelFormField.getParameterName(context); + String size = Integer.toString(textFindField.getSize()); + String maxlength = ""; + String autocomplete = ""; + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + Locale locale = (Locale) context.get("locale"); + if (!textFindField.getHideOptions()) { + opEquals = UtilProperties.getMessage("conditional", "equals", locale); + opBeginsWith = UtilProperties.getMessage("conditional", "begins_with", locale); + opContains = UtilProperties.getMessage("conditional", "contains", locale); + opIsEmpty = UtilProperties.getMessage("conditional", "is_empty", locale); + opNotEqual = UtilProperties.getMessage("conditional", "not_equal", locale); + } + String value = modelFormField.getEntry(context, textFindField.getDefaultValue(context)); + if (value == null) { + value = ""; + } + if (textFindField.getMaxlength() != null) { + maxlength = textFindField.getMaxlength().toString(); + } + if (!textFindField.getClientAutocompleteField()) { + autocomplete = "off"; + } + String titleStyle = ""; + if (UtilValidate.isNotEmpty(modelFormField.getTitleStyle())) { + titleStyle = modelFormField.getTitleStyle(); + } + String ignoreCase = UtilProperties.getMessage("conditional", "ignore_case", locale); + boolean ignCase = textFindField.getIgnoreCase(); + boolean hideIgnoreCase = textFindField.getHideIgnoreCase(); + StringWriter sr = new StringWriter(); + sr.append("<@renderTextFindField "); + sr.append(" name=\""); + sr.append(name); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" defaultOption=\""); + sr.append(defaultOption); + sr.append("\" opEquals=\""); + sr.append(opEquals); + sr.append("\" opBeginsWith=\""); + sr.append(opBeginsWith); + sr.append("\" opContains=\""); + sr.append(opContains); + sr.append("\" opIsEmpty=\""); + sr.append(opIsEmpty); + sr.append("\" opNotEqual=\""); + sr.append(opNotEqual); + sr.append("\" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" size=\""); + sr.append(size); + sr.append("\" maxlength=\""); + sr.append(maxlength); + sr.append("\" autocomplete=\""); + sr.append(autocomplete); + sr.append("\" titleStyle=\""); + sr.append(titleStyle); + sr.append("\" hideIgnoreCase="); + sr.append(Boolean.toString(hideIgnoreCase)); + sr.append(" ignCase="); + sr.append(Boolean.toString(ignCase)); + sr.append(" ignoreCase=\""); + sr.append(ignoreCase); + sr.append("\" />"); + executeMacro(writer, sr.toString()); + this.appendTooltip(writer, context, modelFormField); + } + + public void renderRangeFindField(Appendable writer, Map<String, Object> context, RangeFindField rangeFindField) throws IOException { + ModelFormField modelFormField = rangeFindField.getModelFormField(); + Locale locale = (Locale) context.get("locale"); + String opEquals = UtilProperties.getMessage("conditional", "equals", locale); + String opGreaterThan = UtilProperties.getMessage("conditional", "greater_than", locale); + String opGreaterThanEquals = UtilProperties.getMessage("conditional", "greater_than_equals", locale); + String opLessThan = UtilProperties.getMessage("conditional", "less_than", locale); + String opLessThanEquals = UtilProperties.getMessage("conditional", "less_than_equals", locale); + //String opIsEmpty = UtilProperties.getMessage("conditional", "is_empty", locale); + String className = ""; + String alert = "false"; + if (UtilValidate.isNotEmpty(modelFormField.getWidgetStyle())) { + className = modelFormField.getWidgetStyle(); + if (modelFormField.shouldBeRed(context)) { + alert = "true"; + } + } + String name = modelFormField.getParameterName(context); + String size = Integer.toString(rangeFindField.getSize()); + String value = modelFormField.getEntry(context, rangeFindField.getDefaultValue(context)); + if (value == null) { + value = ""; + } + Integer maxlength = rangeFindField.getMaxlength(); + String autocomplete = ""; + + if (!rangeFindField.getClientAutocompleteField()) { + autocomplete = "off"; + } + String titleStyle = modelFormField.getTitleStyle(); + + if (titleStyle == null) { + titleStyle = ""; + } + String defaultOptionFrom = rangeFindField.getDefaultOptionFrom(); + String value2 = modelFormField.getEntry(context); + if (value2 == null) { + value2 = ""; + } + String defaultOptionThru = rangeFindField.getDefaultOptionThru(); + StringWriter sr = new StringWriter(); + sr.append("<@renderRangeFindField "); + sr.append(" className=\""); + sr.append(className); + sr.append("\" alert=\""); + sr.append(alert); + sr.append("\" name=\""); + sr.append(name); + sr.append("\" value=\""); + sr.append(value); + sr.append("\" size=\""); + sr.append(size); + sr.append("\" maxlength=\""); + if (maxlength != null) { + sr.append(Integer.toString(maxlength)); + } + sr.append("\" autocomplete=\""); + sr.append(autocomplete); + sr.append("\" titleStyle=\""); + sr.append(titleStyle); + sr.append("\" defaultOptionFrom=\""); + sr.append(defaultOptionFrom); + sr.append("\" opEquals=\""); + sr.append(opEquals); + sr.append("\" opGreaterThan=\""); + sr.append(opGreaterThan); + sr.append("\" opGreaterThanEquals=\""); + sr.append(opGreaterThanEquals); [... 1282 lines stripped ...] |
Free forum by Nabble | Edit this page |