From 1cf5a9a0c5c082cb6bc91711d41a82156230cc18 Mon Sep 17 00:00:00 2001 From: Gleb Gorelov Date: Tue, 18 May 2021 11:49:44 +0400 Subject: [PATCH] Refactor XML elements of Formatters Haulmont/jmix-ui#452 --- .../formatter/FormatterLoadFactory.java | 10 ++-- .../loader/AbstractComponentLoader.java | 20 +++++-- .../loader/AbstractValuePickerLoader.java | 17 ------ .../ui/xml/layout/loader/LabelLoader.java | 2 +- .../ui/xml/layout/loader/TextFieldLoader.java | 2 +- .../resources/io/jmix/ui/screen/layout.xsd | 60 +++++++++---------- .../screen/formatter-test-screen.xml | 12 +++- 7 files changed, 60 insertions(+), 63 deletions(-) diff --git a/ui/src/main/java/io/jmix/ui/component/formatter/FormatterLoadFactory.java b/ui/src/main/java/io/jmix/ui/component/formatter/FormatterLoadFactory.java index 9d1e8c93e..4dadaff06 100644 --- a/ui/src/main/java/io/jmix/ui/component/formatter/FormatterLoadFactory.java +++ b/ui/src/main/java/io/jmix/ui/component/formatter/FormatterLoadFactory.java @@ -37,11 +37,11 @@ public class FormatterLoadFactory { protected final Map> FORMATTERS_MAP = ImmutableMap.>builder() - .put("classNameFormatter", this::loadClassNameFormatter) - .put("collectionFormatter", this::loadCollectionFormatter) - .put("customFormatter", this::loadCustomFormatter) - .put("dateFormatter", this::loadDateFormatter) - .put("numberFormatter", this::loadNumberFormatter) + .put("className", this::loadClassNameFormatter) + .put("collection", this::loadCollectionFormatter) + .put("custom", this::loadCustomFormatter) + .put("date", this::loadDateFormatter) + .put("number", this::loadNumberFormatter) .build(); @Autowired diff --git a/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractComponentLoader.java b/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractComponentLoader.java index b05d3068b..c501a1c67 100644 --- a/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractComponentLoader.java +++ b/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractComponentLoader.java @@ -772,12 +772,24 @@ protected Action loadValuePickerDeclarativeAction(ActionsHolder actionsHolder, E @Nullable protected Formatter loadFormatter(Element element) { + Element formatterElement = element.element("formatter"); + if (formatterElement == null) { + return null; + } + + int size = formatterElement.elements().size(); + if (size != 1) { + throw new GuiDevelopmentException("Only one formatter needs to be defined. " + + "The current number of formatters is " + size, getContext(), + "Component ID", resultComponent.getId()); + } + + Element childElement = formatterElement.elements().get(0); FormatterLoadFactory loadFactory = applicationContext.getBean(FormatterLoadFactory.class); - for (Element childElement : element.elements()) { - if (loadFactory.isFormatter(childElement)) { - return loadFactory.createFormatter(childElement); - } + if (loadFactory.isFormatter(childElement)) { + return loadFactory.createFormatter(childElement); } + return null; } diff --git a/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractValuePickerLoader.java b/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractValuePickerLoader.java index 0634c2daf..50054a85a 100644 --- a/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractValuePickerLoader.java +++ b/ui/src/main/java/io/jmix/ui/xml/layout/loader/AbstractValuePickerLoader.java @@ -55,21 +55,4 @@ protected void addDefaultActions() { protected Action loadDeclarativeAction(ActionsHolder actionsHolder, Element element) { return loadValuePickerDeclarativeAction(actionsHolder, element); } - - @Override - protected void loadFormatter(HasFormatter component, Element element) { - Element formatterElement = element.element("formatter"); - if (formatterElement == null) { - return; - } - - int size = formatterElement.elements().size(); - if (size != 1) { - throw new GuiDevelopmentException("Only one formatter needs to be defined. " + - "The current number of formatters is " + size, getContext(), - "Component ID", ((Component) component).getId()); - } - - super.loadFormatter(component, formatterElement); - } } diff --git a/ui/src/main/java/io/jmix/ui/xml/layout/loader/LabelLoader.java b/ui/src/main/java/io/jmix/ui/xml/layout/loader/LabelLoader.java index 97d653d09..6473ce775 100644 --- a/ui/src/main/java/io/jmix/ui/xml/layout/loader/LabelLoader.java +++ b/ui/src/main/java/io/jmix/ui/xml/layout/loader/LabelLoader.java @@ -60,6 +60,6 @@ public void loadComponent() { loadResponsive(resultComponent, element); loadCss(resultComponent, element); - resultComponent.setFormatter(loadFormatter(element)); + loadFormatter(resultComponent, element); } } diff --git a/ui/src/main/java/io/jmix/ui/xml/layout/loader/TextFieldLoader.java b/ui/src/main/java/io/jmix/ui/xml/layout/loader/TextFieldLoader.java index 43b6f0122..43c4816af 100644 --- a/ui/src/main/java/io/jmix/ui/xml/layout/loader/TextFieldLoader.java +++ b/ui/src/main/java/io/jmix/ui/xml/layout/loader/TextFieldLoader.java @@ -29,7 +29,7 @@ public void loadComponent() { loadDatatype(resultComponent, element); - resultComponent.setFormatter(loadFormatter(element)); + loadFormatter(resultComponent, element); loadInputPrompt(resultComponent, element); loadCaseConversion(resultComponent, element); diff --git a/ui/src/main/resources/io/jmix/ui/screen/layout.xsd b/ui/src/main/resources/io/jmix/ui/screen/layout.xsd index faad58db2..785aef4fe 100644 --- a/ui/src/main/resources/io/jmix/ui/screen/layout.xsd +++ b/ui/src/main/resources/io/jmix/ui/screen/layout.xsd @@ -1347,17 +1347,15 @@ - - - - - - - - - - - + + + + + + + + + @@ -1713,9 +1711,9 @@ - - - + + + @@ -1886,9 +1884,9 @@ - - - + + + @@ -2185,7 +2183,7 @@ - + @@ -2212,7 +2210,7 @@ - + @@ -2652,16 +2650,19 @@ - - - + + + - + + + + @@ -2769,9 +2770,10 @@ - - - + + + + @@ -4001,12 +4003,6 @@ - - - - - - diff --git a/ui/src/test/resources/formatter/screen/formatter-test-screen.xml b/ui/src/test/resources/formatter/screen/formatter-test-screen.xml index 44e761b9a..16e4f3bbb 100644 --- a/ui/src/test/resources/formatter/screen/formatter-test-screen.xml +++ b/ui/src/test/resources/formatter/screen/formatter-test-screen.xml @@ -17,13 +17,19 @@