/******************************************************************************* * 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.ArrayList; import java.util.List; import java.util.Map; import org.apache.ofbiz.base.util.Debug; import org.apache.ofbiz.base.util.UtilValidate; import org.apache.ofbiz.base.util.UtilXml; import org.apache.ofbiz.base.util.collections.FlexibleMapAccessor; import org.apache.ofbiz.base.util.string.FlexibleStringExpander; import org.apache.ofbiz.entity.GenericEntityException; import org.apache.ofbiz.entity.model.ModelEntity; import org.apache.ofbiz.entity.model.ModelField; import org.apache.ofbiz.entity.model.ModelReader; import org.apache.ofbiz.service.DispatchContext; import org.apache.ofbiz.service.GenericServiceException; import org.apache.ofbiz.service.ModelParam; import org.apache.ofbiz.service.ModelService; import org.apache.ofbiz.widget.model.ModelForm.UpdateArea; 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.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.LookupField; import org.apache.ofbiz.widget.model.ModelFormField.MenuField; import org.apache.ofbiz.widget.model.ModelFormField.OptionSource; 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.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; import org.w3c.dom.Element; /** * A <code>ModelFormField</code> builder. */ public class ModelFormFieldBuilder { public static final String module = ModelFormFieldBuilder.class.getName(); private FlexibleStringExpander action = FlexibleStringExpander.getInstance(""); private String attributeName = ""; private boolean encodeOutput = true; private String entityName = ""; private FlexibleMapAccessor<Object> entryAcsr = null; private String event = ""; private FieldInfo fieldInfo = null; private String fieldName = ""; private String fieldType = null; private String headerLink = ""; private String headerLinkStyle = ""; private String idName = ""; private FlexibleMapAccessor<Map<String, ? extends Object>> mapAcsr = null; private ModelForm modelForm = null; private String name = ""; private List<UpdateArea> onChangeUpdateAreas = new ArrayList<UpdateArea>(); private List<UpdateArea> onClickUpdateAreas = new ArrayList<UpdateArea>(); private String parameterName = ""; private Integer position = null; private String redWhen = ""; private Boolean requiredField = null; private String requiredFieldStyle = ""; private boolean separateColumn = false; private String serviceName = ""; private Boolean sortField = null; private String sortFieldAscStyle = ""; private String sortFieldDescStyle = ""; private String sortFieldHelpText = ""; private String sortFieldStyle = ""; private FlexibleStringExpander title = FlexibleStringExpander.getInstance(""); private String titleAreaStyle = ""; private String titleStyle = ""; private FlexibleStringExpander tooltip = FlexibleStringExpander.getInstance(""); private String tooltipStyle = ""; private FlexibleStringExpander useWhen = FlexibleStringExpander.getInstance(""); private FlexibleStringExpander ignoreWhen = FlexibleStringExpander.getInstance(""); private String widgetAreaStyle = ""; private String widgetStyle = ""; private String parentFormName = ""; private String tabindex = ""; public ModelFormFieldBuilder() { } /** XML Constructor */ public ModelFormFieldBuilder(Element fieldElement, ModelForm modelForm, ModelReader entityModelReader, DispatchContext dispatchContext) { String name = fieldElement.getAttribute("name"); this.action = FlexibleStringExpander.getInstance(fieldElement.getAttribute("action")); this.attributeName = UtilXml.checkEmpty(fieldElement.getAttribute("attribute-name"), name); this.encodeOutput = !"false".equals(fieldElement.getAttribute("encode-output")); this.entityName = fieldElement.getAttribute("entity-name"); this.entryAcsr = FlexibleMapAccessor.getInstance(UtilXml.checkEmpty(fieldElement.getAttribute("entry-name"), name)); this.event = fieldElement.getAttribute("event"); this.fieldName = UtilXml.checkEmpty(fieldElement.getAttribute("field-name"), name); this.headerLink = fieldElement.getAttribute("header-link"); this.headerLinkStyle = fieldElement.getAttribute("header-link-style"); this.idName = fieldElement.getAttribute("id-name"); this.mapAcsr = FlexibleMapAccessor.getInstance(fieldElement.getAttribute("map-name")); this.modelForm = modelForm; this.name = name; this.parameterName = UtilXml.checkEmpty(fieldElement.getAttribute("parameter-name"), name); String positionAtttr = fieldElement.getAttribute("position"); Integer position = null; if (!positionAtttr.isEmpty()) { position = Integer.parseInt(positionAtttr); } this.position = position; this.redWhen = fieldElement.getAttribute("red-when"); String requiredField = fieldElement.getAttribute("required-field"); this.requiredField = requiredField.isEmpty() ? null : "true".equals(requiredField); this.requiredFieldStyle = fieldElement.getAttribute("required-field-style"); this.separateColumn = "true".equals(fieldElement.getAttribute("separate-column")); this.serviceName = fieldElement.getAttribute("service-name"); String sortField = fieldElement.getAttribute("sort-field"); this.sortField = sortField.isEmpty() ? null : "true".equals(sortField); this.sortFieldAscStyle = fieldElement.getAttribute("sort-field-asc-style"); this.sortFieldDescStyle = fieldElement.getAttribute("sort-field-desc-style"); this.sortFieldHelpText = fieldElement.getAttribute("sort-field-help-text"); this.sortFieldStyle = fieldElement.getAttribute("sort-field-style"); this.title = FlexibleStringExpander.getInstance(fieldElement.getAttribute("title")); this.titleAreaStyle = fieldElement.getAttribute("title-area-style"); this.titleStyle = fieldElement.getAttribute("title-style"); this.tooltip = FlexibleStringExpander.getInstance(fieldElement.getAttribute("tooltip")); this.tooltipStyle = fieldElement.getAttribute("tooltip-style"); this.useWhen = FlexibleStringExpander.getInstance(fieldElement.getAttribute("use-when")); this.ignoreWhen = FlexibleStringExpander.getInstance(fieldElement.getAttribute("ignore-when")); this.widgetAreaStyle = fieldElement.getAttribute("widget-area-style"); this.widgetStyle = fieldElement.getAttribute("widget-style"); this.parentFormName = fieldElement.getAttribute("form-name"); this.tabindex = fieldElement.getAttribute("tabindex"); Element childElement = null; List<? extends Element> subElements = UtilXml.childElementList(fieldElement); for (Element subElement : subElements) { String subElementName = UtilXml.getTagNameIgnorePrefix(subElement); if ("on-field-event-update-area".equals(subElementName)) { UpdateArea updateArea = new UpdateArea(subElement); if ("change".equals(updateArea.getEventType())) onChangeUpdateAreas.add(updateArea); else if ("click".equals(updateArea.getEventType())) onClickUpdateAreas.add(updateArea); } else { if (this.fieldType != null) { throw new IllegalArgumentException("Multiple field types found: " + this.fieldType + ", " + subElementName); } this.fieldType = subElementName; childElement = subElement; } } if (UtilValidate.isEmpty(this.fieldType)) { this.induceFieldInfo(modelForm, null, entityModelReader, dispatchContext); } else if ("display".equals(this.fieldType)) this.fieldInfo = new DisplayField(childElement, null); else if ("display-entity".equals(this.fieldType)) this.fieldInfo = new DisplayEntityField(childElement, null); else if ("hyperlink".equals(this.fieldType)) this.fieldInfo = new HyperlinkField(childElement, null); else if ("text".equals(this.fieldType)) this.fieldInfo = new TextField(childElement, null); else if ("textarea".equals(this.fieldType)) this.fieldInfo = new TextareaField(childElement, null); else if ("date-time".equals(this.fieldType)) this.fieldInfo = new DateTimeField(childElement, null); else if ("drop-down".equals(this.fieldType)) this.fieldInfo = new DropDownField(childElement, null); else if ("check".equals(this.fieldType)) this.fieldInfo = new CheckField(childElement, null); else if ("radio".equals(this.fieldType)) this.fieldInfo = new RadioField(childElement, null); else if ("submit".equals(this.fieldType)) this.fieldInfo = new SubmitField(childElement, null); else if ("reset".equals(this.fieldType)) this.fieldInfo = new ResetField(childElement, null); else if ("hidden".equals(this.fieldType)) this.fieldInfo = new HiddenField(childElement, null); else if ("ignored".equals(this.fieldType)) this.fieldInfo = new IgnoredField(childElement, null); else if ("text-find".equals(this.fieldType)) this.fieldInfo = new TextFindField(childElement, null); else if ("date-find".equals(this.fieldType)) this.fieldInfo = new DateFindField(childElement, null); else if ("range-find".equals(this.fieldType)) this.fieldInfo = new RangeFindField(childElement, null); else if ("lookup".equals(this.fieldType)) this.fieldInfo = new LookupField(childElement, null); else if ("include-menu".equals(this.fieldType)) this.fieldInfo = new MenuField(childElement, null); else if ("include-form".equals(this.fieldType)) this.fieldInfo = new FormField(childElement, null); else if ("include-grid".equals(this.fieldType)) this.fieldInfo = new GridField(childElement, null); else if ("include-screen".equals(this.fieldType)) this.fieldInfo = new ScreenField(childElement, null); else if ("file".equals(this.fieldType)) this.fieldInfo = new FileField(childElement, null); else if ("password".equals(this.fieldType)) this.fieldInfo = new PasswordField(childElement, null); else if ("image".equals(this.fieldType)) this.fieldInfo = new ImageField(childElement, null); else if ("container".equals(this.fieldType)) this.fieldInfo = new ContainerField(childElement, null); else throw new IllegalArgumentException("The field sub-element with name " + this.fieldType + " is not supported"); } public ModelFormFieldBuilder(ModelFormField modelFormField) { this.action = modelFormField.getAction(); this.attributeName = modelFormField.getAttributeName(); this.encodeOutput = modelFormField.getEncodeOutput(); this.entityName = modelFormField.getEntityName(); this.entryAcsr = modelFormField.getEntryAcsr(); this.event = modelFormField.getEvent(); this.fieldInfo = modelFormField.getFieldInfo(); this.fieldName = modelFormField.getFieldName(); this.headerLink = modelFormField.getHeaderLink(); this.headerLinkStyle = modelFormField.getHeaderLinkStyle(); this.idName = modelFormField.getIdName(); this.mapAcsr = modelFormField.getMapAcsr(); this.modelForm = modelFormField.getModelForm(); this.name = modelFormField.getName(); this.onChangeUpdateAreas.addAll(modelFormField.getOnChangeUpdateAreas()); this.onClickUpdateAreas.addAll(modelFormField.getOnClickUpdateAreas()); this.parameterName = modelFormField.getParameterName(); this.position = modelFormField.getPosition(); this.redWhen = modelFormField.getRedWhen(); this.requiredField = modelFormField.getRequiredField(); this.requiredFieldStyle = modelFormField.getRequiredFieldStyle(); this.separateColumn = modelFormField.getSeparateColumn(); this.serviceName = modelFormField.getServiceName(); this.sortField = modelFormField.getSortField(); this.sortFieldAscStyle = modelFormField.getSortFieldAscStyle(); this.sortFieldDescStyle = modelFormField.getSortFieldDescStyle(); this.sortFieldHelpText = modelFormField.getSortFieldHelpText(); this.sortFieldStyle = modelFormField.getSortFieldStyle(); this.title = modelFormField.getTitle(); this.titleAreaStyle = modelFormField.getTitleAreaStyle(); this.titleStyle = modelFormField.getTitleStyle(); this.tooltip = modelFormField.getTooltip(); this.tooltipStyle = modelFormField.getTooltipStyle(); this.useWhen = modelFormField.getUseWhen(); this.widgetAreaStyle = modelFormField.getWidgetAreaStyle(); this.widgetStyle = modelFormField.getWidgetStyle(); this.parentFormName = modelFormField.getParentFormName(); this.tabindex = modelFormField.getTabindex(); } public ModelFormFieldBuilder(ModelFormFieldBuilder builder) { this.action = builder.getAction(); this.attributeName = builder.getAttributeName(); this.encodeOutput = builder.getEncodeOutput(); this.entityName = builder.getEntityName(); this.entryAcsr = builder.getEntryAcsr(); this.event = builder.getEvent(); this.fieldInfo = builder.getFieldInfo(); this.fieldName = builder.getFieldName(); this.headerLink = builder.getHeaderLink(); this.headerLinkStyle = builder.getHeaderLinkStyle(); this.idName = builder.getIdName(); this.mapAcsr = builder.getMapAcsr(); this.modelForm = builder.getModelForm(); this.name = builder.getName(); this.onChangeUpdateAreas.addAll(builder.getOnChangeUpdateAreas()); this.onClickUpdateAreas.addAll(builder.getOnClickUpdateAreas()); this.parameterName = builder.getParameterName(); this.position = builder.getPosition(); this.redWhen = builder.getRedWhen(); this.requiredField = builder.getRequiredField(); this.requiredFieldStyle = builder.getRequiredFieldStyle(); this.separateColumn = builder.getSeparateColumn(); this.serviceName = builder.getServiceName(); this.sortField = builder.getSortField(); this.sortFieldAscStyle = builder.getSortFieldAscStyle(); this.sortFieldDescStyle = builder.getSortFieldDescStyle(); this.sortFieldHelpText = builder.getSortFieldHelpText(); this.sortFieldStyle = builder.getSortFieldStyle(); this.title = builder.getTitle(); this.titleAreaStyle = builder.getTitleAreaStyle(); this.titleStyle = builder.getTitleStyle(); this.tooltip = builder.getTooltip(); this.tooltipStyle = builder.getTooltipStyle(); this.useWhen = builder.getUseWhen(); this.widgetAreaStyle = builder.getWidgetAreaStyle(); this.widgetStyle = builder.getWidgetStyle(); this.parentFormName = builder.getParentFormName(); this.tabindex = builder.getTabindex(); } public ModelFormFieldBuilder addOnChangeUpdateArea(UpdateArea onChangeUpdateArea) { this.onChangeUpdateAreas.add(onChangeUpdateArea); return this; } public ModelFormFieldBuilder addOnClickUpdateArea(UpdateArea onClickUpdateArea) { this.onClickUpdateAreas.add(onClickUpdateArea); return this; } public ModelFormField build() { return ModelFormField.from(this); } public FlexibleStringExpander getAction() { return action; } public String getAttributeName() { return attributeName; } public boolean getEncodeOutput() { return encodeOutput; } public String getEntityName() { return entityName; } public FlexibleMapAccessor<Object> getEntryAcsr() { return entryAcsr; } public String getEvent() { return event; } public FieldInfo getFieldInfo() { return fieldInfo; } public String getFieldName() { return fieldName; } public String getFieldType() { return fieldType; } public String getHeaderLink() { return headerLink; } public String getHeaderLinkStyle() { return headerLinkStyle; } public String getIdName() { return idName; } public FlexibleMapAccessor<Map<String, ? extends Object>> getMapAcsr() { return mapAcsr; } public ModelForm getModelForm() { return modelForm; } public String getName() { return name; } public List<UpdateArea> getOnChangeUpdateAreas() { return onChangeUpdateAreas; } public List<UpdateArea> getOnClickUpdateAreas() { return onClickUpdateAreas; } public String getParameterName() { return parameterName; } public Integer getPosition() { return position; } public String getRedWhen() { return redWhen; } public Boolean getRequiredField() { return requiredField; } public String getRequiredFieldStyle() { return requiredFieldStyle; } public boolean getSeparateColumn() { return separateColumn; } public String getServiceName() { return serviceName; } public Boolean getSortField() { return sortField; } public String getSortFieldAscStyle() { return sortFieldAscStyle; } public String getSortFieldDescStyle() { return sortFieldDescStyle; } public String getSortFieldHelpText() { return sortFieldHelpText; } public String getSortFieldStyle() { return sortFieldStyle; } public FlexibleStringExpander getTitle() { return title; } public String getTitleAreaStyle() { return titleAreaStyle; } public String getTitleStyle() { return titleStyle; } public FlexibleStringExpander getTooltip() { return tooltip; } public String getTooltipStyle() { return tooltipStyle; } public FlexibleStringExpander getUseWhen() { return useWhen; } public FlexibleStringExpander getIgnoreWhen() { return ignoreWhen; } public String getWidgetAreaStyle() { return widgetAreaStyle; } public String getWidgetStyle() { return widgetStyle; } public String getParentFormName() { return parentFormName; } public String getTabindex() { return tabindex; } private boolean induceFieldInfo(ModelForm modelForm, String defaultFieldType, ModelReader entityModelReader, DispatchContext dispatchContext) { if (induceFieldInfoFromEntityField(defaultFieldType, entityModelReader)) return true; if (induceFieldInfoFromServiceParam(defaultFieldType, entityModelReader, dispatchContext)) return true; return false; } public boolean induceFieldInfoFromEntityField(ModelEntity modelEntity, ModelField modelField, String defaultFieldType) { if (modelEntity == null || modelField == null) return false; this.entityName = modelEntity.getEntityName(); this.fieldName = modelField.getName(); if ("find".equals(defaultFieldType)) { if ("id".equals(modelField.getType()) || "id-ne".equals(modelField.getType())) { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 20, Integer.valueOf(20), null); this.setFieldInfo(textField); } else if ("id-long".equals(modelField.getType()) || "id-long-ne".equals(modelField.getType())) { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 40, Integer.valueOf(60), null); this.setFieldInfo(textField); } else if ("id-vlong".equals(modelField.getType()) || "id-vlong-ne".equals(modelField.getType())) { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 60, Integer.valueOf(250), null); this.setFieldInfo(textField); } else if ("very-short".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, Integer.valueOf(10), null); this.setFieldInfo(textField); } else if ("name".equals(modelField.getType()) || "short-varchar".equals(modelField.getType())) { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 40, Integer.valueOf(60), null); this.setFieldInfo(textField); } else if ("value".equals(modelField.getType()) || "comment".equals(modelField.getType()) || "description".equals(modelField.getType()) || "long-varchar".equals(modelField.getType()) || "url".equals(modelField.getType()) || "email".equals(modelField.getType())) { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, 60, Integer.valueOf(250), null); this.setFieldInfo(textField); } else if ("floating-point".equals(modelField.getType()) || "currency-amount".equals(modelField.getType()) || "numeric".equals(modelField.getType()) || "fixed-point".equals(modelField.getType()) || "currency-precise".equals(modelField.getType())) { ModelFormField.RangeFindField textField = new ModelFormField.RangeFindField(FieldInfo.SOURCE_AUTO_ENTITY, 6, null); this.setFieldInfo(textField); } else if ("date-time".equals(modelField.getType()) || "date".equals(modelField.getType()) || "time".equals(modelField.getType())) { String type = modelField.getType(); if ("date-time".equals(modelField.getType())) { type = "timestamp"; } ModelFormField.DateFindField dateTimeField = new ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_ENTITY, type); this.setFieldInfo(dateTimeField); } else { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_ENTITY, null); this.setFieldInfo(textField); } } else if ("display".equals(defaultFieldType)) { ModelFormField.DisplayField displayField = new ModelFormField.DisplayField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(displayField); } else if ("hidden".equals(defaultFieldType)) { ModelFormField.HiddenField hiddenField = new ModelFormField.HiddenField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(hiddenField); } else { if ("id".equals(modelField.getType()) || "id-ne".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 20, Integer.valueOf(20), null); this.setFieldInfo(textField); } else if ("id-long".equals(modelField.getType()) || "id-long-ne".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 40, Integer.valueOf(60), null); this.setFieldInfo(textField); } else if ("id-vlong".equals(modelField.getType()) || "id-vlong-ne".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 60, Integer.valueOf(250), null); this.setFieldInfo(textField); } else if ("indicator".equals(modelField.getType())) { List<OptionSource> optionSources = new ArrayList<OptionSource>(); optionSources.add(new ModelFormField.SingleOption("Y", null, null)); optionSources.add(new ModelFormField.SingleOption("N", null, null)); ModelFormField.DropDownField dropDownField = new ModelFormField.DropDownField(FieldInfo.SOURCE_AUTO_ENTITY, optionSources); this.setFieldInfo(dropDownField); } else if ("very-short".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, Integer.valueOf(10), null); this.setFieldInfo(textField); } else if ("very-long".equals(modelField.getType())) { ModelFormField.TextareaField textareaField = new ModelFormField.TextareaField(FieldInfo.SOURCE_AUTO_ENTITY, null); this.setFieldInfo(textareaField); } else if ("name".equals(modelField.getType()) || "short-varchar".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 40, Integer.valueOf(60), null); this.setFieldInfo(textField); } else if ("value".equals(modelField.getType()) || "comment".equals(modelField.getType()) || "description".equals(modelField.getType()) || "long-varchar".equals(modelField.getType()) || "url".equals(modelField.getType()) || "email".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 60, Integer.valueOf(250), null); this.setFieldInfo(textField); } else if ("floating-point".equals(modelField.getType()) || "currency-amount".equals(modelField.getType()) || "numeric".equals(modelField.getType())) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, 6, null, null); this.setFieldInfo(textField); } else if ("date-time".equals(modelField.getType()) || "date".equals(modelField.getType()) || "time".equals(modelField.getType())) { String type = modelField.getType(); if ("date-time".equals(modelField.getType())) { type = "timestamp"; } ModelFormField.DateTimeField dateTimeField = new ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_ENTITY, type); this.setFieldInfo(dateTimeField); } else { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_ENTITY, null); this.setFieldInfo(textField); } } return true; } private boolean induceFieldInfoFromEntityField(String defaultFieldType, ModelReader entityModelReader) { if (UtilValidate.isEmpty(this.getEntityName()) || UtilValidate.isEmpty(this.getFieldName())) return false; try { ModelEntity modelEntity = entityModelReader.getModelEntity(this.getEntityName()); if (modelEntity != null) { ModelField modelField = modelEntity.getField(this.getFieldName()); if (modelField != null) { // okay, populate using the entity field info... this.induceFieldInfoFromEntityField(modelEntity, modelField, defaultFieldType); return true; } } } catch (GenericEntityException e) { Debug.logError(e, module); } return false; } public boolean induceFieldInfoFromServiceParam(ModelService modelService, ModelParam modelParam, String defaultFieldType) { if (modelService == null || modelParam == null) return false; this.serviceName = modelService.name; this.attributeName = modelParam.name; if ("find".equals(defaultFieldType)) { if (modelParam.type.indexOf("Double") != -1 || modelParam.type.indexOf("Float") != -1 || modelParam.type.indexOf("Long") != -1 || modelParam.type.indexOf("Integer") != -1) { ModelFormField.RangeFindField textField = new ModelFormField.RangeFindField(FieldInfo.SOURCE_AUTO_SERVICE, 6, null); this.setFieldInfo(textField); } else if (modelParam.type.indexOf("Timestamp") != -1) { ModelFormField.DateFindField dateTimeField = new ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "timestamp"); this.setFieldInfo(dateTimeField); } else if (modelParam.type.indexOf("Date") != -1) { ModelFormField.DateFindField dateTimeField = new ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "date"); this.setFieldInfo(dateTimeField); } else if (modelParam.type.indexOf("Time") != -1) { ModelFormField.DateFindField dateTimeField = new ModelFormField.DateFindField(FieldInfo.SOURCE_AUTO_SERVICE, "time"); this.setFieldInfo(dateTimeField); } else { ModelFormField.TextFindField textField = new ModelFormField.TextFindField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(textField); } } else if ("display".equals(defaultFieldType)) { ModelFormField.DisplayField displayField = new ModelFormField.DisplayField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(displayField); } else { // default to "edit" if (modelParam.type.indexOf("Double") != -1 || modelParam.type.indexOf("Float") != -1 || modelParam.type.indexOf("Long") != -1 || modelParam.type.indexOf("Integer") != -1) { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, 6, null, null); this.setFieldInfo(textField); } else if (modelParam.type.indexOf("Timestamp") != -1) { ModelFormField.DateTimeField dateTimeField = new ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "timestamp"); this.setFieldInfo(dateTimeField); } else if (modelParam.type.indexOf("Date") != -1) { ModelFormField.DateTimeField dateTimeField = new ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "date"); this.setFieldInfo(dateTimeField); } else if (modelParam.type.indexOf("Time") != -1) { ModelFormField.DateTimeField dateTimeField = new ModelFormField.DateTimeField(FieldInfo.SOURCE_AUTO_SERVICE, "time"); this.setFieldInfo(dateTimeField); } else { ModelFormField.TextField textField = new ModelFormField.TextField(FieldInfo.SOURCE_AUTO_SERVICE, null); this.setFieldInfo(textField); } } return true; } private boolean induceFieldInfoFromServiceParam(String defaultFieldType, ModelReader entityModelReader, DispatchContext dispatchContext) { if (UtilValidate.isEmpty(this.getServiceName()) || UtilValidate.isEmpty(this.getAttributeName())) return false; try { ModelService modelService = dispatchContext.getModelService(this.getServiceName()); if (modelService != null) { ModelParam modelParam = modelService.getParam(this.getAttributeName()); if (modelParam != null) { if (UtilValidate.isNotEmpty(modelParam.entityName) && UtilValidate.isNotEmpty(modelParam.fieldName)) { this.entityName = modelParam.entityName; this.fieldName = modelParam.fieldName; if (this.induceFieldInfoFromEntityField(defaultFieldType, entityModelReader)) { return true; } } this.induceFieldInfoFromServiceParam(modelService, modelParam, defaultFieldType); return true; } } } catch (GenericServiceException e) { Debug.logError(e, "error getting service parameter definition for auto-field with serviceName: " + this.getServiceName() + ", and attributeName: " + this.getAttributeName(), module); } return false; } public void mergeOverrideModelFormField(ModelFormFieldBuilder builder) { if (builder == null) return; if (UtilValidate.isNotEmpty(builder.getName())) this.name = builder.getName(); if (UtilValidate.isNotEmpty(builder.getMapAcsr())) this.mapAcsr = builder.getMapAcsr(); if (UtilValidate.isNotEmpty(builder.getEntityName())) this.entityName = builder.getEntityName(); if (UtilValidate.isNotEmpty(builder.getServiceName())) this.serviceName = builder.getServiceName(); if (UtilValidate.isNotEmpty(builder.getEntryAcsr())) this.entryAcsr = builder.getEntryAcsr(); if (UtilValidate.isNotEmpty(builder.getParameterName())) this.parameterName = builder.getParameterName(); if (UtilValidate.isNotEmpty(builder.getFieldName())) this.fieldName = builder.getFieldName(); if (!builder.getAttributeName().isEmpty()) this.attributeName = builder.getAttributeName(); if (UtilValidate.isNotEmpty(builder.getTitle())) this.title = builder.getTitle(); if (UtilValidate.isNotEmpty(builder.getTooltip())) this.tooltip = builder.getTooltip(); if (builder.getSortField() != null) this.sortField = builder.getSortField(); if (UtilValidate.isNotEmpty(builder.getSortFieldHelpText())) this.sortFieldHelpText = builder.getSortFieldHelpText(); if (UtilValidate.isNotEmpty(builder.getTitleAreaStyle())) this.titleAreaStyle = builder.getTitleAreaStyle(); if (UtilValidate.isNotEmpty(builder.getWidgetAreaStyle())) this.widgetAreaStyle = builder.getWidgetAreaStyle(); if (UtilValidate.isNotEmpty(builder.getTitleStyle())) this.titleStyle = builder.getTitleStyle(); if (UtilValidate.isNotEmpty(builder.getWidgetStyle())) this.widgetStyle = builder.getWidgetStyle(); if (UtilValidate.isNotEmpty(builder.getRedWhen())) this.redWhen = builder.getRedWhen(); if (UtilValidate.isNotEmpty(builder.getEvent())) this.event = builder.getEvent(); if (!builder.getAction().isEmpty()) this.action = builder.getAction(); if (UtilValidate.isNotEmpty(builder.getUseWhen())) this.useWhen = builder.getUseWhen(); if (UtilValidate.isNotEmpty(builder.getIgnoreWhen())) this.ignoreWhen = builder.getIgnoreWhen(); if (builder.getFieldInfo() != null) this.setFieldInfo(builder.getFieldInfo()); if (UtilValidate.isNotEmpty(builder.getHeaderLink())) this.headerLink = builder.getHeaderLink(); if (UtilValidate.isNotEmpty(builder.getHeaderLinkStyle())) this.headerLinkStyle = builder.getHeaderLinkStyle(); if (UtilValidate.isNotEmpty(builder.getIdName())) this.idName = builder.getIdName(); if (UtilValidate.isNotEmpty(builder.getOnChangeUpdateAreas())) this.onChangeUpdateAreas.addAll(builder.getOnChangeUpdateAreas()); if (UtilValidate.isNotEmpty(builder.getOnClickUpdateAreas())) this.onClickUpdateAreas.addAll(builder.getOnClickUpdateAreas()); if (UtilValidate.isNotEmpty(builder.getParentFormName())) this.parentFormName = builder.getParentFormName(); if (UtilValidate.isNotEmpty(builder.getTabindex())) this.tabindex = builder.getTabindex(); this.encodeOutput = builder.getEncodeOutput(); this.position = builder.getPosition(); this.requiredField = builder.getRequiredField(); this.separateColumn = builder.getSeparateColumn(); } public ModelFormFieldBuilder setAction(String action) { this.action = FlexibleStringExpander.getInstance(action); return this; } public ModelFormFieldBuilder setAttributeName(String attributeName) { this.attributeName = attributeName; return this; } public ModelFormFieldBuilder setEncodeOutput(boolean encodeOutput) { this.encodeOutput = encodeOutput; return this; } public ModelFormFieldBuilder setEntityName(String entityName) { this.entityName = entityName; return this; } public ModelFormFieldBuilder setEntryName(String entryName) { this.entryAcsr = FlexibleMapAccessor.getInstance(entryName); return this; } public ModelFormFieldBuilder setEvent(String event) { this.event = event; return this; } public ModelFormFieldBuilder setFieldInfo(FieldInfo fieldInfo) { if (fieldInfo != null && (this.fieldInfo == null || (fieldInfo.getFieldSource() <= this.fieldInfo.getFieldSource()))) { this.fieldInfo = fieldInfo; } return this; } public ModelFormFieldBuilder setFieldName(String fieldName) { this.fieldName = fieldName; return this; } public ModelFormFieldBuilder setFieldType(String fieldType) { this.fieldType = fieldType; return this; } public ModelFormFieldBuilder setHeaderLink(String headerLink) { this.headerLink = headerLink; return this; } public ModelFormFieldBuilder setHeaderLinkStyle(String headerLinkStyle) { this.headerLinkStyle = headerLinkStyle; return this; } public ModelFormFieldBuilder setIdName(String idName) { this.idName = idName; return this; } public ModelFormFieldBuilder setMapName(String mapName) { this.mapAcsr = FlexibleMapAccessor.getInstance(mapName); return this; } public ModelFormFieldBuilder setModelForm(ModelForm modelForm) { this.modelForm = modelForm; return this; } public ModelFormFieldBuilder setName(String name) { this.name = name; return this; } public ModelFormFieldBuilder setParameterName(String parameterName) { this.parameterName = parameterName; return this; } public ModelFormFieldBuilder setPosition(Integer position) { this.position = position; return this; } public ModelFormFieldBuilder setRedWhen(String redWhen) { this.redWhen = redWhen; return this; } public ModelFormFieldBuilder setRequiredField(Boolean requiredField) { this.requiredField = requiredField; return this; } public ModelFormFieldBuilder setRequiredFieldStyle(String requiredFieldStyle) { this.requiredFieldStyle = requiredFieldStyle; return this; } public ModelFormFieldBuilder setSeparateColumn(boolean separateColumn) { this.separateColumn = separateColumn; return this; } public ModelFormFieldBuilder setServiceName(String serviceName) { this.serviceName = serviceName; return this; } public ModelFormFieldBuilder setSortField(Boolean sortField) { this.sortField = sortField; return this; } public ModelFormFieldBuilder setSortFieldAscStyle(String sortFieldAscStyle) { this.sortFieldAscStyle = sortFieldAscStyle; return this; } public ModelFormFieldBuilder setSortFieldDescStyle(String sortFieldDescStyle) { this.sortFieldDescStyle = sortFieldDescStyle; return this; } public ModelFormFieldBuilder setSortFieldHelpText(String sortFieldHelpText) { this.sortFieldHelpText = sortFieldHelpText; return this; } public ModelFormFieldBuilder setSortFieldStyle(String sortFieldStyle) { this.sortFieldStyle = sortFieldStyle; return this; } public ModelFormFieldBuilder setTitle(String title) { this.title = FlexibleStringExpander.getInstance(title); return this; } public ModelFormFieldBuilder setTitleAreaStyle(String titleAreaStyle) { this.titleAreaStyle = titleAreaStyle; return this; } public ModelFormFieldBuilder setTitleStyle(String titleStyle) { this.titleStyle = titleStyle; return this; } public ModelFormFieldBuilder setTooltip(String tooltip) { this.tooltip = FlexibleStringExpander.getInstance(tooltip); return this; } public ModelFormFieldBuilder setTooltipStyle(String tooltipStyle) { this.tooltipStyle = tooltipStyle; return this; } public ModelFormFieldBuilder setUseWhen(String useWhen) { this.useWhen = FlexibleStringExpander.getInstance(useWhen); return this; } public ModelFormFieldBuilder setWidgetAreaStyle(String widgetAreaStyle) { this.widgetAreaStyle = widgetAreaStyle; return this; } public ModelFormFieldBuilder setWidgetStyle(String widgetStyle) { this.widgetStyle = widgetStyle; return this; } public ModelFormFieldBuilder setParentFormName(String parentFormName) { this.parentFormName = parentFormName; return this; } public ModelFormFieldBuilder setTabindex(String tabindex) { this.tabindex = tabindex; return this; } }