Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 378ce590 by Tony Chemit at 2022-10-17T13:59:11+02:00 Lorsqu'un template de composition détaillé LL est invalide, l'UI permet malgré tout d'exécuter la génération, qui produit une erreur - Closes #2463 - - - - - f773b97b by Tony Chemit at 2022-10-17T13:59:11+02:00 Remove duplicated code - - - - - ae528a49 by Tony Chemit at 2022-10-17T13:59:11+02:00 Move ui validator to the ui module - - - - - 8 changed files: - client/core/src/main/java/fr/ird/observe/client/datasource/validation/ContentMessageTableModel.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUIHandler.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/LonglineCompositionTableModel.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/section/SectionTableModel.java - + client/datasource/editor/ps/.mvn/i18n/parse-validation-messages - + client/datasource/editor/ps/src/main/i18n/getters/validation-messages.getter - + client/datasource/editor/ps/src/main/resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-error-validation.xml - core/api/validation/src/main/filtered-resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-warning-validation.xml → client/datasource/editor/ps/src/main/resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-warning-validation.xml Changes: ===================================== client/core/src/main/java/fr/ird/observe/client/datasource/validation/ContentMessageTableModel.java ===================================== @@ -23,14 +23,10 @@ package fr.ird.observe.client.datasource.validation; */ import org.nuiton.jaxx.validator.swing.SwingValidator; -import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; -import java.util.Collection; -import java.util.Collections; -import java.util.function.Predicate; /** * Created on 07/12/2020. @@ -75,23 +71,4 @@ public class ContentMessageTableModel extends SwingValidatorMessageTableModel { super.removeMessages(editor, scope); } } - - public void removeMessages(Predicate<SwingValidatorMessage> predicate) { - for (int i = getRowCount() - 1; i > -1; i--) { - SwingValidatorMessage error = data.get(i); - if (predicate.test(error)) { - // remove the message - data.remove(i); - fireTableRowsDeleted(i, i); - } - } - } - - public <M extends SwingValidatorMessage> void addMessages(Collection<M> messages) { - data.addAll(messages); - // resort datas - Collections.sort(data); - // notify - fireTableDataChanged(); - } } ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetDetailCompositionUIHandler.java ===================================== @@ -37,7 +37,6 @@ import fr.ird.observe.dto.data.ll.observation.SectionTemplateDto; import fr.ird.observe.dto.data.ll.observation.SetDetailCompositionDto; import fr.ird.observe.dto.form.Form; import io.ultreia.java4all.i18n.I18n; -import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBox; import io.ultreia.java4all.lang.Strings; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -273,11 +272,10 @@ public class SetDetailCompositionUIHandler extends GeneratedSetDetailComposition if (previousIndex == 0) { if (getModel().getStates().isCanGenerate()) { // update section templates list - List<SectionTemplateDto> sectionTemplates = getModel().getStates().getSectionTemplatesTableModel().getNotEmptyData(); - @SuppressWarnings("unchecked") FilterableComboBox<SectionTemplateDto> comboBox = (FilterableComboBox<SectionTemplateDto>) getUi().getSectionsTable().getClientProperty(SECTION_TEMPLATES_EDITOR); - comboBox.setData(sectionTemplates); - //2014-FIXME See why templates are not well reselect in cell editor - //2014-FIXME See cell editor does not loose focus and empty selection when losing focus + List<SectionTemplateDto> sectionTemplates = getModel().getStates().getSectionTemplatesTableModel().getValidData(); + getModel().getStates().getSectionsTableModel().setSectionTemplates(sectionTemplates.isEmpty() ? null : sectionTemplates); + } else { + getModel().getStates().getSectionsTableModel().setSectionTemplates(null); } } break; ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/LonglineCompositionTableModel.java ===================================== @@ -129,10 +129,6 @@ public abstract class LonglineCompositionTableModel<D extends ObserveDto & JavaB return model.getStates().isGenerateHaulingIds(); } - protected boolean isCanGenerate() { - return model.getStates().isCanGenerate(); - } - @Override public void fireTableDataChanged() { // rearrange ids when data has changed ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/composition/section/SectionTableModel.java ===================================== @@ -29,16 +29,20 @@ import fr.ird.observe.client.datasource.editor.ll.data.observation.composition.b import fr.ird.observe.dto.data.ll.observation.BasketDto; import fr.ird.observe.dto.data.ll.observation.SectionDto; import fr.ird.observe.dto.data.ll.observation.SectionTemplateDto; +import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBox; +import io.ultreia.java4all.jaxx.widgets.combobox.FilterableComboBoxCellEditor; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.swing.event.TableModelListener; import java.beans.PropertyChangeListener; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * Created on 12/11/14. @@ -53,6 +57,14 @@ public class SectionTableModel extends LonglineCompositionTableModel<SectionDto> private static final Logger log = LogManager.getLogger(SectionTableModel.class); private FilterableComboBoxCellEditor sectionTemplateEditor; private SetDetailCompositionUIValidationHelper validationHelper; + /** + * All section templates available (may be changed when selecting another section (to just get the possible compliant one (matching basket count) + */ + private List<SectionTemplateDto> sectionTemplates; + /** + * Available section templates for the selected section (all are compliant with the section basket count) + */ + private List<SectionTemplateDto> availableSectionTemplates; public SectionTableModel(SetDetailCompositionUIModel model) { super(model); @@ -150,7 +162,7 @@ public class SectionTableModel extends LonglineCompositionTableModel<SectionDto> break; case 2: // can change template if in generate mode - result = isCanGenerate(); + result = isCanUseTemplate(); break; default: throw new IllegalStateException("Can't come here"); @@ -159,6 +171,10 @@ public class SectionTableModel extends LonglineCompositionTableModel<SectionDto> return result; } + protected boolean isCanUseTemplate() { + return getModel().getStates().isCanGenerate() && availableSectionTemplates != null && !availableSectionTemplates.isEmpty(); + } + public void init() { validationHelper = getModel().getStates().getValidationHelper(); PropertyChangeListener selectedSectionChanged = evt -> { @@ -228,6 +244,7 @@ public class SectionTableModel extends LonglineCompositionTableModel<SectionDto> } finally { validationHelper.setObjectValueAdjusting(false); } + initSectionTemplates(newSection); } public void setSectionTemplateEditor(FilterableComboBoxCellEditor sectionTemplateEditor) { @@ -265,4 +282,25 @@ public class SectionTableModel extends LonglineCompositionTableModel<SectionDto> validationHelper.whenBasketChanged(); } } + + public void setSectionTemplates(List<SectionTemplateDto> sectionTemplates) { + this.sectionTemplates = sectionTemplates; + SectionDto selectedRow = getSelectedRow(); + initSectionTemplates(selectedRow); + } + + private void initSectionTemplates(SectionDto section) { + if (sectionTemplates != null) { + if (section == null) { + availableSectionTemplates = Collections.emptyList(); + } else { + int basketSize = section.getBasketSize(); + availableSectionTemplates = sectionTemplates.stream().filter(t -> t.isCompliantWithBasketCount(basketSize)).collect(Collectors.toList()); + } + @SuppressWarnings("unchecked") FilterableComboBox<SectionTemplateDto> comboBox = (FilterableComboBox<SectionTemplateDto>) sectionTemplateEditor.getComponent(); + comboBox.setData(availableSectionTemplates); + //2014-FIXME See why templates are not well reselect in cell editor + //2014-FIXME See cell editor does not loose focus and empty selection when losing focus + } + } } ===================================== client/datasource/editor/ps/.mvn/i18n/parse-validation-messages ===================================== ===================================== client/datasource/editor/ps/src/main/i18n/getters/validation-messages.getter ===================================== @@ -0,0 +1,4 @@ +observe.data.ps.logbook.Route.validation.date.after.currentPsCommonTrip.startDate +observe.data.ps.logbook.Route.validation.date.before.currentPsCommonTrip.endDate +observe.referential.Referential.validation.label1.untranslated +observe.referential.Referential.validation.label3.untranslated ===================================== client/datasource/editor/ps/src/main/resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-error-validation.xml ===================================== @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + #%L + ObServe Client :: DataSource :: Editor :: PS + %% + Copyright (C) 2008 - 2022 IRD, Ultreia.io + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<!DOCTYPE validators PUBLIC + "-//Apache Struts//XWork Validator 1.0.3//EN" + "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> +<validators> + <field name="label1"> + <field-validator type="mandatoryString" short-circuit="true"> + <message/> + </field-validator> + </field> + <field name="label2"> + <field-validator type="mandatoryString" short-circuit="true"> + <message/> + </field-validator> + </field> + <field name="label3"> + <field-validator type="mandatoryString" short-circuit="true"> + <message/> + </field-validator> + </field> +</validators> ===================================== core/api/validation/src/main/filtered-resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-warning-validation.xml → client/datasource/editor/ps/src/main/resources/fr/ird/observe/dto/data/ps/dcp/FloatingObjectPreset-create-warning-validation.xml ===================================== @@ -1,21 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- #%L - ObServe Core :: API :: Validation + ObServe Client :: DataSource :: Editor :: PS %% Copyright (C) 2008 - 2022 IRD, Ultreia.io %% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. This program is distributed in the hope that it will be useful, + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. You should have received a copy of the GNU General Public + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/gpl-3.0.html>. #L% - --><!DOCTYPE validators PUBLIC + --> + +<!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.3//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd"> <validators> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/955367edacd2f28401994fe61... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/955367edacd2f28401994fe61... You're receiving this email because of your account on gitlab.com.