blob: be52bd77ad9237ecc932b5395f8bca54a61b96de [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.ArrayList;
import java.util.List;
import java.util.Map;
import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilValidate;
import org.ofbiz.base.util.UtilXml;
import org.ofbiz.base.util.collections.FlexibleMapAccessor;
import org.ofbiz.base.util.string.FlexibleStringExpander;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.model.ModelEntity;
import org.ofbiz.entity.model.ModelField;
import org.ofbiz.entity.model.ModelReader;
import org.ofbiz.service.DispatchContext;
import org.ofbiz.service.GenericServiceException;
import org.ofbiz.service.ModelParam;
import org.ofbiz.service.ModelService;
import org.ofbiz.widget.model.ModelForm.UpdateArea;
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.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.LookupField;
import org.ofbiz.widget.model.ModelFormField.OptionSource;
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.SubmitField;
import org.ofbiz.widget.model.ModelFormField.TextField;
import org.ofbiz.widget.model.ModelFormField.TextFindField;
import org.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 String widgetAreaStyle = "";
private String widgetStyle = "";
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.widgetAreaStyle = fieldElement.getAttribute("widget-area-style");
this.widgetStyle = fieldElement.getAttribute("widget-style");
Element childElement = null;
List<? extends Element> subElements = UtilXml.childElementList(fieldElement);
for (Element subElement : subElements) {
String subElementName = subElement.getTagName();
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 ("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();
}
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();
}
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 String getWidgetAreaStyle() {
return widgetAreaStyle;
}
public String getWidgetStyle() {
return widgetStyle;
}
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())) {
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())) {
ArrayList<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 (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());
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;
}
}