private void createLocaleSpecificBinderAndLayout(FormFieldFactory formFieldFactory, FormDefinition<T> formDefinition, FormPresenter<T> formPresenter, Locale locale) { localisedBinders.put(locale, formPresenter.createBinder(formDefinition, locale)); log.debug("Creating layout for form named '{}' and locale {}", formDefinition.getName(), locale); final Map<String, Component> components = initialiseAndGetLocaleSpecificComponents(formDefinition, formFieldFactory, locale); localisedLayouts.computeIfAbsent(locale, l -> doCreateLayout(formDefinition.getLayout(), components)); }
private void initialize() { optionsField = formFieldFactory.createField(definition.getField(), locale); layout.addComponent(optionsField); optionsField.addValueChangeListener(e -> { if (e.getOldValue() == null || e.getOldValue() == null) { return; } EditorView<T> oldView = subForm(e.getOldValue()); EditorView<T> newView = subForm(e.getValue()); layout.replaceComponent(oldView.asVaadinComponent(), newView.asVaadinComponent()); }); definition.getForms().forEach(formDefinition -> { ItemProviderStrategy<T> subFormProviderStrategy = create(((ComplexPropertyDefinition<T>) formDefinition).getItemProvider(), formDefinition, itemProviderStrategy); EditorView<T> subForm = getViewProvider().create(formDefinition); subForms.put(formDefinition.getName(), Pair.of(subForm, subFormProviderStrategy)); }); binder = ConfiguredBinder.withPropertySet(propertySetFactory.fromFieldDefinitions(Collections.singletonList(definition.getField()), locale)); binder.forField(optionsField) .withConverter(new StringToOptionDefinitionConverter(definition.getField())) .bind(resolvePropertyNameByLocale(definition.getField().getName(), locale, definition.getField().isI18n())); }
private EditorView<T> addSubForm(VerticalLayout parent, ItemProviderStrategy<T> itemProvider) { // create subform MultiFormDefinition<T> multiFormDefinitionClone = MutableWrapper.wrap(definition); FormDefinitionMutator.accessMutable(multiFormDefinitionClone.getForm()) .setName(getSubFormName(multiFormDefinitionClone)); if (itemProvider == null) { itemProvider = () -> multiFormItemProvider.read().map(t -> orderHandler.getOrCreate(t, multiFormDefinitionClone.getForm().getName(), locale)); } EditorView<T> subForm = getViewProvider().create(multiFormDefinitionClone.getForm(), itemProvider); forms.put(subForm, itemProvider); formOrder.add(subForm); // setup buttons, listeners and layout VerticalLayout wrapLayout = new VerticalLayout(); HorizontalLayout buttonLayout = new HorizontalLayout(); buttonLayout.addComponents( new Button(MagnoliaIcons.ARROW2_N, e -> onMove(parent, wrapLayout, MoveDirection.UP)), new Button(MagnoliaIcons.ARROW2_S, e -> onMove(parent, wrapLayout, MoveDirection.DOWN)), new Button(MagnoliaIcons.TRASH, e -> onDelete(parent, subForm))); buttonLayout.forEach(button -> button.addStyleName(ResurfaceTheme.BUTTON_ICON)); wrapLayout.addComponents(subForm.asVaadinComponent(), buttonLayout); parent.addComponent(wrapLayout, parent.getComponentCount() - 1); return subForm; }