06/32: Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire)
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository observe. See https://gitlab.nuiton.org/codelutin/observe.git commit f3617cd007ac56a3e56de13cf8eb7ebc00e668a4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Nov 8 20:20:34 2016 +0100 Gestion du focus sur les écrans d'édition (reste juste le référentiel à faire) --- .../ui/actions/shared/CloseAndCreateUIAction.java | 16 +- .../swing/ui/actions/shared/CloseOpenUIAction.java | 199 ++++++++++++--------- .../swing/ui/actions/shared/ReOpenUIAction.java | 23 ++- .../swing/ui/content/ContentUIInitializer.java | 3 + .../LonglineDetailCompositionUIHandler.java | 67 ++++++- .../impl/longline/SetLonglineUIHandler.java | 39 ++++ ...ngObjectTransmittingBuoyOperationUIHandler.java | 48 ++++- .../impl/seine/FloatingObjectUIHandler.java | 48 ++++- .../ui/content/impl/seine/SetSeineUIHandler.java | 63 ++++++- .../swing/ui/content/list/ContentListUI.jaxx | 21 ++- .../swing/ui/content/list/ContentListUI.jcss | 7 + .../ui/content/list/ContentListUIHandler.java | 66 ++++++- .../list/impl/longline/ActivityLonglinesUI.jaxx | 8 +- .../impl/longline/ActivityLonglinesUIHandler.java | 11 +- .../list/impl/longline/TripLonglinesUI.jaxx | 7 +- .../list/impl/longline/TripLonglinesUIHandler.java | 13 +- .../content/list/impl/seine/ActivitySeinesUI.jaxx | 8 +- .../list/impl/seine/ActivitySeinesUIHandler.java | 8 +- .../swing/ui/content/list/impl/seine/RoutesUI.jaxx | 8 +- .../content/list/impl/seine/RoutesUIHandler.java | 8 +- .../ui/content/list/impl/seine/TripSeinesUI.jaxx | 8 +- .../list/impl/seine/TripSeinesUIHandler.java | 11 +- .../swing/ui/content/open/ContentOpenableUI.jaxx | 12 +- .../ui/content/open/ContentOpenableUIHandler.java | 39 ++-- .../open/impl/longline/ActivityLonglineUI.jaxx | 16 +- .../impl/longline/ActivityLonglineUIHandler.java | 37 +++- .../content/open/impl/longline/TripLonglineUI.jaxx | 47 +++-- .../open/impl/longline/TripLonglineUIHandler.java | 43 ++++- .../content/open/impl/seine/ActivitySeineUI.jaxx | 5 +- .../open/impl/seine/ActivitySeineUIHandler.java | 62 ++++++- .../swing/ui/content/open/impl/seine/RouteUI.jaxx | 16 +- .../ui/content/open/impl/seine/RouteUIHandler.java | 84 ++++----- .../ui/content/open/impl/seine/TripSeineUI.jaxx | 27 +-- .../open/impl/seine/TripSeineUIHandler.java | 52 ++++-- .../swing/ui/content/table/ContentTableModel.java | 7 +- .../swing/ui/content/table/ContentTableUI.jaxx | 6 +- .../ui/content/table/ContentTableUIHandler.java | 155 +++++----------- .../content/table/ContentTableUIInitializer.java | 4 +- .../ui/content/table/ContentTableUIModel.java | 6 +- .../ui/content/table/ObserveContentTableUI.java | 4 +- .../table/impl/longline/BaitsCompositionUI.jaxx | 19 +- .../impl/longline/BaitsCompositionUIHandler.java | 8 +- .../impl/longline/BaitsCompositionUIModel.java | 20 +-- .../impl/longline/BranchlinesCompositionUI.jaxx | 19 +- .../longline/BranchlinesCompositionUIHandler.java | 8 +- .../longline/BranchlinesCompositionUIModel.java | 20 +-- .../impl/longline/CatchLonglineTableModel.java | 3 +- .../table/impl/longline/CatchLonglineUI.jaxx | 59 ++++-- .../impl/longline/CatchLonglineUIHandler.java | 97 ++++++++-- .../table/impl/longline/CatchLonglineUIModel.java | 58 +++--- .../content/table/impl/longline/EncounterUI.jaxx | 14 +- .../table/impl/longline/EncounterUIHandler.java | 47 ++++- .../table/impl/longline/EncounterUIModel.java | 12 +- .../impl/longline/FloatlinesCompositionUI.jaxx | 16 +- .../longline/FloatlinesCompositionUIHandler.java | 8 +- .../longline/FloatlinesCompositionUIModel.java | 17 +- .../GearUseFeaturesLonglineTableModel.java | 8 +- .../impl/longline/GearUseFeaturesLonglineUI.jaxx | 25 ++- .../longline/GearUseFeaturesLonglineUIHandler.java | 41 ++++- .../longline/GearUseFeaturesLonglineUIModel.java | 10 +- .../table/impl/longline/HooksCompositionUI.jaxx | 20 +-- .../impl/longline/HooksCompositionUIHandler.java | 8 +- .../impl/longline/HooksCompositionUIModel.java | 19 +- .../content/table/impl/longline/SensorUsedUI.jaxx | 18 +- .../table/impl/longline/SensorUsedUIHandler.java | 40 ++++- .../table/impl/longline/SensorUsedUIModel.java | 23 +-- .../ui/content/table/impl/longline/TdrUI.jaxx | 27 +-- .../content/table/impl/longline/TdrUIHandler.java | 83 ++++++++- .../ui/content/table/impl/longline/TdrUIModel.java | 5 +- .../table/impl/seine/AbstractSampleUIHandler.java | 6 +- .../impl/seine/GearUseFeaturesSeineTableModel.java | 8 +- .../table/impl/seine/GearUseFeaturesSeineUI.jaxx | 25 ++- .../impl/seine/GearUseFeaturesSeineUIHandler.java | 55 +++++- .../impl/seine/GearUseFeaturesSeineUIModel.java | 24 +-- .../content/table/impl/seine/NonTargetCatchUI.jaxx | 45 ++--- .../table/impl/seine/NonTargetCatchUIHandler.java | 28 ++- .../table/impl/seine/NonTargetCatchUIModel.java | 12 +- .../table/impl/seine/NonTargetSampleUI.jaxx | 15 +- .../table/impl/seine/NonTargetSampleUIHandler.java | 35 +++- .../table/impl/seine/NonTargetSampleUIModel.java | 23 +-- .../table/impl/seine/ObjectObservedSpeciesUI.jaxx | 31 ++-- .../impl/seine/ObjectObservedSpeciesUIHandler.java | 28 ++- .../impl/seine/ObjectObservedSpeciesUIModel.java | 13 +- .../table/impl/seine/ObjectSchoolEstimateUI.jaxx | 31 ++-- .../impl/seine/ObjectSchoolEstimateUIHandler.java | 28 ++- .../impl/seine/ObjectSchoolEstimateUIModel.java | 13 +- .../content/table/impl/seine/SchoolEstimateUI.jaxx | 24 +-- .../table/impl/seine/SchoolEstimateUIHandler.java | 42 ++++- .../table/impl/seine/SchoolEstimateUIModel.java | 19 +- .../ui/content/table/impl/seine/TargetCatchUI.jaxx | 27 ++- .../table/impl/seine/TargetCatchUIHandler.java | 40 ++++- .../table/impl/seine/TargetCatchUIModel.java | 27 +-- .../table/impl/seine/TargetDiscardCatchUI.jaxx | 33 ++-- .../impl/seine/TargetDiscardCatchUIHandler.java | 34 +++- .../impl/seine/TargetDiscardCatchUIModel.java | 27 +-- .../table/impl/seine/TargetSampleCaptureUI.jaxx | 7 +- .../table/impl/seine/TargetSampleRejeteUI.jaxx | 7 +- .../content/table/impl/seine/TargetSampleUI.jaxx | 17 +- .../table/impl/seine/TargetSampleUIHandler.java | 37 +++- .../table/impl/seine/TargetSampleUIModel.java | 4 +- 100 files changed, 1867 insertions(+), 962 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java index 96a3ce0..d2e1807 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseAndCreateUIAction.java @@ -22,8 +22,6 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; @@ -32,6 +30,8 @@ import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; import fr.ird.observe.application.swing.ui.content.open.impl.longline.ActivityLonglineUI; import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; +import fr.ird.observe.services.dto.seine.ActivitySeineDto; import javax.swing.JComponent; import javax.swing.JTree; @@ -70,12 +70,10 @@ public class CloseAndCreateUIAction extends AbstractUIAction { ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property " + - "ui on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } if (ui instanceof ContentOpenableUI) { - ((ContentOpenableUI<?>) ui).closeAndCreateData(); + ((ContentOpenableUI<?, ?>) ui).closeAndCreateData(); return; } @@ -86,11 +84,7 @@ public class CloseAndCreateUIAction extends AbstractUIAction { JTree tree = getMainUI().getNavigation(); ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); + boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); // selection du noeud de l'activity ouverte treeHelper.selectOpenNode(ActivitySeineDto.class); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java index 8e68887..79d443f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/CloseOpenUIAction.java @@ -22,22 +22,19 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.impl.longline.ActivityLonglinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.longline.TripLonglinesUI; import fr.ird.observe.application.swing.ui.content.list.impl.seine.ActivitySeinesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.RoutesUI; +import fr.ird.observe.application.swing.ui.content.list.impl.seine.TripSeinesUI; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; -import fr.ird.observe.application.swing.ui.content.open.impl.longline.ActivityLonglineUI; -import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import javax.swing.JComponent; -import javax.swing.JTree; import javax.swing.SwingUtilities; -import javax.swing.tree.TreePath; import java.awt.event.ActionEvent; import static org.nuiton.i18n.I18n.n; @@ -68,104 +65,144 @@ public class CloseOpenUIAction extends AbstractUIAction { SwingUtilities.invokeLater(() -> { JComponent c = (JComponent) e.getSource(); - ContentUI<?> ui = (ContentUI<?>) - c.getClientProperty("ui"); + ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property " + - "ui on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } if (ui instanceof ContentOpenableUI) { - ((ContentOpenableUI<?>) ui).closeData(); + ((ContentOpenableUI<?, ?>) ui).closeData(); return; } - if (ui instanceof ActivitySeinesUI) { - - // cas particulier pour l'écran des activités - - JTree tree = getMainUI().getNavigation(); - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); - - // recuperation du noeud courant (activitys) - ObserveNode node = treeHelper.getSelectedNode(); - - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); - - // selection du noeud de l'activity ouverte - treeHelper.selectOpenNode(ActivitySeineDto.class); - - // on conserve le path de l'activity - TreePath path = tree.getSelectionPath(); - - // recuperation de l'écran associé - ActivitySeineUI selectedUI = (ActivitySeineUI) - ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); - - // fermeture de l'activity - selectedUI.closeData(); - - if (wasCollapsed) { - - // on ferme le noeud de l'activity (qui a ete ouvert - // lors de la selection de celle-ci) - tree.collapsePath(path); - } - - // retour sur le noeud des activitys - treeHelper.selectNode(node); + ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); + if (ui instanceof TripSeinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenTripSeineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } + if (ui instanceof RoutesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenRouteId(); + closeData(applicationContext, ui, higherOpenId); + return; + } + if (ui instanceof ActivitySeinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenActivitySeineId(); + closeData(applicationContext, ui, higherOpenId); return; } + if (ui instanceof TripLonglinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenTripLonglineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } if (ui instanceof ActivityLonglinesUI) { + String higherOpenId = applicationContext.getDataContext().getOpenActivityLonglineId(); + closeData(applicationContext, ui, higherOpenId); + return; + } - // cas particulier pour l'écran des activités - - JTree tree = getMainUI().getNavigation(); - ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// if (ui instanceof ActivitySeinesUI) { +// +// // cas particulier pour l'écran des activités +// +// JTree tree = getMainUI().getNavigation(); +// ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// +// // recuperation du noeud courant (activitys) +// ObserveNode node = treeHelper.getSelectedNode(); +// +// boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); +// +// // selection du noeud de l'activity ouverte +// treeHelper.selectOpenNode(ActivitySeineDto.class); +// +// // on conserve le path de l'activity +// TreePath path = tree.getSelectionPath(); +// +// // recuperation de l'écran associé +// ActivitySeineUI selectedUI = (ActivitySeineUI) +// applicationContext.getContentUIManager().getSelectedContentUI(); +// +// // fermeture de l'activity +// selectedUI.closeData(); +// +// if (wasCollapsed) { +// +// // on ferme le noeud de l'activity (qui a ete ouvert +// // lors de la selection de celle-ci) +// tree.collapsePath(path); +// } +// +// // retour sur le noeud des activitys +// treeHelper.selectNode(node); +// +// return; +// } +// +// if (ui instanceof ActivityLonglinesUI) { +// +// // cas particulier pour l'écran des activités +// +// JTree tree = getMainUI().getNavigation(); +// ObserveTreeHelper treeHelper = getMainUI().getTreeHelper(); +// +// // recuperation du noeud courant (activitys) +// ObserveNode node = treeHelper.getSelectedNode(); +// +// boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, treeHelper, getMainUI().getDataContext()); +// +// // selection du noeud de l'activity ouverte +// treeHelper.selectOpenNode(ActivityLonglineDto.class); +// +// // on conserve le path de l'activité +// TreePath path = tree.getSelectionPath(); +// +// // recuperation de l'écran associé +// ActivityLonglineUI selectedUI = (ActivityLonglineUI) +// applicationContext.getContentUIManager().getSelectedContentUI(); +// +// // fermeture de l'activité +// selectedUI.closeData(); +// +// if (wasCollapsed) { +// +// // on ferme le noeud de l'activité (qui a ete ouvert lors de la selection de celle-ci) +// tree.collapsePath(path); +// } +// +// // retour sur le noeud des activités +// treeHelper.selectNode(node); +// +// return; +// } - // recuperation du noeud courant (activitys) - ObserveNode node = treeHelper.getSelectedNode(); + throw new IllegalStateException("Can not come here!"); + }); - boolean wasCollapsed = isOpenActivityNodeCollapsed( - tree, - treeHelper, - getMainUI().getDataContext() - ); + } - // selection du noeud de l'activity ouverte - treeHelper.selectOpenNode(ActivityLonglineDto.class); + private void closeData(ObserveSwingApplicationContext applicationContext, ContentUI<?> ui, String id) { - // on conserve le path de l'activity - TreePath path = tree.getSelectionPath(); + ObserveTreeHelper treeHelper = ui.getTreeHelper(); + ObserveNode selectedNode = treeHelper.getSelectedNode(); - // recuperation de l'écran associé - ActivityLonglineUI selectedUI = (ActivityLonglineUI) - ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); + ObserveNode node = treeHelper.findNode(selectedNode, id); - // fermeture de l'activity - selectedUI.closeData(); + treeHelper.selectNode(node); - if (wasCollapsed) { + ContentOpenableUI selectedUI = (ContentOpenableUI) applicationContext.getContentUIManager().getSelectedContentUI(); - // on ferme le noeud de l'activity (qui a ete ouvert - // lors de la selection de celle-ci) - tree.collapsePath(path); - } + // on demande la fermeture de la donnée + selectedUI.closeData(); - // retour sur le noeud des activitys - treeHelper.selectNode(node); + SwingUtilities.invokeLater(() -> { - return; - } + // retour sur le noeud parent + treeHelper.selectNode(selectedNode); - throw new IllegalStateException("Can not come here!"); }); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java index a5935c8..7f5aa95 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/ReOpenUIAction.java @@ -22,13 +22,13 @@ package fr.ird.observe.application.swing.ui.actions.shared; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.list.ContentListUI; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; +import fr.ird.observe.services.dto.DataReference; import javax.swing.JComponent; import javax.swing.SwingUtilities; @@ -62,23 +62,20 @@ public class ReOpenUIAction extends AbstractUIAction { public void actionPerformed(final ActionEvent e) { SwingUtilities.invokeLater(() -> { JComponent c = (JComponent) e.getSource(); - ContentUI<?> ui = (ContentUI<?>) - c.getClientProperty("ui"); + ContentUI<?> ui = (ContentUI<?>) c.getClientProperty("ui"); if (ui == null) { - throw new IllegalStateException( - "could not find client property ui " + - "on component" + c); + throw new IllegalStateException("could not find client property ui on component" + c); } - ContentOpenableUI<?> openUI; + ContentOpenableUI<?, ?> openUI; - if (ui instanceof ContentOpenableUI<?>) { + if (ui instanceof ContentOpenableUI<?, ?>) { - openUI = (ContentOpenableUI<?>) ui; - } else if (ui instanceof ContentListUI<?, ?>) { + openUI = (ContentOpenableUI<?, ?>) ui; + } else if (ui instanceof ContentListUI<?, ?, ?>) { - DataReference<?> selectedData = ((ContentListUI<?, ?>) ui).getSelectedData(); + DataReference<?> selectedData = ((ContentListUI<?, ?, ?>) ui).getSelectedData(); String id = selectedData.getId(); @@ -88,7 +85,7 @@ public class ReOpenUIAction extends AbstractUIAction { treeHelper.selectNode(node); - openUI = (ContentOpenableUI<?>) + openUI = (ContentOpenableUI<?, ?>) ObserveSwingApplicationContext.get().getContentUIManager().getSelectedContentUI(); } else { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java index c2cee31..3cc59b2 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIInitializer.java @@ -434,6 +434,8 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E protected void init(FilterableDoubleList beanList) { beanList.setI18nPrefix("observe.common."); + beanList.getAddButton().setFocusable(false); + beanList.getRemoveButton().setFocusable(false); if (log.isInfoEnabled()) { log.info("init list for " + beanList.getBeanType()); @@ -467,6 +469,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ObserveContentUI<E log.debug("init date time editor " + editor.getName()); } editor.init(); + editor.getSliderHidor().setFocusable(false); if (isAutoSelectOnFocus(editor)) { addAutoSelectOnFocus((JSpinner.DateEditor) editor.getHourEditor().getEditor()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java index d4f6dfa..d7d03d7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/LonglineDetailCompositionUIHandler.java @@ -27,6 +27,12 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.ContentUIHandler; +import fr.ird.observe.application.swing.ui.content.ContentUIModel; +import fr.ird.observe.application.swing.ui.util.JVetoableTabbedPane; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.BasketDto; @@ -39,12 +45,6 @@ import fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionDto; import fr.ird.observe.services.dto.longline.SetLonglineDetailCompositionHelper; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.data.longline.SetLonglineDetailCompositionService; -import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.ContentUIHandler; -import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.util.JVetoableTabbedPane; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -53,8 +53,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComboBox; import javax.swing.JOptionPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.ChangeListener; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -329,6 +332,54 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong tabPane.setChangeSelectedIndex(tabbedPaneWillChanged); tabPane.addChangeListener(tabbedPaneChanged); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + if (aComponent.equals(getUi().getBranchlineDetailUI().getTopType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getBranchlineDetailUI().getHookType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + int subSelectedIndex = getUi().getBranchlineDetailUI().getFishingOperationTabPane().getSelectedIndex(); + switch (subSelectedIndex) { + case 0: + return getUi().getBranchlineDetailUI().getTopType(); + case 1: + return getUi().getBranchlineDetailUI().getHookType(); + } + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + + if (getUi().getSave().isEnabled()) { + return getUi().getSave(); + } + if (getUi().getReset().isEnabled()) { + return getUi().getReset(); + } + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + if (selectedIndex == 2) { + getUi().getBranchlineDetailUI().getComment2(); + } + return super.getLastComponent(aContainer); + } + }); } @Override @@ -564,8 +615,8 @@ public class LonglineDetailCompositionUIHandler extends ContentUIHandler<SetLong sectionsTableModel.setData(sections); List<SectionDto> sectionHelper = sections.stream() - .map(SectionWithTemplate::getDelegate) - .collect(Collectors.toList()); + .map(SectionWithTemplate::getDelegate) + .collect(Collectors.toList()); getBean().addAllSection(sectionHelper); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java index 71569ed..02c0a18 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/longline/SetLonglineUIHandler.java @@ -49,7 +49,10 @@ import org.nuiton.jaxx.widgets.gis.CoordinateFormat; import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditorModel; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.HashSet; import java.util.Set; @@ -152,6 +155,42 @@ public class SetLonglineUIHandler extends ContentUIHandler<SetLonglineDto> { getUi().getHaulingStartCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); getUi().getHaulingEndCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = getUi().getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return getUi().getHomeId(); + case 1: + return getUi().getSettingShape(); + case 2: + return getUi().getHaulingDirectionSameAsSetting(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getUi().getDelete(); + } + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(getUi().getHomeId())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getHaulingDirectionSameAsSetting())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(getUi().getSettingShape().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + }); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java index ad7d3b8..8e4a2c3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectTransmittingBuoyOperationUIHandler.java @@ -47,7 +47,10 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JPanel; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; import java.awt.GridLayout; import java.util.ArrayList; import java.util.Collection; @@ -102,6 +105,41 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH } @Override + public void initUI() { + super.initUI(); + + FloatingObjectTransmittingBuoyOperationUI ui = getUi(); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + + if (aComponent.equals(ui.getTypeOperation())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getTypeOperation(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }); + } + + @Override public void openUI() { super.openUI(); @@ -170,7 +208,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH FloatingObjectTransmittingBuoyOperationUI.BINDING_COUNTRY1_SELECTED_ITEM, FloatingObjectTransmittingBuoyOperationUI.BINDING_COUNTRY2_SELECTED_ITEM, FloatingObjectTransmittingBuoyOperationUI.BINDING_TYPE_OPERATION_SELECTED_ITEM - ); + ); FloatingObjectTransmittingBuoyOperationUI ui = getUi(); @@ -332,7 +370,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH if (log.isDebugEnabled()) { log.debug("Reuse an empty balise lue for objectOperation " + - transmittingBuoyOperation.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_LABEL1)); + transmittingBuoyOperation.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_LABEL1)); } if (isBalisePose(transmittingBuoyOperation)) { @@ -357,7 +395,7 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH } protected ReferentialReference<TransmittingBuoyOperationDto> getObjectOperation(List<ReferentialReference<TransmittingBuoyOperationDto>> objectOperations, - String codeOperation) { + String codeOperation) { ReferentialReference<TransmittingBuoyOperationDto> objectOperation = null; for (ReferentialReference<TransmittingBuoyOperationDto> op : objectOperations) { if (codeOperation.equals(op.getPropertyValue(TransmittingBuoyOperationDto.PROPERTY_CODE))) { @@ -368,13 +406,13 @@ public class FloatingObjectTransmittingBuoyOperationUIHandler extends ContentUIH if (objectOperation == null) { throw new IllegalArgumentException( "could not find a " + - TransmittingBuoyOperationDto.class + " with code " + codeOperation); + TransmittingBuoyOperationDto.class + " with code " + codeOperation); } return objectOperation; } protected TransmittingBuoyOperationService getTransmittingBuoyOperationService() { - return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTransmittingBuoyOperationService(); + return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTransmittingBuoyOperationService(); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java index b219958..582a5b4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/FloatingObjectUIHandler.java @@ -25,6 +25,11 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.ContentUIHandler; +import fr.ird.observe.application.swing.ui.content.ContentUIModel; +import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.result.SaveResultDto; @@ -32,15 +37,14 @@ import fr.ird.observe.services.dto.seine.ActivitySeineDto; import fr.ird.observe.services.dto.seine.FloatingObjectDto; import fr.ird.observe.services.dto.seine.FloatingObjectHelper; import fr.ird.observe.services.service.data.seine.FloatingObjectService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.ContentUIHandler; -import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; -import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; +import java.awt.Component; +import java.awt.Container; + import static org.nuiton.i18n.I18n.t; /** @@ -96,6 +100,40 @@ public class FloatingObjectUIHandler extends ContentUIHandler<FloatingObjectDto> } @Override + public void initUI() { + super.initUI(); + + FloatingObjectUI ui = getUi(); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getObjectOperation().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getObjectOperation(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { + return ui.getDelete(); + } + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } + }); + } + + @Override public void openUI() { super.openUI(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java index 4a1e41c..3b2a5a6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/impl/seine/SetSeineUIHandler.java @@ -21,6 +21,7 @@ */ package fr.ird.observe.application.swing.ui.content.impl.seine; +import fr.ird.observe.application.swing.I18nEnumHelper; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; @@ -28,9 +29,8 @@ import fr.ird.observe.application.swing.db.constants.DataContextType; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; import fr.ird.observe.application.swing.ui.content.ContentUIModel; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; -import fr.ird.observe.application.swing.I18nEnumHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.constants.seine.SchoolType; @@ -50,7 +50,12 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import javax.swing.JSpinner; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; import java.beans.PropertyChangeListener; import java.util.Date; import java.util.HashSet; @@ -136,15 +141,59 @@ public class SetSeineUIHandler extends ContentUIHandler<SetSeineDto> { super.initUI(); + SetSeineUI ui = getUi(); + // To be sure always remove listener (could prevent some leaks) - getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + ui.getErrorTableModel().removeTableModelListener(computeTabValidStateListener); // listen messages to see if required to add - getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + ui.getErrorTableModel().addTableModelListener(computeTabValidStateListener); + + ui.getStartTime().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getEndPursingTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getEndSetTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + + ui.setFocusCycleRoot(true); + ui.setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.getParent().equals(ui.getStartTime().getHourEditor().getEditor())) { + return getLastComponent(aContainer); + } + case 1: + if (aComponent.equals(ui.getSchoolThickness().getTextField())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } - getUi().getStartTime().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); - getUi().getEndPursingTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); - getUi().getEndSetTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + JComponent editor = ui.getStartTime().getHourEditor().getEditor(); + return ((JSpinner.DateEditor) editor).getTextField(); + case 1: + return ui.getSchoolThickness(); + } + return super.getFirstComponent(aContainer); + } + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getDelete().isVisible() && ui.getDelete().isEnabled()) { + return ui.getDelete(); + } + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } + }); } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx index e2bd28b..b40b058 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jaxx @@ -21,11 +21,11 @@ --> <fr.ird.observe.application.swing.ui.content.ContentUI - abstract='true' - superGenericType='E' - genericType='E extends IdDto, C extends DataDto'> + abstract='true' superGenericType='E' + genericType='E extends IdDto, C extends DataDto, U extends ContentListUI<E,C, U>'> <import> + fr.ird.observe.application.swing.ui.actions.shared.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.ReOpenUIAction fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction @@ -50,11 +50,10 @@ <ContentListUIModel id='model' genericType='E, C'/> - <ListSelectionModel id='listSelectionModel' - initializer='new DefaultListSelectionModel()' + <ListSelectionModel id='listSelectionModel' initializer='new DefaultListSelectionModel()' onValueChanged='if (!event.getValueIsAdjusting()) getModel().setSelectedDatas(getSelectedDatas());'/> - <ContentListUIHandler id='handler' genericType='E, C'/> + <ContentListUIHandler id='handler' genericType='E, C, U'/> <script><![CDATA[ @@ -70,13 +69,12 @@ public final List<DataReference<C>> getSelectedDatas() { <JPanel id='body'> - <JScrollPane id='listPane' constraints='BorderLayout.CENTER' - onFocusGained='list.requestFocus()' + <JScrollPane id='listPane' constraints='BorderLayout.CENTER' onFocusGained='list.requestFocus()' columnHeaderView='{listHeader}'> <JList id='list' onMouseClicked='getHandler().onDataSelected(event)'/> - <BeanListHeader id='listHeader' genericType='DataReference< C >' _entityClass="getModel().getChildType()"/> + <BeanListHeader id='listHeader' genericType='DataReference< C >'/> </JScrollPane> @@ -93,6 +91,11 @@ public final List<DataReference<C>> getSelectedDatas() { <JButton id='reopenChild'/> </cell> </row> + <row> + <cell fill='both' columns="3"> + <JButton id='closeChild'/> + </cell> + </row> <row weighty="1" weightx="1" fill="both"> <cell> <JButton id='gotoOpenChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss index ab4721e..1ea4dae 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUI.jcss @@ -32,6 +32,7 @@ _listNoLoad: true; beanType:{(Class)DataReference.class}; _doInit:{getModel().getChildType()}; + _entityClass:{getModel().getChildType()}; showReset:true; list:{list}; data:{getHandler().updateList(listHeader, model.getData())}; @@ -60,6 +61,12 @@ _observeAction:{ReOpenUIAction.ACTION_NAME}; } +#closeChild { + visible:{!model.isEmpty() && !model.isCanReopen()}; + enabled:{getHandler().isCanCloseChild()}; + _observeAction:{CloseOpenUIAction.ACTION_NAME}; +} + #createChild { actionIcon:"add"; visible:{model.isCreatingMode()}; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java index 9aca004..a2efb7f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIHandler.java @@ -23,7 +23,6 @@ package fr.ird.observe.application.swing.ui.content.list; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; -import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; @@ -41,14 +40,20 @@ import org.apache.commons.logging.LogFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.Icon; import javax.swing.JButton; +import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JList; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import java.awt.Color; import java.awt.Component; +import java.awt.Container; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import static org.nuiton.i18n.I18n.t; @@ -56,12 +61,12 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.5 */ -public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> extends ContentUIHandler<E> { +public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U extends ContentListUI<E, C, U>> extends ContentUIHandler<E> { /** Logger */ private static final Log log = LogFactory.getLog(ContentListUIHandler.class); - public ContentListUIHandler(ContentListUI<E, C> ui, + public ContentListUIHandler(U ui, DataContextType parentType, DataContextType type) { super(ui, parentType, type); @@ -76,14 +81,16 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e */ protected abstract List<DataReference<C>> getChilds(String parentId); + public abstract boolean isCanCloseChild(); + @Override protected boolean computeCanWrite(ObserveSwingDataSource source) { return source.canWriteData(); } @Override - public ContentListUI<E, C> getUi() { - return (ContentListUI<E, C>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } @Override @@ -103,6 +110,53 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e ListCellRenderer renderer2 = new EntityListCellRenderer(renderer, treeHelper); getUi().getList().setCellRenderer(renderer2); + getUi().setFocusCycleRoot(true); + getUi().setFocusTraversalPolicy(new LayoutFocusTraversalPolicy() { + + private List<JComponent> actions; + + @Override + public Component getFirstComponent(Container aContainer) { + return getUi().getList(); + } + + public List<JComponent> getActions() { + if (actions == null) { + + actions = new ArrayList<>(); + actions.add(getUi().getGotoSelectedChild()); + actions.add(getUi().getReopenChild()); + actions.add(getUi().getCloseChild()); + actions.add(getUi().getGotoOpenChild()); + actions.add(getUi().getGotoOpenChild2()); + actions.add(getUi().getCreateChild()); + for (Component component : getUi().getExtraActions().getComponents()) { + if (component instanceof JButton) { + actions.add((JComponent) component); + } + } + actions.add(getUi().getMoveSelectedChildren()); + + } + List<JComponent> result = new ArrayList<>(actions); + Collections.reverse(result); + return result; + } + + @Override + public Component getLastComponent(Container aContainer) { + Optional<JComponent> optional = getActions().stream().filter(a -> a.isEnabled() && a.isVisible()).findFirst(); + return optional.isPresent() ? optional.get() : super.getLastComponent(aContainer); + } + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(getUi().getList())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + }); } @Override @@ -162,6 +216,7 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e // getUi().getGotoOpenChild().setEnabled(false); }); + getUi().getCloseChild().setEnabled(isCanCloseChild()); // finalize openUI with specified code finalizeOpenUI(); } @@ -216,6 +271,7 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto> e // rien par default } + /** * Un renderer de liste d'entité qui reprendre la cosmétique de l'arbre * de navigation. diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx index 2a09f19..89140dc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripLonglineDto, ActivityLonglineDto' - contentTitle='{n("observe.storage.activityLonglines.title")}' listText='{n("observe.common.activities.list")}' - emptyListMessage='{n("observe.message.no.activity.for.trip")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='TripLonglineDto, ActivityLonglineDto, ActivityLonglinesUI' + contentTitle='{n("observe.storage.activityLonglines.title")}' listText='{n("observe.common.activities.list")}' + emptyListMessage='{n("observe.message.no.activity.for.trip")}'> <import> fr.ird.observe.services.dto.longline.ActivityLonglineDto @@ -49,6 +50,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenActivity'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenActivity2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java index 650c3e5..799d23a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUIHandler.java @@ -25,13 +25,13 @@ package fr.ird.observe.application.swing.ui.content.list.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.service.data.longline.ActivityLonglineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -46,7 +46,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglineDto, ActivityLonglineDto> { +public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglineDto, ActivityLonglineDto, ActivityLonglinesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivityLonglinesUIHandler.class); @@ -56,6 +56,11 @@ public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglin } @Override + public boolean isCanCloseChild() { + return true; + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { String openTripLonglineId = dataContext.getOpenTripId(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx index 82a5eb8..4bfe978 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jaxx @@ -19,9 +19,9 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='ProgramDto, TripLonglineDto' - listText='{n("observe.common.trips.list")}' - emptyListMessage='{n("observe.message.no.trip.for.program")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='ProgramDto, TripLonglineDto, TripLonglinesUI' + listText='{n("observe.common.trips.list")}' emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> fr.ird.observe.services.dto.longline.ActivityLonglineDto @@ -47,6 +47,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenTrip'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenTrip2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java index f3899d5..e9472b8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUIHandler.java @@ -25,14 +25,14 @@ package fr.ird.observe.application.swing.ui.content.list.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.longline.TripLonglineDto; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.service.data.longline.TripLonglineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -47,7 +47,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, TripLonglineDto> { +public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, TripLonglineDto, TripLonglinesUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripLonglinesUIHandler.class); @@ -89,6 +89,11 @@ public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, Tri } @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenActivityLongline(); + } + + @Override protected void finalizeOpenUI() { Class referenceType = ProgramDto.class; ReferentialReference<ProgramDto> programRef = getDataSource().getReferentialReference(referenceType, getSelectedParentId()); @@ -100,7 +105,7 @@ public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, Tri protected List<DataReference<TripLonglineDto>> getChilds(String parentId) { TripLonglineService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTripLonglineService(); - DataReferenceSet<TripLonglineDto> tripLonglineByProgram = service.getTripLonglineByProgram( parentId); + DataReferenceSet<TripLonglineDto> tripLonglineByProgram = service.getTripLonglineByProgram(parentId); if (log.isDebugEnabled()) { log.debug("Will use " + tripLonglineByProgram.sizeReference() + " trips."); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx index 5d67433..0a453d7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='RouteDto, ActivitySeineDto' - contentTitle='{n("observe.storage.activitySeines.title")}' listText='{n("observe.common.activities.list")}' - emptyListMessage='{n("observe.message.no.activity.for.route")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI + superGenericType='RouteDto, ActivitySeineDto, ActivitySeinesUI' + contentTitle='{n("observe.storage.activitySeines.title")}' listText='{n("observe.common.activities.list")}' + emptyListMessage='{n("observe.message.no.activity.for.route")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -49,6 +50,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenActivity'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenActivity2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java index e20e302..8e13d88 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUIHandler.java @@ -24,6 +24,7 @@ package fr.ird.observe.application.swing.ui.content.list.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.open.impl.seine.ActivitySeineUI; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.seine.ActivitySeineDto; @@ -43,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, ActivitySeineDto> { +public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, ActivitySeineDto, ActivitySeinesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivitySeinesUIHandler.class); @@ -53,6 +54,11 @@ public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, Acti } @Override + public boolean isCanCloseChild() { + return true; + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { String openRouteId = dataContext.getOpenRouteId(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx index f722954..bdc29a5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jaxx @@ -20,9 +20,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripSeineDto, RouteDto' - contentTitle='{n("observe.content.routes.title")}' listText='{n("observe.common.routes.list")}' - emptyListMessage='{n("observe.message.no.route.for.maree")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI superGenericType='TripSeineDto, RouteDto, RoutesUI' + contentTitle='{n("observe.content.routes.title")}' + listText='{n("observe.common.routes.list")}' + emptyListMessage='{n("observe.message.no.route.for.maree")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -48,6 +49,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenRoute'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenRoute2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java index f17564b..ce25730 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUIHandler.java @@ -43,7 +43,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto> { +public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto, RoutesUI> { /** Logger */ private static final Log log = LogFactory.getLog(RoutesUIHandler.class); @@ -52,6 +52,12 @@ public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto super(ui, DataContextType.TripSeine, DataContextType.Route); } + + @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenActivitySeine(); + } + @Override protected ContentMode getContentMode(DataContext dataContext) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx index bb84e3c..4701fef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jaxx @@ -19,10 +19,9 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<fr.ird.observe.application.swing.ui.content.list.ContentListUI - superGenericType='ProgramDto, TripSeineDto' - listText='{n("observe.common.trips.list")}' - emptyListMessage='{n("observe.message.no.trip.for.program")}'> +<fr.ird.observe.application.swing.ui.content.list.ContentListUI listText='{n("observe.common.trips.list")}' + superGenericType='ProgramDto, TripSeineDto, TripSeinesUI' + emptyListMessage='{n("observe.message.no.trip.for.program")}'> <import> fr.ird.observe.services.dto.seine.ActivitySeineDto @@ -49,6 +48,7 @@ <!-- override generic actions --> <JButton id='gotoSelectedChild'/> <JButton id='reopenChild'/> + <JButton id='closeChild'/> <JButton id='gotoOpenChild' styleClass='gotoOpenTrip'/> <JButton id='gotoOpenChild2' styleClass='gotoOpenTrip2'/> <JButton id='createChild'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java index 044424b..0840ef3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUIHandler.java @@ -24,14 +24,14 @@ package fr.ird.observe.application.swing.ui.content.list.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.DataReferenceSet; import fr.ird.observe.services.dto.referential.ProgramDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.list.ContentListUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSeineDto> { +public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSeineDto, TripSeinesUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripSeinesUIHandler.class); @@ -94,6 +94,11 @@ public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSe } @Override + public boolean isCanCloseChild() { + return !getModel().isCanReopen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenRoute(); + } + + @Override protected List<DataReference<TripSeineDto>> getChilds(String parentId) { TripSeineService service = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newTripSeineService(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx index 1b434e4..ba5ebcd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUI.jaxx @@ -21,13 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.ContentUI - abstract='true' - superGenericType='E' - genericType='E extends IdDto' - > + abstract='true' superGenericType='E' + genericType='E extends IdDto, U extends ContentOpenableUI<E, U>'> <import> - fr.ird.observe.services.dto.AbstractObserveDto fr.ird.observe.services.dto.IdDto fr.ird.observe.application.swing.ui.actions.shared.CancelCreateUIAction @@ -43,11 +40,10 @@ </import> <!-- handler --> - <ContentOpenableUIHandler id='handler' genericType='E'/> + <ContentOpenableUIHandler id='handler' genericType='E, U'/> <!-- model --> - <ContentOpenableUIModel id='model' genericType='E' - enabled='{!model.isReadingMode()}'/> + <ContentOpenableUIModel id='model' genericType='E' enabled='{!model.isReadingMode()}'/> <script><![CDATA[ diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java index c608156..491671c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/ContentOpenableUIHandler.java @@ -39,13 +39,16 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.t; /** * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentUIHandler<E> { +public abstract class ContentOpenableUIHandler<E extends IdDto, U extends ContentOpenableUI<E, U>> extends ContentUIHandler<E> { protected static final String POSITION_OPENABLE = "positionOpenable"; @@ -54,7 +57,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected final String closeMessage; - public ContentOpenableUIHandler(ContentOpenableUI<E> ui, + public ContentOpenableUIHandler(U ui, DataContextType parentType, DataContextType type, String closeMessage) { @@ -64,9 +67,19 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected abstract boolean obtainCanReopen(boolean create); + + public void initUI() { + + super.initUI(); + ((JComponent) ui).setFocusCycleRoot(true); + ((JComponent) ui).setFocusTraversalPolicy(createFocusTraversalPolicy(getUi())); + } + + protected abstract FocusTraversalPolicy createFocusTraversalPolicy(U ui); + @Override - public ContentOpenableUI<E> getUi() { - return (ContentOpenableUI<E>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } @Override @@ -97,7 +110,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU public final void afterOpenData() { - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); // On charge les ensembles de références utilisées dans les combobox updateUiWithReferenceSetsFromModel(); @@ -133,7 +146,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU public final void afterCloseData() { - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); ContentOpenableUIModel<E> model = getModel(); @@ -148,12 +161,6 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU getTypeI18nKey(bean.getClass()), t(closeMessage)); ObserveTreeHelper treeHelper = getTreeHelper(ui); -// ObserveNode selectedNode = treeHelper.getSelectedNode(); -// if (bean instanceof Trip) { -// // le program peut change d'etat open -// selectedNode = selectedNode.getParent(); -// } -// treeHelper.refreshNode(selectedNode, true); treeHelper.reloadSelectedNode(bean instanceof TripSeineDto || bean instanceof TripLonglineDto, true); updateActions(); } @@ -163,7 +170,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU super.afterSave(refresh); - ContentOpenableUI<E> ui = getUi(); + U ui = getUi(); int position = ui.getContextValue(Integer.class, POSITION_OPENABLE); ObserveTreeHelper treeHelper = getTreeHelper(ui); @@ -214,10 +221,7 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU } // on repaint le noeud et ses enfants -// treeHelper.refreshNode(node, true); treeHelper.reloadSelectedNode(false, true); - -// treeHelper.refreshNode(node, false); } } @@ -275,9 +279,6 @@ public abstract class ContentOpenableUIHandler<E extends IdDto> extends ContentU protected final void finalizeOpenUI(ContentMode mode, boolean create) { -// // utilisation du mode requis -// setContentMode(mode); - boolean historicalData = false; ContentOpenableUIModel<E> model = getUi().getModel(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx index a914f39..03c3ef9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUI.jaxx @@ -20,8 +20,9 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivityLonglineDto' - contentTitle='{n("observe.storage.activityLongline.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI + superGenericType='ActivityLonglineDto, ActivityLonglineUI' + contentTitle='{n("observe.storage.activityLongline.title")}'> <style source="../../../Common.jcss"/> @@ -42,8 +43,6 @@ java.awt.Dimension - javax.swing.SwingConstants - static fr.ird.observe.application.swing.ui.UIHelper.getStringValue static org.nuiton.i18n.I18n.n </import> @@ -94,7 +93,8 @@ <JLabel id='vesselActivityLonglineLabel'/> </cell> <cell anchor='east' fill="both"> - <BeanComboBox id='vesselActivityLongline' genericType='ReferentialReference<VesselActivityLonglineDto>' _entityClass='VesselActivityLonglineDto.class' constructorParams='this'/> + <BeanComboBox id='vesselActivityLongline' genericType='ReferentialReference<VesselActivityLonglineDto>' + _entityClass='VesselActivityLonglineDto.class' constructorParams='this'/> </cell> </row> @@ -103,7 +103,8 @@ <JLabel id='fpaZoneLabel'/> </cell> <cell anchor='east' fill="both"> - <BeanComboBox id='fpaZone' genericType='ReferentialReference<FpaZoneDto>' _entityClass='FpaZoneDto.class' constructorParams='this'/> + <BeanComboBox id='fpaZone' genericType='ReferentialReference<FpaZoneDto>' + _entityClass='FpaZoneDto.class' constructorParams='this'/> </cell> </row> @@ -138,8 +139,7 @@ <Table id='extraActions' fill="both" weightx="1" insets='2' visible='{model.isUpdatingMode()}'> <row> <cell weightx="0.5" fill="both"> - <JButton id='addSet' - onActionPerformed='getHandler().addChild(SetLonglineDto.class)'/> + <JButton id='addSet' onActionPerformed='getHandler().addChild(SetLonglineDto.class)'/> </cell> </row> </Table> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java index 17682ad..b0fbc96 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/ActivityLonglineUIHandler.java @@ -40,7 +40,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -51,7 +55,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglineDto> { +class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglineDto, ActivityLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivityLonglineUIHandler.class); @@ -72,8 +76,35 @@ class ActivityLonglineUIHandler extends ContentOpenableUIHandler<ActivityLonglin } @Override - public ActivityLonglineUI getUi() { - return (ActivityLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ActivityLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getTimeStamp().getDayDateEditor().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getTimeStamp().getDayDateEditor().getEditor(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getTimeStamp().getDayDateEditor().getEditor(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx index 26be957..5b71a2f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUI.jaxx @@ -20,21 +20,18 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripLonglineDto' - contentTitle='{n("observe.content.tripLongline.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripLonglineDto, TripLonglineUI' + contentTitle='{n("observe.content.tripLongline.title")}'> <style source="../../../Common.jcss"/> <import> fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.longline.TripLonglineDto - fr.ird.observe.services.dto.longline.ActivityLonglineDto fr.ird.observe.services.dto.longline.TripLonglineActivityDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.HarbourDto - fr.ird.observe.services.dto.referential.PersonHelper fr.ird.observe.services.dto.referential.VesselDto - fr.ird.observe.services.dto.referential.VesselHelper fr.ird.observe.services.dto.referential.PersonDto fr.ird.observe.services.dto.referential.OceanDto fr.ird.observe.services.dto.referential.longline.TripTypeDto @@ -47,11 +44,8 @@ jaxx.runtime.swing.editor.bean.BeanComboBox java.awt.Dimension - java.beans.PropertyChangeEvent - java.beans.PropertyChangeListener static fr.ird.observe.application.swing.ui.UIHelper.getStringValue - static org.apache.commons.lang3.StringUtils.isEmpty static org.nuiton.i18n.I18n.n </import> @@ -65,11 +59,8 @@ <TripLonglineDto id='bean'/> <!-- validator --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.longline.TripLonglineDto' - errorTableModel='{getErrorTableModel()}' - autoField='true' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.longline.TripLonglineDto' + errorTableModel='{getErrorTableModel()}' autoField='true' context='ui-update'> <field name='activityLongline' component='{actionDown}'/> </BeanValidator> @@ -94,7 +85,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='tripTypeLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='tripType' constructorParams='this' genericType='ReferentialReference<TripTypeDto>' _entityClass='TripTypeDto.class'/> + <BeanComboBox id='tripType' constructorParams='this' genericType='ReferentialReference<TripTypeDto>' + _entityClass='TripTypeDto.class'/> </cell> </row> @@ -104,7 +96,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='captainLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -114,7 +107,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='observerLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -124,7 +118,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='dataEntryOperatorLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='dataEntryOperator' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='dataEntryOperator' constructorParams='this' + genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> </cell> </row> @@ -134,7 +129,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='vesselLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' _entityClass='VesselDto.class'/> + <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' + _entityClass='VesselDto.class'/> </cell> </row> @@ -144,7 +140,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='oceanLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' constructorParams='this'/> + <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' + constructorParams='this'/> </cell> </row> @@ -154,7 +151,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='departureHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -164,7 +162,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JLabel id='landingHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -217,10 +216,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <!-- comment --> <row> <cell columns='2' fill='both' weighty="1"> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getModel().getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getModel().getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java index 3c0a539..1ea6413 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/longline/TripLonglineUIHandler.java @@ -45,7 +45,11 @@ import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import javax.swing.JTabbedPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Date; import java.util.LinkedList; @@ -60,7 +64,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto> { +class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto,TripLonglineUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripLonglineUIHandler.class); @@ -74,9 +78,42 @@ class TripLonglineUIHandler extends ContentOpenableUIHandler<TripLonglineDto> { n("observe.content.tripLongline.message.not.open")); } +// @Override +// public TripLonglineUI getUi() { +// return (TripLonglineUI) super.getUi(); +// } + + @Override - public TripLonglineUI getUi() { - return (TripLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TripLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getTripType().getCombobox().getEditor().getEditorComponent())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getTripType(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getTripType(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx index f7adb30..290eeef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUI.jaxx @@ -20,7 +20,7 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivitySeineDto' +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='ActivitySeineDto, ActivitySeineUI' contentTitle='{n("observe.storage.activitySeine.title")}'> <style source="../../../Common.jcss"/> @@ -43,7 +43,6 @@ jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox - jaxx.runtime.swing.CardLayout2Ext org.nuiton.jaxx.widgets.datetime.TimeEditor org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor @@ -52,8 +51,6 @@ java.awt.Dimension java.util.Collection - javax.swing.SwingConstants - static fr.ird.observe.application.swing.ui.UIHelper.getStringValue static org.nuiton.i18n.I18n.n </import> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java index db40d22..de4ee78 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/ActivitySeineUIHandler.java @@ -43,8 +43,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; +import javax.swing.JSpinner; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; import javax.swing.event.TableModelListener; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.HashSet; import java.util.Set; @@ -55,7 +61,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto> { +class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto, ActivitySeineUI> { /** Logger */ private static final Log log = LogFactory.getLog(ActivitySeineUIHandler.class); @@ -77,8 +83,58 @@ class ActivitySeineUIHandler extends ContentOpenableUIHandler<ActivitySeineDto> } @Override - public ActivitySeineUI getUi() { - return (ActivitySeineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ActivitySeineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.getParent().equals(ui.getTime().getHourEditor().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + break; + case 1: + if (aComponent.equals(ui.getVesselSpeed().getTextField())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getObservedSystem().getUniverseList())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().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 + public Component getLastComponent(Container aContainer) { + if (getModel().isCreatingMode()) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + return ui.getReset(); + } else + return ui.getCloseAndCreate(); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx index f36134c..7fecea6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUI.jaxx @@ -20,7 +20,8 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='RouteDto' contentTitle='{n("observe.content.route.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='RouteDto, RouteUI' + contentTitle='{n("observe.content.route.title")}'> <import> fr.ird.observe.services.dto.seine.RouteDto @@ -45,11 +46,8 @@ <RouteDto id='bean'/> <!-- validator --> - <BeanValidator id='validator' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.RouteDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.RouteDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <field name='activitySeine' component='{actionDown}'/> </BeanValidator> @@ -82,10 +80,8 @@ </row> <row> <cell columns='2' fill="both" weightx="1" weighty="1"> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java index d17062e..b911436 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/RouteUIHandler.java @@ -28,8 +28,8 @@ import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; -import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.tree.ObserveTreeHelper; +import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.seine.VesselActivitySeineDto; @@ -45,6 +45,10 @@ import org.nuiton.util.DateUtil; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JOptionPane; +import javax.swing.LayoutFocusTraversalPolicy; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Date; import static org.nuiton.i18n.I18n.n; @@ -54,9 +58,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { - -// private static final String UPDATE_TRIP_NODE = "updateTripNode"; +class RouteUIHandler extends ContentOpenableUIHandler<RouteDto, RouteUI> { /** Logger */ private static final Log log = LogFactory.getLog(RouteUIHandler.class); @@ -69,8 +71,35 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { } @Override - public RouteUI getUi() { - return (RouteUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(RouteUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getDate().getEditor())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getDate(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getDate(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; } @Override @@ -103,9 +132,7 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { } else { // la maree courante est ouverte - addMessage(ui, NuitonValidatorScope.INFO, - getTypeI18nKey(RouteDto.class), - t(closeMessage)); + addMessage(ui, NuitonValidatorScope.INFO, getTypeI18nKey(RouteDto.class), t(closeMessage)); } return ContentMode.READ; } @@ -402,13 +429,13 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { if (close) { - // on sauvegarde l'activity + // on sauvegarde l'activité selectedUI.save(false); - // on ferme l'activity + // on ferme l'activité selectedUI.closeData(); - // on ferme l'écean + // on ferme l'écran selectedUI.stopEdit(); } return selectedUI; @@ -423,39 +450,6 @@ class RouteUIHandler extends ContentOpenableUIHandler<RouteDto> { return !create && getOpenDataManager().canOpenRoute(getSelectedParentId()); } -// private void repaintTripNode() { -// Boolean updateTripNode = getUi().getContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// getUi().removeContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// if (updateTripNode == null || !updateTripNode) { -// return; -// } -// -// -// ObserveTreeHelper treeHelper = getTreeHelper(getUi()); -// ObserveNode tripNode = treeHelper.getSelectedNode().getParent().getParent(); -// if (log.isInfoEnabled()) { -// log.info("Refresh trip node : " + tripNode); -// } -// treeHelper.reloadNode(tripNode, false); -// } - -// protected void setUpdateMareeNodeTag(boolean wasUpdated) { -// -// if (wasUpdated) { -// -// // la date de fin a ete modifiee, il faut : redessiner le noeud de la maree le repositionner -// getUi().setContextValue(Boolean.TRUE, UPDATE_TRIP_NODE); -// -// } else { -// -// getUi().removeContextValue(Boolean.class, UPDATE_TRIP_NODE); -// -// } -// -// } - private RouteService getRouteService() { return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newRouteService(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx index 1f5639b..51dcc25 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUI.jaxx @@ -20,8 +20,8 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripSeineDto' - contentTitle='{n("observe.content.tripSeine.title")}'> +<fr.ird.observe.application.swing.ui.content.open.ContentOpenableUI superGenericType='TripSeineDto, TripSeineUI' + contentTitle='{n("observe.content.tripSeine.title")}'> <import> fr.ird.observe.services.dto.seine.TripSeineDto @@ -82,7 +82,7 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JPanel id="body" layout='{new BorderLayout()}'> <JTabbedPane id='tripSeineTabPane' constraints='BorderLayout.CENTER'> <tab id='generalTab'> - <Table insets="0" fill="both"> + <Table insets="0" fill="both" id="formGeneral"> <!-- captain --> <row> @@ -90,7 +90,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='captainLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='captain' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -100,7 +101,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='observerLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='observer' constructorParams='this' genericType='ReferentialReference<PersonDto>' + _entityClass='PersonDto.class'/> </cell> </row> @@ -110,7 +112,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='dataEntryOperatorLabel'/> </cell> <cell anchor='east'> - <BeanComboBox id='dataEntryOperator' constructorParams='this' genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> + <BeanComboBox id='dataEntryOperator' constructorParams='this' + genericType='ReferentialReference<PersonDto>' _entityClass='PersonDto.class'/> </cell> </row> @@ -120,7 +123,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='vesselLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' _entityClass='VesselDto.class'/> + <BeanComboBox id='vessel' constructorParams='this' genericType='ReferentialReference<VesselDto>' + _entityClass='VesselDto.class'/> </cell> </row> @@ -130,7 +134,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='oceanLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' constructorParams='this'/> + <BeanComboBox id='ocean' genericType='ReferentialReference<OceanDto>' _entityClass='OceanDto.class' + constructorParams='this'/> </cell> </row> @@ -140,7 +145,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='departureHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='departureHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> @@ -150,7 +156,8 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JLabel id='landingHarbourLabel'/> </cell> <cell anchor='east' weightx="1" fill="both"> - <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' _entityClass='HarbourDto.class' constructorParams='this'/> + <BeanComboBox id='landingHarbour' genericType='ReferentialReference<HarbourDto>' + _entityClass='HarbourDto.class' constructorParams='this'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java index 84f2885..7a31c57 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/open/impl/seine/TripSeineUIHandler.java @@ -25,6 +25,10 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.ContentMode; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.application.swing.ui.util.tripMap.TripMapUI; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.TripMapDto; import fr.ird.observe.services.dto.referential.PersonHelper; @@ -35,16 +39,16 @@ import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.dto.seine.TripSeineDto; import fr.ird.observe.services.dto.seine.TripSeineHelper; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.content.ContentMode; -import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIHandler; -import fr.ird.observe.application.swing.ui.content.open.ContentOpenableUIModel; -import fr.ird.observe.application.swing.ui.util.tripMap.TripMapUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.DateUtil; import javax.swing.JTabbedPane; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.SwingUtilities; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Date; import java.util.LinkedList; @@ -57,7 +61,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { +class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto, TripSeineUI> { /** Logger */ static private final Log log = LogFactory.getLog(TripSeineUIHandler.class); @@ -71,12 +75,6 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { n("observe.content.tripSeine.message.not.open")); } - - @Override - public TripSeineUI getUi() { - return (TripSeineUI) super.getUi(); - } - @Override public boolean doCloseData() { boolean result = getOpenDataManager().isOpenTripSeine(getSelectedId()); @@ -87,6 +85,38 @@ class TripSeineUIHandler extends ContentOpenableUIHandler<TripSeineDto> { } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(TripSeineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getCaptain().getCombobox().getEditor().getEditorComponent())) { + if (ui.getCloseAndCreate().isEnabled()) { + return ui.getCloseAndCreate(); + } + return ui.getDelete(); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getComponentAfter(Container aContainer, Component aComponent) { + if (!ui.getCloseAndCreate().isEnabled() && aComponent.equals(ui.getDelete())) { + + // retour au début + return ui.getCaptain(); + } + if (aComponent.equals(ui.getCloseAndCreate())) { + + // retour au début + return ui.getCaptain(); + } + return super.getComponentAfter(aContainer, aComponent); + } + }; + } + + @Override public void initUI() { super.initUI(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java index 3ba96f9..3cfcb10 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableModel.java @@ -127,11 +127,10 @@ public abstract class ContentTableModel<P extends IdDto, B extends IdDto> extend /** un drapeau pour savoir si le modèle a ete initialisé. */ private boolean init; - private ObserveContentTableUI<P, B> context; + private ObserveContentTableUI<P, B, ?> context; @SuppressWarnings("unchecked") - public ContentTableModel(ObserveContentTableUI<P, B> context, - List<ContentTableMeta<B>> metas) { + public ContentTableModel(ObserveContentTableUI<P, B, ?> context, List<ContentTableMeta<B>> metas) { if (CollectionUtils.isEmpty(metas)) { throw new NullPointerException("meta parameter can not be null, nor empty"); } @@ -449,7 +448,7 @@ public abstract class ContentTableModel<P extends IdDto, B extends IdDto> extend } @SuppressWarnings("unchecked") - protected ContentTableUIHandler<P, B> getHandler() { + protected ContentTableUIHandler<P, B, ?> getHandler() { return context.getHandler(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx index c6e467b..58e3cdd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jaxx @@ -22,8 +22,8 @@ <fr.ird.observe.application.swing.ui.content.ContentUI abstract='true' - superGenericType='E' implements="fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI<E,D>" - genericType='E extends IdDto, D extends IdDto'> + superGenericType='E' implements="fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI<E, D, U>" + genericType='E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>'> <import> fr.ird.observe.application.swing.ui.actions.shared.ResetEditUIAction @@ -58,7 +58,7 @@ <String id='deleteEntryTip' javaBean='n("observe.action.delete.entry.tip")'/> <!-- Handler --> - <ContentTableUIHandler id='handler' genericType='E, D'/> + <ContentTableUIHandler id='handler' genericType='E, D, U'/> <!-- Model --> <ContentTableUIModel id='model' genericType='E, D' initializer='ContentTableUIModel.newModel(this)'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java index a458c6c..86c660f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIHandler.java @@ -25,13 +25,6 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.db.constants.DataContextType; -import fr.ird.observe.services.dto.IdDto; -import fr.ird.observe.services.dto.longline.ActivityLonglineDto; -import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.services.dto.referential.SpeciesDto; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.ActivitySeineDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.ContentUIHandler; @@ -40,10 +33,18 @@ import fr.ird.observe.application.swing.ui.content.table.impl.longline.WeightMea import fr.ird.observe.application.swing.ui.tree.node.ObserveNode; import fr.ird.observe.application.swing.ui.util.table.EditableTableModelSupport; import fr.ird.observe.application.swing.ui.util.table.InlineTableAutotSelectRowAndShowPopupAction; +import fr.ird.observe.services.dto.IdDto; +import fr.ird.observe.services.dto.longline.ActivityLonglineDto; +import fr.ird.observe.services.dto.referential.ReferentialReference; +import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.ActivitySeineDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.validator.NuitonValidatorScope; +import javax.swing.JComponent; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; @@ -53,6 +54,8 @@ import javax.swing.SwingUtilities; import javax.swing.event.ListSelectionEvent; import javax.swing.event.TableModelEvent; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.FocusTraversalPolicy; import java.awt.Rectangle; import java.beans.PropertyChangeListener; import java.io.Serializable; @@ -68,12 +71,12 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> extends ContentUIHandler<E> { +public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>> extends ContentUIHandler<E> { /** Logger */ private static final Log log = LogFactory.getLog(ContentTableUIHandler.class); - protected ContentTableUIHandler(ObserveContentTableUI<E, D> ui, DataContextType dataContextType) { + protected ContentTableUIHandler(U ui, DataContextType dataContextType) { super(ui, dataContextType, null); } @@ -133,8 +136,8 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex } @Override - public ObserveContentTableUI<E, D> getUi() { - return (ObserveContentTableUI<E, D>) super.getUi(); + public U getUi() { + return (U) super.getUi(); } public final D getTableEditBean() { @@ -143,7 +146,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex public final void updateEditor(ListSelectionEvent event) { - final ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); if (ui.getValidatorTable() == null) { log.debug("skip validator is null!"); @@ -217,50 +220,40 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex protected abstract void loadEditBean(String beanId); - //FIXME -// @Override -// protected final void onLoad(TopiaContext tx, E bean) throws TopiaException { -// super.onLoad(tx, bean); -// -// // on duplique la liste des fils traites dans le tableau -// // sinon on reste sur les references d'origine et on aura pas -// // la possibilité d'annuler l'edition ensuite car on aura modifie -// // les entrées d'origine... -// E editBean = getBean(); -// Collection<D> data = loadChilds(tx, editBean); -// getModel().getChildsUpdator().setChilds(editBean, data); -// } - - //FIXME -// protected Collection<D> loadChilds(TopiaContext tx, E bean) throws TopiaException { -// Collection<D> childs = getModel().getChildsUpdator().getChilds(bean); -// Collection<D> data = new ArrayList<D>(); -// if (CollectionUtils.isNotEmpty(childs)) { -// Loador<D> loader = getModel().getChildLoador(); -// TopiaDAO<D> dao = getMainDataSource().getDAO(tx, getTableEditBean()); -// for (D c : childs) { -// try { -// D cUp = dao.findByTopiaId(c.getTopiaId()); -// D c2 = getModel().newTableEditBean(); -// loader.load(cUp, c2, true); -// data.add(c2); -// } catch (Exception e) { -// throw new RuntimeException(e); -// } -// } -// } -// return data; -// } + protected abstract FocusTraversalPolicy createFocusTraversalPolicy(U ui); @Override public void initUI() { - final ContentTableUIInitializer<E, D, ObserveContentTableUI<E, D>> uiInitializer = - new ContentTableUIInitializer<>(getUi()); + ContentTableUIInitializer<E, D, U> uiInitializer = new ContentTableUIInitializer<>(getUi()); uiInitializer.initUI(); getModel().addPropertyChangeListener(ContentUIModel.PROPERTY_FORM, evt -> updateUiWithReferenceSetsFromModel()); + ((JComponent) ui).setFocusCycleRoot(true); + ((JComponent) ui).setFocusTraversalPolicy(createFocusTraversalPolicy(getUi())); + } + + protected Component getDefaultLastComponent(U ui, Component optionalComponent) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (optionalComponent != null) { + return optionalComponent; + } + if (ui.getDeleteEntry().isVisible() && ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isVisible() && ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetNewEntry().isVisible() && ui.getResetNewEntry().isEnabled()) { + return ui.getResetNewEntry(); + } + return ui.getResetEntry(); } @Override @@ -271,7 +264,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex // récupération du mode de l'écran ContentMode mode = computeContentMode(); - ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); int oldIndex = ui.getTableModel().getSelectedRow(); @@ -341,7 +334,7 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex @Override protected boolean doSave(E bean) throws Exception { - ObserveContentTableUI<E, D> ui = getUi(); + U ui = getUi(); List<D> objets = ui.getTableModel().getData(); @@ -364,63 +357,6 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex protected abstract void doPersist(E bean); - //FIXME -// @Override -// protected E onUpdate(TopiaContext tx, Object parentBean, E beanToSave) throws TopiaException { -// -// List<D> childs = getUi().getTableModel().getData(); -// -// E editBean = getBean(); -// -// TopiaEntityBinder<E> binder = getLoadBinder(); -// -// Loador<D> childBinder = getModel().getChildLoador(); -// -// EntityListUpdator<E, D> childUpdator = getModel().getChildsUpdator(); -// -// // recopie des propriétés du bean en excluant toujours la liste des fils -// binder.copyExcluding(editBean, beanToSave, childUpdator.getPropertyName()); -// -// // on conserve l'ancienne liste des fils (pour traitement ultérieure) -// Collection<D> oldChilds = -// new ArrayList<D>(childUpdator.getChilds(beanToSave)); -// -// // suppression des fils dans le bean a sauver -// childUpdator.removeAll(beanToSave); -// -// TopiaDAO<D> dao = ObserveDAOHelper.getDAO(tx, getModel().getChildType()); -// -// for (D child : childs) { -// -// D childToSave; -// -// if (child.getTopiaId() == null) { -// -// // creation du fils -// Map<String, Object> map = childBinder.obtainProperties(child); -// -// childToSave = dao.create(map); -// -// } else { -// -// // mise a jour du fils -// -// childToSave = dao.findByTopiaId(child.getTopiaId()); -// -// childBinder.load(child, childToSave, false); -// } -// -// // ajout du fils au bean à sauver -// childUpdator.addToList(beanToSave, childToSave); -// } -// -// // on donne la main aux implantations pour faire des traitements -// // supplémentaires -// onUpdateFinalize(tx, beanToSave, oldChilds); -// -// return beanToSave; -// } - @Override protected void afterSave(boolean refresh) { @@ -434,11 +370,6 @@ public abstract class ContentTableUIHandler<E extends IdDto, D extends IdDto> ex return true; } - //FIXME -// protected void onUpdateFinalize(TopiaContext tx, E bean, Collection<D> oldChilds) throws TopiaException { -// // par défaut, rien à faire -// } - protected ContentTableModel<E, D> getTableModel() { return getUi().getTableModel(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java index c5d8701..93105a3 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIInitializer.java @@ -50,7 +50,7 @@ import java.awt.event.KeyEvent; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI extends ObserveContentTableUI<E, D>> extends ContentUIInitializer<E, UI> { +public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI extends ContentTableUI<E, D, UI>> extends ContentUIInitializer<E, UI> { public static final String CLIENT_PROPERTY_TABLE_PROPERTY_NAME = "tablePropertyName"; @@ -71,7 +71,7 @@ public class ContentTableUIInitializer<E extends IdDto, D extends IdDto, UI exte return ui.getModel(); } - protected ContentTableUIHandler<E, D> getHandler() { + protected ContentTableUIHandler<E, D, UI> getHandler() { return ui.getHandler(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java index fd26972..3209c07 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUIModel.java @@ -94,7 +94,7 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte this.selectionModel = new ContentTableListSelectionModel(); } - public static <E extends IdDto, D extends IdDto> ContentTableUIModel<E, D> newModel(ObserveContentTableUI<E, D> ui) { + public static <E extends IdDto, D extends IdDto> ContentTableUIModel<E, D> newModel(ObserveContentTableUI<E, D, ?> ui) { String uiName = ui.getClass().getName(); String modelName = uiName + "Model"; @@ -110,13 +110,13 @@ public abstract class ContentTableUIModel<E extends IdDto, D extends IdDto> exte } - public void initModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas) { + public void initModel(ObserveContentTableUI<E, D, ?> ui, List<ContentTableMeta<D>> metas) { this.tableModel = createTableModel(ui, metas); } - protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D> ui, List<ContentTableMeta<D>> metas) ; + protected abstract ContentTableModel<E, D> createTableModel(ObserveContentTableUI<E, D, ?> ui, List<ContentTableMeta<D>> metas) ; public Class<D> getChildType() { return childType; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java index 30feeeb..951482a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ObserveContentTableUI.java @@ -35,9 +35,9 @@ import javax.swing.*; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public interface ObserveContentTableUI<E extends IdDto, D extends IdDto> extends ObserveContentUI<E> { +public interface ObserveContentTableUI<E extends IdDto, D extends IdDto, U extends ContentTableUI<E,D, U>> extends ObserveContentUI<E> { - ContentTableUIHandler<E, D> getHandler(); + ContentTableUIHandler<E, D, U> getHandler(); ContentTableUIModel<E, D> getModel(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx index c417e00..5bab278 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, BaitsCompositionDto' - contentTitle='{n("observe.content.baitsComposition.title")}' - saveNewEntryText='{n("observe.content.baitsComposition.action.create")}' - saveNewEntryTip='{n("observe.content.baitsComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, BaitsCompositionDto, BaitsCompositionUI' + contentTitle='{n("observe.content.baitsComposition.title")}' + saveNewEntryText='{n("observe.content.baitsComposition.action.create")}' + saveNewEntryTip='{n("observe.content.baitsComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.BaitsCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.BaitsCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='baitTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='baitType' constructorParams='this' genericType='ReferentialReference<BaitTypeDto>' _entityClass='BaitTypeDto.class'/> + <BeanComboBox id='baitType' constructorParams='this' genericType='ReferentialReference<BaitTypeDto>' + _entityClass='BaitTypeDto.class'/> </cell> </row> @@ -86,7 +86,8 @@ <JLabel id='baitSettingStatusLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='baitSettingStatus' constructorParams='this' genericType='ReferentialReference<BaitSettingStatusDto>' _entityClass='BaitSettingStatusDto.class'/> + <BeanComboBox id='baitSettingStatus' constructorParams='this' _entityClass='BaitSettingStatusDto.class' + genericType='ReferentialReference<BaitSettingStatusDto>'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java index d1da929..13377c4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BaitsCompositionDto> { +public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BaitsCompositionDto, BaitsCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(BaitsCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class BaitsCompositionUIHandler extends ContentTableUIHandler<SetLongline } @Override - public BaitsCompositionUI getUi() { - return (BaitsCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(BaitsCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java index ef1e396..07fe92f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BaitsCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BaitsCompositionDto; -import fr.ird.observe.services.dto.longline.BaitsCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BaitsCompositionDto; +import fr.ird.observe.services.dto.longline.BaitsCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,12 +51,12 @@ public class BaitsCompositionUIModel extends ContentTableUIModel<SetLonglineGlob SetLonglineGlobalCompositionDto.PROPERTY_BAITS_COMPOSITION }, new String[]{BaitsCompositionDto.PROPERTY_BAIT_TYPE, - BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, - BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, - BaitsCompositionDto.PROPERTY_INDIVIDUAL_WEIGHT, - BaitsCompositionDto.PROPERTY_PROPORTION}); + BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, + BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, + BaitsCompositionDto.PROPERTY_INDIVIDUAL_WEIGHT, + BaitsCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<BaitsCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<BaitsCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_BAIT_TYPE, false), ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_BAIT_SETTING_STATUS, false), ContentTableModel.newTableMeta(BaitsCompositionDto.class, BaitsCompositionDto.PROPERTY_INDIVIDUAL_SIZE, false), @@ -69,7 +69,7 @@ public class BaitsCompositionUIModel extends ContentTableUIModel<SetLonglineGlob @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, BaitsCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, BaitsCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, BaitsCompositionDto, ?> ui, List<ContentTableMeta<BaitsCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, BaitsCompositionDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx index c68aea7..5994fbc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, BranchlinesCompositionDto' - contentTitle='{n("observe.content.branchlinesComposition.title")}' - saveNewEntryText='{n("observe.content.branchlinesComposition.action.create")}' - saveNewEntryTip='{n("observe.content.branchlinesComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, BranchlinesCompositionUI' + contentTitle='{n("observe.content.branchlinesComposition.title")}' + saveNewEntryText='{n("observe.content.branchlinesComposition.action.create")}' + saveNewEntryTip='{n("observe.content.branchlinesComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -63,9 +63,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.BranchlinesCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.BranchlinesCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -75,7 +74,8 @@ <JLabel id='topTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='topType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='topType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> @@ -85,7 +85,8 @@ <JLabel id='tracelineTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='tracelineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='tracelineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java index 259ba83..a0d947c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> { +public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, BranchlinesCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(BranchlinesCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class BranchlinesCompositionUIHandler extends ContentTableUIHandler<SetLo } @Override - public BranchlinesCompositionUI getUi() { - return (BranchlinesCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(BranchlinesCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java index b757b51..9193e9f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/BranchlinesCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BranchlinesCompositionDto; -import fr.ird.observe.services.dto.longline.BranchlinesCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BranchlinesCompositionDto; +import fr.ird.observe.services.dto.longline.BranchlinesCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,12 +51,12 @@ public class BranchlinesCompositionUIModel extends ContentTableUIModel<SetLongli SetLonglineGlobalCompositionDto.PROPERTY_BRANCHLINES_COMPOSITION }, new String[]{BranchlinesCompositionDto.PROPERTY_TOP_TYPE, - BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, - BranchlinesCompositionDto.PROPERTY_LENGTH, - BranchlinesCompositionDto.PROPERTY_TRACELINE_LENGTH, - BranchlinesCompositionDto.PROPERTY_PROPORTION}); + BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, + BranchlinesCompositionDto.PROPERTY_LENGTH, + BranchlinesCompositionDto.PROPERTY_TRACELINE_LENGTH, + BranchlinesCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<BranchlinesCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<BranchlinesCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_TOP_TYPE, false), ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_TRACELINE_TYPE, false), ContentTableModel.newTableMeta(BranchlinesCompositionDto.class, BranchlinesCompositionDto.PROPERTY_LENGTH, false), @@ -70,7 +70,7 @@ public class BranchlinesCompositionUIModel extends ContentTableUIModel<SetLongli @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto, ?> ui, List<ContentTableMeta<BranchlinesCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, BranchlinesCompositionDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java index 5099fdd..f4d81e1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineTableModel.java @@ -33,7 +33,6 @@ import fr.ird.observe.services.dto.longline.WeightMeasureDto; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import javax.swing.SwingUtilities; import java.util.Collection; import java.util.List; import java.util.stream.Collectors; @@ -51,7 +50,7 @@ public class CatchLonglineTableModel extends ContentTableModel<SetLonglineCatchD private static final long serialVersionUID = 1L; - public CatchLonglineTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto> context, + public CatchLonglineTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto, ?> context, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx index 7499479..3449fb4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUI.jaxx @@ -20,12 +20,13 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineCatchDto, CatchLonglineDto' - contentTitle='{n("observe.content.catchLongline.title")}' - newEntryText='{n("observe.content.catchLongline.action.new")}' - newEntryTip='{n("observe.content.catchLongline.action.new.tip")}' - saveNewEntryText='{n("observe.content.catchLongline.action.create")}' - saveNewEntryTip='{n("observe.content.catchLongline.action.create.tip")}'> +<fr.ird.observe.application.swing.ui.content.table.ContentTableUI + superGenericType='SetLonglineCatchDto, CatchLonglineDto, CatchLonglineUI' + contentTitle='{n("observe.content.catchLongline.title")}' + newEntryText='{n("observe.content.catchLongline.action.new")}' + newEntryTip='{n("observe.content.catchLongline.action.new.tip")}' + saveNewEntryText='{n("observe.content.catchLongline.action.create")}' + saveNewEntryTip='{n("observe.content.catchLongline.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -156,7 +157,8 @@ <JLabel id='sectionLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='section' genericType='DataReference<SectionDto>' _entityClass='SectionDto.class' constructorParams='this'/> + <BeanComboBox id='section' genericType='DataReference<SectionDto>' + _entityClass='SectionDto.class' constructorParams='this'/> </cell> </row> <row> @@ -164,7 +166,8 @@ <JLabel id='basketLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='basket' genericType='DataReference<BasketDto>' _entityClass='BasketDto.class' constructorParams='this'/> + <BeanComboBox id='basket' genericType='DataReference<BasketDto>' + _entityClass='BasketDto.class' constructorParams='this'/> </cell> </row> <row> @@ -172,7 +175,8 @@ <JLabel id='branchlineLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' _entityClass='BranchlineDto.class' constructorParams='this'/> + <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' + _entityClass='BranchlineDto.class' constructorParams='this'/> </cell> </row> </Table> @@ -187,7 +191,8 @@ <JLabel id='speciesCatchLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='speciesCatch' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' constructorParams='this'/> + <BeanComboBox id='speciesCatch' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class' constructorParams='this'/> </cell> <cell anchor='west'> <JLabel id='tagNumberLabel'/> @@ -226,13 +231,17 @@ <JLabel id='catchHealthnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='catchHealthness' constructorParams='this' genericType='ReferentialReference<HealthnessDto>' _entityClass='HealthnessDto.class'/> + <BeanComboBox id='catchHealthness' constructorParams='this' + genericType='ReferentialReference<HealthnessDto>' + _entityClass='HealthnessDto.class'/> </cell> <cell> <JLabel id='hookPositionLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookPosition' constructorParams='this' genericType='ReferentialReference<HookPositionDto>' _entityClass='HookPositionDto.class'/> + <BeanComboBox id='hookPosition' constructorParams='this' + genericType='ReferentialReference<HookPositionDto>' + _entityClass='HookPositionDto.class'/> </cell> </row> @@ -243,13 +252,17 @@ <JLabel id='catchFateLonglineLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='catchFateLongline' constructorParams='this' genericType='ReferentialReference<CatchFateLonglineDto>' _entityClass='CatchFateLonglineDto.class'/> + <BeanComboBox id='catchFateLongline' constructorParams='this' + genericType='ReferentialReference<CatchFateLonglineDto>' + _entityClass='CatchFateLonglineDto.class'/> </cell> <cell> <JLabel id='discardHealthnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='discardHealthness' constructorParams='this' genericType='ReferentialReference<HealthnessDto>' _entityClass='HealthnessDto.class'/> + <BeanComboBox id='discardHealthness' constructorParams='this' + genericType='ReferentialReference<HealthnessDto>' + _entityClass='HealthnessDto.class'/> </cell> </row> @@ -303,7 +316,8 @@ <row> <cell columns="2" fill="both" weighty="0.7"> <JScrollPane id='predatorPane'> - <FilterableDoubleList id='predator' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <FilterableDoubleList id='predator' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </JScrollPane> </cell> </row> @@ -322,7 +336,9 @@ <JLabel id='stomacFullnessLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='stomacFullness' constructorParams='this' genericType='ReferentialReference<StomacFullnessDto>' _entityClass='StomacFullnessDto.class'/> + <BeanComboBox id='stomacFullness' constructorParams='this' + genericType='ReferentialReference<StomacFullnessDto>' + _entityClass='StomacFullnessDto.class'/> </cell> </row> @@ -332,7 +348,8 @@ <JLabel id='sexLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sex' constructorParams='this' genericType='ReferentialReference<SexDto>' _entityClass='SexDto.class'/> + <BeanComboBox id='sex' constructorParams='this' genericType='ReferentialReference<SexDto>' + _entityClass='SexDto.class'/> </cell> </row> @@ -342,7 +359,9 @@ <JLabel id='maturityStatusLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='maturityStatus' constructorParams='this' genericType='ReferentialReference<MaturityStatusDto>' _entityClass='MaturityStatusDto.class'/> + <BeanComboBox id='maturityStatus' constructorParams='this' + genericType='ReferentialReference<MaturityStatusDto>' + _entityClass='MaturityStatusDto.class'/> </cell> </row> @@ -422,7 +441,9 @@ <JLabel id='baitHaulingStatusLabel'/> </cell> <cell anchor='east' weightx="1" fill="both" columns="2"> - <BeanComboBox id='baitHaulingStatus' constructorParams='this' genericType='ReferentialReference<BaitHaulingStatusDto>' _entityClass='BaitHaulingStatusDto.class'/> + <BeanComboBox id='baitHaulingStatus' constructorParams='this' + genericType='ReferentialReference<BaitHaulingStatusDto>' + _entityClass='BaitHaulingStatusDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java index 2cf0545..2ed9f6d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIHandler.java @@ -52,11 +52,11 @@ import fr.ird.observe.services.dto.longline.WeightMeasureDto; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.ReferentialReferences; +import fr.ird.observe.services.dto.referential.SizeMeasureTypeDto; import fr.ird.observe.services.dto.referential.SpeciesDto; +import fr.ird.observe.services.dto.referential.WeightMeasureTypeDto; import fr.ird.observe.services.dto.referential.longline.CatchFateLonglineDto; import fr.ird.observe.services.dto.referential.longline.HealthnessDto; -import fr.ird.observe.services.dto.referential.SizeMeasureTypeDto; -import fr.ird.observe.services.dto.referential.WeightMeasureTypeDto; import fr.ird.observe.services.dto.result.SaveResultDto; import fr.ird.observe.services.service.data.longline.BranchlineService; import fr.ird.observe.services.service.data.longline.SetLonglineCatchService; @@ -76,8 +76,12 @@ import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.util.Calendar; import java.util.Collection; @@ -97,7 +101,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCatchDto, CatchLonglineDto> { +public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCatchDto, CatchLonglineDto, CatchLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(CatchLonglineUIHandler.class); @@ -136,11 +140,6 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat } @Override - public CatchLonglineUI getUi() { - return (CatchLonglineUI) super.getUi(); - } - - @Override public CatchLonglineUIModel getModel() { return (CatchLonglineUIModel) super.getModel(); } @@ -148,7 +147,7 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat @Override public void initUI() { - final CatchLonglineContentTableUIInitializer uiInitializer = new CatchLonglineContentTableUIInitializer(getUi()); + CatchLonglineContentTableUIInitializer uiInitializer = new CatchLonglineContentTableUIInitializer(getUi()); uiInitializer.initUI(); getModel().addPropertyChangeListener(CatchLonglineUIModel.PROPERTY_SHOW_INDIVIDUAL_TABS, evt -> { @@ -178,6 +177,84 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(CatchLonglineUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (getTableModel().isCreate()) { + if (aComponent.equals(ui.getAcquisitionModeIndividual())) { + return getLastComponent(aContainer); + } + } else { + if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + + case 1: + if (aComponent.equals(ui.getDepredated())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getStomacFullness().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + case 5: + if (aComponent.equals(ui.getDepthRecorder())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getFishingOperationTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (getTableModel().isCreate()) { + return ui.getAcquisitionModeIndividual(); + } else { + return ui.getSection(); + } + case 1: + return ui.getDepredated(); + case 2: + return ui.getStomacFullness(); + case 5: + return ui.getDepthRecorder(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + + return super.getLastComponent(aContainer); + } + }; + } + + @Override public void openUI() { if (log.isInfoEnabled()) { @@ -423,7 +500,7 @@ public class CatchLonglineUIHandler extends ContentTableUIHandler<SetLonglineCat ui.getFishingOperationTabPane().setSelectedIndex(0); // select by default individual acquisition mode - String openTripLonglineId = getDataContext().getOpenTripLonglineId(); +// String openTripLonglineId = getDataContext().getOpenTripLonglineId(); ObserveTreeHelper treeHelper = ObserveSwingApplicationContext.get().getMainUI().getTreeHelper(); ObserveNode selectedNode = treeHelper.getSelectedNode(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java index cc50155..45091d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/CatchLonglineUIModel.java @@ -23,17 +23,17 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.BranchlineDto; -import fr.ird.observe.services.dto.longline.CatchLonglineDto; -import fr.ird.observe.services.dto.longline.SetLonglineCatchDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.BranchlineDto; +import fr.ird.observe.services.dto.longline.CatchLonglineDto; +import fr.ird.observe.services.dto.longline.SetLonglineCatchDto; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderModelBuilder; +import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Set; @@ -122,35 +122,35 @@ public class CatchLonglineUIModel extends ContentTableUIModel<SetLonglineCatchDt SetLonglineCatchDto.PROPERTY_CATCH_LONGLINE }, new String[]{CatchLonglineDto.PROPERTY_SPECIES_CATCH, - CatchLonglineDto.PROPERTY_ACQUISITION_MODE, - CatchLonglineDto.PROPERTY_COUNT, - CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, - CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, - CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, - CatchLonglineDto.PROPERTY_DEPREDATED, - CatchLonglineDto.PROPERTY_NUMBER, - CatchLonglineDto.PROPERTY_HOME_ID, - CatchLonglineDto.PROPERTY_HOOK_POSITION, - CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED, - CatchLonglineDto.PROPERTY_MATURITY_STATUS, - CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, - CatchLonglineDto.PROPERTY_SEX, - CatchLonglineDto.PROPERTY_PREDATOR, - CatchLonglineDto.PROPERTY_STOMAC_FULLNESS, - CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, - CatchLonglineDto.PROPERTY_BEAT_DIAMETER, - CatchLonglineDto.PROPERTY_GONADE_WEIGHT, - CatchLonglineDto.PROPERTY_SECTION, - CatchLonglineDto.PROPERTY_BASKET, - CatchLonglineDto.PROPERTY_BRANCHLINE, - CatchLonglineDto.PROPERTY_TAG_NUMBER, - CatchLonglineDto.PROPERTY_COMMENT + CatchLonglineDto.PROPERTY_ACQUISITION_MODE, + CatchLonglineDto.PROPERTY_COUNT, + CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, + CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, + CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, + CatchLonglineDto.PROPERTY_DEPREDATED, + CatchLonglineDto.PROPERTY_NUMBER, + CatchLonglineDto.PROPERTY_HOME_ID, + CatchLonglineDto.PROPERTY_HOOK_POSITION, + CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED, + CatchLonglineDto.PROPERTY_MATURITY_STATUS, + CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, + CatchLonglineDto.PROPERTY_SEX, + CatchLonglineDto.PROPERTY_PREDATOR, + CatchLonglineDto.PROPERTY_STOMAC_FULLNESS, + CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, + CatchLonglineDto.PROPERTY_BEAT_DIAMETER, + CatchLonglineDto.PROPERTY_GONADE_WEIGHT, + CatchLonglineDto.PROPERTY_SECTION, + CatchLonglineDto.PROPERTY_BASKET, + CatchLonglineDto.PROPERTY_BRANCHLINE, + CatchLonglineDto.PROPERTY_TAG_NUMBER, + CatchLonglineDto.PROPERTY_COMMENT }); this.sizeMeasuresTableModel = new SizeMeasuresTableModel(); this.weightMeasuresTableModel = new WeightMeasuresTableModel(); - List<ContentTableMeta<CatchLonglineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<CatchLonglineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_SECTION, false), ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_BASKET, false), ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_BRANCHLINE, false), @@ -232,7 +232,7 @@ public class CatchLonglineUIModel extends ContentTableUIModel<SetLonglineCatchDt } @Override - protected ContentTableModel<SetLonglineCatchDto, CatchLonglineDto> createTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto> ui, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { + protected ContentTableModel<SetLonglineCatchDto, CatchLonglineDto> createTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto, ?> ui, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { return new CatchLonglineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx index 21588ef..673ce69 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='ActivityLonglineEncounterDto, EncounterDto' - contentTitle='{n("observe.content.encounter.title")}' - saveNewEntryText='{n("observe.content.encounter.action.create")}' - saveNewEntryTip='{n("observe.content.encounter.action.create.tip")}'> + superGenericType='ActivityLonglineEncounterDto, EncounterDto, EncounterUI' + contentTitle='{n("observe.content.encounter.title")}' + saveNewEntryText='{n("observe.content.encounter.action.create")}' + saveNewEntryTip='{n("observe.content.encounter.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -77,7 +77,8 @@ <JLabel id='encounterTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='encounterType' constructorParams='this' genericType='ReferentialReference<EncounterTypeDto>' _entityClass='EncounterTypeDto.class'/> + <BeanComboBox id='encounterType' constructorParams='this' + genericType='ReferentialReference<EncounterTypeDto>' _entityClass='EncounterTypeDto.class'/> </cell> </row> @@ -87,7 +88,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java index 00d6bb7..59063c5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIHandler.java @@ -24,6 +24,8 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterHelper; @@ -35,15 +37,17 @@ import fr.ird.observe.services.dto.referential.SpeciesDto; import fr.ird.observe.services.dto.referential.SpeciesListDto; import fr.ird.observe.services.dto.referential.longline.EncounterTypeDto; import fr.ird.observe.services.dto.result.SaveResultDto; -import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.data.longline.ActivityLongLineEncounterService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; +import fr.ird.observe.services.service.referential.ReferentialService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -56,7 +60,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEncounterDto, EncounterDto> { +public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEncounterDto, EncounterDto, EncounterUI> { /** Logger */ private static final Log log = LogFactory.getLog(EncounterUIHandler.class); @@ -66,11 +70,6 @@ public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEn } @Override - public EncounterUI getUi() { - return (EncounterUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, EncounterDto bean, boolean create) { if (getTableModel().isEditable()) { if (log.isDebugEnabled()) { @@ -81,6 +80,36 @@ public class EncounterUIHandler extends ContentTableUIHandler<ActivityLonglineEn } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(EncounterUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getEncounterType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getEncounterType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }; + } + + @Override protected void initTableUI(DefaultTableCellRenderer renderer) { JTable table = getUi().getTable(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java index e5ea568..0da0597 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/EncounterUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; -import fr.ird.observe.services.dto.longline.EncounterDto; -import fr.ird.observe.services.dto.longline.EncounterHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.ActivityLonglineEncounterDto; +import fr.ird.observe.services.dto.longline.EncounterDto; +import fr.ird.observe.services.dto.longline.EncounterHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -56,7 +56,7 @@ public class EncounterUIModel extends ContentTableUIModel<ActivityLonglineEncoun EncounterDto.PROPERTY_COUNT, EncounterDto.PROPERTY_ENCOUNTER_TYPE}); - List<ContentTableMeta<EncounterDto>> metas = Lists.newArrayList( + List<ContentTableMeta<EncounterDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_ENCOUNTER_TYPE, false), ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(EncounterDto.class, EncounterDto.PROPERTY_DISTANCE, false), @@ -68,7 +68,7 @@ public class EncounterUIModel extends ContentTableUIModel<ActivityLonglineEncoun @Override protected ContentTableModel<ActivityLonglineEncounterDto, EncounterDto> createTableModel( - ObserveContentTableUI<ActivityLonglineEncounterDto, EncounterDto> ui, + ObserveContentTableUI<ActivityLonglineEncounterDto, EncounterDto, ?> ui, List<ContentTableMeta<EncounterDto>> contentTableMetas) { return new ContentTableModel<ActivityLonglineEncounterDto, EncounterDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx index 6e42e3b..2851019 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, FloatlinesCompositionDto' - contentTitle='{n("observe.content.floatlinesComposition.title")}' - saveNewEntryText='{n("observe.content.floatlinesComposition.action.create")}' - saveNewEntryTip='{n("observe.content.floatlinesComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, FloatlinesCompositionUI' + contentTitle='{n("observe.content.floatlinesComposition.title")}' + saveNewEntryText='{n("observe.content.floatlinesComposition.action.create")}' + saveNewEntryTip='{n("observe.content.floatlinesComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.FloatlinesCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.FloatlinesCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='lineTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='lineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' _entityClass='LineTypeDto.class'/> + <BeanComboBox id='lineType' constructorParams='this' genericType='ReferentialReference<LineTypeDto>' + _entityClass='LineTypeDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java index 5de05fa..c402d38 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIHandler.java @@ -34,6 +34,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -42,7 +44,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> { +public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, FloatlinesCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(FloatlinesCompositionUIHandler.class); @@ -52,8 +54,8 @@ public class FloatlinesCompositionUIHandler extends ContentTableUIHandler<SetLon } @Override - public FloatlinesCompositionUI getUi() { - return (FloatlinesCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(FloatlinesCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java index ca309ba..6cbb411 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/FloatlinesCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.FloatlinesCompositionDto; -import fr.ird.observe.services.dto.longline.FloatlinesCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.FloatlinesCompositionDto; +import fr.ird.observe.services.dto.longline.FloatlinesCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,10 +51,10 @@ public class FloatlinesCompositionUIModel extends ContentTableUIModel<SetLonglin SetLonglineGlobalCompositionDto.PROPERTY_FLOATLINES_COMPOSITION }, new String[]{FloatlinesCompositionDto.PROPERTY_LINE_TYPE, - FloatlinesCompositionDto.PROPERTY_LENGTH, - FloatlinesCompositionDto.PROPERTY_PROPORTION}); + FloatlinesCompositionDto.PROPERTY_LENGTH, + FloatlinesCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<FloatlinesCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<FloatlinesCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_LINE_TYPE, false), ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_LENGTH, false), ContentTableModel.newTableMeta(FloatlinesCompositionDto.class, FloatlinesCompositionDto.PROPERTY_PROPORTION, false)); @@ -66,11 +66,12 @@ public class FloatlinesCompositionUIModel extends ContentTableUIModel<SetLonglin @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto, ?> ui, List<ContentTableMeta<FloatlinesCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, FloatlinesCompositionDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<FloatlinesCompositionDto> getChilds(SetLonglineGlobalCompositionDto bean) { return bean.getFloatlinesComposition(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java index efd69f6..7fafb31 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineTableModel.java @@ -23,15 +23,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.Sets; +import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineHelper; import fr.ird.observe.services.dto.longline.GearUseFeaturesMeasurementLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; -import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,7 +54,7 @@ public class GearUseFeaturesLonglineTableModel extends ContentTableModel<TripLon private transient GearUseFeaturesLonglineUIHandler gearUseFeaturesLonglineUIHandler; - public GearUseFeaturesLonglineTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> context, + public GearUseFeaturesLonglineTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, ?> context, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx index b7609c4..86b428e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TripLonglineGearUseDto, GearUseFeaturesLonglineDto' - contentTitle='{n("observe.content.gearUseFeaturesLongline.title")}' - saveNewEntryText='{n("observe.content.action.gearUseFeaturesLongline")}' - saveNewEntryTip='{n("observe.content.action.gearUseFeaturesLongline.tip")}'> + superGenericType='TripLonglineGearUseDto, GearUseFeaturesLonglineDto, GearUseFeaturesLonglineUI' + contentTitle='{n("observe.content.gearUseFeaturesLongline.title")}' + saveNewEntryText='{n("observe.content.action.gearUseFeaturesLongline")}' + saveNewEntryTip='{n("observe.content.action.gearUseFeaturesLongline.tip")}'> <style source="../../CommonTable.jcss"/> @@ -32,7 +32,6 @@ fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.longline.TripLonglineDto fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto - fr.ird.observe.services.dto.longline.GearUseFeaturesMeasurementLonglineDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.GearDto fr.ird.observe.application.swing.ui.content.table.* @@ -66,17 +65,12 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.longline.TripLonglineGearUseDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.longline.TripLonglineGearUseDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto'/> <JPopupMenu id='measurementsTablePopup'> <JMenuItem id='addMeasurement' onActionPerformed='getHandler().addMeasurement()'/> @@ -101,7 +95,8 @@ <JLabel id='gearLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' _entityClass='GearDto.class'/> + <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' + _entityClass='GearDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java index 097b2ae..13a708d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIHandler.java @@ -45,8 +45,8 @@ import fr.ird.observe.services.dto.referential.GearCaracteristicTypeHelper; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.result.SaveResultDto; -import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.data.longline.TripLonglineGearUseService; +import fr.ird.observe.services.service.referential.ReferentialService; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidatorMessage; import jaxx.runtime.validator.swing.SwingValidatorMessageTableModel; @@ -57,8 +57,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.awt.GridBagConstraints; import java.awt.Insets; import java.beans.PropertyChangeListener; @@ -78,7 +82,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.16 */ -public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> { +public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, GearUseFeaturesLonglineUI> { /** Logger */ private static final Log log = LogFactory.getLog(GearUseFeaturesLonglineUIHandler.class); @@ -100,8 +104,37 @@ public class GearUseFeaturesLonglineUIHandler extends ContentTableUIHandler<Trip } @Override - public GearUseFeaturesLonglineUI getUi() { - return (GearUseFeaturesLonglineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(GearUseFeaturesLonglineUI ui) { + + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getGear(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, null); + } + }; + } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java index adb0d7b..a5865fd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/GearUseFeaturesLonglineUIModel.java @@ -23,14 +23,14 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; -import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.GearUseFeaturesLonglineDto; +import fr.ird.observe.services.dto.longline.TripLonglineGearUseDto; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -74,7 +74,7 @@ public class GearUseFeaturesLonglineUIModel extends ContentTableUIModel<TripLong this.measurementsTableModel = new GearUseFeaturesMeasurementLonglinesTableModel(); - List<ContentTableMeta<GearUseFeaturesLonglineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<GearUseFeaturesLonglineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_GEAR, false), ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_NUMBER, false), ContentTableModel.newTableMeta(GearUseFeaturesLonglineDto.class, GearUseFeaturesLonglineDto.PROPERTY_USED_IN_TRIP, false), @@ -86,7 +86,7 @@ public class GearUseFeaturesLonglineUIModel extends ContentTableUIModel<TripLong } @Override - protected GearUseFeaturesLonglineTableModel createTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto> ui, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { + protected GearUseFeaturesLonglineTableModel createTableModel(ObserveContentTableUI<TripLonglineGearUseDto, GearUseFeaturesLonglineDto, ?> ui, List<ContentTableMeta<GearUseFeaturesLonglineDto>> contentTableMetas) { return new GearUseFeaturesLonglineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx index 7328788..8448aa5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetLonglineGlobalCompositionDto, HooksCompositionDto' - contentTitle='{n("observe.content.hooksComposition.title")}' - saveNewEntryText='{n("observe.content.hooksComposition.action.create")}' - saveNewEntryTip='{n("observe.content.hooksComposition.action.create.tip")}'> + superGenericType='SetLonglineGlobalCompositionDto, HooksCompositionDto, HooksCompositionUI' + contentTitle='{n("observe.content.hooksComposition.title")}' + saveNewEntryText='{n("observe.content.hooksComposition.action.create")}' + saveNewEntryTip='{n("observe.content.hooksComposition.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,9 +64,8 @@ </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' autoField='true' context='ui-update' - beanClass='fr.ird.observe.services.dto.longline.HooksCompositionDto' - errorTableModel='{getErrorTableModel()}'/> + <BeanValidator id='validatorTable' autoField='true' context='ui-update' errorTableModel='{getErrorTableModel()}' + beanClass='fr.ird.observe.services.dto.longline.HooksCompositionDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -76,7 +75,8 @@ <JLabel id='hookTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookType' constructorParams='this' genericType='ReferentialReference<HookTypeDto>' _entityClass='HookTypeDto.class'/> + <BeanComboBox id='hookType' constructorParams='this' genericType='ReferentialReference<HookTypeDto>' + _entityClass='HookTypeDto.class'/> </cell> </row> @@ -86,11 +86,11 @@ <JLabel id='hookSizeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='hookSize' constructorParams='this' genericType='ReferentialReference<HookSizeDto>' _entityClass='HookSizeDto.class'/> + <BeanComboBox id='hookSize' constructorParams='this' genericType='ReferentialReference<HookSizeDto>' + _entityClass='HookSizeDto.class'/> </cell> </row> - <!-- hookOffset --> <row> <cell> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java index ad25532..e3e2c88 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIHandler.java @@ -35,6 +35,8 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.FocusTraversalPolicy; + import static org.nuiton.i18n.I18n.n; /** @@ -43,7 +45,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 3.9 */ -public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, HooksCompositionDto> { +public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLonglineGlobalCompositionDto, HooksCompositionDto, HooksCompositionUI> { /** Logger */ private static final Log log = LogFactory.getLog(HooksCompositionUIHandler.class); @@ -53,8 +55,8 @@ public class HooksCompositionUIHandler extends ContentTableUIHandler<SetLongline } @Override - public HooksCompositionUI getUi() { - return (HooksCompositionUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(HooksCompositionUI ui) { + return null; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java index 1ab45b5..1b9e373 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/HooksCompositionUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.HooksCompositionDto; -import fr.ird.observe.services.dto.longline.HooksCompositionHelper; -import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.HooksCompositionDto; +import fr.ird.observe.services.dto.longline.HooksCompositionHelper; +import fr.ird.observe.services.dto.longline.SetLonglineGlobalCompositionDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -51,11 +51,11 @@ public class HooksCompositionUIModel extends ContentTableUIModel<SetLonglineGlob SetLonglineGlobalCompositionDto.PROPERTY_HOOKS_COMPOSITION }, new String[]{HooksCompositionDto.PROPERTY_HOOK_TYPE, - HooksCompositionDto.PROPERTY_HOOK_SIZE, - HooksCompositionDto.PROPERTY_HOOK_OFFSET, - HooksCompositionDto.PROPERTY_PROPORTION}); + HooksCompositionDto.PROPERTY_HOOK_SIZE, + HooksCompositionDto.PROPERTY_HOOK_OFFSET, + HooksCompositionDto.PROPERTY_PROPORTION}); - List<ContentTableMeta<HooksCompositionDto>> metas = Lists.newArrayList( + List<ContentTableMeta<HooksCompositionDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_TYPE, false), ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_SIZE, false), ContentTableModel.newTableMeta(HooksCompositionDto.class, HooksCompositionDto.PROPERTY_HOOK_OFFSET, false), @@ -68,11 +68,12 @@ public class HooksCompositionUIModel extends ContentTableUIModel<SetLonglineGlob @Override protected ContentTableModel<SetLonglineGlobalCompositionDto, HooksCompositionDto> createTableModel( - ObserveContentTableUI<SetLonglineGlobalCompositionDto, HooksCompositionDto> ui, + ObserveContentTableUI<SetLonglineGlobalCompositionDto, HooksCompositionDto, ?> ui, List<ContentTableMeta<HooksCompositionDto>> contentTableMetas) { return new ContentTableModel<SetLonglineGlobalCompositionDto, HooksCompositionDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<HooksCompositionDto> getChilds(SetLonglineGlobalCompositionDto bean) { return bean.getHooksComposition(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx index 5a25e06..c32c54e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUI.jaxx @@ -19,10 +19,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='ActivityLonglineSensorUsedDto, SensorUsedDto' - contentTitle='{n("observe.content.sensorUsed.title")}' - saveNewEntryText='{n("observe.content.sensorUsed.action.create")}' - saveNewEntryTip='{n("observe.content.sensorUsed.action.create.tip")}'> + superGenericType='ActivityLonglineSensorUsedDto, SensorUsedDto, SensorUsedUI' + contentTitle='{n("observe.content.sensorUsed.title")}' + saveNewEntryText='{n("observe.content.sensorUsed.action.create")}' + saveNewEntryTip='{n("observe.content.sensorUsed.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -77,7 +77,8 @@ <JLabel id='sensorTypeLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorType' constructorParams='this' genericType='ReferentialReference<SensorTypeDto>' _entityClass='SensorTypeDto.class'/> + <BeanComboBox id='sensorType' constructorParams='this' genericType='ReferentialReference<SensorTypeDto>' + _entityClass='SensorTypeDto.class'/> </cell> </row> @@ -87,7 +88,9 @@ <JLabel id='sensorDataFormatLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorDataFormat' constructorParams='this' genericType='ReferentialReference<SensorDataFormatDto>' _entityClass='SensorDataFormatDto.class'/> + <BeanComboBox id='sensorDataFormat' constructorParams='this' + genericType='ReferentialReference<SensorDataFormatDto>' + _entityClass='SensorDataFormatDto.class'/> </cell> </row> @@ -97,7 +100,8 @@ <JLabel id='sensorBrandLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' _entityClass='SensorBrandDto.class'/> + <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' + _entityClass='SensorBrandDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java index 0b3bb08..b1bd29b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIHandler.java @@ -44,8 +44,11 @@ import org.nuiton.jaxx.runtime.JaxxFileChooser; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.io.File; import java.io.IOException; import java.nio.file.Files; @@ -59,7 +62,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.7 */ -public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineSensorUsedDto, SensorUsedDto> { +public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineSensorUsedDto, SensorUsedDto, SensorUsedUI> { /** Logger */ private static final Log log = LogFactory.getLog(SensorUsedUIHandler.class); @@ -69,11 +72,6 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS } @Override - public SensorUsedUI getUi() { - return (SensorUsedUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, SensorUsedDto bean, boolean create) { if (getTableModel().isEditable()) { if (log.isDebugEnabled()) { @@ -234,6 +232,36 @@ public class SensorUsedUIHandler extends ContentTableUIHandler<ActivityLonglineS ActivityLonglineSensorUsedHelper.copyActivityLonglineSensorUsedDto(form.getObject(), getBean()); } + @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(SensorUsedUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSensorType().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSensorType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + return ui.getComment2(); + } + }; + } + protected ActivityLongLineSensorUsedService getActivityLonglineSensorUsedService() { return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newActivityLongLineSensorUsedService(); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java index fa79727..aa13383 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/SensorUsedUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.longline; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.longline.ActivityLonglineSensorUsedDto; -import fr.ird.observe.services.dto.longline.SensorUsedDto; -import fr.ird.observe.services.dto.longline.SensorUsedHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.longline.ActivityLonglineSensorUsedDto; +import fr.ird.observe.services.dto.longline.SensorUsedDto; +import fr.ird.observe.services.dto.longline.SensorUsedHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -52,13 +52,13 @@ public class SensorUsedUIModel extends ContentTableUIModel<ActivityLonglineSenso ActivityLonglineSensorUsedDto.PROPERTY_SENSOR_USED, ActivityLonglineSensorUsedDto.PROPERTY_COMMENT}, new String[]{SensorUsedDto.PROPERTY_HAS_DATA, - SensorUsedDto.PROPERTY_DATA, - SensorUsedDto.PROPERTY_SENSOR_SERIAL_NO, - SensorUsedDto.PROPERTY_SENSOR_TYPE, - SensorUsedDto.PROPERTY_SENSOR_BRAND, - SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT}); + SensorUsedDto.PROPERTY_DATA, + SensorUsedDto.PROPERTY_SENSOR_SERIAL_NO, + SensorUsedDto.PROPERTY_SENSOR_TYPE, + SensorUsedDto.PROPERTY_SENSOR_BRAND, + SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT}); - List<ContentTableMeta<SensorUsedDto>> metas = Lists.newArrayList( + List<ContentTableMeta<SensorUsedDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_TYPE, false), ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_BRAND, false), ContentTableModel.newTableMeta(SensorUsedDto.class, SensorUsedDto.PROPERTY_SENSOR_DATA_FORMAT, false), @@ -72,11 +72,12 @@ public class SensorUsedUIModel extends ContentTableUIModel<ActivityLonglineSenso @Override protected ContentTableModel<ActivityLonglineSensorUsedDto, SensorUsedDto> createTableModel( - ObserveContentTableUI<ActivityLonglineSensorUsedDto, SensorUsedDto> ui, + ObserveContentTableUI<ActivityLonglineSensorUsedDto, SensorUsedDto, ?> ui, List<ContentTableMeta<SensorUsedDto>> contentTableMetas) { return new ContentTableModel<ActivityLonglineSensorUsedDto, SensorUsedDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<SensorUsedDto> getChilds(ActivityLonglineSensorUsedDto bean) { return bean.getSensorUsed(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx index c7ddc72..3e7c8e5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUI.jaxx @@ -18,10 +18,10 @@ #L% --> -<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineTdrDto, TdrDto' - contentTitle='{n("observe.content.tdr.title")}' - saveNewEntryText='{n("observe.content.tdr.action.create")}' - saveNewEntryTip='{n("observe.content.tdr.action.create.tip")}'> +<fr.ird.observe.application.swing.ui.content.table.ContentTableUI superGenericType='SetLonglineTdrDto, TdrDto, TdrUI' + contentTitle='{n("observe.content.tdr.title")}' + saveNewEntryText='{n("observe.content.tdr.action.create")}' + saveNewEntryTip='{n("observe.content.tdr.action.create.tip")}'> <style source="../../CommonTable.jcss"/> @@ -124,7 +124,9 @@ <JLabel id='sensorBrandLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='sensorBrand' constructorParams='this' genericType='ReferentialReference<SensorBrandDto>' _entityClass='SensorBrandDto.class'/> + <BeanComboBox id='sensorBrand' constructorParams='this' + genericType='ReferentialReference<SensorBrandDto>' + _entityClass='SensorBrandDto.class'/> </cell> </row> @@ -176,7 +178,8 @@ <JLabel id='sectionLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='section' genericType='DataReference<SectionDto>' _entityClass='SectionDto.class' constructorParams='this'/> + <BeanComboBox id='section' genericType='DataReference<SectionDto>' + _entityClass='SectionDto.class' constructorParams='this'/> </cell> </row> <row> @@ -184,7 +187,8 @@ <JLabel id='basketLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='basket' genericType='DataReference<BasketDto>' _entityClass='BasketDto.class' constructorParams='this'/> + <BeanComboBox id='basket' genericType='DataReference<BasketDto>' + _entityClass='BasketDto.class' constructorParams='this'/> </cell> </row> <row> @@ -192,7 +196,8 @@ <JLabel id='branchlineLabel'/> </cell> <cell fill="both" weightx="1"> - <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' _entityClass='BranchlineDto.class' constructorParams='this'/> + <BeanComboBox id='branchline' genericType='DataReference<BranchlineDto>' + _entityClass='BranchlineDto.class' constructorParams='this'/> </cell> </row> </Table> @@ -206,7 +211,8 @@ </cell> <cell weightx='1' anchor='east'> <BeanComboBox id='itemHorizontalPosition' constructorParams='this' - genericType='ReferentialReference<ItemHorizontalPositionDto>' _entityClass='ItemHorizontalPositionDto.class'/> + genericType='ReferentialReference<ItemHorizontalPositionDto>' + _entityClass='ItemHorizontalPositionDto.class'/> </cell> </row> @@ -217,7 +223,8 @@ </cell> <cell weightx='1' anchor='east'> <BeanComboBox id='itemVerticalPosition' constructorParams='this' - genericType='ReferentialReference<ItemVerticalPositionDto>' _entityClass='ItemVerticalPositionDto.class'/> + genericType='ReferentialReference<ItemVerticalPositionDto>' + _entityClass='ItemVerticalPositionDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java index 1d4a545..1617795 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIHandler.java @@ -54,9 +54,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.io.File; import java.io.IOException; @@ -77,7 +80,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since XXX */ -public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDto> { +public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDto, TdrUI> { /** Logger */ private static final Log log = LogFactory.getLog(TdrUIHandler.class); @@ -108,11 +111,6 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt } @Override - public TdrUI getUi() { - return (TdrUI) super.getUi(); - } - - @Override protected void onSelectedRowChanged(int editingRow, TdrDto bean, boolean create) { ContentTableModel<SetLonglineTdrDto, TdrDto> model = getTableModel(); @@ -210,6 +208,79 @@ public class TdrUIHandler extends ContentTableUIHandler<SetLonglineTdrDto, TdrDt } @Override + protected FocusTraversalPolicy createFocusTraversalPolicy(TdrUI ui) { + return new LayoutFocusTraversalPolicy() { + + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getEditTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getHomeId())) { + return getLastComponent(aContainer); + } + case 1: + if (aComponent.equals(ui.getSection().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + case 2: + if (aComponent.equals(ui.getEnableTimestamp())) { + return getLastComponent(aContainer); + } + case 3: + if (aComponent.equals(ui.getFishingStartDepth())) { + return getLastComponent(aContainer); + } + case 4: + if (aComponent.equals(ui.getSpecies().getUniverseList())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getEditTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getHomeId(); + case 1: + return ui.getSection(); + case 2: + return ui.getEnableTimestamp(); + case 3: + return ui.getFishingStartDepth(); + case 4: + return ui.getSpecies().getUniverseList(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + + return super.getLastComponent(aContainer); + } + }; + } + + @Override public void openUI() { if (log.isInfoEnabled()) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java index e2d8b35..793fa1d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/longline/TdrUIModel.java @@ -32,6 +32,7 @@ import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; @@ -147,7 +148,7 @@ public class TdrUIModel extends ContentTableUIModel<SetLonglineTdrDto, TdrDto> { // species tab TdrDto.PROPERTY_SPECIES}); - List<ContentTableMeta<TdrDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TdrDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_HOME_ID, false), ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_SERIAL_NO, false), ContentTableModel.newTableMeta(TdrDto.class, TdrDto.PROPERTY_SENSOR_BRAND, false), @@ -159,7 +160,7 @@ public class TdrUIModel extends ContentTableUIModel<SetLonglineTdrDto, TdrDto> { @Override protected ContentTableModel<SetLonglineTdrDto, TdrDto> createTableModel( - ObserveContentTableUI<SetLonglineTdrDto, TdrDto> ui, + ObserveContentTableUI<SetLonglineTdrDto, TdrDto, ?> ui, List<ContentTableMeta<TdrDto>> contentTableMetas) { return new ContentTableModel<SetLonglineTdrDto, TdrDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java index fbf67dc..9efd037 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/AbstractSampleUIHandler.java @@ -23,8 +23,8 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.IdDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.referential.SpeciesDto; @@ -38,7 +38,7 @@ import java.beans.PropertyChangeListener; * @author Tony Chemit - chemit@codelutin.com * @since 5.1 */ -public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto> extends ContentTableUIHandler<E, D> { +public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto, U extends ContentTableUI<E, D, U>> extends ContentTableUIHandler<E, D, U> { /** * Ecoute les modifications de la propriété {@link TargetLengthDto#getWeight()}, @@ -67,7 +67,7 @@ public abstract class AbstractSampleUIHandler<E extends IdDto, D extends IdDto> */ protected final PropertyChangeListener speciesChanged; - protected AbstractSampleUIHandler(ObserveContentTableUI<E, D> ui) { + protected AbstractSampleUIHandler(U ui) { super(ui, DataContextType.SetSeine); weightChanged = evt -> { onWeightChanged((Float) evt.getNewValue()); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java index 9b1a35b..d3b7557 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineTableModel.java @@ -23,15 +23,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import com.google.common.collect.Sets; +import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import fr.ird.observe.services.dto.referential.GearDto; import fr.ird.observe.services.dto.referential.ReferentialReference; import fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineHelper; import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; -import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -54,7 +54,7 @@ public class GearUseFeaturesSeineTableModel extends ContentTableModel<TripSeineG private transient GearUseFeaturesSeineUIHandler gearUseFeaturesSeineUIHandler; - public GearUseFeaturesSeineTableModel(ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto> context, + public GearUseFeaturesSeineTableModel(ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto, ?> context, List<ContentTableMeta<GearUseFeaturesSeineDto>> contentTableMetas) { super(context, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx index 9ac4a1a..291995d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TripSeineGearUseDto, GearUseFeaturesSeineDto' - contentTitle='{n("observe.content.gearUseFeaturesSeine.title")}' - saveNewEntryText='{n("observe.content.action.create.gearUseFeaturesSeine")}' - saveNewEntryTip='{n("observe.content.action.create.gearUseFeaturesSeine.tip")}'> + superGenericType='TripSeineGearUseDto, GearUseFeaturesSeineDto, GearUseFeaturesSeineUI' + contentTitle='{n("observe.content.gearUseFeaturesSeine.title")}' + saveNewEntryText='{n("observe.content.action.create.gearUseFeaturesSeine")}' + saveNewEntryTip='{n("observe.content.action.create.gearUseFeaturesSeine.tip")}'> <style source="../../CommonTable.jcss"/> @@ -32,7 +32,6 @@ fr.ird.observe.services.dto.CommentableDto fr.ird.observe.services.dto.seine.TripSeineGearUseDto fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto - fr.ird.observe.services.dto.seine.GearUseFeaturesMeasurementSeineDto fr.ird.observe.services.dto.referential.ReferentialReference fr.ird.observe.services.dto.referential.GearDto fr.ird.observe.application.swing.ui.content.table.* @@ -66,17 +65,12 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.TripSeineGearUseDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.TripSeineGearUseDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto'/> <JPopupMenu id='measurementsTablePopup'> <JMenuItem id='addMeasurement' onActionPerformed='getHandler().addMeasurement()'/> @@ -101,7 +95,8 @@ <JLabel id='gearLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' _entityClass='GearDto.class'/> + <BeanComboBox id='gear' constructorParams='this' genericType='ReferentialReference<GearDto>' + _entityClass='GearDto.class'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java index 565fd94..932488b 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIHandler.java @@ -57,8 +57,12 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.event.TableModelListener; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.awt.GridBagConstraints; import java.awt.Insets; import java.beans.PropertyChangeListener; @@ -78,7 +82,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.16 */ -public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSeineGearUseDto, GearUseFeaturesSeineDto> { +public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSeineGearUseDto, GearUseFeaturesSeineDto, GearUseFeaturesSeineUI> { /** Logger */ private static final Log log = LogFactory.getLog(GearUseFeaturesSeineUIHandler.class); @@ -100,8 +104,53 @@ public class GearUseFeaturesSeineUIHandler extends ContentTableUIHandler<TripSei } @Override - public GearUseFeaturesSeineUI getUi() { - return (GearUseFeaturesSeineUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(GearUseFeaturesSeineUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + if (aComponent.equals(ui.getGear().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + int selectedIndex = ui.getGearUseFeaturesTabPane().getSelectedIndex(); + switch (selectedIndex) { + case 0: + return ui.getGear(); + } + return super.getFirstComponent(aContainer); + } + + @Override + public Component getLastComponent(Container aContainer) { + if (ui.getSave().isEnabled()) { + return ui.getSave(); + } + if (ui.getReset().isEnabled()) { + return ui.getReset(); + } + if (ui.getDeleteEntry().isVisible() && ui.getDeleteEntry().isEnabled()) { + return ui.getDeleteEntry(); + } + if (ui.getSaveNewEntry().isVisible() && ui.getSaveNewEntry().isEnabled()) { + return ui.getSaveNewEntry(); + } + if (ui.getResetNewEntry().isVisible() && ui.getResetNewEntry().isEnabled()) { + return ui.getResetNewEntry(); + } + if (ui.getResetEntry().isEnabled()) { + return ui.getResetEntry(); + } + return super.getLastComponent(aContainer); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java index 4696bfb..1b6c58a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/GearUseFeaturesSeineUIModel.java @@ -23,14 +23,14 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; */ import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; -import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.GearUseFeaturesSeineDto; +import fr.ird.observe.services.dto.seine.TripSeineGearUseDto; +import java.util.Arrays; import java.util.List; import java.util.Set; @@ -59,13 +59,13 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe public GearUseFeaturesSeineUIModel(GearUseFeaturesSeineUI ui) { super(TripSeineGearUseDto.class, - GearUseFeaturesSeineDto.class, - new String[]{ - TripSeineGearUseDto.PROPERTY_ID, - TripSeineGearUseDto.PROPERTY_GEAR_USE_FEATURES_SEINE, - TripSeineGearUseDto.PROPERTY_LAST_UPDATE_DATE, - }, - new String[]{ + GearUseFeaturesSeineDto.class, + new String[]{ + TripSeineGearUseDto.PROPERTY_ID, + TripSeineGearUseDto.PROPERTY_GEAR_USE_FEATURES_SEINE, + TripSeineGearUseDto.PROPERTY_LAST_UPDATE_DATE, + }, + new String[]{ GearUseFeaturesSeineDto.PROPERTY_ID, GearUseFeaturesSeineDto.PROPERTY_NUMBER, GearUseFeaturesSeineDto.PROPERTY_USED_IN_TRIP, @@ -76,7 +76,7 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe this.measurementsTableModel = new GearUseFeaturesMeasurementSeinesTableModel(); - List<ContentTableMeta<GearUseFeaturesSeineDto>> metas = Lists.newArrayList( + List<ContentTableMeta<GearUseFeaturesSeineDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_GEAR, false), ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_NUMBER, false), ContentTableModel.newTableMeta(GearUseFeaturesSeineDto.class, GearUseFeaturesSeineDto.PROPERTY_USED_IN_TRIP, false), @@ -88,7 +88,7 @@ public class GearUseFeaturesSeineUIModel extends ContentTableUIModel<TripSeineGe @Override protected GearUseFeaturesSeineTableModel createTableModel( - ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto> ui, + ObserveContentTableUI<TripSeineGearUseDto, GearUseFeaturesSeineDto, ?> ui, List<ContentTableMeta<GearUseFeaturesSeineDto>> contentTableMetas) { return new GearUseFeaturesSeineTableModel(ui, contentTableMetas); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx index 66852f6..473ea0f 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUI.jaxx @@ -22,10 +22,10 @@ <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineNonTargetCatchDto, NonTargetCatchDto' - contentTitle='{n("observe.common.nonTargetCatch")}' - saveNewEntryText='{n("observe.content.action.create.nonTargetCatch")}' - saveNewEntryTip='{n("observe.content.action.create.nonTargetCatch.tip")}'> + superGenericType='SetSeineNonTargetCatchDto, NonTargetCatchDto, NonTargetCatchUI' + contentTitle='{n("observe.common.nonTargetCatch")}' + saveNewEntryText='{n("observe.content.action.create.nonTargetCatch")}' + saveNewEntryTip='{n("observe.content.action.create.nonTargetCatch.tip")}'> <style source="../../CommonTable.jcss"/> @@ -66,20 +66,15 @@ <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="nonTargetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.NonTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.NonTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <Table id='editorPanel' fill='both' insets='1' onFocusGained='species.requestFocus()'> @@ -90,7 +85,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -100,7 +96,8 @@ <JLabel id='speciesFateLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='speciesFate' constructorParams='this' genericType='ReferentialReference<SpeciesFateDto>' _entityClass='SpeciesFateDto.class'/> + <BeanComboBox id='speciesFate' constructorParams='this' genericType='ReferentialReference<SpeciesFateDto>' + _entityClass='SpeciesFateDto.class'/> </cell> </row> @@ -110,7 +107,8 @@ <JLabel id='reasonForDiscardLabel'/> </cell> <cell weightx='1' anchor='east' columns="2"> - <BeanComboBox id='reasonForDiscard' constructorParams='this' genericType='ReferentialReference<ReasonForDiscardDto>' _entityClass='ReasonForDiscardDto.class'/> + <BeanComboBox id='reasonForDiscard' constructorParams='this' _entityClass='ReasonForDiscardDto.class' + genericType='ReferentialReference<ReasonForDiscardDto>'/> </cell> </row> @@ -124,8 +122,7 @@ </cell> <cell anchor='east'> <JToolBar id='catchWeightComputedAction'> - <JButton id='catchWeightComputedInformation' - onActionPerformed='getHandler().resetCatchWeightComputed()'/> + <JButton id='catchWeightComputedInformation' onActionPerformed='getHandler().resetCatchWeightComputed()'/> </JToolBar> </cell> </row> @@ -141,8 +138,7 @@ </cell> <cell anchor='east'> <JToolBar id='totalCountComputedAction'> - <JButton id='totalCountComputedInformation' - onActionPerformed='getHandler().resetTotalCountComputed()'/> + <JButton id='totalCountComputedInformation' onActionPerformed='getHandler().resetTotalCountComputed()'/> </JToolBar> </cell> </row> @@ -157,8 +153,7 @@ </cell> <cell anchor='east'> <JToolBar id='meanWeightComputedAction'> - <JButton id='meanWeightComputedInformation' - onActionPerformed='getHandler().resetMeanWeightComputed()'/> + <JButton id='meanWeightComputedInformation' onActionPerformed='getHandler().resetMeanWeightComputed()'/> </JToolBar> </cell> </row> @@ -173,8 +168,7 @@ </cell> <cell anchor='east'> <JToolBar id='meanLengthComputedAction'> - <JButton id='meanLengthComputedInformation' - onActionPerformed='getHandler().resetMeanLengthComputed()'/> + <JButton id='meanLengthComputedInformation' onActionPerformed='getHandler().resetMeanLengthComputed()'/> </JToolBar> </cell> </row> @@ -197,8 +191,7 @@ <!-- comment --> <row> <cell columns='3' weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> <JTextArea id='comment2' onKeyReleased='getTableEditBean().setComment(((JTextArea) event.getSource()).getText())'/> </JScrollPane> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java index a2f5278..ee42d6e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIHandler.java @@ -51,7 +51,11 @@ import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collection; @@ -66,7 +70,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTargetCatchDto, NonTargetCatchDto> { +public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTargetCatchDto, NonTargetCatchDto, NonTargetCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(NonTargetCatchUIHandler.class); @@ -128,8 +132,26 @@ public class NonTargetCatchUIHandler extends ContentTableUIHandler<SetSeineNonTa } @Override - public NonTargetCatchUI getUi() { - return (NonTargetCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(NonTargetCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, null); + } + }; } public String getCatchWeightDataTip(NonTargetCatchComputedValueSource computed) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java index be4a698..f95e4ff 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetCatchUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.NonTargetCatchDto; -import fr.ird.observe.services.dto.seine.NonTargetCatchHelper; -import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.NonTargetCatchDto; +import fr.ird.observe.services.dto.seine.NonTargetCatchHelper; +import fr.ird.observe.services.dto.seine.SetSeineNonTargetCatchDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -65,7 +65,7 @@ public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineNonTarget NonTargetCatchDto.PROPERTY_COMMENT }); - List<ContentTableMeta<NonTargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<NonTargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_SPECIES_FATE, false), ContentTableModel.newTableMeta(NonTargetCatchDto.class, NonTargetCatchDto.PROPERTY_REASON_FOR_DISCARD, false), @@ -82,7 +82,7 @@ public class NonTargetCatchUIModel extends ContentTableUIModel<SetSeineNonTarget @Override protected ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineNonTargetCatchDto, NonTargetCatchDto> ui, + ObserveContentTableUI<SetSeineNonTargetCatchDto, NonTargetCatchDto, ?> ui, List<ContentTableMeta<NonTargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineNonTargetCatchDto, NonTargetCatchDto>(ui, contentTableMetas) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx index cc648fa..f741966 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUI.jaxx @@ -21,7 +21,7 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='NonTargetSampleDto, NonTargetLengthDto' + superGenericType='NonTargetSampleDto, NonTargetLengthDto, NonTargetSampleUI' contentTitle='{n("observe.common.nonTargetSample")}' saveNewEntryText='{n("observe.content.action.create.nonTargetSample")}' saveNewEntryTip='{n("observe.content.action.create.nonTargetSample.tip")}'> @@ -66,19 +66,14 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.NonTargetSampleDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.NonTargetSampleDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <field name='comment'/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.NonTargetLengthDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.NonTargetLengthDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> </BeanValidator> <ButtonGroup id='acquisitionModeGroup' diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java index 1ec4207..aa464d0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIHandler.java @@ -46,7 +46,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.List; @@ -60,7 +64,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetSampleDto, NonTargetLengthDto> { +public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetSampleDto, NonTargetLengthDto, NonTargetSampleUI> { /** Logger */ private static final Log log = LogFactory.getLog(NonTargetSampleUIHandler.class); @@ -70,8 +74,33 @@ public class NonTargetSampleUIHandler extends AbstractSampleUIHandler<NonTargetS } @Override - public NonTargetSampleUI getUi() { - return (NonTargetSampleUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(NonTargetSampleUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getAcquisitionModeEffectif())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getAcquisitionModeEffectif().isEnabled()) { + return ui.getAcquisitionModeEffectif(); + } + return ui.getSizeMeasureType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; + } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java index 3087dba..87d3d7e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/NonTargetSampleUIModel.java @@ -47,7 +47,7 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD private static final long serialVersionUID = 1L; - public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE="defaultSizeMeasureType"; + public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE = "defaultSizeMeasureType"; private ReferentialReference<SizeMeasureTypeDto> defaultSizeMeasureType; @@ -59,15 +59,15 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD NonTargetSampleDto.PROPERTY_NON_TARGET_LENGTH, NonTargetSampleDto.PROPERTY_COMMENT}, new String[]{NonTargetLengthDto.PROPERTY_SPECIES, - NonTargetLengthDto.PROPERTY_LENGTH, - NonTargetLengthDto.PROPERTY_IS_LENGTH_COMPUTED, - NonTargetLengthDto.PROPERTY_WEIGHT, - NonTargetLengthDto.PROPERTY_IS_WEIGHT_COMPUTED, - NonTargetLengthDto.PROPERTY_SEX, - NonTargetLengthDto.PROPERTY_COUNT, - NonTargetLengthDto.PROPERTY_SPECIES_FATE, - NonTargetLengthDto.PROPERTY_ACQUISITION_MODE, - NonTargetLengthDto.PROPERTY_PICTURES_REFERENCES + NonTargetLengthDto.PROPERTY_LENGTH, + NonTargetLengthDto.PROPERTY_IS_LENGTH_COMPUTED, + NonTargetLengthDto.PROPERTY_WEIGHT, + NonTargetLengthDto.PROPERTY_IS_WEIGHT_COMPUTED, + NonTargetLengthDto.PROPERTY_SEX, + NonTargetLengthDto.PROPERTY_COUNT, + NonTargetLengthDto.PROPERTY_SPECIES_FATE, + NonTargetLengthDto.PROPERTY_ACQUISITION_MODE, + NonTargetLengthDto.PROPERTY_PICTURES_REFERENCES }); List<ContentTableMeta<NonTargetLengthDto>> metas = Arrays.asList( @@ -91,9 +91,10 @@ public class NonTargetSampleUIModel extends ContentTableUIModel<NonTargetSampleD } @Override - protected ContentTableModel<NonTargetSampleDto, NonTargetLengthDto> createTableModel(ObserveContentTableUI<NonTargetSampleDto, NonTargetLengthDto> ui, List<ContentTableMeta<NonTargetLengthDto>> contentTableMetas) { + protected ContentTableModel<NonTargetSampleDto, NonTargetLengthDto> createTableModel(ObserveContentTableUI<NonTargetSampleDto, NonTargetLengthDto, ?> ui, List<ContentTableMeta<NonTargetLengthDto>> contentTableMetas) { return new ContentTableModel<NonTargetSampleDto, NonTargetLengthDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<NonTargetLengthDto> getChilds(NonTargetSampleDto bean) { return bean.getNonTargetLength(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx index b912040..1e6d6cb 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto' - contentTitle='{n("observe.common.objectObservedSpecies")}' - saveNewEntryText='{n("observe.content.action.create.objectObservedSpecies")}' - saveNewEntryTip='{n("observe.content.action.create.objectObservedSpecies.tip")}'> + superGenericType='FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ObjectObservedSpeciesUI' + contentTitle='{n("observe.common.objectObservedSpecies")}' + saveNewEntryText='{n("observe.content.action.create.objectObservedSpecies")}' + saveNewEntryTip='{n("observe.content.action.create.objectObservedSpecies.tip")}'> <style source="../../CommonTable.jcss"/> @@ -62,18 +62,13 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -83,8 +78,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' - genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -113,10 +108,8 @@ <Table id='extraZone' fill='both' weightx='1' insets='0'> <row> <cell weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java index 54ac0f8..da0e421 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIHandler.java @@ -43,7 +43,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -54,7 +58,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> { +public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ObjectObservedSpeciesUI> { /** Logger */ private static final Log log = LogFactory.getLog(ObjectObservedSpeciesUIHandler.class); @@ -64,8 +68,26 @@ public class ObjectObservedSpeciesUIHandler extends ContentTableUIHandler<Floati } @Override - public ObjectObservedSpeciesUI getUi() { - return (ObjectObservedSpeciesUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ObjectObservedSpeciesUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java index 6764cf7..4ead773 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectObservedSpeciesUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; -import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; -import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.FloatingObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesDto; +import fr.ird.observe.services.dto.seine.ObjectObservedSpeciesHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -57,7 +57,7 @@ public class ObjectObservedSpeciesUIModel extends ContentTableUIModel<FloatingOb ObjectObservedSpeciesDto.PROPERTY_COUNT} ); - List<ContentTableMeta<ObjectObservedSpeciesDto>> metas = Lists.newArrayList( + List<ContentTableMeta<ObjectObservedSpeciesDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_SPECIES_STATUS, false), ContentTableModel.newTableMeta(ObjectObservedSpeciesDto.class, ObjectObservedSpeciesDto.PROPERTY_COUNT, false)); @@ -68,11 +68,12 @@ public class ObjectObservedSpeciesUIModel extends ContentTableUIModel<FloatingOb @Override protected ContentTableModel<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> createTableModel( - ObserveContentTableUI<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto> ui, + ObserveContentTableUI<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto, ?> ui, List<ContentTableMeta<ObjectObservedSpeciesDto>> contentTableMetas) { return new ContentTableModel<FloatingObjectObservedSpeciesDto, ObjectObservedSpeciesDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<ObjectObservedSpeciesDto> getChilds(FloatingObjectObservedSpeciesDto bean) { return bean.getObjectObservedSpecies(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx index c5a18d4..ac22112 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto' - contentTitle='{n("observe.common.schoolEstimate")}' - saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' - saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> + superGenericType='FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ObjectSchoolEstimateUI' + contentTitle='{n("observe.common.schoolEstimate")}' + saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' + saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> <style source="../../CommonTable.jcss"/> @@ -61,18 +61,13 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' errorTableModel='{getErrorTableModel()}' context='ui-update' + beanClass='fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto'/> <Table id='editorPanel' fill='both' insets='1'> @@ -82,8 +77,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' - genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -101,10 +96,8 @@ <Table id='extraZone' fill='both' weightx='1' insets='1'> <row> <cell weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> - <JTextArea id='comment2' - onKeyReleased='getBean().setComment(comment2.getText())'/> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> + <JTextArea id='comment2' onKeyReleased='getBean().setComment(comment2.getText())'/> </JScrollPane> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java index c2d6ccd..272ac1d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIHandler.java @@ -41,7 +41,11 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.LinkedList; import java.util.Set; @@ -52,7 +56,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> { +public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ObjectSchoolEstimateUI> { /** Logger */ @@ -63,8 +67,26 @@ public class ObjectSchoolEstimateUIHandler extends ContentTableUIHandler<Floatin } @Override - public ObjectSchoolEstimateUI getUi() { - return (ObjectSchoolEstimateUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(ObjectSchoolEstimateUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + return ui.getSpecies(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java index 09bb397..f513381 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/ObjectSchoolEstimateUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; -import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; -import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.FloatingObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateDto; +import fr.ird.observe.services.dto.seine.ObjectSchoolEstimateHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -56,7 +56,7 @@ public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObj ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT} ); - List<ContentTableMeta<ObjectSchoolEstimateDto>> metas = Lists.newArrayList( + List<ContentTableMeta<ObjectSchoolEstimateDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(ObjectSchoolEstimateDto.class, ObjectSchoolEstimateDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(ObjectSchoolEstimateDto.class, ObjectSchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, false)); @@ -66,11 +66,12 @@ public class ObjectSchoolEstimateUIModel extends ContentTableUIModel<FloatingObj @Override protected ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> createTableModel( - ObserveContentTableUI<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto> ui, + ObserveContentTableUI<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto, ?> ui, List<ContentTableMeta<ObjectSchoolEstimateDto>> contentTableMetas) { return new ContentTableModel<FloatingObjectSchoolEstimateDto, ObjectSchoolEstimateDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<ObjectSchoolEstimateDto> getChilds(FloatingObjectSchoolEstimateDto bean) { return bean.getObjectSchoolEstimate(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx index 1990c02..6a03201 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUI.jaxx @@ -21,12 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineSchoolEstimateDto, SchoolEstimateDto' - - - contentTitle='{n("observe.common.schoolEstimate")}' - saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' - saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> + superGenericType='SetSeineSchoolEstimateDto, SchoolEstimateDto, SchoolEstimateUI' + contentTitle='{n("observe.common.schoolEstimate")}' + saveNewEntryText='{n("observe.content.action.create.schoolEstimate")}' + saveNewEntryTip='{n("observe.content.action.create.schoolEstimate.tip")}'> <style source="../../CommonTable.jcss"/> @@ -63,21 +61,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="schoolEstimate" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.SchoolEstimateDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.SchoolEstimateDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'/> <!-- formulaire --> <Table id='editorPanel' fill='both' insets='1'> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java index ea130a4..a663687 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIHandler.java @@ -23,6 +23,9 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -35,15 +38,16 @@ import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateHelper; import fr.ird.observe.services.service.data.seine.SchoolEstimateService; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -57,7 +61,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoolEstimateDto, SchoolEstimateDto> { +public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoolEstimateDto, SchoolEstimateDto, SchoolEstimateUI> { /** Logger */ private static final Log log = LogFactory.getLog(SchoolEstimateUIHandler.class); @@ -67,8 +71,32 @@ public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoo } @Override - public SchoolEstimateUI getUi() { - return (SchoolEstimateUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(SchoolEstimateUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getTotalWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getTotalWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override @@ -98,7 +126,7 @@ public class SchoolEstimateUIHandler extends ContentTableUIHandler<SetSeineSchoo Set<String> listSpeciesIdUsed = listSpeciesUsed.stream().map(ReferentialReference::getId).collect(Collectors.toSet()); - availableEspeces = ReferentialReferences.filterNotContains(references,listSpeciesIdUsed); + availableEspeces = ReferentialReferences.filterNotContains(references, listSpeciesIdUsed); requestFocus = ui.getSpecies(); } else { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java index d0585a3..b09c152 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/SchoolEstimateUIModel.java @@ -22,15 +22,15 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.seine.SchoolEstimateDto; -import fr.ird.observe.services.dto.seine.SchoolEstimateHelper; -import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.seine.SchoolEstimateDto; +import fr.ird.observe.services.dto.seine.SchoolEstimateHelper; +import fr.ird.observe.services.dto.seine.SetSeineSchoolEstimateDto; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -52,12 +52,12 @@ public class SchoolEstimateUIModel extends ContentTableUIModel<SetSeineSchoolEst SetSeineSchoolEstimateDto.PROPERTY_SCHOOL_ESTIMATE, SetSeineSchoolEstimateDto.PROPERTY_COMMENT}, new String[]{ - SchoolEstimateDto.PROPERTY_SPECIES, - SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, - SchoolEstimateDto.PROPERTY_MEAN_WEIGHT} + SchoolEstimateDto.PROPERTY_SPECIES, + SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, + SchoolEstimateDto.PROPERTY_MEAN_WEIGHT} ); - List<ContentTableMeta<SchoolEstimateDto>> metas = Lists.newArrayList( + List<ContentTableMeta<SchoolEstimateDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_SPECIES, false), ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_TOTAL_WEIGHT, false), ContentTableModel.newTableMeta(SchoolEstimateDto.class, SchoolEstimateDto.PROPERTY_MEAN_WEIGHT, false)); @@ -68,11 +68,12 @@ public class SchoolEstimateUIModel extends ContentTableUIModel<SetSeineSchoolEst @Override protected ContentTableModel<SetSeineSchoolEstimateDto, SchoolEstimateDto> createTableModel( - ObserveContentTableUI<SetSeineSchoolEstimateDto, SchoolEstimateDto> ui, + ObserveContentTableUI<SetSeineSchoolEstimateDto, SchoolEstimateDto, ?> ui, List<ContentTableMeta<SchoolEstimateDto>> contentTableMetas) { return new ContentTableModel<SetSeineSchoolEstimateDto, SchoolEstimateDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<SchoolEstimateDto> getChilds(SetSeineSchoolEstimateDto bean) { return bean.getSchoolEstimate(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx index 3b72dc1..08a308a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineTargetCatchDto, TargetCatchDto' - contentTitle='{n("observe.common.targetCatch")}' - saveNewEntryText='{n("observe.content.action.create.targetCatch")}' - saveNewEntryTip='{n("observe.content.action.create.targetCatch.tip")}'> + superGenericType='SetSeineTargetCatchDto, TargetCatchDto, TargetCatchUI' + contentTitle='{n("observe.common.targetCatch")}' + saveNewEntryText='{n("observe.content.action.create.targetCatch")}' + saveNewEntryTip='{n("observe.content.action.create.targetCatch.tip")}'> <style source="../../CommonTable.jcss"/> @@ -64,20 +64,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetCatch'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetCatch'> <!-- clef unique --> <field name="targetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetCatch'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetCatch'/> <Table id='editorPanel' fill='both' insets='1' onFocusGained='species.requestFocus()'> @@ -88,7 +83,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' constructorParams='this'/> + <BeanComboBox id='species' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class' + constructorParams='this'/> </cell> </row> @@ -99,7 +95,8 @@ <JLabel id='weightCategoryLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='weightCategory' genericType='ReferentialReference<WeightCategoryDto>' _entityClass='WeightCategoryDto.class' constructorParams='this'/> + <BeanComboBox id='weightCategory' genericType='ReferentialReference<WeightCategoryDto>' + _entityClass='WeightCategoryDto.class' constructorParams='this'/> </cell> </row> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java index 4a72373..d722d51 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIHandler.java @@ -25,6 +25,9 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Sets; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.constants.DataContextType; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; +import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -40,9 +43,6 @@ import fr.ird.observe.services.dto.seine.TargetCatchDto; import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.services.service.data.seine.TargetCatchService; import fr.ird.observe.services.service.data.seine.TripSeineService; -import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUIHandler; import jaxx.runtime.swing.editor.bean.BeanComboBox; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -51,7 +51,11 @@ import org.nuiton.decorator.Decorator; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; @@ -65,7 +69,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto> { +public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto, TargetCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetCatchUIHandler.class); @@ -75,8 +79,32 @@ public class TargetCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCa } @Override - public TargetCatchUI getUi() { - return (TargetCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getCatchWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getTargetCatchCompositionEstimatedByObserver()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java index b9cb1d4..a3a6afc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetCatchUIModel.java @@ -22,16 +22,16 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -54,15 +54,15 @@ public class TargetCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchD SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH }, new String[]{ - TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, - TargetCatchDto.PROPERTY_CATCH_WEIGHT, - TargetCatchDto.PROPERTY_WELL, - TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, - TargetCatchDto.PROPERTY_DISCARDED, - TargetCatchDto.PROPERTY_COMMENT} + TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, + TargetCatchDto.PROPERTY_CATCH_WEIGHT, + TargetCatchDto.PROPERTY_WELL, + TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, + TargetCatchDto.PROPERTY_DISCARDED, + TargetCatchDto.PROPERTY_COMMENT} ); - List<ContentTableMeta<TargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TargetCatchDto.class, WeightCategoryDto.PROPERTY_SPECIES, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WELL, false), @@ -75,10 +75,11 @@ public class TargetCatchUIModel extends ContentTableUIModel<SetSeineTargetCatchD @Override protected ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto> ui, + ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto, ?> ui, List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<TargetCatchDto> getChilds(SetSeineTargetCatchDto bean) { return bean.getTargetCatch(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx index c462c04..a6de31a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUI.jaxx @@ -21,10 +21,10 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='SetSeineTargetCatchDto, TargetCatchDto' - contentTitle='{n("observe.common.targetDiscarded")}' - saveNewEntryText='{n("observe.content.action.create.targetDiscarded")}' - saveNewEntryTip='{n("observe.content.action.create.targetDiscarded.tip")}'> + superGenericType='SetSeineTargetCatchDto, TargetCatchDto, TargetDiscardCatchUI' + contentTitle='{n("observe.common.targetDiscarded")}' + saveNewEntryText='{n("observe.content.action.create.targetDiscarded")}' + saveNewEntryTip='{n("observe.content.action.create.targetDiscarded.tip")}'> <style source="../../CommonTable.jcss"/> @@ -66,20 +66,15 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetDiscarded'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetDiscarded'> <!-- clef unique --> <field name="targetCatch" component="editorPanel"/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update-targetDiscarded'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetCatchDto' + errorTableModel='{getErrorTableModel()}' context='ui-update-targetDiscarded'/> <Table id='editorPanel' fill='both' insets='1'> @@ -89,7 +84,8 @@ <JLabel id='speciesLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' _entityClass='SpeciesDto.class'/> + <BeanComboBox id='species' constructorParams='this' genericType='ReferentialReference<SpeciesDto>' + _entityClass='SpeciesDto.class'/> </cell> </row> @@ -99,7 +95,8 @@ <JLabel id='weightCategoryLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='weightCategory' constructorParams='this' genericType='ReferentialReference<WeightCategoryDto>' _entityClass='WeightCategoryDto.class'/> + <BeanComboBox id='weightCategory' constructorParams='this' _entityClass='WeightCategoryDto.class' + genericType='ReferentialReference<WeightCategoryDto>'/> </cell> </row> @@ -109,7 +106,8 @@ <JLabel id='reasonForDiscardLabel'/> </cell> <cell weightx='1' anchor='east'> - <BeanComboBox id='reasonForDiscard' constructorParams='this' genericType='ReferentialReference<ReasonForDiscardDto>' _entityClass='ReasonForDiscardDto.class'/> + <BeanComboBox id='reasonForDiscard' constructorParams='this' _entityClass='ReasonForDiscardDto.class' + genericType='ReferentialReference<ReasonForDiscardDto>'/> </cell> </row> @@ -140,8 +138,7 @@ <!-- comment --> <row> <cell columns='2' weighty='1'> - <JScrollPane id='comment' - onFocusGained='comment2.requestFocus()'> + <JScrollPane id='comment' onFocusGained='comment2.requestFocus()'> <JTextArea id='comment2' onKeyReleased='getTableEditBean().setComment(((JTextArea) event.getSource()).getText())'/> </JScrollPane> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java index 830f600..d9bceb4 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIHandler.java @@ -52,7 +52,11 @@ import org.nuiton.decorator.Decorator; import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -68,7 +72,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto> { +public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineTargetCatchDto, TargetCatchDto, TargetDiscardCatchUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetDiscardCatchUIHandler.class); @@ -78,8 +82,32 @@ public class TargetDiscardCatchUIHandler extends ContentTableUIHandler<SetSeineT } @Override - public TargetDiscardCatchUI getUi() { - return (TargetDiscardCatchUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetDiscardCatchUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getSpecies().getCombobox().getEditor().getEditorComponent())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getCatchWeight().getTextField()) && !ui.getSpecies().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getSpecies().isEnabled()) { + return ui.getSpecies(); + } + return ui.getCatchWeight(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getTargetDiscardCatchCompositionEstimatedByObserver()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java index bd83a08..ac6b6c0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetDiscardCatchUIModel.java @@ -22,16 +22,16 @@ package fr.ird.observe.application.swing.ui.content.table.impl.seine; * #L% */ -import com.google.common.collect.Lists; -import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; -import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchDto; -import fr.ird.observe.services.dto.seine.TargetCatchHelper; import fr.ird.observe.application.swing.ui.content.table.ContentTableMeta; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; import fr.ird.observe.application.swing.ui.content.table.ContentTableUIModel; import fr.ird.observe.application.swing.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.services.dto.referential.seine.WeightCategoryDto; +import fr.ird.observe.services.dto.seine.SetSeineTargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchDto; +import fr.ird.observe.services.dto.seine.TargetCatchHelper; +import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -53,14 +53,14 @@ public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineTarge SetSeineTargetCatchDto.PROPERTY_DISCARDED, SetSeineTargetCatchDto.PROPERTY_TARGET_CATCH}, new String[]{ - TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, - TargetCatchDto.PROPERTY_CATCH_WEIGHT, - TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, - TargetCatchDto.PROPERTY_DISCARDED, - TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, - TargetCatchDto.PROPERTY_COMMENT}); + TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, + TargetCatchDto.PROPERTY_CATCH_WEIGHT, + TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, + TargetCatchDto.PROPERTY_DISCARDED, + TargetCatchDto.PROPERTY_BROUGHT_ON_DECK, + TargetCatchDto.PROPERTY_COMMENT}); - List<ContentTableMeta<TargetCatchDto>> metas = Lists.newArrayList( + List<ContentTableMeta<TargetCatchDto>> metas = Arrays.asList( ContentTableModel.newTableMeta(TargetCatchDto.class, WeightCategoryDto.PROPERTY_SPECIES, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_WEIGHT_CATEGORY, true), ContentTableModel.newTableMeta(TargetCatchDto.class, TargetCatchDto.PROPERTY_REASON_FOR_DISCARD, true), @@ -74,11 +74,12 @@ public class TargetDiscardCatchUIModel extends ContentTableUIModel<SetSeineTarge @Override protected ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto> createTableModel( - ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto> ui, + ObserveContentTableUI<SetSeineTargetCatchDto, TargetCatchDto, ?> ui, List<ContentTableMeta<TargetCatchDto>> contentTableMetas) { return new ContentTableModel<SetSeineTargetCatchDto, TargetCatchDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; + @Override protected Collection<TargetCatchDto> getChilds(SetSeineTargetCatchDto bean) { return bean.getTargetCatch(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx index 69ab37d..49e14a1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleCaptureUI.jaxx @@ -20,10 +20,9 @@ #L% --> -<TargetSampleUI - contentTitle='{n("observe.common.targetSampleCapture")}' - saveNewEntryText='{n("observe.content.action.create.targetSampleCapture")}' - saveNewEntryTip='{n("observe.content.action.create.targetSampleCapture.tip")}'> +<TargetSampleUI contentTitle='{n("observe.common.targetSampleCapture")}' + saveNewEntryText='{n("observe.content.action.create.targetSampleCapture")}' + saveNewEntryTip='{n("observe.content.action.create.targetSampleCapture.tip")}'> <import> static org.nuiton.i18n.I18n.n diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx index 36f5716..a80c9de 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleRejeteUI.jaxx @@ -20,10 +20,9 @@ #L% --> -<TargetSampleUI - contentTitle='{n("observe.common.targetSample")}' - saveNewEntryText='{n("observe.content.action.create.targetSample")}' - saveNewEntryTip='{n("observe.content.action.create.targetSample.tip")}'> +<TargetSampleUI contentTitle='{n("observe.common.targetSample")}' + saveNewEntryText='{n("observe.content.action.create.targetSample")}' + saveNewEntryTip='{n("observe.content.action.create.targetSample.tip")}'> <import> static org.nuiton.i18n.I18n.n diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx index 74667d6..717e3d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUI.jaxx @@ -21,8 +21,7 @@ --> <fr.ird.observe.application.swing.ui.content.table.ContentTableUI - superGenericType='TargetSampleDto, TargetLengthDto' - abstract="true"> + superGenericType='TargetSampleDto, TargetLengthDto, TargetSampleUI' abstract="true"> <style source="AbstractSampleUI.jcss"/> @@ -61,22 +60,16 @@ <ContentTableModel id='tableModel'/> <!-- le validateur de l'écran --> - <BeanValidator id='validator' - beanClass='fr.ird.observe.services.dto.seine.TargetSampleDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update'> + <BeanValidator id='validator' beanClass='fr.ird.observe.services.dto.seine.TargetSampleDto' + errorTableModel='{getErrorTableModel()}' context='ui-update'> <!-- clef unique --> <field name="targetLength" component="editorPanel"/> <field name='comment'/> </BeanValidator> <!-- le validateur d'une entrée de tableau --> - <BeanValidator id='validatorTable' - autoField='true' - beanClass='fr.ird.observe.services.dto.seine.TargetLengthDto' - errorTableModel='{getErrorTableModel()}' - context='ui-update' - parentValidator='{validator}'/> + <BeanValidator id='validatorTable' autoField='true' beanClass='fr.ird.observe.services.dto.seine.TargetLengthDto' + errorTableModel='{getErrorTableModel()}' context='ui-update' parentValidator='{validator}'/> <ButtonGroup id='acquisitionModeGroup' onStateChanged='getHandler().updateModeSaisie((ModeSaisieEchantillonEnum) acquisitionModeGroup.getSelectedValue())'/> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java index 818bbd3..20ff998 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIHandler.java @@ -26,7 +26,6 @@ import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.ui.UIHelper; import fr.ird.observe.application.swing.ui.content.ContentMode; import fr.ird.observe.application.swing.ui.content.table.ContentTableModel; -import fr.ird.observe.application.swing.ui.content.table.ContentTableUI; import fr.ird.observe.services.dto.Form; import fr.ird.observe.services.dto.referential.ReferentialDto; import fr.ird.observe.services.dto.referential.ReferentialReference; @@ -46,7 +45,11 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; import javax.swing.JTable; +import javax.swing.LayoutFocusTraversalPolicy; import javax.swing.table.DefaultTableCellRenderer; +import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; @@ -60,7 +63,7 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 1.0 */ -public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleDto, TargetLengthDto> { +public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleDto, TargetLengthDto, TargetSampleUI> { /** Logger */ private static final Log log = LogFactory.getLog(TargetSampleUIHandler.class); @@ -73,14 +76,38 @@ public class TargetSampleUIHandler extends AbstractSampleUIHandler<TargetSampleD */ protected final boolean discarded; - public TargetSampleUIHandler(ContentTableUI<TargetSampleDto, TargetLengthDto> ui, boolean discarded) { + public TargetSampleUIHandler(TargetSampleUI ui, boolean discarded) { super(ui); this.discarded = discarded; } @Override - public TargetSampleUI getUi() { - return (TargetSampleUI) super.getUi(); + protected FocusTraversalPolicy createFocusTraversalPolicy(TargetSampleUI ui) { + return new LayoutFocusTraversalPolicy() { + @Override + public Component getComponentBefore(Container aContainer, Component aComponent) { + if (aComponent.equals(ui.getAcquisitionModeEffectif())) { + return getLastComponent(aContainer); + } + if (aComponent.equals(ui.getSizeMeasureType().getCombobox().getEditor().getEditorComponent()) && !ui.getAcquisitionModeEffectif().isEnabled()) { + return super.getLastComponent(aContainer); + } + return super.getComponentBefore(aContainer, aComponent); + } + + @Override + public Component getFirstComponent(Container aContainer) { + if (ui.getAcquisitionModeEffectif().isEnabled()) { + return ui.getAcquisitionModeEffectif(); + } + return ui.getSizeMeasureType(); + } + + @Override + public Component getLastComponent(Container aContainer) { + return getDefaultLastComponent(ui, ui.getComment2()); + } + }; } @Override diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java index 8a3ecbb..8e81801 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/impl/seine/TargetSampleUIModel.java @@ -47,7 +47,7 @@ public class TargetSampleUIModel extends ContentTableUIModel<TargetSampleDto, Ta private static final long serialVersionUID = 1L; - public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE="defaultSizeMeasureType"; + public static final String PROPERTY_DEFAULT_SIZE_MEASURE_TYPE = "defaultSizeMeasureType"; private ReferentialReference<SizeMeasureTypeDto> defaultSizeMeasureType; @@ -85,7 +85,7 @@ public class TargetSampleUIModel extends ContentTableUIModel<TargetSampleDto, Ta @Override protected ContentTableModel<TargetSampleDto, TargetLengthDto> createTableModel( - ObserveContentTableUI<TargetSampleDto, TargetLengthDto> ui, + ObserveContentTableUI<TargetSampleDto, TargetLengthDto, ?> ui, List<ContentTableMeta<TargetLengthDto>> contentTableMetas) { return new ContentTableModel<TargetSampleDto, TargetLengthDto>(ui, contentTableMetas) { private static final long serialVersionUID = 1L; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm