001: /*******************************************************************************
002: * Licensed to the Apache Software Foundation (ASF) under one
003: * or more contributor license agreements. See the NOTICE file
004: * distributed with this work for additional information
005: * regarding copyright ownership. The ASF licenses this file
006: * to you under the Apache License, Version 2.0 (the
007: * "License"); you may not use this file except in compliance
008: * with the License. You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing,
013: * software distributed under the License is distributed on an
014: * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
015: * KIND, either express or implied. See the License for the
016: * specific language governing permissions and limitations
017: * under the License.
018: *******************************************************************************/package org.ofbiz.widget.fo;
019:
020: import java.util.Iterator;
021: import java.util.List;
022: import java.util.Map;
023: import javax.servlet.http.HttpServletRequest;
024: import javax.servlet.http.HttpServletResponse;
025:
026: import org.ofbiz.base.util.UtilProperties;
027: import org.ofbiz.base.util.UtilValidate;
028: import org.ofbiz.base.util.UtilFormatOut;
029: import org.ofbiz.widget.form.FormStringRenderer;
030: import org.ofbiz.widget.form.ModelForm;
031: import org.ofbiz.widget.form.ModelFormField;
032: import org.ofbiz.widget.form.ModelFormField.CheckField;
033: import org.ofbiz.widget.form.ModelFormField.DateFindField;
034: import org.ofbiz.widget.form.ModelFormField.DateTimeField;
035: import org.ofbiz.widget.form.ModelFormField.DisplayField;
036: import org.ofbiz.widget.form.ModelFormField.DropDownField;
037: import org.ofbiz.widget.form.ModelFormField.FileField;
038: import org.ofbiz.widget.form.ModelFormField.HiddenField;
039: import org.ofbiz.widget.form.ModelFormField.HyperlinkField;
040: import org.ofbiz.widget.form.ModelFormField.IgnoredField;
041: import org.ofbiz.widget.form.ModelFormField.ImageField;
042: import org.ofbiz.widget.form.ModelFormField.LookupField;
043: import org.ofbiz.widget.form.ModelFormField.PasswordField;
044: import org.ofbiz.widget.form.ModelFormField.RadioField;
045: import org.ofbiz.widget.form.ModelFormField.RangeFindField;
046: import org.ofbiz.widget.form.ModelFormField.ResetField;
047: import org.ofbiz.widget.form.ModelFormField.SubmitField;
048: import org.ofbiz.widget.form.ModelFormField.TextField;
049: import org.ofbiz.widget.form.ModelFormField.TextFindField;
050: import org.ofbiz.widget.form.ModelFormField.TextareaField;
051:
052: /**
053: * Widget Library - FO Form Renderer implementation
054: *
055: */
056: public class FoFormRenderer implements FormStringRenderer {
057:
058: public static final String module = FoFormRenderer.class.getName();
059:
060: HttpServletRequest request;
061: HttpServletResponse response;
062:
063: public FoFormRenderer() {
064: }
065:
066: public FoFormRenderer(HttpServletRequest request,
067: HttpServletResponse response) {
068: this .request = request;
069: this .response = response;
070: }
071:
072: public void appendWhitespace(StringBuffer buffer) {
073: // appending line ends for now, but this could be replaced with a simple space or something
074: buffer.append("\r\n");
075: //buffer.append(' ');
076: }
077:
078: private String getFoStyle(String styleName) {
079: String value = UtilProperties.getPropertyValue(
080: "fo-styles.properties", styleName);
081: if (value.equals(styleName)) {
082: return "";
083: }
084: return value;
085: }
086:
087: private void makeBlockString(StringBuffer buffer,
088: String widgetStyle, String text) {
089: buffer.append("<fo:block");
090: if (UtilValidate.isNotEmpty(widgetStyle)) {
091: buffer.append(" ");
092: buffer.append(getFoStyle(widgetStyle));
093: }
094: buffer.append(">");
095: buffer.append(UtilFormatOut.encodeXmlValue(text));
096: buffer.append("</fo:block>");
097: }
098:
099: public void renderDisplayField(StringBuffer buffer, Map context,
100: DisplayField displayField) {
101: ModelFormField modelFormField = displayField
102: .getModelFormField();
103: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
104: displayField.getDescription(context));
105: this .appendWhitespace(buffer);
106: }
107:
108: public void renderHyperlinkField(StringBuffer buffer, Map context,
109: HyperlinkField hyperlinkField) {
110: ModelFormField modelFormField = hyperlinkField
111: .getModelFormField();
112: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
113: hyperlinkField.getDescription(context));
114: this .appendWhitespace(buffer);
115: }
116:
117: public void renderTextField(StringBuffer buffer, Map context,
118: TextField textField) {
119: ModelFormField modelFormField = textField.getModelFormField();
120: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
121: modelFormField.getEntry(context, textField
122: .getDefaultValue(context)));
123: this .appendWhitespace(buffer);
124: }
125:
126: public void renderTextareaField(StringBuffer buffer, Map context,
127: TextareaField textareaField) {
128: ModelFormField modelFormField = textareaField
129: .getModelFormField();
130: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
131: modelFormField.getEntry(context, textareaField
132: .getDefaultValue(context)));
133: this .appendWhitespace(buffer);
134: }
135:
136: public void renderDateTimeField(StringBuffer buffer, Map context,
137: DateTimeField dateTimeField) {
138: ModelFormField modelFormField = dateTimeField
139: .getModelFormField();
140: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
141: modelFormField.getEntry(context, dateTimeField
142: .getDefaultValue(context)));
143: this .appendWhitespace(buffer);
144: }
145:
146: public void renderDropDownField(StringBuffer buffer, Map context,
147: DropDownField dropDownField) {
148: ModelFormField modelFormField = dropDownField
149: .getModelFormField();
150: ModelForm modelForm = modelFormField.getModelForm();
151: String currentValue = modelFormField.getEntry(context);
152: List allOptionValues = dropDownField.getAllOptionValues(
153: context, modelForm.getDelegator());
154: // if the current value should go first, display it
155: if (UtilValidate.isNotEmpty(currentValue)
156: && "first-in-list".equals(dropDownField.getCurrent())) {
157: String explicitDescription = dropDownField
158: .getCurrentDescription(context);
159: if (UtilValidate.isNotEmpty(explicitDescription)) {
160: this .makeBlockString(buffer, modelFormField
161: .getWidgetStyle(), explicitDescription);
162: } else {
163: this .makeBlockString(buffer, modelFormField
164: .getWidgetStyle(),
165: ModelFormField.FieldInfoWithOptions
166: .getDescriptionForOptionKey(
167: currentValue, allOptionValues));
168: }
169: } else {
170: Iterator optionValueIter = allOptionValues.iterator();
171: while (optionValueIter.hasNext()) {
172: ModelFormField.OptionValue optionValue = (ModelFormField.OptionValue) optionValueIter
173: .next();
174: String noCurrentSelectedKey = dropDownField
175: .getNoCurrentSelectedKey(context);
176: if ((UtilValidate.isNotEmpty(currentValue)
177: && currentValue.equals(optionValue.getKey()) && "selected"
178: .equals(dropDownField.getCurrent()))
179: || (UtilValidate.isEmpty(currentValue)
180: && noCurrentSelectedKey != null && noCurrentSelectedKey
181: .equals(optionValue.getKey()))) {
182: this .makeBlockString(buffer, modelFormField
183: .getWidgetStyle(), optionValue
184: .getDescription());
185: break;
186: }
187: }
188: }
189: this .appendWhitespace(buffer);
190: }
191:
192: public void renderCheckField(StringBuffer buffer, Map context,
193: CheckField checkField) {
194: }
195:
196: public void renderRadioField(StringBuffer buffer, Map context,
197: RadioField radioField) {
198: }
199:
200: public void renderSubmitField(StringBuffer buffer, Map context,
201: SubmitField submitField) {
202: }
203:
204: public void renderResetField(StringBuffer buffer, Map context,
205: ResetField resetField) {
206: }
207:
208: public void renderHiddenField(StringBuffer buffer, Map context,
209: HiddenField hiddenField) {
210: }
211:
212: public void renderHiddenField(StringBuffer buffer, Map context,
213: ModelFormField modelFormField, String value) {
214: }
215:
216: public void renderIgnoredField(StringBuffer buffer, Map context,
217: IgnoredField ignoredField) {
218: }
219:
220: public void renderFieldTitle(StringBuffer buffer, Map context,
221: ModelFormField modelFormField) {
222: String tempTitleText = modelFormField.getTitle(context);
223: buffer.append(tempTitleText);
224: }
225:
226: public void renderSingleFormFieldTitle(StringBuffer buffer,
227: Map context, ModelFormField modelFormField) {
228: renderFieldTitle(buffer, context, modelFormField);
229: }
230:
231: public void renderFormOpen(StringBuffer buffer, Map context,
232: ModelForm modelForm) {
233: }
234:
235: public void renderFormClose(StringBuffer buffer, Map context,
236: ModelForm modelForm) {
237: }
238:
239: public void renderMultiFormClose(StringBuffer buffer, Map context,
240: ModelForm modelForm) {
241: }
242:
243: public void renderFormatListWrapperOpen(StringBuffer buffer,
244: Map context, ModelForm modelForm) {
245: buffer.append("<fo:table border=\"solid black\">");
246: Iterator fieldListIter = modelForm.getFieldList().iterator();
247: while (fieldListIter.hasNext()) {
248: ModelFormField childField = (ModelFormField) fieldListIter
249: .next();
250: int childFieldType = childField.getFieldInfo()
251: .getFieldType();
252: if (childFieldType == ModelFormField.FieldInfo.HIDDEN
253: || childFieldType == ModelFormField.FieldInfo.IGNORED) {
254: continue;
255: }
256: buffer.append("<fo:table-column");
257: String areaStyle = childField.getTitleAreaStyle();
258: if (UtilValidate.isNotEmpty(areaStyle)) {
259: buffer.append(" ");
260: buffer.append(getFoStyle(areaStyle));
261: }
262: buffer.append("/>");
263: this .appendWhitespace(buffer);
264: }
265: this .appendWhitespace(buffer);
266: }
267:
268: public void renderFormatListWrapperClose(StringBuffer buffer,
269: Map context, ModelForm modelForm) {
270: buffer.append("</fo:table-body>");
271: buffer.append("</fo:table>");
272: this .appendWhitespace(buffer);
273: }
274:
275: public void renderFormatHeaderRowOpen(StringBuffer buffer,
276: Map context, ModelForm modelForm) {
277: buffer.append("<fo:table-header>");
278: buffer.append("<fo:table-row>");
279: this .appendWhitespace(buffer);
280: }
281:
282: public void renderFormatHeaderRowClose(StringBuffer buffer,
283: Map context, ModelForm modelForm) {
284: buffer.append("</fo:table-row>");
285: buffer.append("</fo:table-header>");
286: buffer.append("<fo:table-body>");
287: this .appendWhitespace(buffer);
288: }
289:
290: public void renderFormatHeaderRowCellOpen(StringBuffer buffer,
291: Map context, ModelForm modelForm,
292: ModelFormField modelFormField) {
293: buffer
294: .append("<fo:table-cell font-weight=\"bold\" text-align=\"center\" border=\"solid black\" padding=\"2pt\">");
295: buffer.append("<fo:block>");
296: this .appendWhitespace(buffer);
297: }
298:
299: public void renderFormatHeaderRowCellClose(StringBuffer buffer,
300: Map context, ModelForm modelForm,
301: ModelFormField modelFormField) {
302: buffer.append("</fo:block>");
303: buffer.append("</fo:table-cell>");
304: this .appendWhitespace(buffer);
305: }
306:
307: public void renderFormatHeaderRowFormCellOpen(StringBuffer buffer,
308: Map context, ModelForm modelForm) {
309: buffer.append("<fo:table-cell>");
310: this .appendWhitespace(buffer);
311: }
312:
313: public void renderFormatHeaderRowFormCellClose(StringBuffer buffer,
314: Map context, ModelForm modelForm) {
315: buffer.append("</fo:table-cell>");
316: this .appendWhitespace(buffer);
317: }
318:
319: public void renderFormatHeaderRowFormCellTitleSeparator(
320: StringBuffer buffer, Map context, ModelForm modelForm,
321: ModelFormField modelFormField, boolean isLast) {
322: }
323:
324: public void renderFormatItemRowOpen(StringBuffer buffer,
325: Map context, ModelForm modelForm) {
326: buffer.append("<fo:table-row>");
327: this .appendWhitespace(buffer);
328: }
329:
330: public void renderFormatItemRowClose(StringBuffer buffer,
331: Map context, ModelForm modelForm) {
332: buffer.append("</fo:table-row>");
333: this .appendWhitespace(buffer);
334: }
335:
336: public void renderFormatItemRowCellOpen(StringBuffer buffer,
337: Map context, ModelForm modelForm,
338: ModelFormField modelFormField) {
339: buffer.append("<fo:table-cell ");
340: String areaStyle = modelFormField.getWidgetAreaStyle();
341: if (UtilValidate.isEmpty(areaStyle)) {
342: areaStyle = "tabletext";
343: }
344: buffer.append(getFoStyle(areaStyle));
345: buffer.append(">");
346: this .appendWhitespace(buffer);
347: }
348:
349: public void renderFormatItemRowCellClose(StringBuffer buffer,
350: Map context, ModelForm modelForm,
351: ModelFormField modelFormField) {
352: buffer.append("</fo:table-cell>");
353: this .appendWhitespace(buffer);
354: }
355:
356: public void renderFormatItemRowFormCellOpen(StringBuffer buffer,
357: Map context, ModelForm modelForm) {
358: buffer.append("<fo:table-cell>");
359: this .appendWhitespace(buffer);
360: }
361:
362: public void renderFormatItemRowFormCellClose(StringBuffer buffer,
363: Map context, ModelForm modelForm) {
364: buffer.append("</fo:table-cell>");
365: this .appendWhitespace(buffer);
366: }
367:
368: // TODO: multi columns (position attribute) in single forms are still not implemented
369: public void renderFormatSingleWrapperOpen(StringBuffer buffer,
370: Map context, ModelForm modelForm) {
371: buffer.append("<fo:table>");
372: this .appendWhitespace(buffer);
373: buffer.append("<fo:table-column column-width=\"2in\"/>");
374: this .appendWhitespace(buffer);
375: buffer.append("<fo:table-column/>");
376: this .appendWhitespace(buffer);
377: buffer.append("<fo:table-body>");
378: this .appendWhitespace(buffer);
379: }
380:
381: public void renderFormatSingleWrapperClose(StringBuffer buffer,
382: Map context, ModelForm modelForm) {
383: buffer.append("</fo:table-body>");
384: buffer.append("</fo:table>");
385: this .appendWhitespace(buffer);
386: }
387:
388: public void renderFormatFieldRowOpen(StringBuffer buffer,
389: Map context, ModelForm modelForm) {
390: buffer.append("<fo:table-row>");
391: this .appendWhitespace(buffer);
392: }
393:
394: public void renderFormatFieldRowClose(StringBuffer buffer,
395: Map context, ModelForm modelForm) {
396: buffer.append("</fo:table-row>");
397: this .appendWhitespace(buffer);
398: }
399:
400: public void renderFormatFieldRowTitleCellOpen(StringBuffer buffer,
401: Map context, ModelFormField modelFormField) {
402: buffer
403: .append("<fo:table-cell font-weight=\"bold\" text-align=\"right\" padding=\"3pt\">");
404: buffer.append("<fo:block>");
405: this .appendWhitespace(buffer);
406: }
407:
408: public void renderFormatFieldRowTitleCellClose(StringBuffer buffer,
409: Map context, ModelFormField modelFormField) {
410: buffer.append("</fo:block>");
411: buffer.append("</fo:table-cell>");
412: this .appendWhitespace(buffer);
413: }
414:
415: public void renderFormatFieldRowSpacerCell(StringBuffer buffer,
416: Map context, ModelFormField modelFormField) {
417: }
418:
419: public void renderFormatFieldRowWidgetCellOpen(StringBuffer buffer,
420: Map context, ModelFormField modelFormField, int positions,
421: int positionSpan, Integer nextPositionInRow) {
422: buffer
423: .append("<fo:table-cell text-align=\"left\" padding=\"2pt\" padding-left=\"5pt\">");
424: this .appendWhitespace(buffer);
425: }
426:
427: public void renderFormatFieldRowWidgetCellClose(
428: StringBuffer buffer, Map context,
429: ModelFormField modelFormField, int positions,
430: int positionSpan, Integer nextPositionInRow) {
431: buffer.append("</fo:table-cell>");
432: this .appendWhitespace(buffer);
433: }
434:
435: public void renderFormatEmptySpace(StringBuffer buffer,
436: Map context, ModelForm modelForm) {
437: // TODO
438: }
439:
440: public void renderTextFindField(StringBuffer buffer, Map context,
441: TextFindField textFindField) {
442: ModelFormField modelFormField = textFindField
443: .getModelFormField();
444: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
445: modelFormField.getEntry(context, textFindField
446: .getDefaultValue(context)));
447: this .appendWhitespace(buffer);
448: }
449:
450: public void renderRangeFindField(StringBuffer buffer, Map context,
451: RangeFindField rangeFindField) {
452: ModelFormField modelFormField = rangeFindField
453: .getModelFormField();
454: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
455: modelFormField.getEntry(context, rangeFindField
456: .getDefaultValue(context)));
457: this .appendWhitespace(buffer);
458: }
459:
460: public void renderDateFindField(StringBuffer buffer, Map context,
461: DateFindField dateFindField) {
462: ModelFormField modelFormField = dateFindField
463: .getModelFormField();
464: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
465: modelFormField.getEntry(context, dateFindField
466: .getDefaultValue(context)));
467: this .appendWhitespace(buffer);
468: }
469:
470: public void renderLookupField(StringBuffer buffer, Map context,
471: LookupField lookupField) {
472: ModelFormField modelFormField = lookupField.getModelFormField();
473: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
474: modelFormField.getEntry(context, lookupField
475: .getDefaultValue(context)));
476: this .appendWhitespace(buffer);
477: }
478:
479: public void renderNextPrev(StringBuffer buffer, Map context,
480: ModelForm modelForm) {
481: }
482:
483: public void renderFileField(StringBuffer buffer, Map context,
484: FileField textField) {
485: ModelFormField modelFormField = textField.getModelFormField();
486: this .makeBlockString(buffer, modelFormField.getWidgetStyle(),
487: modelFormField.getEntry(context, textField
488: .getDefaultValue(context)));
489: this .appendWhitespace(buffer);
490: }
491:
492: public void renderPasswordField(StringBuffer buffer, Map context,
493: PasswordField passwordField) {
494: }
495:
496: public void renderImageField(StringBuffer buffer, Map context,
497: ImageField imageField) {
498: // TODO
499: }
500:
501: public void renderFieldGroupOpen(StringBuffer buffer, Map context,
502: ModelForm.FieldGroup fieldGroup) {
503: // TODO
504: }
505:
506: public void renderFieldGroupClose(StringBuffer buffer, Map context,
507: ModelForm.FieldGroup fieldGroup) {
508: // TODO
509: }
510:
511: public void renderBanner(StringBuffer buffer, Map context,
512: ModelForm.Banner banner) {
513: // TODO
514: }
515:
516: public void renderHyperlinkTitle(StringBuffer buffer, Map context,
517: ModelFormField modelFormField, String titleText) {
518: }
519: }
|