Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 7a361345 by Tony Chemit at 2024-02-23T09:54:32+01:00 update pom - - - - - 10414880 by Tony Chemit at 2024-02-23T09:55:05+01:00 Exception lors de la modification des statuts d'une marée - See #2835 - - - - - 8 changed files: - client/datasource/editor/api/src/main/i18n/getters/java.getter - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java - client/runner/pom.xml - client/runner/src/main/i18n/translations/client-runner_en_GB.properties - client/runner/src/main/i18n/translations/client-runner_es_ES.properties - client/runner/src/main/i18n/translations/client-runner_fr_FR.properties - pom.xml - server/runner/pom.xml Changes: ===================================== client/datasource/editor/api/src/main/i18n/getters/java.getter ===================================== @@ -325,6 +325,9 @@ observe.ui.tree.action.searchOrCreate.tip observe.ui.tree.action.selectAll.tip observe.ui.tree.action.unselectAll.tip observe.ui.tree.loaded +observe.ui.tree.need.add.disabled.groupBy.message +observe.ui.tree.need.add.null.groupBy.message +observe.ui.tree.need.reload.title observe.ui.tree.reload observe.ui.type.action.create observe.ui.type.action.delete ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/ropen/actions/SaveContentRootOpenableUIAdapter.java ===================================== @@ -29,15 +29,21 @@ import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRoo import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRootOpenableUIModel; import fr.ird.observe.client.datasource.editor.api.content.data.ropen.ContentRootOpenableUINavigationNode; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTree; +import fr.ird.observe.client.datasource.editor.api.navigation.NavigationTreeModel; import fr.ird.observe.client.datasource.editor.api.navigation.NavigationUI; import fr.ird.observe.client.datasource.editor.api.navigation.tree.capability.ReferenceContainerCapability; import fr.ird.observe.client.datasource.editor.api.navigation.tree.root.RootNavigationNode; import fr.ird.observe.dto.data.DataGroupByDto; import fr.ird.observe.dto.data.RootOpenableDto; import fr.ird.observe.dto.reference.DataDtoReference; +import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.navigation.tree.NavigationResult; +import fr.ird.observe.navigation.tree.io.request.ToolkitTreeFlatModelRootRequest; +import fr.ird.observe.navigation.tree.navigation.NavigationTreeConfig; +import io.ultreia.java4all.i18n.I18n; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.nuiton.jaxx.runtime.swing.JOptionPanes; import java.util.Objects; @@ -63,13 +69,13 @@ public class SaveContentRootOpenableUIAdapter<D extends RootOpenableDto, U exten // get old groupBy dto @SuppressWarnings("unchecked") DataGroupByDto<D> oldGroupByDto = (DataGroupByDto<D>) node.getParentReference(); - // new groupBy value - String newGroupByValue = oldGroupByDto.definition().toGroupByValue(bean, ((RootNavigationNode) node.getRoot()).getInitializer().getRequest().getGroupByFlavor()); - // is groupBy has changed? - boolean groupByChanged = !Objects.equals(oldGroupByDto.getFilterValue(), newGroupByValue); + ToolkitTreeFlatModelRootRequest navigationRequest = ((RootNavigationNode) node.getRoot()).getInitializer().getRequest(); + ComputeNavigationRequestChange<D,U> computeNavigationRequestChange = new ComputeNavigationRequestChange<>(oldGroupByDto, navigationRequest, bean); + computeNavigationRequestChange.warnUserIfNecessary(ui); + // We need to inject ot node the new reference (it could does not know the id if not persisted) // As I prefer to use a unique code (for persisted or not, keep it like this) - node = updateReference(dataSourceEditor.getNavigationUI(), node, bean.getId(), oldGroupByDto, groupByChanged, newGroupByValue); + node = updateReference(dataSourceEditor.getNavigationUI(), node, computeNavigationRequestChange); tree.reSelectSafeNodeThen(node, () -> { dataSourceEditor.getModel().resetFromPreviousUi(ui); @@ -79,17 +85,125 @@ public class SaveContentRootOpenableUIAdapter<D extends RootOpenableDto, U exten }); } + public static class ComputeNavigationRequestChange<D extends RootOpenableDto, U extends ContentRootOpenableUI<D, U>> { + private final DataGroupByDto<D> oldGroupByDto; + private final ToolkitTreeFlatModelRootRequest navigationRequest; + private final D bean; + private final String newGroupByValue; + private final boolean groupByChanged; + private final boolean changeNavigationRequest; + private final boolean addNullGroupBy; + private final boolean addDisabledGroupBy; + + ComputeNavigationRequestChange(DataGroupByDto<D> oldGroupByDto, ToolkitTreeFlatModelRootRequest navigationRequest, D bean) { + this.oldGroupByDto = oldGroupByDto; + this.navigationRequest = navigationRequest; + this.bean = bean; + this.newGroupByValue = oldGroupByDto.definition().toGroupByValue(bean, navigationRequest.getGroupByFlavor()); + this.groupByChanged = !Objects.equals(oldGroupByDto.getFilterValue(), newGroupByValue); + boolean changeNavigationRequest = false; + boolean addNullGroupBy = false; + boolean addDisabledGroupBy = false; + if (groupByChanged) { + // check if old navigation request is compliant with new groupBy value + if (newGroupByValue == null) { + if (!navigationRequest.isLoadNullGroupBy()) { + // need to add null groupBy in navigation request + changeNavigationRequest = true; + addNullGroupBy = true; + } + } else { + if (oldGroupByDto.definition().isQualitative() && !navigationRequest.isLoadDisabledGroupBy()) { + ReferentialDtoReference groupByObjectValue = (ReferentialDtoReference) oldGroupByDto.definition().toGroupByObjectValue(bean); + if (groupByObjectValue.isDisabled()) { + // need to add disabled groupBy in navigation request + changeNavigationRequest = true; + addDisabledGroupBy = true; + } + } + } + } + this.changeNavigationRequest = changeNavigationRequest; + this.addNullGroupBy = addNullGroupBy; + this.addDisabledGroupBy = addDisabledGroupBy; + } + + public void warnUserIfNecessary(U ui) { + if (!isChangeNavigationRequest()) { + return; + } + // display message to user + if (isAddNullGroupBy()) { + // add null groupBy in navigation request + JOptionPanes.displayWarning(ui, I18n.t("observe.ui.tree.need.reload.title"), I18n.t("observe.ui.tree.need.add.null.groupBy.message")); + return; + } + if (isAddDisabledGroupBy()) { + // add disabled groupBy in navigation request + JOptionPanes.displayWarning(ui, I18n.t("observe.ui.tree.need.reload.title"), I18n.t("observe.ui.tree.need.add.disabled.groupBy.message")); + } + } + + public DataGroupByDto<D> getOldGroupByDto() { + return oldGroupByDto; + } + + public ToolkitTreeFlatModelRootRequest getNavigationRequest() { + return navigationRequest; + } + + public D getBean() { + return bean; + } + + public String getNewGroupByValue() { + return newGroupByValue; + } + + public boolean isGroupByChanged() { + return groupByChanged; + } + + public boolean isChangeNavigationRequest() { + return changeNavigationRequest; + } + + public boolean isAddNullGroupBy() { + return addNullGroupBy; + } + + public boolean isAddDisabledGroupBy() { + return addDisabledGroupBy; + } + + NavigationResult updateNavigationResult(NavigationTreeModel navigationTreeModel) { + NavigationTreeConfig navigationTreeConfig = navigationTreeModel.getConfig(); + if (isAddNullGroupBy()) { + navigationTreeConfig.setLoadNullGroupBy(true); + navigationTreeModel.getClientConfig().saveTreeConfig(navigationTreeConfig); + navigationRequest.setLoadNullGroupBy(true); + } + if (isAddDisabledGroupBy()) { + navigationTreeConfig.setLoadDisabledGroupBy(true); + navigationRequest.setLoadDisabledGroupBy(true); + navigationTreeModel.getClientConfig().saveTreeConfig(navigationTreeConfig); + } + return navigationTreeModel.updateNavigationResult(); + } + } + public ContentRootOpenableUINavigationNode updateReference(NavigationUI navigationUI, ContentRootOpenableUINavigationNode node, - String id, - DataGroupByDto<D> oldGroupByDto, - boolean groupByChanged, - String newGroupByValue) { + ComputeNavigationRequestChange<D, U> computeNavigationRequestChange) { boolean notPersisted = node.getInitializer().isNotPersisted(); + String id = computeNavigationRequestChange.getBean().getId(); + DataGroupByDto<D> oldGroupByDto = computeNavigationRequestChange.getOldGroupByDto(); + boolean groupByChanged = computeNavigationRequestChange.isGroupByChanged(); + String newGroupByValue = computeNavigationRequestChange.getNewGroupByValue(); ContentRootListUINavigationNode parent = node.getParent(); if (groupByChanged) { // the navigation must be updated, new parent groupBy value has changed - NavigationResult navigationResult = navigationUI.getTree().getModel().updateNavigationResult(); + NavigationResult navigationResult = computeNavigationRequestChange.updateNavigationResult(navigationUI.getTree().getModel()); // groupBy has changed (remove node from parent) RootNavigationNode rootNode = (RootNavigationNode) node.getRoot(); node.removeFromParent(); ===================================== client/runner/pom.xml ===================================== @@ -140,6 +140,11 @@ <artifactId>jaxb-runtime</artifactId> <scope>runtime</scope> </dependency> + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-converter</artifactId> + <scope>runtime</scope> + </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>client-datasource-editor-api-test</artifactId> ===================================== client/runner/src/main/i18n/translations/client-runner_en_GB.properties ===================================== @@ -927,6 +927,9 @@ observe.ui.tree.action.searchOrCreate.tip=Search or create a new trip observe.ui.tree.action.selectAll.tip=Select All observe.ui.tree.action.unselectAll.tip=Unselect All observe.ui.tree.loaded=Tree reloaded (in %s) +observe.ui.tree.need.add.disabled.groupBy.message=The current navigation tree configuration do not allow to display disabled groupBy, configuration will be updated to enable this and make possible to display the saved trip. +observe.ui.tree.need.add.null.groupBy.message=The current navigation tree configuration do not allow to display not grouped groupBy, configuration will be updated to enable this and make possible to display the saved trip. +observe.ui.tree.need.reload.title=Navigation structure modification required observe.ui.tree.reload=Reload tree structure observe.ui.type.action.create=Create a new %s observe.ui.type.action.delete=Delete selected %s ===================================== client/runner/src/main/i18n/translations/client-runner_es_ES.properties ===================================== @@ -927,6 +927,9 @@ observe.ui.tree.action.searchOrCreate.tip=Search or create a new trip \#TODO observe.ui.tree.action.selectAll.tip=Seleccionar todo observe.ui.tree.action.unselectAll.tip=Deseleccionar todo observe.ui.tree.loaded=Tree reloaded (in %s) +observe.ui.tree.need.add.disabled.groupBy.message=The current navigation tree configuration do not allow to display disabled groupBy, configuration will be updated to enable this and make possible to display the saved trip. #TODO +observe.ui.tree.need.add.null.groupBy.message=The current navigation tree configuration do not allow to display not grouped groupBy, configuration will be updated to enable this and make possible to display the saved trip. #TODO +observe.ui.tree.need.reload.title=Navigation structure modification required #TODO observe.ui.tree.reload=Reload tree structure observe.ui.type.action.create=Crear un objeto de tipo '%s' observe.ui.type.action.delete=Eliminar el objeto de tipo '%s' seleccionado ===================================== client/runner/src/main/i18n/translations/client-runner_fr_FR.properties ===================================== @@ -927,6 +927,9 @@ observe.ui.tree.action.searchOrCreate.tip=Rechercher ou créer une nouvelle mar observe.ui.tree.action.selectAll.tip=Tout sélectionner observe.ui.tree.action.unselectAll.tip=Tout désélectionner observe.ui.tree.loaded=Arbre rechargé (en %s) +observe.ui.tree.need.add.disabled.groupBy.message=La configuration actuelle de l'arbre de navigation ne permet pas d'afficher une modalité désactivée, elle sera modifiée dans ce sens afin de pouvoir afficher cette marée après enregistrement. +observe.ui.tree.need.add.null.groupBy.message=La configuration actuelle de l'arbre de navigation ne permet pas d'afficher une modalité nulle, elle sera modifiée dans ce sens afin de pouvoir afficher cette marée après enregistrement. +observe.ui.tree.need.reload.title=Adaptation de la structure de l'arbre requise observe.ui.tree.reload=Chargement de la structure de l'arbre observe.ui.type.action.create=Créer un objet de type '%s' observe.ui.type.action.delete=Supprimer l'objet de type '%s' sélectionné ===================================== pom.xml ===================================== @@ -23,7 +23,7 @@ <parent> <groupId>io.ultreia.maven</groupId> <artifactId>pom</artifactId> - <version>2024.03</version> + <version>2024.09</version> </parent> <groupId>fr.ird.observe</groupId> <artifactId>ird-observe</artifactId> @@ -113,7 +113,10 @@ <!-- build timestamp configuration --> <maven.build.timestamp.format>dd/MM/yyyy HH:mm z</maven.build.timestamp.format> <buildDate>${maven.build.timestamp}</buildDate> - <lib.version.java4all.decorator>0.0.15</lib.version.java4all.decorator> + <!-- >>> Sealed version --> + <lib.version.java4all.jaxx>3.0.25</lib.version.java4all.jaxx> + <lib.version.java4all.validation>1.0.3</lib.version.java4all.validation> + <lib.version.java4all.i18n>4.0-beta-26</lib.version.java4all.i18n> <lib.version.ognl>3.1.29</lib.version.ognl> <!-- FIXME <lib.version.ognl>3.3.2</lib.version.ognl>--> <lib.version.h2>1.4.196</lib.version.h2> @@ -129,6 +132,7 @@ <!-- FIXME <lib.version.jts>1.18.2</lib.version.jts>--> <lib.version.hsqldb>2.7.0</lib.version.hsqldb> <!-- FIXME <lib.version.hsqldb>2.7.1</lib.version.hsqldb>--> + <!-- <<< Sealed version --> <!-- license header configuration --> <license.licenseName>gpl_v3</license.licenseName> <license.organizationName>IRD, Ultreia.io</license.organizationName> ===================================== server/runner/pom.xml ===================================== @@ -87,6 +87,11 @@ <artifactId>flexmark-util-data</artifactId> <scope>runtime</scope> </dependency> + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>nuiton-converter</artifactId> + <scope>runtime</scope> + </dependency> </dependencies> <build> <finalName>${applicationName}-${project.version}</finalName> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/80d425d35a770af273415be8f... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/80d425d35a770af273415be8f... You're receiving this email because of your account on gitlab.com.