/******************************************************************************* | |
* 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.model; | |
import java.util.Collection; | |
import org.ofbiz.widget.model.CommonWidgetModels.Link; | |
import org.ofbiz.widget.model.ModelFormField.AutoComplete; | |
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.InPlaceEditor; | |
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.SubHyperlink; | |
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; | |
/** | |
* An object that generates XML from widget models. | |
* The generated XML is unformatted - if you want to | |
* "pretty print" the XML, then use a transformer. | |
* | |
*/ | |
public class XmlWidgetFieldVisitor extends XmlAbstractWidgetVisitor implements ModelFieldVisitor { | |
public XmlWidgetFieldVisitor(Appendable writer) { | |
super(writer); | |
} | |
@Override | |
public void visit(CheckField checkField) throws Exception { | |
visitModelField(checkField.getModelFormField()); | |
writer.append("<check"); | |
visitAttribute("all-checked", checkField.getAllChecked()); | |
visitFieldInfoWithOptions(checkField); | |
writer.append("</check></field>"); | |
} | |
@Override | |
public void visit(ContainerField containerField) throws Exception { | |
visitModelField(containerField.getModelFormField()); | |
writer.append("<container/></field>"); | |
} | |
@Override | |
public void visit(DateFindField dateTimeField) throws Exception { | |
visitModelField(dateTimeField.getModelFormField()); | |
writer.append("<date-find"); | |
visitDateTimeFieldAttrs(dateTimeField); | |
visitAttribute("default-option-from", dateTimeField.getDefaultOptionFrom()); | |
visitAttribute("default-option-thru", dateTimeField.getDefaultOptionThru()); | |
writer.append("/></field>"); | |
} | |
@Override | |
public void visit(DateTimeField dateTimeField) throws Exception { | |
visitModelField(dateTimeField.getModelFormField()); | |
writer.append("<date-time"); | |
visitDateTimeFieldAttrs(dateTimeField); | |
writer.append("/></field>"); | |
} | |
@Override | |
public void visit(DisplayEntityField displayField) throws Exception { | |
visitModelField(displayField.getModelFormField()); | |
writer.append("<display-entity"); | |
visitDisplayFieldAttrs(displayField); | |
visitAttribute("cache", displayField.getCache()); | |
visitAttribute("entity-name", displayField.getEntityName()); | |
visitAttribute("key-field-name", displayField.getKeyFieldName()); | |
writer.append(">"); | |
visitInPlaceEditor(displayField.getInPlaceEditor()); | |
visitSubHyperlink(displayField.getSubHyperlink()); | |
writer.append("</display-entity></field>"); | |
} | |
@Override | |
public void visit(DisplayField displayField) throws Exception { | |
visitModelField(displayField.getModelFormField()); | |
writer.append("<display"); | |
visitDisplayFieldAttrs(displayField); | |
writer.append(">"); | |
visitInPlaceEditor(displayField.getInPlaceEditor()); | |
writer.append("</display></field>"); | |
} | |
@Override | |
public void visit(DropDownField dropDownField) throws Exception { | |
visitModelField(dropDownField.getModelFormField()); | |
writer.append("<drop-down"); | |
visitAttribute("allow-empty", dropDownField.getAllowEmpty()); | |
visitAttribute("allow-multiple", dropDownField.getAllowMultiple()); | |
visitAttribute("current", dropDownField.getCurrent()); | |
visitAttribute("current-description", dropDownField.getCurrentDescription()); | |
visitAttribute("other-field-size", dropDownField.getOtherFieldSize()); | |
visitAttribute("size", dropDownField.getSize()); | |
visitAttribute("text-size", dropDownField.getTextSize()); | |
visitFieldInfoWithOptions(dropDownField); | |
visitAutoComplete(dropDownField.getAutoComplete()); | |
visitSubHyperlink(dropDownField.getSubHyperlink()); | |
writer.append("</drop-down></field>"); | |
} | |
@Override | |
public void visit(FileField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<file"); | |
visitTextFieldAttrs(textField); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</file></field>"); | |
} | |
@Override | |
public void visit(HiddenField hiddenField) throws Exception { | |
visitModelField(hiddenField.getModelFormField()); | |
writer.append("<hidden"); | |
visitAttribute("value", hiddenField.getValue()); | |
writer.append("/></field>"); | |
} | |
@Override | |
public void visit(HyperlinkField hyperlinkField) throws Exception { | |
visitModelField(hyperlinkField.getModelFormField()); | |
writer.append("<hyperlink"); | |
visitAttribute("also-hidden", hyperlinkField.getAlsoHidden()); | |
visitAttribute("confirmation-message", hyperlinkField.getConfirmationMsgExdr()); | |
visitAttribute("description", hyperlinkField.getDescription()); | |
visitAttribute("request-confirmation", hyperlinkField.getRequestConfirmation()); | |
Link link = hyperlinkField.getLink(); | |
visitLinkAttributes(link); | |
if (link.getImage() != null || link.getAutoEntityParameters() != null || link.getAutoServiceParameters() != null) { | |
writer.append(">"); | |
visitImage(link.getImage()); | |
visitAutoEntityParameters(link.getAutoEntityParameters()); | |
visitAutoServiceParameters(link.getAutoServiceParameters()); | |
writer.append("</hyperlink>"); | |
} else { | |
writer.append("/>"); | |
} | |
writer.append("</field>"); | |
} | |
@Override | |
public void visit(IgnoredField ignoredField) throws Exception { | |
visitModelField(ignoredField.getModelFormField()); | |
writer.append("<ignored/></field>"); | |
} | |
@Override | |
public void visit(ImageField imageField) throws Exception { | |
visitModelField(imageField.getModelFormField()); | |
writer.append("<image"); | |
visitAttribute("alternate", imageField.getAlternate()); | |
visitAttribute("default-value", imageField.getDefaultValue()); | |
visitAttribute("description", imageField.getDescription()); | |
visitAttribute("style", imageField.getStyle()); | |
visitAttribute("value", imageField.getValue()); | |
writer.append(">"); | |
visitSubHyperlink(imageField.getSubHyperlink()); | |
writer.append("</image></field>"); | |
} | |
@Override | |
public void visit(LookupField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<lookup"); | |
visitTextFieldAttrs(textField); | |
visitAttribute("description-field-name", textField.getDescriptionFieldName()); | |
visitAttribute("fade-background", textField.getFadeBackground()); | |
visitAttribute("target-form-name", textField.getFormName()); | |
visitAttribute("initially-collapsed", textField.getInitiallyCollapsed()); | |
visitAttribute("height", textField.getLookupHeight()); | |
visitAttribute("position", textField.getLookupPosition()); | |
visitAttribute("presentation", textField.getLookupPresentation()); | |
visitAttribute("width", textField.getLookupWidth()); | |
visitAttribute("show-description", textField.getShowDescription()); | |
visitAttribute("target-parameter", textField.getTargetParameter()); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</lookup></field>"); | |
} | |
@Override | |
public void visit(PasswordField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<password"); | |
visitTextFieldAttrs(textField); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</password></field>"); | |
} | |
@Override | |
public void visit(RadioField radioField) throws Exception { | |
visitModelField(radioField.getModelFormField()); | |
writer.append("<radio"); | |
visitFieldInfoWithOptions(radioField); | |
writer.append("</radio></field>"); | |
} | |
@Override | |
public void visit(RangeFindField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<range-find"); | |
visitTextFieldAttrs(textField); | |
visitAttribute("default-option-from", textField.getDefaultOptionFrom()); | |
visitAttribute("default-option-thru", textField.getDefaultOptionThru()); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</range-find></field>"); | |
} | |
@Override | |
public void visit(ResetField resetField) throws Exception { | |
visitModelField(resetField.getModelFormField()); | |
writer.append("<reset/></field>"); | |
} | |
@Override | |
public void visit(SubmitField submitField) throws Exception { | |
visitModelField(submitField.getModelFormField()); | |
writer.append("<submit"); | |
visitAttribute("background-submit-refresh-target", submitField.getBackgroundSubmitRefreshTargetExdr()); | |
visitAttribute("button-type", submitField.getButtonType()); | |
visitAttribute("confirmation-message", submitField.getConfirmationMsgExdr()); | |
visitAttribute("image-location", submitField.getImageLocation()); | |
visitAttribute("request-confirmation", submitField.getRequestConfirmation()); | |
writer.append("/></field>"); | |
} | |
@Override | |
public void visit(TextareaField textareaField) throws Exception { | |
visitModelField(textareaField.getModelFormField()); | |
writer.append("<textarea"); | |
visitAttribute("cols", textareaField.getCols()); | |
visitAttribute("default-value", textareaField.getDefaultValue()); | |
visitAttribute("read-only", textareaField.isReadOnly()); | |
visitAttribute("rows", textareaField.getRows()); | |
visitAttribute("visual-editor-buttons", textareaField.getVisualEditorButtons()); | |
visitAttribute("visual-editor-enable", textareaField.getVisualEditorEnable()); | |
writer.append("/></field>"); | |
} | |
@Override | |
public void visit(TextField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<text"); | |
visitTextFieldAttrs(textField); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</text></field>"); | |
} | |
@Override | |
public void visit(TextFindField textField) throws Exception { | |
visitModelField(textField.getModelFormField()); | |
writer.append("<text-find"); | |
visitTextFieldAttrs(textField); | |
visitAttribute("default-option", textField.getDefaultOption()); | |
visitAttribute("hide-options", textField.getHideOptions()); | |
visitAttribute("ignore-case", textField.getIgnoreCase()); | |
writer.append(">"); | |
visitSubHyperlink(textField.getSubHyperlink()); | |
writer.append("</text-find></field>"); | |
} | |
private void visitTextFieldAttrs(TextField field) throws Exception { | |
visitAttribute("client-autocomplete-field", field.getClientAutocompleteField()); | |
visitAttribute("default-value", field.getDefaultValue()); | |
visitAttribute("disabled", field.getDisabled()); | |
visitAttribute("mask", field.getMask()); | |
visitAttribute("maxlength", field.getMaxlength()); | |
visitAttribute("placeholder", field.getPlaceholder()); | |
visitAttribute("read-only", field.getReadonly()); | |
visitAttribute("size", field.getSize()); | |
} | |
private void visitDisplayFieldAttrs(DisplayField field) throws Exception { | |
visitAttribute("also-hidden", field.getAlsoHidden()); | |
visitAttribute("currency", field.getCurrency()); | |
visitAttribute("date", field.getDate()); | |
visitAttribute("default-value", field.getDefaultValue()); | |
visitAttribute("description", field.getDescription()); | |
visitAttribute("image-location", field.getImageLocation()); | |
visitAttribute("size", field.getSize()); | |
visitAttribute("type", field.getType()); | |
} | |
private void visitDateTimeFieldAttrs(DateTimeField field) throws Exception { | |
visitAttribute("default-value", field.getDefaultValue()); | |
visitAttribute("type", field.getType()); | |
visitAttribute("input-method", field.getInputMethod()); | |
visitAttribute("clock", field.getClock()); | |
visitAttribute("mask", field.getMask()); | |
visitAttribute("step", field.getStep()); | |
} | |
private void visitFieldInfoWithOptions(FieldInfoWithOptions fieldInfo) throws Exception { | |
visitAttribute("no-current-selected-key", fieldInfo.getNoCurrentSelectedKey()); | |
writer.append(">"); | |
// TODO: Options | |
} | |
private void visitModelField(ModelFormField modelField) throws Exception { | |
writer.append("<field"); | |
visitAttribute("name", modelField.getName()); | |
visitAttribute("action", modelField.getAction()); | |
visitAttribute("attribute-name", modelField.getAttributeName()); | |
visitAttribute("encode-output", modelField.getEncodeOutput()); | |
visitAttribute("entity-name", modelField.getEntityName()); | |
visitAttribute("entry-name", modelField.getEntryName()); | |
visitAttribute("event", modelField.getEvent()); | |
visitAttribute("field-name", modelField.getFieldName()); | |
visitAttribute("header-link", modelField.getHeaderLink()); | |
visitAttribute("header-link-style", modelField.getHeaderLinkStyle()); | |
visitAttribute("id-name", modelField.getIdName()); | |
visitAttribute("map-name", modelField.getMapName()); | |
visitAttribute("parameter-name", modelField.getParameterName()); | |
visitAttribute("position", modelField.getPosition()); | |
visitAttribute("red-when", modelField.getRedWhen()); | |
visitAttribute("required-field", modelField.getRequiredField()); | |
visitAttribute("required-field-style", modelField.getRequiredFieldStyle()); | |
visitAttribute("separate-column", modelField.getSeparateColumn()); | |
visitAttribute("service-name", modelField.getServiceName()); | |
visitAttribute("sort-field", modelField.getSortField()); | |
visitAttribute("sort-field-asc-style", modelField.getSortFieldAscStyle()); | |
visitAttribute("sort-field-desc-style", modelField.getSortFieldDescStyle()); | |
visitAttribute("sort-field-help-text", modelField.getSortFieldHelpText()); | |
visitAttribute("sort-field-style", modelField.getSortFieldStyle()); | |
visitAttribute("title", modelField.getTitle()); | |
visitAttribute("title-area-style", modelField.getTitleAreaStyle()); | |
visitAttribute("title-style", modelField.getTitleStyle()); | |
visitAttribute("tooltip", modelField.getTooltip()); | |
visitAttribute("tooltip-style", modelField.getTooltipStyle()); | |
visitAttribute("use-when", modelField.getUseWhen()); | |
visitAttribute("widget-area-style", modelField.getWidgetAreaStyle()); | |
visitAttribute("widget-style", modelField.getWidgetStyle()); | |
writer.append(">"); | |
visitUpdateAreas(modelField.getOnChangeUpdateAreas()); | |
visitUpdateAreas(modelField.getOnClickUpdateAreas()); | |
} | |
private void visitSubHyperlink(SubHyperlink hyperlink) throws Exception { | |
if (hyperlink != null) { | |
writer.append("<sub-hyperlink"); | |
Link link = hyperlink.getLink(); | |
visitLinkAttributes(link); | |
visitAttribute("description", hyperlink.getDescription()); | |
visitAttribute("use-when", hyperlink.getUseWhen()); | |
if (link.getImage() != null || link.getAutoEntityParameters() != null || link.getAutoServiceParameters() != null) { | |
writer.append(">"); | |
visitImage(link.getImage()); | |
visitAutoEntityParameters(link.getAutoEntityParameters()); | |
visitAutoServiceParameters(link.getAutoServiceParameters()); | |
writer.append("</sub-hyperlink>"); | |
} else { | |
writer.append("/>"); | |
} | |
} | |
} | |
private void visitAutoComplete(AutoComplete autoComplete) throws Exception { | |
if (autoComplete != null) { | |
writer.append("<auto-complete"); | |
visitAttribute("auto-select", autoComplete.getAutoSelect()); | |
visitAttribute("frequency", autoComplete.getFrequency()); | |
visitAttribute("min-chars", autoComplete.getMinChars()); | |
visitAttribute("choices", autoComplete.getChoices()); | |
visitAttribute("partial-search", autoComplete.getPartialSearch()); | |
visitAttribute("partial-chars", autoComplete.getPartialChars()); | |
visitAttribute("ignore-case", autoComplete.getIgnoreCase()); | |
visitAttribute("full-search", autoComplete.getFullSearch()); | |
writer.append("/>"); | |
} | |
} | |
private void visitInPlaceEditor(InPlaceEditor editor) throws Exception { | |
if (editor != null) { | |
writer.append("<in-place-editor"); | |
visitAttribute("cancel-control", editor.getCancelControl()); | |
visitAttribute("cancel-text", editor.getCancelText()); | |
visitAttribute("click-to-edit-text", editor.getClickToEditText()); | |
visitAttribute("field-post-creation", editor.getFieldPostCreation()); | |
visitAttribute("form-class-name", editor.getFormClassName()); | |
visitAttribute("highlight-color", editor.getHighlightColor()); | |
visitAttribute("highlight-end-color", editor.getHighlightEndColor()); | |
visitAttribute("hover-class-name", editor.getHoverClassName()); | |
visitAttribute("html-response", editor.getHtmlResponse()); | |
visitAttribute("loading-class-name", editor.getLoadingClassName()); | |
visitAttribute("loading-text", editor.getLoadingText()); | |
visitAttribute("ok-control", editor.getOkControl()); | |
visitAttribute("ok-text", editor.getOkText()); | |
visitAttribute("param-name", editor.getParamName()); | |
visitAttribute("saving-class-name", editor.getSavingClassName()); | |
visitAttribute("saving-text", editor.getSavingText()); | |
visitAttribute("submit-on-blur", editor.getSubmitOnBlur()); | |
visitAttribute("text-before-controls", editor.getTextBeforeControls()); | |
visitAttribute("text-after-controls", editor.getTextAfterControls()); | |
visitAttribute("text-between-controls", editor.getTextBetweenControls()); | |
visitAttribute("update-after-request-call", editor.getUpdateAfterRequestCall()); | |
visitAttribute("url", editor.getUrl()); | |
if (!editor.getCols().isEmpty() || !editor.getRows().isEmpty()) { | |
writer.append(">"); | |
writer.append("<simple-editor"); | |
visitAttribute("cols", editor.getCols()); | |
visitAttribute("rows", editor.getRows()); | |
writer.append("/></in-place-editor>"); | |
} else { | |
writer.append("/>"); | |
} | |
} | |
} | |
private void visitUpdateAreas(Collection<ModelForm.UpdateArea> updateAreas) throws Exception { | |
for (ModelForm.UpdateArea updateArea : updateAreas) { | |
writer.append("<on-field-event-update-area"); | |
visitAttribute("event-type", updateArea.getEventType()); | |
visitAttribute("area-id", updateArea.getAreaId()); | |
visitAttribute("area-target", updateArea.getAreaTarget()); | |
writer.append(">"); | |
visitAutoEntityParameters(updateArea.getAutoEntityParameters()); | |
visitAutoServiceParameters(updateArea.getAutoServiceParameters()); | |
visitParameters(updateArea.getParameterList()); | |
writer.append("</on-field-event-update-area>"); | |
} | |
} | |
} |