use of org.apache.ofbiz.widget.model.ModelForm.FieldGroup in project ofbiz-framework by apache.
the class FormRenderer method renderSingleFormString.
private void renderSingleFormString(Appendable writer, Map<String, Object> context, int positions) throws IOException {
List<ModelFormField> tempFieldList = new LinkedList<>();
tempFieldList.addAll(modelForm.getFieldList());
// Check to see if there is a field, same name and same use-when (could come from extended form)
for (int j = 0; j < tempFieldList.size(); j++) {
ModelFormField modelFormField = tempFieldList.get(j);
if (modelForm.getUseWhenFields().contains(modelFormField.getName())) {
boolean shouldUse1 = modelFormField.shouldUse(context);
for (int i = j + 1; i < tempFieldList.size(); i++) {
ModelFormField curField = tempFieldList.get(i);
if (curField.getName() != null && curField.getName().equals(modelFormField.getName())) {
boolean shouldUse2 = curField.shouldUse(context);
if (shouldUse1 == shouldUse2) {
tempFieldList.remove(i--);
}
} else {
continue;
}
}
}
}
Set<String> alreadyRendered = new TreeSet<>();
FieldGroup lastFieldGroup = null;
// render form open
if (!modelForm.getSkipStart()) {
formStringRenderer.renderFormOpen(writer, context, modelForm);
}
// render all hidden & ignored fields
List<ModelFormField> hiddenIgnoredFieldList = this.getHiddenIgnoredFields(context, alreadyRendered, tempFieldList, -1);
this.renderHiddenIgnoredFields(writer, context, formStringRenderer, hiddenIgnoredFieldList);
// render formatting wrapper open
// This should be covered by fieldGroup.renderStartString
// formStringRenderer.renderFormatSingleWrapperOpen(writer, context, this);
// render each field row, except hidden & ignored rows
Iterator<ModelFormField> fieldIter = tempFieldList.iterator();
ModelFormField lastFormField = null;
ModelFormField currentFormField = null;
ModelFormField nextFormField = null;
if (fieldIter.hasNext()) {
currentFormField = fieldIter.next();
}
if (fieldIter.hasNext()) {
nextFormField = fieldIter.next();
}
FieldGroup currentFieldGroup = null;
String currentFieldGroupName = null;
String lastFieldGroupName = null;
if (currentFormField != null) {
currentFieldGroup = (FieldGroup) modelForm.getFieldGroupMap().get(currentFormField.getFieldName());
if (currentFieldGroup == null) {
currentFieldGroup = modelForm.getDefaultFieldGroup();
}
if (currentFieldGroup != null) {
currentFieldGroupName = currentFieldGroup.getId();
}
}
boolean isFirstPass = true;
boolean haveRenderedOpenFieldRow = false;
while (currentFormField != null) {
// don't do it on the first pass though...
if (isFirstPass) {
isFirstPass = false;
List<FieldGroupBase> inbetweenList = getInbetweenList(lastFieldGroup, currentFieldGroup);
for (FieldGroupBase obj : inbetweenList) {
if (obj instanceof ModelForm.Banner) {
((ModelForm.Banner) obj).renderString(writer, context, formStringRenderer);
}
}
if (currentFieldGroup != null && (lastFieldGroup == null || !lastFieldGroupName.equals(currentFieldGroupName))) {
currentFieldGroup.renderStartString(writer, context, formStringRenderer);
lastFieldGroup = currentFieldGroup;
}
} else {
if (fieldIter.hasNext()) {
// at least two loops left
lastFormField = currentFormField;
currentFormField = nextFormField;
nextFormField = fieldIter.next();
} else if (nextFormField != null) {
// okay, just one loop left
lastFormField = currentFormField;
currentFormField = nextFormField;
nextFormField = null;
} else {
// at the end...
currentFormField = null;
// nextFormField is already null
break;
}
currentFieldGroup = null;
if (currentFormField != null) {
currentFieldGroup = (FieldGroup) modelForm.getFieldGroupMap().get(currentFormField.getName());
}
if (currentFieldGroup == null) {
currentFieldGroup = modelForm.getDefaultFieldGroup();
}
currentFieldGroupName = currentFieldGroup.getId();
if (lastFieldGroup != null) {
lastFieldGroupName = lastFieldGroup.getId();
if (!lastFieldGroupName.equals(currentFieldGroupName)) {
if (haveRenderedOpenFieldRow) {
formStringRenderer.renderFormatFieldRowClose(writer, context, modelForm);
haveRenderedOpenFieldRow = false;
}
lastFieldGroup.renderEndString(writer, context, formStringRenderer);
List<FieldGroupBase> inbetweenList = getInbetweenList(lastFieldGroup, currentFieldGroup);
for (FieldGroupBase obj : inbetweenList) {
if (obj instanceof ModelForm.Banner) {
((ModelForm.Banner) obj).renderString(writer, context, formStringRenderer);
}
}
}
}
if (lastFieldGroup == null || !lastFieldGroupName.equals(currentFieldGroupName)) {
currentFieldGroup.renderStartString(writer, context, formStringRenderer);
lastFieldGroup = currentFieldGroup;
}
}
FieldInfo fieldInfo = currentFormField.getFieldInfo();
if (fieldInfo.getFieldType() == FieldInfo.HIDDEN || fieldInfo.getFieldType() == FieldInfo.IGNORED) {
continue;
}
if (alreadyRendered.contains(currentFormField.getName())) {
continue;
}
if (!currentFormField.shouldUse(context)) {
if (UtilValidate.isNotEmpty(lastFormField)) {
currentFormField = lastFormField;
}
continue;
}
alreadyRendered.add(currentFormField.getName());
if (focusFieldName.isEmpty()) {
if (fieldInfo.getFieldType() != FieldInfo.DISPLAY && fieldInfo.getFieldType() != FieldInfo.HIDDEN && fieldInfo.getFieldType() != FieldInfo.DISPLAY_ENTITY && fieldInfo.getFieldType() != FieldInfo.IGNORED && fieldInfo.getFieldType() != FieldInfo.IMAGE) {
focusFieldName = currentFormField.getName();
context.put(modelForm.getName().concat(".focusFieldName"), focusFieldName);
}
}
boolean stayingOnRow = false;
if (lastFormField != null) {
if (lastFormField.getPosition() >= currentFormField.getPosition()) {
// moving to next row
stayingOnRow = false;
} else {
// staying on same row
stayingOnRow = true;
}
}
int positionSpan = 1;
Integer nextPositionInRow = null;
if (nextFormField != null) {
if (nextFormField.getPosition() > currentFormField.getPosition()) {
positionSpan = nextFormField.getPosition() - currentFormField.getPosition() - 1;
nextPositionInRow = Integer.valueOf(nextFormField.getPosition());
} else {
positionSpan = positions - currentFormField.getPosition();
}
}
if (stayingOnRow) {
// no spacer cell, might add later though...
// formStringRenderer.renderFormatFieldRowSpacerCell(writer, context, currentFormField);
} else {
if (haveRenderedOpenFieldRow) {
// render row formatting close
formStringRenderer.renderFormatFieldRowClose(writer, context, modelForm);
haveRenderedOpenFieldRow = false;
}
// render row formatting open
formStringRenderer.renderFormatFieldRowOpen(writer, context, modelForm);
haveRenderedOpenFieldRow = true;
}
//
if (!haveRenderedOpenFieldRow) {
formStringRenderer.renderFormatFieldRowOpen(writer, context, modelForm);
haveRenderedOpenFieldRow = true;
}
// render title formatting open
formStringRenderer.renderFormatFieldRowTitleCellOpen(writer, context, currentFormField);
// render title (unless this is a submit or a reset field)
if (fieldInfo.getFieldType() != FieldInfo.SUBMIT && fieldInfo.getFieldType() != FieldInfo.RESET) {
formStringRenderer.renderFieldTitle(writer, context, currentFormField);
} else {
formStringRenderer.renderFormatEmptySpace(writer, context, modelForm);
}
// render title formatting close
formStringRenderer.renderFormatFieldRowTitleCellClose(writer, context, currentFormField);
// render separator
formStringRenderer.renderFormatFieldRowSpacerCell(writer, context, currentFormField);
// render widget formatting open
formStringRenderer.renderFormatFieldRowWidgetCellOpen(writer, context, currentFormField, positions, positionSpan, nextPositionInRow);
// render widget
currentFormField.renderFieldString(writer, context, formStringRenderer);
// render widget formatting close
formStringRenderer.renderFormatFieldRowWidgetCellClose(writer, context, currentFormField, positions, positionSpan, nextPositionInRow);
}
// render row formatting close after the end if needed
if (haveRenderedOpenFieldRow) {
formStringRenderer.renderFormatFieldRowClose(writer, context, modelForm);
}
if (lastFieldGroup != null) {
lastFieldGroup.renderEndString(writer, context, formStringRenderer);
}
// render form close
if (!modelForm.getSkipEnd()) {
formStringRenderer.renderFormClose(writer, context, modelForm);
}
}
use of org.apache.ofbiz.widget.model.ModelForm.FieldGroup in project ofbiz-framework by apache.
the class FormRenderer method getInbetweenList.
private List<FieldGroupBase> getInbetweenList(FieldGroup startFieldGroup, FieldGroup endFieldGroup) {
List<FieldGroupBase> inbetweenList = new ArrayList<>();
boolean firstFound = false;
String startFieldGroupId = null;
String endFieldGroupId = null;
if (endFieldGroup != null) {
endFieldGroupId = endFieldGroup.getId();
}
if (startFieldGroup == null) {
firstFound = true;
} else {
startFieldGroupId = startFieldGroup.getId();
}
Iterator<FieldGroupBase> iter = modelForm.getFieldGroupList().iterator();
while (iter.hasNext()) {
FieldGroupBase obj = iter.next();
if (obj instanceof ModelForm.Banner) {
if (firstFound) {
inbetweenList.add(obj);
}
} else {
FieldGroup fieldGroup = (FieldGroup) obj;
String fieldGroupId = fieldGroup.getId();
if (!firstFound) {
if (fieldGroupId.equals(startFieldGroupId)) {
firstFound = true;
continue;
}
}
if (firstFound) {
if (fieldGroupId.equals(endFieldGroupId)) {
break;
}
inbetweenList.add(fieldGroup);
}
}
}
return inbetweenList;
}
Aggregations