in framework/widget/src/main/java/org/apache/ofbiz/widget/model/ModelForm.java [200:748]
protected ModelForm(Element formElement, String formLocation, ModelReader entityModelReader,
VisualTheme visualTheme, DispatchContext dispatchContext, String defaultType) {
super(formElement);
this.formLocation = formLocation;
parentModel = getParentModel(formElement, entityModelReader, visualTheme, dispatchContext);
int defaultViewSizeInt = DEFAULT_PAGE_SIZE;
String viewSize = formElement.getAttribute("view-size");
if (viewSize.isEmpty()) {
if (parentModel != null) {
defaultViewSizeInt = parentModel.defaultViewSize;
} else {
defaultViewSizeInt = UtilProperties.getPropertyAsInteger("widget", "widget.form.defaultViewSize",
defaultViewSizeInt);
}
} else {
try {
defaultViewSizeInt = Integer.parseInt(viewSize);
} catch (NumberFormatException e) {
}
}
this.defaultViewSize = defaultViewSizeInt;
String type = formElement.getAttribute("type");
if (type.isEmpty()) {
if (parentModel != null) {
type = parentModel.type;
} else {
type = defaultType;
}
}
this.type = type;
FlexibleStringExpander target = FlexibleStringExpander.getInstance(formElement.getAttribute("target"));
if (target.isEmpty() && parentModel != null) {
target = parentModel.target;
}
this.target = target;
String containerId = formElement.getAttribute("id");
if (containerId.isEmpty() && parentModel != null) {
containerId = parentModel.containerId;
}
this.containerId = containerId;
String containerStyle = formElement.getAttribute("style");
if (containerStyle.isEmpty() && parentModel != null) {
containerStyle = parentModel.containerStyle;
}
this.containerStyle = containerStyle;
String title = formElement.getAttribute("title");
if (title.isEmpty() && parentModel != null) {
title = parentModel.title;
}
this.title = title;
FlexibleStringExpander emptyFormDataMessage = FlexibleStringExpander.getInstance(formElement.getAttribute("empty-form-data-message"));
if (emptyFormDataMessage.isEmpty() && parentModel != null) {
emptyFormDataMessage = parentModel.emptyFormDataMessage;
}
this.emptyFormDataMessage = emptyFormDataMessage;
String tooltip = formElement.getAttribute("tooltip");
if (tooltip.isEmpty() && parentModel != null) {
tooltip = parentModel.tooltip;
}
this.tooltip = tooltip;
String listName = formElement.getAttribute("list-name");
if (listName.isEmpty()) {
if (parentModel != null) {
listName = parentModel.listName;
} else {
listName = DEFAULT_FORM_RESULT_LIST_NAME;
}
}
this.listName = listName;
String listEntryName = formElement.getAttribute("list-entry-name");
if (listEntryName.isEmpty() && parentModel != null) {
listEntryName = parentModel.listEntryName;
}
this.listEntryName = listEntryName;
String defaultEntityName = formElement.getAttribute("default-entity-name");
if (defaultEntityName.isEmpty() && parentModel != null) {
defaultEntityName = parentModel.defaultEntityName;
}
this.defaultEntityName = defaultEntityName;
String defaultServiceName = formElement.getAttribute("default-service-name");
if (defaultServiceName.isEmpty() && parentModel != null) {
defaultServiceName = parentModel.defaultServiceName;
}
this.defaultServiceName = defaultServiceName;
String formTitleAreaStyle = formElement.getAttribute("form-title-area-style");
if (formTitleAreaStyle.isEmpty() && parentModel != null) {
formTitleAreaStyle = parentModel.formTitleAreaStyle;
}
this.formTitleAreaStyle = formTitleAreaStyle;
String formWidgetAreaStyle = formElement.getAttribute("form-widget-area-style");
if (formWidgetAreaStyle.isEmpty() && parentModel != null) {
formWidgetAreaStyle = parentModel.formWidgetAreaStyle;
}
this.formWidgetAreaStyle = formWidgetAreaStyle;
String defaultTitleAreaStyle = formElement.getAttribute("default-title-area-style");
if (defaultTitleAreaStyle.isEmpty() && parentModel != null) {
defaultTitleAreaStyle = parentModel.defaultTitleAreaStyle;
}
this.defaultTitleAreaStyle = defaultTitleAreaStyle;
String defaultWidgetAreaStyle = formElement.getAttribute("default-widget-area-style");
if (defaultWidgetAreaStyle.isEmpty() && parentModel != null) {
defaultWidgetAreaStyle = parentModel.defaultWidgetAreaStyle;
}
this.defaultWidgetAreaStyle = defaultWidgetAreaStyle;
String oddRowStyle = formElement.getAttribute("odd-row-style");
if (oddRowStyle.isEmpty() && parentModel != null) {
oddRowStyle = parentModel.oddRowStyle;
}
this.oddRowStyle = oddRowStyle;
String evenRowStyle = formElement.getAttribute("even-row-style");
if (evenRowStyle.isEmpty() && parentModel != null) {
evenRowStyle = parentModel.evenRowStyle;
}
this.evenRowStyle = evenRowStyle;
String defaultTableStyle = formElement.getAttribute("default-table-style");
if (defaultTableStyle.isEmpty() && parentModel != null) {
defaultTableStyle = parentModel.defaultTableStyle;
}
this.defaultTableStyle = defaultTableStyle;
String headerRowStyle = formElement.getAttribute("header-row-style");
if (headerRowStyle.isEmpty() && parentModel != null) {
headerRowStyle = parentModel.headerRowStyle;
}
this.headerRowStyle = headerRowStyle;
String defaultTitleStyle = formElement.getAttribute("default-title-style");
if (defaultTitleStyle.isEmpty() && parentModel != null) {
defaultTitleStyle = parentModel.defaultTitleStyle;
}
this.defaultTitleStyle = defaultTitleStyle;
String defaultWidgetStyle = formElement.getAttribute("default-widget-style");
if (defaultWidgetStyle.isEmpty() && parentModel != null) {
defaultWidgetStyle = parentModel.defaultWidgetStyle;
}
this.defaultWidgetStyle = defaultWidgetStyle;
String defaultTooltipStyle = formElement.getAttribute("default-tooltip-style");
if (defaultTooltipStyle.isEmpty() && parentModel != null) {
defaultTooltipStyle = parentModel.defaultTooltipStyle;
}
this.defaultTooltipStyle = defaultTooltipStyle;
String itemIndexSeparator = formElement.getAttribute("item-index-separator");
if (itemIndexSeparator.isEmpty() && parentModel != null) {
itemIndexSeparator = parentModel.itemIndexSeparator;
}
this.itemIndexSeparator = itemIndexSeparator;
String separateColumns = formElement.getAttribute("separate-columns");
if (separateColumns.isEmpty() && parentModel != null) {
this.separateColumns = parentModel.separateColumns;
} else {
this.separateColumns = "true".equals(separateColumns);
}
String groupColumns = formElement.getAttribute("group-columns");
if (groupColumns.isEmpty() && parentModel != null) {
this.groupColumns = parentModel.groupColumns;
} else {
this.groupColumns = !"false".equals(groupColumns);
}
String targetType = formElement.getAttribute("target-type");
if (targetType.isEmpty() && parentModel != null) {
targetType = parentModel.targetType;
}
this.targetType = targetType;
FlexibleMapAccessor<Map<String, ? extends Object>> defaultMapName = FlexibleMapAccessor.getInstance(formElement
.getAttribute("default-map-name"));
if (defaultMapName.isEmpty() && parentModel != null) {
defaultMapName = parentModel.defaultMapName;
}
this.defaultMapName = defaultMapName;
FlexibleStringExpander targetWindowExdr = FlexibleStringExpander.getInstance(formElement.getAttribute("target-window"));
if (targetWindowExdr.isEmpty() && parentModel != null) {
targetWindowExdr = parentModel.targetWindowExdr;
}
this.targetWindowExdr = targetWindowExdr;
String hideHeader = formElement.getAttribute("hide-header");
if (hideHeader.isEmpty() && parentModel != null) {
this.hideHeader = parentModel.hideHeader;
} else {
this.hideHeader = "true".equals(hideHeader);
}
String clientAutocompleteFields = formElement.getAttribute("client-autocomplete-fields");
if (clientAutocompleteFields.isEmpty() && parentModel != null) {
this.clientAutocompleteFields = parentModel.clientAutocompleteFields;
} else {
this.clientAutocompleteFields = !"false".equals(formElement.getAttribute("client-autocomplete-fields"));
}
FlexibleStringExpander paginateTarget = FlexibleStringExpander.getInstance(formElement.getAttribute("paginate-target"));
if (paginateTarget.isEmpty() && parentModel != null) {
paginateTarget = parentModel.paginateTarget;
}
this.paginateTarget = paginateTarget;
ArrayList<AltTarget> altTargets = new ArrayList<>();
for (Element altTargetElement : UtilXml.childElementList(formElement, "alt-target")) {
altTargets.add(new AltTarget(altTargetElement));
}
if (parentModel != null) {
altTargets.addAll(parentModel.altTargets);
}
altTargets.trimToSize();
this.altTargets = Collections.unmodifiableList(altTargets);
ArrayList<ModelAction> actions = new ArrayList<>();
if (parentModel != null) {
actions.addAll(parentModel.actions);
}
Element actionsElement = UtilXml.firstChildElement(formElement, "actions");
if (actionsElement != null) {
actions.addAll(ModelFormAction.readSubActions(this, actionsElement));
}
actions.trimToSize();
this.actions = Collections.unmodifiableList(actions);
ArrayList<ModelAction> rowActions = new ArrayList<>();
if (parentModel != null) {
rowActions.addAll(parentModel.rowActions);
}
Element rowActionsElement = UtilXml.firstChildElement(formElement, "row-actions");
if (rowActionsElement != null) {
rowActions.addAll(ModelFormAction.readSubActions(this, rowActionsElement));
}
rowActions.trimToSize();
this.rowActions = Collections.unmodifiableList(rowActions);
ArrayList<UpdateArea> onPaginateUpdateAreas = new ArrayList<>();
ArrayList<UpdateArea> onSubmitUpdateAreas = new ArrayList<>();
ArrayList<UpdateArea> onSortColumnUpdateAreas = new ArrayList<>();
if (parentModel != null) {
onPaginateUpdateAreas.addAll(parentModel.onPaginateUpdateAreas);
onSubmitUpdateAreas.addAll(parentModel.onSubmitUpdateAreas);
onSortColumnUpdateAreas.addAll(parentModel.onSortColumnUpdateAreas);
}
for (Element updateAreaElement : UtilXml.childElementList(formElement, "on-event-update-area")) {
UpdateArea updateArea = new UpdateArea(updateAreaElement, defaultServiceName, defaultEntityName);
if ("paginate".equals(updateArea.getEventType())) {
int index = onPaginateUpdateAreas.indexOf(updateArea);
if (index != -1) {
if (!updateArea.areaTarget.isEmpty()) {
onPaginateUpdateAreas.set(index, updateArea);
} else {
// blank target indicates a removing override
onPaginateUpdateAreas.remove(index);
}
} else {
onPaginateUpdateAreas.add(updateArea);
}
} else if ("submit".equals(updateArea.getEventType())) {
int index = onSubmitUpdateAreas.indexOf(updateArea);
if (index != -1) {
onSubmitUpdateAreas.set(index, updateArea);
} else {
onSubmitUpdateAreas.add(updateArea);
}
} else if ("sort-column".equals(updateArea.getEventType())) {
int index = onSortColumnUpdateAreas.indexOf(updateArea);
if (index != -1) {
if (!updateArea.areaTarget.isEmpty()) {
onSortColumnUpdateAreas.set(index, updateArea);
} else {
// blank target indicates a removing override
onSortColumnUpdateAreas.remove(index);
}
} else {
onSortColumnUpdateAreas.add(updateArea);
}
}
}
onPaginateUpdateAreas.trimToSize();
this.onPaginateUpdateAreas = Collections.unmodifiableList(onPaginateUpdateAreas);
onSubmitUpdateAreas.trimToSize();
this.onSubmitUpdateAreas = Collections.unmodifiableList(onSubmitUpdateAreas);
onSortColumnUpdateAreas.trimToSize();
this.onSortColumnUpdateAreas = Collections.unmodifiableList(onSortColumnUpdateAreas);
ArrayList<AltRowStyle> altRowStyles = new ArrayList<>();
if (parentModel != null) {
altRowStyles.addAll(parentModel.altRowStyles);
}
for (Element altRowStyleElement : UtilXml.childElementList(formElement, "alt-row-style")) {
AltRowStyle altRowStyle = new AltRowStyle(altRowStyleElement);
altRowStyles.add(altRowStyle);
}
altRowStyles.trimToSize();
this.altRowStyles = Collections.unmodifiableList(altRowStyles);
Set<String> useWhenFields = new HashSet<>();
if (parentModel != null) {
useWhenFields.addAll(parentModel.useWhenFields);
}
List<ModelFormFieldBuilder> fieldBuilderList = new ArrayList<>();
Map<String, ModelFormFieldBuilder> fieldBuilderMap = new HashMap<>();
if (parentModel != null) {
// Create this fieldList/Map from clones of parentModel's
for (ModelFormField parentChildField : parentModel.fieldList) {
ModelFormFieldBuilder builder = new ModelFormFieldBuilder(parentChildField);
builder.setModelForm(this);
fieldBuilderList.add(builder);
fieldBuilderMap.put(builder.getName(), builder);
}
}
Map<String, FieldGroupBase> fieldGroupMap = new HashMap<>();
if (parentModel != null) {
fieldGroupMap.putAll(parentModel.fieldGroupMap);
}
ArrayList<FieldGroupBase> fieldGroupList = new ArrayList<>();
if (parentModel != null) {
fieldGroupList.addAll(parentModel.fieldGroupList);
}
ArrayList<String> lastOrderFields = new ArrayList<>();
if (parentModel != null) {
lastOrderFields.addAll(parentModel.lastOrderFields);
}
String sortFieldParameterName = formElement.getAttribute("sort-field-parameter-name");
if (!sortFieldParameterName.isEmpty()) {
this.sortFieldParameterName = sortFieldParameterName;
} else {
this.sortFieldParameterName = (parentModel != null) ? parentModel.getSortFieldParameterName() : "sortField";
}
String defaultRequiredFieldStyle = formElement.getAttribute("default-required-field-style");
if (defaultRequiredFieldStyle.isEmpty() && parentModel != null) {
defaultRequiredFieldStyle = parentModel.defaultRequiredFieldStyle;
}
this.defaultRequiredFieldStyle = defaultRequiredFieldStyle;
String defaultSortFieldStyle = formElement.getAttribute("default-sort-field-style");
if (defaultSortFieldStyle.isEmpty() && parentModel != null) {
this.defaultSortFieldStyle = parentModel.defaultSortFieldStyle;
} else {
this.defaultSortFieldStyle = DEFAULT_SORT_FIELD_STYLE;
}
String defaultSortFieldAscStyle = formElement.getAttribute("default-sort-field-asc-style");
if (defaultSortFieldAscStyle.isEmpty() && parentModel != null) {
this.defaultSortFieldAscStyle = parentModel.defaultSortFieldAscStyle;
} else {
this.defaultSortFieldAscStyle = DEFAULT_SORT_FIELD_ASC_STYLE;
}
String defaultSortFieldDescStyle = formElement.getAttribute("default-sort-field-desc-style");
if (defaultSortFieldDescStyle.isEmpty() && parentModel != null) {
this.defaultSortFieldDescStyle = parentModel.defaultSortFieldDescStyle;
} else {
this.defaultSortFieldDescStyle = DEFAULT_SORT_FIELD_DESC_STYLE;
}
String paginateTargetAnchor = formElement.getAttribute("paginate-target-anchor");
if (paginateTargetAnchor.isEmpty() && parentModel != null) {
paginateTargetAnchor = parentModel.paginateTargetAnchor;
}
this.paginateTargetAnchor = paginateTargetAnchor;
FlexibleStringExpander paginateIndexField = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-index-field"));
if (paginateIndexField.isEmpty() && parentModel != null) {
paginateIndexField = parentModel.paginateIndexField;
}
this.paginateIndexField = paginateIndexField;
FlexibleStringExpander paginateSizeField = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-size-field"));
if (paginateSizeField.isEmpty() && parentModel != null) {
paginateSizeField = parentModel.paginateSizeField;
}
this.paginateSizeField = paginateSizeField;
FlexibleStringExpander overrideListSize = FlexibleStringExpander.getInstance(formElement
.getAttribute("override-list-size"));
if (overrideListSize.isEmpty() && parentModel != null) {
overrideListSize = parentModel.overrideListSize;
}
this.overrideListSize = overrideListSize;
FlexibleStringExpander paginateFirstLabel = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-first-label"));
if (paginateFirstLabel.isEmpty() && parentModel != null) {
paginateFirstLabel = parentModel.paginateFirstLabel;
}
this.paginateFirstLabel = paginateFirstLabel;
FlexibleStringExpander paginatePreviousLabel = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-previous-label"));
if (paginatePreviousLabel.isEmpty() && parentModel != null) {
paginatePreviousLabel = parentModel.paginatePreviousLabel;
}
this.paginatePreviousLabel = paginatePreviousLabel;
FlexibleStringExpander paginateNextLabel = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-next-label"));
if (paginateNextLabel.isEmpty() && parentModel != null) {
paginateNextLabel = parentModel.paginateNextLabel;
}
this.paginateNextLabel = paginateNextLabel;
FlexibleStringExpander paginateLastLabel = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-last-label"));
if (paginateLastLabel.isEmpty() && parentModel != null) {
paginateLastLabel = parentModel.paginateLastLabel;
}
this.paginateLastLabel = paginateLastLabel;
FlexibleStringExpander paginateViewSizeLabel = FlexibleStringExpander.getInstance(formElement
.getAttribute("paginate-viewsize-label"));
if (paginateViewSizeLabel.isEmpty() && parentModel != null) {
paginateViewSizeLabel = parentModel.paginateViewSizeLabel;
}
this.paginateViewSizeLabel = paginateViewSizeLabel;
String paginateStyle = formElement.getAttribute("paginate-style");
if (paginateStyle.isEmpty()) {
if (parentModel != null) {
this.paginateStyle = parentModel.paginateStyle;
} else {
this.paginateStyle = DEFAULT_PAG_STYLE;
}
} else {
this.paginateStyle = paginateStyle;
}
FlexibleStringExpander paginate = FlexibleStringExpander.getInstance(formElement.getAttribute("paginate"));
if (paginate.isEmpty() && parentModel != null) {
paginate = parentModel.paginate;
}
this.paginate = paginate;
String skipStart = formElement.getAttribute("skip-start");
if (skipStart.isEmpty() && parentModel != null) {
this.skipStart = parentModel.skipStart;
} else {
this.skipStart = "true".equals(skipStart);
}
String skipEnd = formElement.getAttribute("skip-end");
if (skipEnd.isEmpty() && parentModel != null) {
this.skipEnd = parentModel.skipEnd;
} else {
this.skipEnd = "true".equals(skipEnd);
}
String useRowSubmit = formElement.getAttribute("use-row-submit");
if (useRowSubmit.isEmpty() && parentModel != null) {
this.useRowSubmit = parentModel.useRowSubmit;
} else {
this.useRowSubmit = "true".equals(useRowSubmit);
}
this.rowCountExdr = paginate;
List<ModelFormFieldBuilder> multiSubmitBuilders = new ArrayList<>();
ArrayList<AutoFieldsService> autoFieldsServices = new ArrayList<>();
ArrayList<AutoFieldsEntity> autoFieldsEntities = new ArrayList<>();
ArrayList<SortField> sortOrderFields = new ArrayList<>();
this.defaultFieldGroup = new FieldGroup(null, this, sortOrderFields, fieldGroupMap);
for (Element autoFieldsServiceElement : UtilXml.childElementList(formElement, "auto-fields-service")) {
AutoFieldsService autoFieldsService = new AutoFieldsService(autoFieldsServiceElement);
autoFieldsServices.add(autoFieldsService);
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, fieldBuilderList, fieldBuilderMap);
}
String thisType = this.getType();
for (Element fieldElement : UtilXml.childElementList(formElement, "field")) {
ModelFormFieldBuilder builder = new ModelFormFieldBuilder(fieldElement, this, entityModelReader, dispatchContext);
FieldInfo fieldInfo = builder.getFieldInfo();
if ("multi".equals(thisType) && fieldInfo instanceof ModelFormField.SubmitField) {
multiSubmitBuilders.add(builder);
} else {
addUpdateField(builder, useWhenFields, fieldBuilderList, fieldBuilderMap);
}
}
// get the sort-order
Element sortOrderElement = UtilXml.firstChildElement(formElement, "sort-order");
if (sortOrderElement != null) {
FieldGroup lastFieldGroup = new FieldGroup(null, this, sortOrderFields, fieldGroupMap);
fieldGroupList.add(lastFieldGroup);
// read in sort-field
for (Element sortFieldElement : UtilXml.childElementList(sortOrderElement)) {
String tagName = sortFieldElement.getLocalName();
if ("sort-field".equals(tagName)) {
String fieldName = sortFieldElement.getAttribute("name");
String position = sortFieldElement.getAttribute("position");
sortOrderFields.add(new SortField(fieldName, position));
fieldGroupMap.put(fieldName, lastFieldGroup);
} else if ("last-field".equals(tagName)) {
String fieldName = sortFieldElement.getAttribute("name");
fieldGroupMap.put(fieldName, lastFieldGroup);
lastOrderFields.add(fieldName);
} else if ("banner".equals(tagName)) {
Banner thisBanner = new Banner(sortFieldElement);
fieldGroupList.add(thisBanner);
lastFieldGroup = new FieldGroup(null, this, sortOrderFields, fieldGroupMap);
fieldGroupList.add(lastFieldGroup);
} else if ("field-group".equals(tagName)) {
FieldGroup thisFieldGroup = new FieldGroup(sortFieldElement, this, sortOrderFields, fieldGroupMap);
fieldGroupList.add(thisFieldGroup);
lastFieldGroup = new FieldGroup(null, this, sortOrderFields, fieldGroupMap);
fieldGroupList.add(lastFieldGroup);
}
}
}
if (!sortOrderFields.isEmpty()) {
List<ModelFormFieldBuilder> sortedFields = new ArrayList<>();
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<ModelFormFieldBuilder> fieldIter = fieldBuilderList.iterator();
while (fieldIter.hasNext()) {
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())) {
builder.setPosition(sortField.getPosition());
}
fieldIter.remove();
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(fieldBuilderList);
// sortedFields all done, set fieldList
fieldBuilderList = sortedFields;
}
if (UtilValidate.isNotEmpty(lastOrderFields)) {
List<ModelFormFieldBuilder> lastedFields = new LinkedList<>();
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<ModelFormFieldBuilder> fieldIter = fieldBuilderList.iterator();
while (fieldIter.hasNext()) {
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(builder);
}
}
}
//now put all lastedFields at the field list end
fieldBuilderList.addAll(lastedFields);
}
List<ModelFormField> fieldList = new ArrayList<>(fieldBuilderList.size());
for (ModelFormFieldBuilder builder : fieldBuilderList) {
fieldList.add(builder.build());
}
this.fieldList = Collections.unmodifiableList(fieldList);
List<ModelFormField> multiSubmitFields = new ArrayList<>(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);
autoFieldsServices.trimToSize();
this.autoFieldsServices = Collections.unmodifiableList(autoFieldsServices);
autoFieldsEntities.trimToSize();
this.autoFieldsEntities = Collections.unmodifiableList(autoFieldsEntities);
sortOrderFields.trimToSize();
this.sortOrderFields = Collections.unmodifiableList(sortOrderFields);
String focusFieldName = formElement.getAttribute("focus-field-name");
if (focusFieldName.isEmpty() && parentModel != null) {
focusFieldName = parentModel.focusFieldName;
}
this.focusFieldName = focusFieldName;
}