Author: adrianc
Date: Fri Dec 26 06:47:13 2014
New Revision: 1647936
URL: http://svn.apache.org/r1647936
Log:
Rewrite ModelFormField.java and related classes. Most of this is thread-safe
now. Implemented a builder design because the original ModelForm design makes
several passes over the fields - modifying them incrementally. Now ModelForm
modifies builders instead, then when the parsing process is complete, the
builders create the thread-safe field models.
Added:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormFieldBuilder.java
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelFormField.java
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=1647936&r1=1647935&r2=1647936&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java Fri Dec
26 06:47:13 2014
@@ -330,6 +330,11 @@ public class WidgetWorker {
}
}
+ /**
+ * Models the <parameter> element.
+ *
+ * @see <code>widget-form.xsd</code>
+ */
public static class Parameter {
protected String name;
protected FlexibleStringExpander value;
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java?rev=1647936&r1=1647935&r2=1647936&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/FormRenderer.java
Fri Dec 26 06:47:13 2014
@@ -206,10 +206,6 @@ public class FormRenderer {
* itemIndex (Integer, for lists only, otherwise null), bshInterpreter,
* formName (String, optional alternate name for form, defaults to the
* value of the name attribute)
- * @param formStringRenderer An implementation of the FormStringRenderer
- * interface that is responsible for the actual text generation for
- * different form elements; implementing your own makes it possible to
- * use the same form definitions for many types of form UIs
*/
public void render(Appendable writer, Map<String, Object> context)
throws Exception {
@@ -237,13 +233,7 @@ public class FormRenderer {
positions = curPos;
}
FieldInfo currentFieldInfo = modelFormField.getFieldInfo();
- if (currentFieldInfo != null) {
- ModelFormField fieldInfoFormField =
currentFieldInfo.getModelFormField();
- if (fieldInfoFormField != null) {
- // FIXME
- //fieldInfoFormField.setModelForm(this);
- }
- } else {
+ if (currentFieldInfo == null) {
throw new IllegalArgumentException(
"Error rendering form, a field has no FieldInfo, ie no
sub-element for the type of field for field named: "
+ modelFormField.getName());
Modified:
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java?rev=1647936&r1=1647935&r2=1647936&view=diff
==============================================================================
---
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
(original)
+++
ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/MacroFormRenderer.java
Fri Dec 26 06:47:13 2014
@@ -75,6 +75,7 @@ import org.ofbiz.widget.form.ModelFormFi
import org.ofbiz.widget.form.ModelFormField.TextField;
import org.ofbiz.widget.form.ModelFormField.TextFindField;
import org.ofbiz.widget.form.ModelFormField.TextareaField;
+import org.ofbiz.widget.form.ModelFormFieldBuilder;
import org.ofbiz.widget.screen.ModelScreenWidget;
import com.ibm.icu.util.Calendar;
@@ -355,7 +356,7 @@ public final class MacroFormRenderer imp
mask = textField.getMask();
}
String ajaxUrl = createAjaxParamsFromUpdateAreas(updateAreas, "",
context);
- boolean disabled = textField.disabled;
+ boolean disabled = textField.getDisabled();
StringWriter sr = new StringWriter();
sr.append("<@renderTextField ");
sr.append("name=\"");
@@ -541,17 +542,21 @@ public final class MacroFormRenderer imp
localizedInputTitle = uiLabelMap.get("CommonFormatDateTime");
}
}
- String contextValue = null;
- // If time-dropdown deactivate encodingOutput for found hour and
minutes
+ /*
+ * FIXME: Using a builder here is a hack. Replace the builder with
appropriate code.
+ */
+ ModelFormFieldBuilder builder = new
ModelFormFieldBuilder(modelFormField);
boolean memEncodeOutput = modelFormField.getEncodeOutput();
if (useTimeDropDown)
- // FIXME: This is not thread-safe! Never modify a model's state!
- modelFormField.setEncodeOutput(false);
+ // If time-dropdown deactivate encodingOutput for found hour and
minutes
+ // FIXME: Encoding should be controlled by the renderer, not by
the model.
+ builder.setEncodeOutput(false);
// FIXME: modelFormField.getEntry ignores shortDateInput when
converting Date objects to Strings.
- // Object type conversion should be done by the renderer, not by the
model.
- contextValue = modelFormField.getEntry(context,
dateTimeField.getDefaultValue(context));
- if (useTimeDropDown)
- modelFormField.setEncodeOutput(memEncodeOutput);
+ if (useTimeDropDown) {
+ builder.setEncodeOutput(memEncodeOutput);
+ }
+ modelFormField = builder.build();
+ String contextValue = modelFormField.getEntry(context,
dateTimeField.getDefaultValue(context));
String value = contextValue;
if (UtilValidate.isNotEmpty(value)) {
if (value.length() > maxlength) {
@@ -2024,7 +2029,7 @@ public final class MacroFormRenderer imp
}
String event = modelFormField.getEvent();
String action = modelFormField.getAction(context);
- boolean readonly = lookupField.readonly;
+ boolean readonly = lookupField.getReadonly();
// add lookup pop-up button
String descriptionFieldName = lookupField.getDescriptionFieldName();
ModelForm modelForm = modelFormField.getModelForm();
@@ -2937,9 +2942,9 @@ public final class MacroFormRenderer imp
String encodedDescription = encode(description, modelFormField,
context);
// get the parameterized pagination index and size fields
int paginatorNumber = WidgetWorker.getPaginatorNumber(context);
- String viewIndexField =
modelFormField.modelForm.getMultiPaginateIndexField(context);
- String viewSizeField =
modelFormField.modelForm.getMultiPaginateSizeField(context);
- ModelForm modelForm = modelFormField.modelForm;
+ ModelForm modelForm = modelFormField.getModelForm();
+ String viewIndexField = modelForm.getMultiPaginateIndexField(context);
+ String viewSizeField = modelForm.getMultiPaginateSizeField(context);
int viewIndex = Paginator.getViewIndex(modelForm, context);
int viewSize = Paginator.getViewSize(modelForm, context);
if (viewIndexField.equals("viewIndex" + "_" + paginatorNumber)) {
@@ -2951,7 +2956,7 @@ public final class MacroFormRenderer imp
if ("hidden-form".equals(realLinkType)) {
parameterMap.put(viewIndexField, Integer.toString(viewIndex));
parameterMap.put(viewSizeField, Integer.toString(viewSize));
- if (modelFormField != null &&
"multi".equals(modelFormField.getModelForm().getType())) {
+ if (modelFormField != null && "multi".equals(modelForm.getType()))
{
WidgetWorker.makeHiddenFormLinkAnchor(writer, linkStyle,
encodedDescription, confirmation, modelFormField, request, response, context);
// this is a bit trickier, since we can't do a nested form
we'll have to put the link to submit the form in place, but put the actual form
def elsewhere, ie after the big form is closed
Map<String, Object> wholeFormContext =
UtilGenerics.checkMap(context.get("wholeFormContext"));
Modified: ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java?rev=1647936&r1=1647935&r2=1647936&view=diff
==============================================================================
--- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java
(original)
+++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/form/ModelForm.java Fri
Dec 26 06:47:13 2014
@@ -560,15 +560,15 @@ public class ModelForm extends ModelWidg
if (parentModelForm != null) {
useWhenFields.addAll(parentModelForm.useWhenFields);
}
- ArrayList<ModelFormField> fieldList = new ArrayList<ModelFormField>();
- Map<String, ModelFormField> fieldMap = new HashMap<String,
ModelFormField>();
+ ArrayList<ModelFormFieldBuilder> fieldBuilderList = new
ArrayList<ModelFormFieldBuilder>();
+ Map<String, ModelFormFieldBuilder> fieldBuilderMap = new
HashMap<String, ModelFormFieldBuilder>();
if (parentModelForm != null) {
// Create this fieldList/Map from clones of parentModelForm's
for (ModelFormField parentChildField : parentModelForm.fieldList) {
- ModelFormField childField = new ModelFormField(this);
- childField.mergeOverrideModelFormField(parentChildField);
- fieldList.add(childField);
- fieldMap.put(childField.getName(), childField);
+ ModelFormFieldBuilder builder = new
ModelFormFieldBuilder(parentChildField);
+ builder.setModelForm(this);
+ fieldBuilderList.add(builder);
+ fieldBuilderMap.put(builder.getName(), builder);
}
}
Map<String, FieldGroupBase> fieldGroupMap = new HashMap<String,
FieldGroupBase>();
@@ -731,7 +731,7 @@ public class ModelForm extends ModelWidg
rowCountExdr = parentModelForm.rowCountExdr;
}
this.rowCountExdr = paginate;
- ArrayList<ModelFormField> multiSubmitFields = new
ArrayList<ModelFormField>();
+ ArrayList<ModelFormFieldBuilder> multiSubmitBuilders = new
ArrayList<ModelFormFieldBuilder>();
ArrayList<AutoFieldsService> autoFieldsServices = new
ArrayList<AutoFieldsService>();
ArrayList<AutoFieldsEntity> autoFieldsEntities = new
ArrayList<AutoFieldsEntity>();
ArrayList<SortField> sortOrderFields = new ArrayList<SortField>();
@@ -739,21 +739,21 @@ public class ModelForm extends ModelWidg
for (Element autoFieldsServiceElement :
UtilXml.childElementList(formElement, "auto-fields-service")) {
AutoFieldsService autoFieldsService = new
AutoFieldsService(autoFieldsServiceElement);
autoFieldsServices.add(autoFieldsService);
- addAutoFieldsFromService(autoFieldsService, entityModelReader,
dispatchContext, useWhenFields, fieldList, fieldMap);
+ addAutoFieldsFromService(autoFieldsService, entityModelReader,
dispatchContext, useWhenFields, fieldBuilderList, fieldBuilderMap);
}
for (Element autoFieldsEntityElement :
UtilXml.childElementList(formElement, "auto-fields-entity")) {
AutoFieldsEntity autoFieldsEntity = new
AutoFieldsEntity(autoFieldsEntityElement);
autoFieldsEntities.add(autoFieldsEntity);
- addAutoFieldsFromEntity(autoFieldsEntity, entityModelReader,
useWhenFields, fieldList, fieldMap);
+ addAutoFieldsFromEntity(autoFieldsEntity, entityModelReader,
useWhenFields, fieldBuilderList, fieldBuilderMap);
}
String thisType = this.getType();
for (Element fieldElement : UtilXml.childElementList(formElement,
"field")) {
- ModelFormField modelFormField = new ModelFormField(fieldElement,
this, entityModelReader, dispatchContext);
- FieldInfo fieldInfo = modelFormField.getFieldInfo();
+ ModelFormFieldBuilder builder = new
ModelFormFieldBuilder(fieldElement, this, entityModelReader, dispatchContext);
+ FieldInfo fieldInfo = builder.getFieldInfo();
if (thisType.equals("multi") && fieldInfo instanceof
ModelFormField.SubmitField) {
- multiSubmitFields.add(modelFormField);
+ multiSubmitBuilders.add(builder);
} else {
- modelFormField = addUpdateField(modelFormField, useWhenFields,
fieldList, fieldMap);
+ addUpdateField(builder, useWhenFields, fieldBuilderList,
fieldBuilderMap);
}
}
// get the sort-order
@@ -787,61 +787,67 @@ public class ModelForm extends ModelWidg
}
}
if (sortOrderFields.size() > 0) {
- ArrayList<ModelFormField> sortedFields = new
ArrayList<ModelFormField>();
+ ArrayList<ModelFormFieldBuilder> sortedFields = new
ArrayList<ModelFormFieldBuilder>();
for (SortField sortField : sortOrderFields) {
String fieldName = sortField.getFieldName();
if (UtilValidate.isEmpty(fieldName)) {
continue;
}
// get all fields with the given name from the existing list
and put them in the sorted list
- Iterator<ModelFormField> fieldIter = fieldList.iterator();
+ Iterator<ModelFormFieldBuilder> fieldIter =
fieldBuilderList.iterator();
while (fieldIter.hasNext()) {
- ModelFormField modelFormField = fieldIter.next();
- if (fieldName.equals(modelFormField.getName())) {
+ ModelFormFieldBuilder builder = fieldIter.next();
+ if (fieldName.equals(builder.getName())) {
// matched the name; remove from the original last and
add to the sorted list
if (UtilValidate.isNotEmpty(sortField.getPosition())) {
-
modelFormField.setPosition(sortField.getPosition());
+ builder.setPosition(sortField.getPosition());
}
fieldIter.remove();
- sortedFields.add(modelFormField);
+ sortedFields.add(builder);
}
}
}
// now add all of the rest of the fields from fieldList, ie those
that were not explicitly listed in the sort order
- sortedFields.addAll(fieldList);
+ sortedFields.addAll(fieldBuilderList);
// sortedFields all done, set fieldList
- fieldList = sortedFields;
+ fieldBuilderList = sortedFields;
}
if (UtilValidate.isNotEmpty(lastOrderFields)) {
- List<ModelFormField> lastedFields = new
LinkedList<ModelFormField>();
+ List<ModelFormFieldBuilder> lastedFields = new
LinkedList<ModelFormFieldBuilder>();
for (String fieldName : lastOrderFields) {
if (UtilValidate.isEmpty(fieldName)) {
continue;
}
// get all fields with the given name from the existing list
and put them in the lasted list
- Iterator<ModelFormField> fieldIter = fieldList.iterator();
+ Iterator<ModelFormFieldBuilder> fieldIter =
fieldBuilderList.iterator();
while (fieldIter.hasNext()) {
- ModelFormField modelFormField = fieldIter.next();
- if (fieldName.equals(modelFormField.getName())) {
+ ModelFormFieldBuilder builder = fieldIter.next();
+ if (fieldName.equals(builder.getName())) {
// matched the name; remove from the original last and
add to the lasted list
fieldIter.remove();
- lastedFields.add(modelFormField);
+ lastedFields.add(builder);
}
}
}
//now put all lastedFields at the field list end
- fieldList.addAll(lastedFields);
+ fieldBuilderList.addAll(lastedFields);
+ }
+ List<ModelFormField> fieldList = new
ArrayList<ModelFormField>(fieldBuilderList.size());
+ for (ModelFormFieldBuilder builder : fieldBuilderList) {
+ fieldList.add(builder.build());
}
- this.useWhenFields = Collections.unmodifiableSet(useWhenFields);
- fieldList.trimToSize();
this.fieldList = Collections.unmodifiableList(fieldList);
+ List<ModelFormField> multiSubmitFields = new
ArrayList<ModelFormField>(multiSubmitBuilders.size());
+ for (ModelFormFieldBuilder builder : multiSubmitBuilders) {
+ multiSubmitFields.add(builder.build());
+ }
+ this.multiSubmitFields =
Collections.unmodifiableList(multiSubmitFields);
+ this.useWhenFields = Collections.unmodifiableSet(useWhenFields);
this.fieldGroupMap = Collections.unmodifiableMap(fieldGroupMap);
fieldGroupList.trimToSize();
this.fieldGroupList = Collections.unmodifiableList(fieldGroupList);
lastOrderFields.trimToSize();
this.lastOrderFields = Collections.unmodifiableList(lastOrderFields);
- multiSubmitFields.trimToSize();
- this.multiSubmitFields =
Collections.unmodifiableList(multiSubmitFields);
autoFieldsServices.trimToSize();
this.autoFieldsServices =
Collections.unmodifiableList(autoFieldsServices);
autoFieldsEntities.trimToSize();
@@ -866,7 +872,7 @@ public class ModelForm extends ModelWidg
}
private void addAutoFieldsFromEntity(AutoFieldsEntity autoFieldsEntity,
ModelReader entityModelReader,
- Set<String> useWhenFields, List<ModelFormField> fieldList,
Map<String, ModelFormField> fieldMap) {
+ Set<String> useWhenFields, List<ModelFormFieldBuilder>
fieldBuilderList, Map<String, ModelFormFieldBuilder> fieldBuilderMap) {
// read entity def and auto-create fields
ModelEntity modelEntity = null;
try {
@@ -878,7 +884,6 @@ public class ModelForm extends ModelWidg
throw new IllegalArgumentException("Error finding Entity with name
" + autoFieldsEntity.entityName
+ " for auto-fields-entity in a form widget");
}
-
Iterator<ModelField> modelFieldIter = modelEntity.getFieldsIterator();
while (modelFieldIter.hasNext()) {
ModelField modelField = modelFieldIter.next();
@@ -886,18 +891,23 @@ public class ModelForm extends ModelWidg
// don't ever auto-add these, should only be added if
explicitly referenced
continue;
}
- ModelFormField modelFormField =
this.addFieldFromEntityField(modelEntity, modelField,
- autoFieldsEntity.defaultFieldType,
autoFieldsEntity.defaultPosition, useWhenFields, fieldList, fieldMap);
+ ModelFormFieldBuilder builder = new ModelFormFieldBuilder();
+ builder.setModelForm(this);
+ builder.setName(modelField.getName());
+ builder.setEntityName(modelEntity.getEntityName());
+ builder.setFieldName(modelField.getName());
+ builder.induceFieldInfoFromEntityField(modelEntity, modelField,
autoFieldsEntity.defaultFieldType);
+ builder.setPosition(autoFieldsEntity.defaultPosition);
if (UtilValidate.isNotEmpty(autoFieldsEntity.mapName)) {
- modelFormField.setMapName(autoFieldsEntity.mapName);
+ builder.setMapName(autoFieldsEntity.mapName);
}
+ addUpdateField(builder, useWhenFields, fieldBuilderList,
fieldBuilderMap);
}
}
private void addAutoFieldsFromService(AutoFieldsService autoFieldsService,
ModelReader entityModelReader,
- DispatchContext dispatchContext, Set<String> useWhenFields,
List<ModelFormField> fieldList,
- Map<String, ModelFormField> fieldMap) {
-
+ DispatchContext dispatchContext, Set<String> useWhenFields,
List<ModelFormFieldBuilder> fieldBuilderList,
+ Map<String, ModelFormFieldBuilder> fieldBuilderMap) {
// read service def and auto-create fields
ModelService modelService = null;
try {
@@ -908,11 +918,9 @@ public class ModelForm extends ModelWidg
Debug.logError(e, errmsg, module);
throw new IllegalArgumentException(errmsg);
}
-
for (ModelParam modelParam : modelService.getInModelParamList()) {
- // skip auto params that the service engine populates...
- if ("userLogin".equals(modelParam.name) ||
"locale".equals(modelParam.name) || "timeZone".equals(modelParam.name)
- || "login.username".equals(modelParam.name) ||
"login.password".equals(modelParam.name)) {
+ if (modelParam.internal) {
+ // skip auto params that the service engine populates...
continue;
}
if (modelParam.formDisplay) {
@@ -924,13 +932,17 @@ public class ModelForm extends ModelWidg
ModelField modelField =
modelEntity.getField(modelParam.fieldName);
if (modelField != null) {
// okay, populate using the entity field
info...
- ModelFormField modelFormField =
addFieldFromEntityField(modelEntity, modelField,
- autoFieldsService.defaultFieldType,
autoFieldsService.defaultPosition, useWhenFields,
- fieldList, fieldMap);
+ ModelFormFieldBuilder builder = new
ModelFormFieldBuilder();
+ builder.setModelForm(this);
+ builder.setName(modelField.getName());
+
builder.setEntityName(modelEntity.getEntityName());
+ builder.setFieldName(modelField.getName());
+
builder.induceFieldInfoFromEntityField(modelEntity, modelField,
autoFieldsService.defaultFieldType);
if
(UtilValidate.isNotEmpty(autoFieldsService.mapName)) {
-
modelFormField.setMapName(autoFieldsService.mapName);
+
builder.setMapName(autoFieldsService.mapName);
}
-
modelFormField.setRequiredField(!modelParam.optional);
+ builder.setRequiredField(!modelParam.optional);
+ addUpdateField(builder, useWhenFields,
fieldBuilderList, fieldBuilderMap);
// continue to skip creating based on service
param
continue;
}
@@ -939,79 +951,52 @@ public class ModelForm extends ModelWidg
Debug.logError(e, module);
}
}
-
- ModelFormField modelFormField = this
- .addFieldFromServiceParam(modelService, modelParam,
autoFieldsService.defaultFieldType,
- autoFieldsService.defaultPosition,
useWhenFields, fieldList, fieldMap);
+ ModelFormFieldBuilder builder = new ModelFormFieldBuilder();
+ builder.setModelForm(this);
+ builder.setName(modelParam.name);
+ builder.setServiceName(modelService.name);
+ builder.setAttributeName(modelParam.name);
+ builder.setTitle(modelParam.formLabel);
+ builder.setRequiredField(!modelParam.optional);
+ builder.induceFieldInfoFromServiceParam(modelService,
modelParam, autoFieldsService.defaultFieldType);
+ builder.setPosition(autoFieldsService.defaultPosition);
if (UtilValidate.isNotEmpty(autoFieldsService.mapName)) {
- modelFormField.setMapName(autoFieldsService.mapName);
+ builder.setMapName(autoFieldsService.mapName);
}
+ addUpdateField(builder, useWhenFields, fieldBuilderList,
fieldBuilderMap);
}
}
}
- private ModelFormField addFieldFromEntityField(ModelEntity modelEntity,
ModelField modelField, String defaultFieldType,
- int defaultPosition, Set<String> useWhenFields,
List<ModelFormField> fieldList, Map<String, ModelFormField> fieldMap) {
- // create field def from entity field def
- ModelFormField newFormField = new ModelFormField(this);
- newFormField.setName(modelField.getName());
- newFormField.setEntityName(modelEntity.getEntityName());
- newFormField.setFieldName(modelField.getName());
- newFormField.induceFieldInfoFromEntityField(modelEntity, modelField,
defaultFieldType);
- newFormField.setPosition(defaultPosition);
- return this.addUpdateField(newFormField, useWhenFields, fieldList,
fieldMap);
- }
-
- private ModelFormField addFieldFromServiceParam(ModelService modelService,
ModelParam modelParam, String defaultFieldType,
- int defaultPosition, Set<String> useWhenFields,
List<ModelFormField> fieldList, Map<String, ModelFormField> fieldMap) {
- // create field def from service param def
- ModelFormField newFormField = new ModelFormField(this);
- newFormField.setName(modelParam.name);
- newFormField.setServiceName(modelService.name);
- newFormField.setAttributeName(modelParam.name);
- newFormField.setTitle(modelParam.formLabel);
- newFormField.setRequiredField(!modelParam.optional);
- newFormField.induceFieldInfoFromServiceParam(modelService, modelParam,
defaultFieldType);
- newFormField.setPosition(defaultPosition);
- return this.addUpdateField(newFormField, useWhenFields, fieldList,
fieldMap);
- }
-
- /**
- * add/override modelFormField using the fieldList and fieldMap
- *
- * @return The same ModelFormField, or if merged with an existing field,
the existing field.
- */
- private ModelFormField addUpdateField(ModelFormField modelFormField,
Set<String> useWhenFields,
- List<ModelFormField> fieldList, Map<String, ModelFormField>
fieldMap) {
- if (!modelFormField.isUseWhenEmpty() ||
useWhenFields.contains(modelFormField.getName())) {
- useWhenFields.add(modelFormField.getName());
+ private void addUpdateField(ModelFormFieldBuilder builder, Set<String>
useWhenFields,
+ List<ModelFormFieldBuilder> fieldBuilderList, Map<String,
ModelFormFieldBuilder> fieldBuilderMap) {
+ if (!builder.getUseWhen().isEmpty() ||
useWhenFields.contains(builder.getName())) {
+ useWhenFields.add(builder.getName());
// is a conditional field, add to the List but don't worry about
the Map
//for adding to list, see if there is another field with that name
in the list and if so, put it before that one
boolean inserted = false;
- for (int i = 0; i < fieldList.size(); i++) {
- ModelFormField curField = fieldList.get(i);
- if (curField.getName() != null &&
curField.getName().equals(modelFormField.getName())) {
- fieldList.add(i, modelFormField);
+ for (int i = 0; i < fieldBuilderList.size(); i++) {
+ ModelFormFieldBuilder curField = fieldBuilderList.get(i);
+ if (curField.getName() != null &&
curField.getName().equals(builder.getName())) {
+ fieldBuilderList.add(i, builder);
inserted = true;
break;
}
}
if (!inserted) {
- fieldList.add(modelFormField);
+ fieldBuilderList.add(builder);
}
- return modelFormField;
+ return;
} else {
// not a conditional field, see if a named field exists in Map
- ModelFormField existingField =
fieldMap.get(modelFormField.getName());
+ ModelFormFieldBuilder existingField =
fieldBuilderMap.get(builder.getName());
if (existingField != null) {
// does exist, update the field by doing a merge/override
- existingField.mergeOverrideModelFormField(modelFormField);
- return existingField;
+ existingField.mergeOverrideModelFormField(builder);
} else {
// does not exist, add to List and Map
- fieldList.add(modelFormField);
- fieldMap.put(modelFormField.getName(), modelFormField);
- return modelFormField;
+ fieldBuilderList.add(builder);
+ fieldBuilderMap.put(builder.getName(), builder);
}
}
}
@@ -1518,7 +1503,6 @@ public class ModelForm extends ModelWidg
Debug.logError(e, errmsg, module);
throw new IllegalArgumentException(errmsg);
}
-
return styles;
}
@@ -1535,7 +1519,6 @@ public class ModelForm extends ModelWidg
if (simpleEncoder != null) {
expanderContext =
StringUtil.HtmlEncodingMapWrapper.getHtmlEncodingMapWrapper(context,
simpleEncoder);
}
-
try {
// use the same Interpreter (ie with the same context setup) for
all evals
Interpreter bsh = this.getBshInterpreter(context);
@@ -1561,7 +1544,6 @@ public class ModelForm extends ModelWidg
Debug.logError(e, errmsg, module);
throw new IllegalArgumentException(errmsg);
}
-
return target.expandString(expanderContext);
}