blob: c56368cc8754c2902b292028156abfa63e50e64c [file] [log] [blame]
/*******************************************************************************
* 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>");
}
}
}