private Optional<FormField> findKeyField(FormClass formClass) { if(formClass.isSubForm() && formClass.getSubFormKind().isPeriod()) { for (FormField formField : formClass.getFields()) { if(formField.getType() instanceof PeriodType && formField.isKey()) { return Optional.of(formField); } } } return Optional.empty(); }
private boolean isSubFormKey(FormClass owner, FormElement element) { if(element instanceof FormField) { FormField field = (FormField) element; return owner.isSubForm() && owner.getSubFormKind().isPeriod() && field.isKey() && field.getType() instanceof PeriodType; } return true; }
public static FormClass patch(FormClass formClass) { if(formClass.isSubForm()) { if(formClass.getSubFormKind().isPeriod()) { return ensureSubFormHasPeriodField( removeExtraSubFormPeriodField(formClass)); } } return formClass; }
SubFormViewModelBuilder(FormStore formStore, FormTree parentTree, FormTree.Node node, ActivePeriodMemory memory) { this.fieldId = node.getFieldId(); this.subFormId = ((SubFormReferenceType) node.getType()).getClassId(); this.subTree = parentTree.subTree(subFormId); this.subFormKind = subTree.getRootFormClass().getSubFormKind(); this.placeholderRecordId = ResourceId.generateId(); this.formBuilder = new FormInputViewModelBuilder(formStore, subTree, memory); this.keyField = findKeyField(subTree.getRootFormClass()); this.memory = memory; if(subFormKind.isPeriod()) { assert keyField.isPresent() : "missing period key field"; } }
public static FieldsHolderWidgetContainer subform(final FormDesigner formDesigner, FormField formField, final FormClass subForm, ResourceId parentId) { FieldsHolderWidgetContainer container = new FieldsHolderWidgetContainer(formDesigner, subForm, parentId); container.isSubform = true; container.subFormField = formField; container.getPanel().getPanel().setOnRemoveConfirmationCallback(new ClickHandler() { @Override public void onClick(final ClickEvent event) { formDesigner.getModel().removeSubform(subForm); formDesigner.getDropControllerRegistry().unregister(subForm.getId()); formDesigner.getContainerPresenter().reset(); } }); container.getPanel().getPanel().getWidgetContainer().setVisible(false); if (subForm.getSubFormKind().isPeriod()) { container.getPanel().getPanel().getSubformTabContainer().add(new PeriodTabStrip(subForm.getSubFormKind())); } container.syncWithModel(); // force ui update return container; }