| /******************************************************************************* |
| * 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.apache.ofbiz.widget.model; |
| |
| import java.util.Collection; |
| |
| import org.apache.ofbiz.widget.model.CommonWidgetModels.Link; |
| import org.apache.ofbiz.widget.model.ModelFormField.AutoComplete; |
| import org.apache.ofbiz.widget.model.ModelFormField.CheckField; |
| import org.apache.ofbiz.widget.model.ModelFormField.ContainerField; |
| import org.apache.ofbiz.widget.model.ModelFormField.DateFindField; |
| import org.apache.ofbiz.widget.model.ModelFormField.DateTimeField; |
| import org.apache.ofbiz.widget.model.ModelFormField.DisplayEntityField; |
| import org.apache.ofbiz.widget.model.ModelFormField.DisplayField; |
| import org.apache.ofbiz.widget.model.ModelFormField.DropDownField; |
| import org.apache.ofbiz.widget.model.ModelFormField.FieldInfoWithOptions; |
| import org.apache.ofbiz.widget.model.ModelFormField.FileField; |
| import org.apache.ofbiz.widget.model.ModelFormField.FormField; |
| import org.apache.ofbiz.widget.model.ModelFormField.GridField; |
| import org.apache.ofbiz.widget.model.ModelFormField.HiddenField; |
| import org.apache.ofbiz.widget.model.ModelFormField.HyperlinkField; |
| import org.apache.ofbiz.widget.model.ModelFormField.IgnoredField; |
| import org.apache.ofbiz.widget.model.ModelFormField.ImageField; |
| import org.apache.ofbiz.widget.model.ModelFormField.InPlaceEditor; |
| import org.apache.ofbiz.widget.model.ModelFormField.LookupField; |
| import org.apache.ofbiz.widget.model.ModelFormField.MenuField; |
| import org.apache.ofbiz.widget.model.ModelFormField.PasswordField; |
| import org.apache.ofbiz.widget.model.ModelFormField.RadioField; |
| import org.apache.ofbiz.widget.model.ModelFormField.RangeFindField; |
| import org.apache.ofbiz.widget.model.ModelFormField.ResetField; |
| import org.apache.ofbiz.widget.model.ModelFormField.ScreenField; |
| import org.apache.ofbiz.widget.model.ModelFormField.SubHyperlink; |
| import org.apache.ofbiz.widget.model.ModelFormField.SubmitField; |
| import org.apache.ofbiz.widget.model.ModelFormField.TextField; |
| import org.apache.ofbiz.widget.model.ModelFormField.TextFindField; |
| import org.apache.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(FormField formField) throws Exception { |
| visitModelField(formField.getModelFormField()); |
| writer.append("<include-form"); |
| visitAttribute("name", formField.getFormName()); |
| visitAttribute("location", formField.getFormLocation()); |
| writer.append("/>"); |
| } |
| |
| @Override |
| public void visit(GridField gridField) throws Exception { |
| visitModelField(gridField.getModelFormField()); |
| writer.append("<include-grid"); |
| visitAttribute("name", gridField.getGridName()); |
| visitAttribute("location", gridField.getGridLocation()); |
| writer.append("/>"); |
| } |
| |
| @Override |
| public void visit(MenuField menuField) throws Exception { |
| visitModelField(menuField.getModelFormField()); |
| writer.append("<include-menu"); |
| visitAttribute("name", menuField.getMenuName()); |
| visitAttribute("location", menuField.getMenuLocation()); |
| writer.append("/>"); |
| } |
| |
| @Override |
| public void visit(ScreenField screenField) throws Exception { |
| visitModelField(screenField.getModelFormField()); |
| writer.append("<include-screen"); |
| visitAttribute("name", screenField.getScreenName()); |
| visitAttribute("location", screenField.getScreenLocation()); |
| writer.append("/>"); |
| } |
| |
| @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 { |
| if (modelField != null) { |
| 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>"); |
| } |
| } |
| } |