public Set<RepeatingSubFormPanel> getRepeatingSubformPanels() { Set<RepeatingSubFormPanel> set = Sets.newHashSet(); for (Map.Entry<FormClass, SubFormPanel> entry : subformPanels.entrySet()) { if (entry.getKey().isSubForm() && entry.getKey().getSubFormKind() == SubFormKind.REPEATING) { set.add((RepeatingSubFormPanel) entry.getValue()); } } return set; }
private String subformKey(FormRecordSnapshotEntity snapshot) { if (formClass.getSubFormKind() == SubFormKind.REPEATING) { return ""; } else { return getPeriodKey(snapshot); } }
public PeriodObserver(FormClass formClass, CursorObserver<FieldValue> observer) { periodType = formClass.getSubFormKind().getPeriodType(); this.observer = observer; }
public SubFormPanel createSubformPanel(FormClass subForm, int depth, RelevanceHandler relevanceHandler, PanelFiller filler) { final SubFormPanel panel; if (subForm.getSubFormKind() == SubFormKind.REPEATING) { panel = new RepeatingSubFormPanel(subForm, model); } else { panel = new PeriodSubFormPanel(model, subForm, relevanceHandler, filler, depth); } subformPanels.put(subForm, panel); return panel; }
public static CursorObserver<ResourceId> fromRecordId(FormClass formClass, final CursorObserver<FieldValue> observer) { final ResourceId formId = formClass.getId(); final PeriodType periodType = formClass.getSubFormKind().getPeriodType(); return new CursorObserver<ResourceId>() { @Override public void onNext(ResourceId value) { observer.onNext(periodType.fromSubFormKey(new RecordRef(formId, value))); } @Override public void done() { observer.done(); } }; } }
private PeriodTabStrip createTabStrip() { PeriodTabStrip tabStrip = new PeriodTabStrip(subForm.getSubFormKind()); tabStrip.addValueChangeHandler(new ValueChangeHandler<Tab>() { @Override public void onValueChange(ValueChangeEvent<Tab> event) { onTabChange(); } }); String key = formModel.getStateProvider().getString("subform.kind." + subForm.getSubFormKind().name()); if (!Strings.isNullOrEmpty(key)) { tabStrip.setValue(key, false); } return tabStrip; }
private String periodKeyFromRecordId(ResourceId subFormRecordId) { RecordRef ref = new RecordRef(formClass.getId(), subFormRecordId); PeriodType periodType = formClass.getSubFormKind().getPeriodType(); return periodType.fromSubFormKey(ref).toString(); }
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(); }
/** * Previously, when forms were cloned, the 'period' field was cloned along with it but * given a new id in the form 'p34243423'. The routine above then added another field with the * id 'period'. This removes the extra field. * */ private static FormClass removeExtraSubFormPeriodField(FormClass formClass) { ListIterator<FormElement> it = formClass.getElements().listIterator(); while(it.hasNext()) { FormElement element = it.next(); if(element instanceof FormField) { FormField field = (FormField) element; if (field.getType().equals(formClass.getSubFormKind().getPeriodType()) && field.isKey() && !field.getId().equals(PERIOD_FIELD_ID) && field.getId().asString().startsWith("p")) { it.remove(); } } } return formClass; }
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; }
private static FormClass ensureSubFormHasPeriodField(FormClass formClass) { Optional<FormField> period = formClass.getFieldIfPresent(PERIOD_FIELD_ID); if(period.isPresent()) { return formClass; } // Add period field FormField periodField = new FormField(ResourceId.valueOf("period")); periodField.setLabel(fieldName(formClass.getSubFormKind())); periodField.setType(formClass.getSubFormKind().getPeriodType()); periodField.setKey(true); periodField.setRequired(true); periodField.setVisible(true); formClass.getElements().add(0, periodField); return formClass; }
private void addSubForm(FormTree formTree, FormTree.Node node) { SubFormReferenceType subFormType = (SubFormReferenceType) node.getType(); FormTree subTree = formTree.subTree(subFormType.getClassId()); SubFormKind subFormKind = subTree.getRootFormClass().getSubFormKind(); if(subFormKind == SubFormKind.REPEATING) { RepeatingSubFormPanel subPanel = new RepeatingSubFormPanel(formSource, node, subTree, inputHandler, existingRecord); panel.add(subPanel, new CssFloatLayoutContainer.CssFloatData(1)); repeatingSubForms.add(subPanel); } else { KeyedSubFormPanel subPanel = new KeyedSubFormPanel(recordRef, formSource, node, subTree, inputHandler, existingRecord); panel.add(subPanel, new CssFloatLayoutContainer.CssFloatData(1)); keyedSubFormPanels.add(subPanel); } }
if (field.getType() instanceof SubFormReferenceType) { FormClass subForm = model.getSubFormByOwnerFieldId(field.getId()); if (subForm.getSubFormKind() != SubFormKind.REPEATING) { // for repeating we create it internally in sub SimpleFormPanel Promise<Void> subFormWidgetsPromise = createWidgets(subForm, fieldUpdated); promises.add(subFormWidgetsPromise);
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; }
version.setSubformKind(formClass.getSubFormKind()); version.setSubformKey(subformKey(snapshot));
this.existingParentRecord = existingParentRecord; selector = createSelector(subTree.getRootFormClass().getSubFormKind(), new FieldUpdater() { @Override public void update(FieldInput input) {