final ObjectSpecification specification = object.getSpecification();
final FormFieldBlock containedBlock = new FormFieldBlock() {
@Override
public boolean isVisible(final String name) {
final ObjectAssociation fld = specification.getAssociation(name);
final boolean isVisible = fld.isVisible(IsisContext.getAuthenticationSession(), object, where).isAllowed();
final boolean isUseable = fld.isUsable(IsisContext.getAuthenticationSession(), object, where).isAllowed();
return isVisible && isUseable;
}
@Override
public ObjectAdapter getCurrent(final String name) {
ObjectAdapter value = null;
if (entryState != null) {
final FieldEditState field2 = entryState.getField(name);
value = field2.getValue();
}
if (value == null) {
final ObjectAssociation fld = specification.getAssociation(name);
value = fld.get(object);
}
return value;
}
@Override
public boolean isNullable(final String name) {
final ObjectAssociation fld = specification.getAssociation(name);
return !fld.isMandatory();
}
};
request.setBlockContent(containedBlock);
request.processUtilCloseTag();
final AuthenticationSession session = IsisContext.getAuthenticationSession();
List<ObjectAssociation> viewFields = specification.getAssociations(Contributed.EXCLUDED, ObjectAssociation.Filters.dynamicallyVisible(session, object, where));
viewFields = containedBlock.includedFields(viewFields);
final InputField[] formFields = createFields(viewFields);
initializeFields(context, object, formFields, entryState, !hideNonEditableFields);
setDefaults(context, object, formFields, entryState, showIcon);
copyFieldContent(context, object, formFields, showIcon);
overrideWithHtml(context, containedBlock, formFields);
String errors = null;
if (entryState != null && entryState.isForForm(formId)) {
copyEntryState(context, object, formFields, entryState);
errors = entryState.getError();
}
final String errorView = context.fullFilePath(forwardErrorTo == null ? context.getResourceFile() : forwardErrorTo);
final List<HiddenInputField> hiddenFields = new ArrayList<HiddenInputField>();
hiddenFields.add(new HiddenInputField("_" + OBJECT, actualObjectId));
hiddenFields.add(new HiddenInputField("_" + VERSION, version));
hiddenFields.add(new HiddenInputField("_" + FORM_ID, formId));
hiddenFields.add(completionMessage == null ? null : new HiddenInputField("_" + MESSAGE, completionMessage));
hiddenFields.add(forwardEditedTo == null ? null : new HiddenInputField("_" + VIEW, context.fullFilePath(forwardEditedTo)));
hiddenFields.add(new HiddenInputField("_" + ERROR, errorView));
hiddenFields.add(variable == null ? null : new HiddenInputField("_" + RESULT_NAME, variable));
hiddenFields.add(resultOverride == null ? null : new HiddenInputField("_" + RESULT_OVERRIDE, resultOverride));
hiddenFields.add(scope == null ? null : new HiddenInputField("_" + SCOPE, scope));
if (!object.isTransient()) {
// ensure all booleans are included so the pass back TRUE if set.
final List<ObjectAssociation> fields2 = object.getSpecification().getAssociations(Contributed.EXCLUDED);
for (int i = 0; i < fields2.size(); i++) {
final ObjectAssociation field = fields2.get(i);
if (!viewFields.contains(field) && field.getSpecification().containsFacet(BooleanValueFacet.class)) {
final String fieldId = field.getId();
final String value = getValue(context, field.get(object));
hiddenFields.add(new HiddenInputField(fieldId, value));
}
}
}