Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: b24c2861 by Tony CHEMIT at 2018-09-22T11:54:43Z [PS] La création automatique d'une calée ne fonctionne plus (Closes #1075) - Add a NavigationTree.selectSafeNode method to skip any check on selected screen - Review the flow of OpenableUI to do afterSave extra code at the right place - - - - - 23 changed files: - client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectOpenNodeUIAction.java - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTree.java Changes: ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java ===================================== @@ -88,7 +88,7 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); selectedNode = tree.getActivitySeineNode(selectedNode, dataContext.getOpenActivitySeineId()); - tree.selectNode(selectedNode); + tree.selectSafeNode(selectedNode); // on conserve le path de l'activité TreePath path = tree.getSelectionPath(); @@ -127,7 +127,7 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { // selection du noeud de l'activity ouverte NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); selectedNode = tree.getActivityLonglineNode(selectedNode, dataContext.getOpenActivitySeineId()); - tree.selectNode(selectedNode); + tree.selectSafeNode(selectedNode); // on conserve le path de l'activité TreePath path = tree.getSelectionPath(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java ===================================== @@ -107,7 +107,7 @@ public class CloseOpenUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport node = tree.getChild(selectedNode, id); - tree.selectNode(node); + tree.selectSafeNode(node); ContentOpenableUI selectedUI = (ContentOpenableUI) applicationContext.getContentUIManager().getSelectedContentUI(); @@ -117,7 +117,7 @@ public class CloseOpenUIAction extends AbstractContentUIAction { SwingUtilities.invokeLater(() -> { // retour sur le noeud parent - tree.selectNode(selectedNode); + tree.selectSafeNode(selectedNode); }); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java ===================================== @@ -96,7 +96,7 @@ public class MoveActivityLonglinesUIAction extends MoveMultipleDataUIActionSuppo treeHelper.reloadNodeSubTree(newActivitiesNode); // Let's put the focus on the activities node which received the activities - treeHelper.selectNode(newActivitiesNode); + treeHelper.selectSafeNode(newActivitiesNode); } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java ===================================== @@ -96,7 +96,7 @@ public class MoveActivitySeinesUIAction extends MoveMultipleDataUIActionSupport< treeHelper.reloadNodeSubTree(newActivitiesNode); // Let's put the focus on the activities node which received the activities - treeHelper.selectNode(newActivitiesNode); + treeHelper.selectSafeNode(newActivitiesNode); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java ===================================== @@ -104,7 +104,7 @@ public class MoveRoutesUIAction extends MoveMultipleDataUIActionSupport<RoutesUI // // That's why, if we do this before the trip is opened, // we will end up with an incoherent list view (some buttons will be deactivated while they should be activated for instance) - treeHelper.selectNode(newRoutesNode); + treeHelper.selectSafeNode(newRoutesNode); } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java ===================================== @@ -73,7 +73,7 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport { int position = moveData(oldParentNode.getId(), newParentId, dataId); - treeHelper.selectNode(newParentNode); + treeHelper.selectSafeNode(newParentNode); treeHelper.removeNode(node); @@ -87,7 +87,7 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport { treeHelper.reloadNode(oldParentNode, false); treeHelper.reloadNode(newParentNode, false); - treeHelper.selectNode(newNode); + treeHelper.selectSafeNode(newNode); } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java ===================================== @@ -30,8 +30,8 @@ import fr.ird.observe.client.ui.content.list.ContentListUI; import fr.ird.observe.client.ui.tree.navigation.NavigationTree; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.dto.referential.GearType; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.util.List; import java.util.Optional; @@ -111,7 +111,7 @@ public abstract class MoveTripsUIAction<U extends ContentListUI<?, ?, ?, ?>> ext treeHelper.reloadNode(oldParentNode, true); treeHelper.reloadNode(newProgramNode, true); - treeHelper.selectNode(newProgramNode); + treeHelper.selectSafeNode(newProgramNode); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java ===================================== @@ -73,7 +73,7 @@ public class ReOpenUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); NavigationTreeNodeSupport node = tree.getChild(selectedNode, id); - tree.selectNode(node); + tree.selectSafeNode(node); openUI = (ContentOpenableUI<?, ?>) ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java ===================================== @@ -59,7 +59,7 @@ public class ResetEditUIAction extends AbstractContentUIAction { NavigationTree tree = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport parentNode = tree.getSelectedNode().getParent(); tree.removeNode(tree.getSelectedNode()); - tree.selectNode(parentNode); + tree.selectSafeNode(parentNode); } else { ui.resetEdit(); } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java ===================================== @@ -79,7 +79,7 @@ public class SelectNodeUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); NavigationTreeNodeSupport nodeToSelect = tree.getChild(selectedNode, dataReference.getId()); - SwingUtilities.invokeLater(() -> tree.selectNode(nodeToSelect)); + SwingUtilities.invokeLater(() -> tree.selectSafeNode(nodeToSelect)); return; } @@ -92,6 +92,6 @@ public class SelectNodeUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) source.getClientProperty(NODE); Objects.requireNonNull(node); - SwingUtilities.invokeLater(() -> getMainUI().getNavigationUI().getTree().selectNode(node)); + SwingUtilities.invokeLater(() -> getMainUI().getNavigationUI().getTree().selectSafeNode(node)); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectOpenNodeUIAction.java ===================================== @@ -58,7 +58,7 @@ public class SelectOpenNodeUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport<?> node = contentListUI.getOpenNode(); NavigationTree tree = getNavigationTree(); - tree.selectNode(node); + tree.selectSafeNode(node); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java ===================================== @@ -658,13 +658,11 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U String id = entity.getId(); NavigationTreeNodeSupport node = treeHelper.getChild(parentNode, id); log.debug("will go to node " + node + " for " + id); - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } public void openLink(String url) { - try { - UIHelper.openLink(url); } catch (Exception e) { UIHelper.handlingError(e); @@ -683,13 +681,13 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U } - public <F extends IdDto> void loadReferentialReferenceSetsInModel(FormDefinition<F> formDefinition) { + public <D extends IdDto> void loadReferentialReferenceSetsInModel(FormDefinition<D> formDefinition) { loadReferentialReferenceSetsInModel(formDefinition, true); } - protected <F extends IdDto> void loadReferentialReferenceSetsInModel(FormDefinition<F> formDefinition, boolean clear) { + protected <D extends IdDto> void loadReferentialReferenceSetsInModel(FormDefinition<D> formDefinition, boolean clear) { - Class<F> dtoType = formDefinition.getType(); + Class<D> dtoType = formDefinition.getType(); ImmutableMap.Builder<String, ReferentialDtoReferenceSet<?>> modelReferentialReferenceSets = ImmutableMap.builder(); @@ -808,7 +806,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U if (parentNode != null) { // node still attached, so remove it treehelper.removeNode(node); - treehelper.selectNode(parentNode); + treehelper.selectSafeNode(parentNode); } } @@ -831,7 +829,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); NavigationTreeNodeSupport parentNode = node.getParent(); treeHelper.removeNode(node); - treeHelper.selectNode(parentNode); + treeHelper.selectSafeNode(parentNode); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUIHandler.java ===================================== @@ -29,6 +29,7 @@ import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.client.ui.content.ObserveLayoutFocusTraversalPolicy; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.validation.ClientValidationContext; import fr.ird.observe.dto.data.longline.ActivityLonglineDto; import fr.ird.observe.dto.data.longline.ActivityLonglineHelper; @@ -36,8 +37,8 @@ import fr.ird.observe.dto.data.longline.TripLonglineDto; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.result.TripChildSaveResultDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.validator.NuitonValidatorScope; @@ -254,9 +255,7 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin } @Override - protected boolean doSave(ActivityLonglineDto bean) { - - boolean notPersisted = bean.isNotPersisted(); + protected boolean doSave(ActivityLonglineDto bean, boolean notPersisted) { String tripId = getSelectedParentId(); @@ -270,15 +269,23 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin if (notPersisted) { // ouverture de l'activité après création getOpenDataManager().openActivityLongline(getSelectedParentId(), bean.getId(), null); + } + + return true; + } + + @Override + protected void afterSave(ActivityLonglineDto bean, NavigationTreeNodeSupport node, boolean notPersisted) { + repaintTripNode(); + if (notPersisted) { if (ActivityLonglineHelper.FISHING_OPERATION_ID.equals(bean.getVesselActivityLongline().getId())) { - // création de l'opération de pêche - SwingUtilities.invokeLater(() -> getUi().getAddSet().doClick()); + // création de l'opération de pêche (sur le nouvel écran car l'action n'est pas accessible sur l'ancien écran) + ActivityLonglineUI content = ObserveSwingApplicationContext.get().getContentUIManager().getContent(); + SwingUtilities.invokeLater(() -> content.getAddSet().doClick()); } } - - return true; } @Override @@ -305,13 +312,6 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin setUpdateMareeNodeTag(wasTripEndDateUpdated); return true; - - } - - @Override - protected void afterSave(boolean refresh) { - super.afterSave(refresh); - repaintTripNode(); } @Override ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineUIHandler.java ===================================== @@ -40,8 +40,8 @@ import fr.ird.observe.dto.data.longline.SetLonglineReference; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.spi.DtoModelHelper; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; @@ -380,7 +380,7 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLonglineDto, SetLo node = treeHelper.addSetLongline(parentNode, reference); stopEditUI(); - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } else { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUIHandler.java ===================================== @@ -30,6 +30,7 @@ import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ObserveLayoutFocusTraversalPolicy; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; import fr.ird.observe.client.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.util.tripMap.TripMapUI; import fr.ird.observe.dto.data.TripMapDto; import fr.ird.observe.dto.data.longline.TripLonglineDto; @@ -43,8 +44,8 @@ import fr.ird.observe.dto.referential.VesselDto; import fr.ird.observe.dto.referential.VesselHelper; import fr.ird.observe.dto.referential.VesselReference; import fr.ird.observe.dto.result.SaveResultDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.util.DateUtil; @@ -278,9 +279,7 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr } @Override - protected boolean doSave(TripLonglineDto bean) { - - boolean notPersisted = bean.isNotPersisted(); + protected boolean doSave(TripLonglineDto bean, boolean notPersisted) { // on force toujours la date a etre sans heure, minute,... Date startDate = DateUtil.getDay(bean.getStartDate()); @@ -308,8 +307,11 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto, Tr } @Override - protected int getOpenablePosition(String parentId, TripLonglineDto bean) { + protected void afterSave(TripLonglineDto bean, NavigationTreeNodeSupport node, boolean notPersisted) { + } + @Override + protected int getOpenablePosition(String parentId, TripLonglineDto bean) { return getTripLonglineService().getTripLonglinePositionInProgram(parentId, bean.getId()); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUIHandler.java ===================================== @@ -28,6 +28,7 @@ import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.client.ui.content.ObserveLayoutFocusTraversalPolicy; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.validation.ClientValidationContext; import fr.ird.observe.dto.data.seine.ActivitySeineDto; import fr.ird.observe.dto.data.seine.ActivitySeineHelper; @@ -38,8 +39,8 @@ import fr.ird.observe.dto.reference.DataDtoReference; import fr.ird.observe.dto.referential.seine.VesselActivitySeineHelper; import fr.ird.observe.dto.referential.seine.VesselActivitySeineReference; import fr.ird.observe.dto.result.SaveResultDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; @@ -82,35 +83,6 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, }; } - @Override - protected void prepareValidationContext() { - super.prepareValidationContext(); - - ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext(); - validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor()); - - } - - @Override - protected boolean doOpenData() { - boolean result = getOpenDataManager().canOpenActivitySeine(getSelectedParentId()); - if (result) { - String setSeineId = Optional.ofNullable(getBean().getSetSeine()).map(DataDtoReference::getId).orElse(null); - - getOpenDataManager().openActivitySeine(getSelectedParentId(), getSelectedId(), setSeineId); - } - return result; - } - - @Override - public boolean doCloseData() { - boolean result = getOpenDataManager().isOpenActivitySeine(getSelectedId()); - if (result) { - getOpenDataManager().closeActivitySeine(getSelectedId()); - } - return result; - } - @Override protected ContentMode getContentMode(ClientDataContext dataContext) { @@ -163,38 +135,32 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, } @Override - protected ObserveLayoutFocusTraversalPolicy<ActivitySeineUI> creatFocusTraversalPolicy() { - return new ObserveLayoutFocusTraversalPolicy<ActivitySeineUI>() { + protected void prepareValidationContext() { + super.prepareValidationContext(); - @Override - protected Component getFirstComponentForEdit(Container aContainer) { - ActivitySeineUI ui = getUi(); - int selectedIndex = ui.getMainTabbedPane().getSelectedIndex(); - switch (selectedIndex) { - case 0: - JComponent editor = ui.getTime().getHourEditor().getEditor(); - return ((JSpinner.DateEditor) editor).getTextField(); - case 1: - return ui.getVesselSpeed(); - case 2: - return ui.getObservedSystem().getUniverseList(); - } - return super.getFirstComponent(aContainer); - } + ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext(); + validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor()); - @Override - protected Component getLastComponentForEdit(Container aContainer) { - ActivitySeineUI ui = getUi(); - if (ui.getModel().isCreatingMode()) { - if (ui.getSave().isEnabled()) { - return ui.getSave(); - } - return ui.getReset(); - } else - return ui.getCloseAndCreate(); - } + } - }; + @Override + protected boolean doOpenData() { + boolean result = getOpenDataManager().canOpenActivitySeine(getSelectedParentId()); + if (result) { + String setSeineId = Optional.ofNullable(getBean().getSetSeine()).map(DataDtoReference::getId).orElse(null); + + getOpenDataManager().openActivitySeine(getSelectedParentId(), getSelectedId(), setSeineId); + } + return result; + } + + @Override + public boolean doCloseData() { + boolean result = getOpenDataManager().isOpenActivitySeine(getSelectedId()); + if (result) { + getOpenDataManager().closeActivitySeine(getSelectedId()); + } + return result; } @Override @@ -319,9 +285,42 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, } @Override - protected boolean doSave(ActivitySeineDto bean) { + protected ObserveLayoutFocusTraversalPolicy<ActivitySeineUI> creatFocusTraversalPolicy() { + return new ObserveLayoutFocusTraversalPolicy<ActivitySeineUI>() { - boolean notPersisted = bean.isNotPersisted(); + @Override + protected Component getFirstComponentForEdit(Container aContainer) { + ActivitySeineUI ui = getUi(); + int selectedIndex = ui.getMainTabbedPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + JComponent editor = ui.getTime().getHourEditor().getEditor(); + return ((JSpinner.DateEditor) editor).getTextField(); + case 1: + return ui.getVesselSpeed(); + case 2: + return ui.getObservedSystem().getUniverseList(); + } + return super.getFirstComponent(aContainer); + } + + @Override + protected Component getLastComponentForEdit(Container aContainer) { + ActivitySeineUI ui = getUi(); + if (ui.getModel().isCreatingMode()) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } else + return ui.getCloseAndCreate(); + } + + }; + } + + @Override + protected boolean doSave(ActivitySeineDto bean, boolean notPersisted) { String routeId = getSelectedParentId(); @@ -335,17 +334,22 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, if (notPersisted) { // ouverture de l'activité après création getOpenDataManager().openActivitySeine(getSelectedParentId(), bean.getId(), null); - - if (bean.getReasonForNoFishing() == null) { - // création de l'opération de pêche - SwingUtilities.invokeLater(() -> getUi().getAddSet().doClick()); - } - } return true; } + @Override + protected void afterSave(ActivitySeineDto bean, NavigationTreeNodeSupport node, boolean notPersisted) { + if (notPersisted) { + if (bean.isSetOperation() && bean.getReasonForNoFishing() == null) { + // create set + ActivitySeineUI content = ObserveSwingApplicationContext.get().getContentUIManager().getContent(); + SwingUtilities.invokeLater(() -> content.getAddSet().doClick()); + } + } + } + @Override protected int getOpenablePosition(String parentId, ActivitySeineDto bean) { return getActivitySeineService().getActivitySeinePositionInRoute(parentId, bean.getId()); ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIHandler.java ===================================== @@ -264,7 +264,7 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto, node = treeHelper.addFloatingObject(parentNode, reference); stopEditUI(); if (refresh) { - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } } else { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUIHandler.java ===================================== @@ -38,8 +38,8 @@ import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.referential.seine.VesselActivitySeineHelper; import fr.ird.observe.dto.referential.seine.VesselActivitySeineReference; import fr.ird.observe.dto.result.TripChildSaveResultDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; @@ -185,9 +185,7 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> impleme } @Override - protected boolean doSave(RouteDto bean) { - - boolean notPersisted = bean.isNotPersisted(); + protected boolean doSave(RouteDto bean, boolean notPersisted) { String tripId = getSelectedParentId(); @@ -217,14 +215,13 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> impleme } @Override - protected int getOpenablePosition(String parentId, RouteDto bean) { - return getRouteService().getRoutePositionInTripSeine(parentId, bean.getId()); + protected void afterSave(RouteDto bean, NavigationTreeNodeSupport node, boolean notPersisted) { + repaintTripNode(); } @Override - protected void afterSave(boolean refresh) { - super.afterSave(refresh); - repaintTripNode(); + protected int getOpenablePosition(String parentId, RouteDto bean) { + return getRouteService().getRoutePositionInTripSeine(parentId, bean.getId()); } @Override @@ -347,7 +344,7 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> impleme log.debug("PARENT NODE = " + parentNode); // select activities node before adding new node, otherwise, the new unsaved activity node may no more be selected // at the end of addUnsavedNode method (reloading sub node will empty selection...) - treeHelper.selectNode(parentNode); + treeHelper.selectSafeNode(parentNode); treeHelper.addUnsavedNode(parentNode, ActivitySeineDto.class); // on recupère l'écran d'édition ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java ===================================== @@ -40,8 +40,8 @@ import fr.ird.observe.dto.data.seine.SetSeineReference; import fr.ird.observe.dto.form.Form; import fr.ird.observe.dto.result.SaveResultDto; import fr.ird.observe.spi.DtoModelHelper; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; @@ -275,7 +275,7 @@ public class SetSeineUIHandler extends ContentUIHandler<SetSeineDto, SetSeineUI> node = treeHelper.addSetSeine(parentNode, reference); stopEditUI(); - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } else { // select ancestor node // treeHelper.refreshNode(node, false); ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUIHandler.java ===================================== @@ -29,6 +29,7 @@ import fr.ird.observe.client.ui.content.ContentMode; import fr.ird.observe.client.ui.content.ObserveLayoutFocusTraversalPolicy; import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; import fr.ird.observe.client.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.util.tripMap.TripMapUI; import fr.ird.observe.dto.data.TripMapDto; import fr.ird.observe.dto.data.seine.TripSeineDto; @@ -42,8 +43,8 @@ import fr.ird.observe.dto.referential.VesselDto; import fr.ird.observe.dto.referential.VesselHelper; import fr.ird.observe.dto.referential.VesselReference; import fr.ird.observe.dto.result.SaveResultDto; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.nuiton.jaxx.runtime.spi.UIHandler; import org.nuiton.util.DateUtil; @@ -273,9 +274,7 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSein } @Override - protected boolean doSave(TripSeineDto bean) { - - boolean notPersisted = bean.isNotPersisted(); + protected boolean doSave(TripSeineDto bean, boolean notPersisted) { // on force toujours la date a etre sans heure, minute,... Date startDate = DateUtil.getDay(bean.getStartDate()); @@ -303,8 +302,12 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSein return true; } - protected int getOpenablePosition(String parentId, TripSeineDto bean) { + @Override + protected void afterSave(TripSeineDto bean, NavigationTreeNodeSupport node, boolean notPersisted) { + + } + protected int getOpenablePosition(String parentId, TripSeineDto bean) { return getTripSeineService().getTripSeinePositionInProgram(parentId, bean.getId()); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/open/ContentOpenableUIHandler.java ===================================== @@ -8,12 +8,12 @@ * 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>. @@ -50,10 +50,10 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont private static final String POSITION_OPENABLE = "positionOpenable"; - /** Logger */ static private final Logger log = LogManager.getLogger(ContentOpenableUIHandler.class); private static final String UPDATE_TRIP_NODE = "updateTripNode"; protected final String closeMessage; + private boolean notPersisted; public ContentOpenableUIHandler(DataContextType parentType, DataContextType type, String closeMessage) { super(parentType, type); @@ -62,6 +62,16 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont protected abstract boolean obtainCanReopen(boolean create); + protected abstract boolean doOpenData(); + + public abstract boolean doCloseData(); + + protected abstract boolean doSave(E bean, boolean notPersisted); + + protected abstract void afterSave(E bean, NavigationTreeNodeSupport node, boolean notPersisted); + + protected abstract int getOpenablePosition(String parentId, E bean); + @Override public ContentOpenableUIModel<E> getModel() { return (ContentOpenableUIModel<E>) super.getModel(); @@ -72,8 +82,6 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont return source.canWriteData(); } - protected abstract boolean doOpenData(); - public final void openDataUI() { boolean ok = false; try { @@ -132,8 +140,6 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont treeHelper.reloadNode(parent, false); } - public abstract boolean doCloseData(); - public final void afterCloseData() { U ui = getUi(); @@ -148,7 +154,7 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont removeAllMessages(ui); addMessage(ui, NuitonValidatorScope.INFO, - getTypeI18nKey(bean.getClass()), t(closeMessage)); + getTypeI18nKey(bean.getClass()), t(closeMessage)); NavigationTree treeHelper = getNavigationTree(); treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true); @@ -157,8 +163,13 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont grabFocusOnForm(); } + protected final boolean doSave(E bean) { + notPersisted = bean.isNotPersisted(); + return doSave(bean, notPersisted); + } + @Override - protected void afterSave(boolean refresh) { + protected final void afterSave(boolean refresh) { super.afterSave(refresh); @@ -210,7 +221,7 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont } // on sélectionne le nouveau noeud - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } else { if (oldPosition != position) { @@ -218,7 +229,7 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont treeHelper.moveNode(parentNode, node, position); // et le selectionner - treeHelper.selectNode(node); + treeHelper.selectSafeNode(node); } node.reload(); @@ -229,6 +240,7 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont // on repaint le noeud et ses enfants treeHelper.reloadSelectedNode(false, true); } + afterSave(bean, node, notPersisted); } /** @@ -271,8 +283,6 @@ public abstract class ContentOpenableUIHandler<E extends DataDto, U extends Cont getUi().setContextValue(position, POSITION_OPENABLE); } - protected abstract int getOpenablePosition(String parentId, E bean); - protected final void finalizeOpenUI(ContentMode mode, boolean create) { boolean historicalData = false; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java ===================================== @@ -37,7 +37,6 @@ import org.nuiton.jaxx.runtime.spi.UIHandler; import javax.swing.JButton; import javax.swing.JPanel; - import java.awt.Component; import java.awt.Container; @@ -95,7 +94,7 @@ public class ReferenceHomeUIHandler extends ContentUIHandler<ProgramDto, Referen String text = t(ObserveI18nDecoratorHelper.getTypePluralI18nKey(type)); JButton button = new JButton(text); - button.addActionListener(e -> navigation.selectNode(referentialNode.findChildByClass(type))); + button.addActionListener(e -> navigation.selectSafeNode(referentialNode.findChildByClass(type))); panel.add(button); } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTree.java ===================================== @@ -64,8 +64,8 @@ import fr.ird.observe.dto.referential.ProgramReference; import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.spi.DtoModelHelper; import org.apache.commons.collections4.CollectionUtils; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.jdesktop.swingx.JXTree; import javax.swing.SwingUtilities; @@ -98,7 +98,7 @@ public class NavigationTree extends JXTree { setSelectionModel(new DefaultTreeSelectionModel() { @Override public void setSelectionPath(TreePath path) { - boolean canChange = !Objects.equals(path, getSelectionPath()) && ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI(); + boolean canChange = skipCheckPreviousContent || (!Objects.equals(path, getSelectionPath()) && ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI()); if (!canChange) { // cancel the change of node return; @@ -176,6 +176,29 @@ public class NavigationTree extends JXTree { return isSelectionEmpty() ? null : (NavigationTreeNodeSupport) getSelectionPath().getLastPathComponent(); } + private boolean skipCheckPreviousContent; + + /** + * Selects the given {@code node} in the tree without doing any check on previous content loaded. + * <p> + * This method should be used only programmatically. + * + * @param node the node to select + */ + public void selectSafeNode(NavigationTreeNodeSupport node) { + if (log.isInfoEnabled()) { + log.info("try to select node [" + node + "]"); + } + TreePath path = new TreePath(getTreeModel().getPathToRoot(node)); + + skipCheckPreviousContent = true; + try { + setSelectionPath(path); + } finally { + skipCheckPreviousContent = false; + } + SwingUtilities.invokeLater(() -> scrollPathToVisible(path)); + } /** * Selects the given {@code node} in the registred tree. * @@ -237,7 +260,7 @@ public class NavigationTree extends JXTree { try { - selectNode(selectedNode); + selectSafeNode(selectedNode); } finally { // nettoyage du context @@ -332,7 +355,7 @@ public class NavigationTree extends JXTree { log.debug("will selected open node: " + selectedNode); } - selectNode(selectedNode); + selectSafeNode(selectedNode); } } @@ -434,7 +457,7 @@ public class NavigationTree extends JXTree { fireTreeExpanded(new TreePath(result.getPath())); // Select new node - selectNode(result); + selectSafeNode(result); return result; } View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/b24c286153ae0593fa4fd97ac0db... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/b24c286153ae0593fa4fd97ac0db... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT