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 5302543dbb9552cd5b0c29d60cbe763a456ac487 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sun Dec 4 08:18:15 2016 +0100 [ui] Revue des actions de sélections de nœuds et autres améliorations --- .../observe/application/swing/ObserveRunner.java | 2 +- .../swing/ObserveSwingApplicationContext.java | 6 +- .../ObserveSwingApplicationDataSourcesManager.java | 2 +- .../swing/db/ObserveSwingDataSource.java | 2 +- .../application/swing/ui/MnemonicHelper.java | 14 +- .../application/swing/ui/ObserveMainUI.jaxx | 74 +++---- .../application/swing/ui/ObserveMainUI.jcss | 35 +--- .../swing/ui/ObserveMainUIInitializer.java | 103 +++++++--- .../application/swing/ui/ObserveUICallback.java | 4 +- .../ui/actions/{shared => }/AbstractUIAction.java | 24 ++- .../swing/ui/actions/CloseHelpAction.java | 76 ------- .../actions/content/AbstractContentUIAction.java | 6 +- .../ui/actions/content/CloseAndCreateUIAction.java | 12 +- .../{shared => content}/GoDownUIAction.java | 67 ++----- .../actions/{shared => content}/GoUpUIAction.java | 48 ++--- .../content/MoveActivityLonglinesUIAction.java | 4 +- .../content/MoveActivitySeinesUIAction.java | 4 +- .../ui/actions/content/MoveRoutesUIAction.java | 4 +- .../{shared => content}/SelectNodeUIAction.java | 49 ++++- .../SelectOpenNodeUIAction.java | 36 ++-- .../ui/actions/global/AbstractGlobalUIAction.java | 2 +- .../{ => menu/action}/LaunchAdminAction.java | 2 +- .../config}/ChangeApplicationLanguageAction.java | 2 +- .../{ => menu/config}/ChangeDbLanguageAction.java | 2 +- .../config}/ReloadDefaultConfigurationAction.java | 2 +- .../{ => menu/config}/ReloadResourcesAction.java | 2 +- .../{ => menu/config}/ShowConfigAction.java | 2 +- .../{ => menu/file}/CloseApplicationAction.java | 2 +- .../{ => menu/file}/ReloadApplicationAction.java | 2 +- .../{ => menu/file}/ToFullScreenAction.java | 2 +- .../{ => menu/file}/ToWindowScreenAction.java | 2 +- .../ui/actions/{ => menu/help}/GotoSiteAction.java | 2 +- .../actions/{ => menu/help}/ShowAboutAction.java | 2 +- .../actions/menu/navigation/GotoActionSupport.java | 80 ++++++++ .../menu/navigation/GotoOpenActivityAction.java | 50 +++++ .../menu/navigation/GotoOpenProgramAction.java | 42 ++++ .../menu/navigation/GotoOpenRouteAction.java | 42 ++++ .../actions/menu/navigation/GotoOpenSetAction.java | 59 ++++++ .../menu/navigation/GotoOpenTripAction.java | 42 ++++ .../menu/navigation/GotoReferentialAction.java | 42 ++++ .../{ => menu/storage}/ChangeStorageAction.java | 2 +- .../{ => menu/storage}/CloseStorageAction.java | 3 +- .../storage}/ImportStorageFromFileAction.java | 2 +- .../{ => menu/storage}/ReloadStorageAction.java | 5 +- .../storage}/SaveStorageToFileAction.java | 3 +- .../{ => menu/storage}/ShowStorageInfoAction.java | 2 +- .../{ => menu/storage}/StartH2WebServerAction.java | 2 +- .../{ => menu/storage}/StartServerModeAction.java | 2 +- .../{ => menu/storage}/StopH2WebServerAction.java | 9 +- .../{ => menu/storage}/StopServerModeAction.java | 25 +-- .../swing/ui/admin/config/ConfigUIHandler.java | 2 +- .../application/swing/ui/content/ContentUI.jaxx | 4 +- .../swing/ui/content/ContentUIBlockingLayerUI.java | 2 +- .../swing/ui/content/ContentUIHandler.java | 2 +- .../swing/ui/content/ContentUIInitializer.java | 2 +- .../swing/ui/content/ObserveActionMap.java | 2 +- .../swing/ui/content/list/ContentListUI.jaxx | 7 +- .../ui/content/list/ContentListUIHandler.java | 26 +-- .../swing/ui/content/list/ContentListUIModel.java | 22 +- .../list/impl/longline/ActivityLonglinesUI.jaxx | 4 +- .../list/impl/longline/ActivityLonglinesUI.jcss | 1 - .../impl/longline/ActivityLonglinesUIHandler.java | 9 + .../list/impl/longline/TripLonglinesUI.jaxx | 4 +- .../list/impl/longline/TripLonglinesUI.jcss | 1 - .../list/impl/longline/TripLonglinesUIHandler.java | 8 + .../content/list/impl/seine/ActivitySeinesUI.jaxx | 4 +- .../content/list/impl/seine/ActivitySeinesUI.jcss | 1 - .../list/impl/seine/ActivitySeinesUIHandler.java | 9 + .../swing/ui/content/list/impl/seine/RoutesUI.jaxx | 4 +- .../swing/ui/content/list/impl/seine/RoutesUI.jcss | 1 - .../content/list/impl/seine/RoutesUIHandler.java | 9 + .../ui/content/list/impl/seine/TripSeinesUI.jaxx | 4 +- .../ui/content/list/impl/seine/TripSeinesUI.jcss | 1 - .../list/impl/seine/TripSeinesUIHandler.java | 8 + .../swing/ui/content/table/ContentTableUI.jcss | 2 +- .../swing/ui/tree/navigation/NavigationTree.java | 223 +++++++++++++-------- .../ui/tree/navigation/NavigationTreeModel.java | 16 +- .../nodes/NavigationTreeNodeSupport.java | 68 ++++++- .../ObserveDataSourceInformation.java | 12 +- 79 files changed, 951 insertions(+), 517 deletions(-) diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java index ab27518..3579795 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveRunner.java @@ -26,7 +26,7 @@ import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationCon import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.ObserveMainUIInitializer; import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.actions.StartServerModeAction; +import fr.ird.observe.application.swing.ui.actions.menu.storage.StartServerModeAction; import fr.ird.observe.application.swing.ui.util.FloatConverter; import fr.ird.observe.application.swing.validation.ObserveSwingValidator; import fr.ird.observe.util.ObserveUtil; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java index 9162cbc..51d5ac8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationContext.java @@ -273,7 +273,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im return MAIN_UI.get(); } - public List<String> getNodesToReselect() { + public List<Object> getNodesToReselect() { return NODE_TO_RESELECT.get(); } @@ -309,7 +309,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im // - Write //------------------------------------------- - public void setNodesToReselect(String[] paths) { + public void setNodesToReselect(Object[] paths) { if (paths == null) { NODE_TO_RESELECT.remove(); @@ -329,7 +329,7 @@ public class ObserveSwingApplicationContext extends DefaultApplicationContext im public void setMainUI(ObserveMainUI ui) { MAIN_UI.set(ui); - ObserveActionMap actionMap = new ObserveActionMap(ui); + ObserveActionMap actionMap = ui.getObserveActionMap(); ui.getRootPane().setActionMap(actionMap); ACTION_MAP.set(actionMap); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java index 920de11..5e58b62 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ObserveSwingApplicationDataSourcesManager.java @@ -32,7 +32,7 @@ import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceEvent; import fr.ird.observe.application.swing.db.event.ObserveSwingDataSourceListenerAdapter; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.ObserveUIMode; -import fr.ird.observe.application.swing.ui.actions.ChangeStorageAction; +import fr.ird.observe.application.swing.ui.actions.menu.storage.ChangeStorageAction; import fr.ird.observe.application.swing.ui.storage.StorageUIModel; import fr.ird.observe.services.configuration.ObserveDataSourceConfiguration; import fr.ird.observe.services.configuration.ObserveDataSourceInformation; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java index 82182db..21e2326 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/db/ObserveSwingDataSource.java @@ -296,7 +296,7 @@ public class ObserveSwingDataSource extends AbstractSerializableBean implements Version dbVersion = dataSourceInformation.getVersion(); if (!dataSourceInformation.getMigrations().isEmpty()) { - if (dbVersion.before(dataSourceInformation.getMinnimumVersion())) { + if (dbVersion.before(dataSourceInformation.getMinimumVersion())) { JOptionPane.showMessageDialog( null, diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/MnemonicHelper.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/MnemonicHelper.java index 40e2f16..631af79 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/MnemonicHelper.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/MnemonicHelper.java @@ -1,7 +1,7 @@ package fr.ird.observe.application.swing.ui; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import jaxx.runtime.JAXXObject; import org.apache.commons.lang3.StringUtils; @@ -47,10 +47,14 @@ public class MnemonicHelper { boolean showMnemonic = isShowMnemonic(); if (showMnemonic) { String actionStr = keyStrokeToStr(actionKey); - String text = component.getText() + actionStr; - component.setText(text); - String tip = component.getToolTipText() + actionStr; - component.setToolTipText(tip); + if (component.getText() != null) { + String text = component.getText() + actionStr; + component.setText(text); + } + if (component.getToolTipText() != null) { + String tip = component.getToolTipText() + actionStr; + component.setToolTipText(tip); + } } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx index 28356e0..67ad4bd 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jaxx @@ -20,8 +20,7 @@ #L% --> -<JFrame id='mainFrame' width='800' height='800' - onWindowClosing='new fr.ird.observe.application.swing.ui.actions.CloseApplicationAction(this).run()'> +<JFrame id='mainFrame' width='800' height='800' onWindowClosing='new CloseApplicationAction(this).run()'> <import> fr.ird.observe.application.swing.ObserveSwingApplicationContext @@ -37,33 +36,39 @@ fr.ird.observe.application.swing.ui.admin.AdminStep - fr.ird.observe.application.swing.ui.actions.ChangeApplicationLanguageAction - fr.ird.observe.application.swing.ui.actions.ChangeDbLanguageAction - fr.ird.observe.application.swing.ui.actions.ChangeStorageAction - fr.ird.observe.application.swing.ui.actions.CloseApplicationAction - fr.ird.observe.application.swing.ui.actions.CloseHelpAction - fr.ird.observe.application.swing.ui.actions.CloseStorageAction - fr.ird.observe.application.swing.ui.actions.GotoSiteAction - fr.ird.observe.application.swing.ui.actions.ImportStorageFromFileAction - fr.ird.observe.application.swing.ui.actions.LaunchAdminAction - fr.ird.observe.application.swing.ui.actions.ReloadResourcesAction - fr.ird.observe.application.swing.ui.actions.ReloadApplicationAction - fr.ird.observe.application.swing.ui.actions.ReloadDefaultConfigurationAction - fr.ird.observe.application.swing.ui.actions.ReloadStorageAction - fr.ird.observe.application.swing.ui.actions.SaveStorageToFileAction - fr.ird.observe.application.swing.ui.actions.ShowAboutAction - fr.ird.observe.application.swing.ui.actions.ShowStorageInfoAction - fr.ird.observe.application.swing.ui.actions.StartH2WebServerAction - fr.ird.observe.application.swing.ui.actions.StartServerModeAction - fr.ird.observe.application.swing.ui.actions.StopH2WebServerAction - fr.ird.observe.application.swing.ui.actions.StopServerModeAction - fr.ird.observe.application.swing.ui.actions.ToFullScreenAction - fr.ird.observe.application.swing.ui.actions.ToWindowScreenAction + fr.ird.observe.application.swing.ui.actions.menu.config.ChangeApplicationLanguageAction + fr.ird.observe.application.swing.ui.actions.menu.config.ChangeDbLanguageAction + fr.ird.observe.application.swing.ui.actions.menu.action.LaunchAdminAction + fr.ird.observe.application.swing.ui.actions.menu.config.ReloadDefaultConfigurationAction + fr.ird.observe.application.swing.ui.actions.menu.config.ReloadResourcesAction + fr.ird.observe.application.swing.ui.actions.menu.file.CloseApplicationAction + fr.ird.observe.application.swing.ui.actions.menu.file.ReloadApplicationAction + fr.ird.observe.application.swing.ui.actions.menu.file.ToFullScreenAction + fr.ird.observe.application.swing.ui.actions.menu.file.ToWindowScreenAction + fr.ird.observe.application.swing.ui.actions.menu.help.GotoSiteAction + fr.ird.observe.application.swing.ui.actions.menu.help.ShowAboutAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoOpenProgramAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoOpenTripAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoOpenRouteAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoOpenActivityAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoOpenSetAction + fr.ird.observe.application.swing.ui.actions.menu.navigation.GotoReferentialAction + fr.ird.observe.application.swing.ui.actions.menu.storage.ChangeStorageAction + fr.ird.observe.application.swing.ui.actions.menu.storage.CloseStorageAction + fr.ird.observe.application.swing.ui.actions.menu.storage.ImportStorageFromFileAction + fr.ird.observe.application.swing.ui.actions.menu.storage.ReloadStorageAction + fr.ird.observe.application.swing.ui.actions.menu.storage.SaveStorageToFileAction + fr.ird.observe.application.swing.ui.actions.menu.storage.ShowStorageInfoAction + fr.ird.observe.application.swing.ui.actions.menu.storage.StartH2WebServerAction + fr.ird.observe.application.swing.ui.actions.menu.storage.StartServerModeAction + fr.ird.observe.application.swing.ui.actions.menu.storage.StopH2WebServerAction + fr.ird.observe.application.swing.ui.actions.menu.storage.StopServerModeAction fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.content.DeleteDataUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction fr.ird.observe.application.swing.ui.content.ContentUIManager + fr.ird.observe.application.swing.ui.content.ObserveActionMap fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree fr.ird.observe.application.swing.ui.tree.navigation.NavigationTreeHeader @@ -88,6 +93,7 @@ <Boolean id='h2WebServer' javaBean='Boolean.FALSE'/> + <ObserveActionMap id="observeActionMap" constructorParams='this'/> <ChangeStorageAction id="changeStorageAction" constructorParams='this'/> <CloseStorageAction id="closeStorageAction" constructorParams='this'/> <ReloadStorageAction id="reloadStorageAction" constructorParams='this'/> @@ -197,19 +203,13 @@ protected void finalize() throws Throwable { </JMenu> <JMenu id='menuNavigation'> - <JMenuItem id='menuNavigationProgram' - onActionPerformed="navigation.selectOpenNode(ProgramDto.class)"/> - <JMenuItem id='menuNavigationTrip' - onActionPerformed="navigation.selectOpenNode(TripSeineDto.class)"/> - <JMenuItem id='menuNavigationRoute' - onActionPerformed="navigation.selectOpenNode(RouteDto.class)"/> - <JMenuItem id='menuNavigationActivity' - onActionPerformed="navigation.selectOpenNode(ActivitySeineDto.class)"/> - <JMenuItem id='menuNavigationSet' - onActionPerformed="navigation.selectOpenNode(SetSeineDto.class)"/> + <JMenuItem id='menuNavigationProgram'/> + <JMenuItem id='menuNavigationTrip'/> + <JMenuItem id='menuNavigationRoute'/> + <JMenuItem id='menuNavigationActivity'/> + <JMenuItem id='menuNavigationSet'/> <JSeparator/> - <JMenuItem id='menuNavigationReferentiel' - onActionPerformed='navigation.selectNode("observe.common.referentiel")'/> + <JMenuItem id='menuNavigationReferentiel'/> </JMenu> <JMenu id='menuConfiguration'> <JMenu id='menuLanguage'> @@ -287,7 +287,7 @@ protected void finalize() throws Throwable { <JPanel id="content"> <JPanel id="emptySelection" constraints='"emptySelection"' layout="{new BorderLayout()}"> - <JLabel id="emptySelectionLabel" constraints="BorderLayout.CENTER"/> + <JLabel id="emptySelectionLabel" constraints="BorderLayout.CENTER"/> </JPanel> </JPanel> diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss index dab2a24..844e19c 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUI.jcss @@ -78,7 +78,7 @@ JSplitPane { } #menuConfigurationConfiguration { - action: {new fr.ird.observe.application.swing.ui.actions.ShowConfigAction(this)}; + action: {new fr.ird.observe.application.swing.ui.actions.menu.config.ShowConfigAction(this)}; } #menuConfiguration { @@ -245,50 +245,31 @@ JSplitPane { #menuNavigation { text: "observe.menu.navigation"; mnemonic: N; - enabled: {getHandler().acceptMode(getMode(), !isBusy(), ObserveUIMode.DB)}; + enabled:{getHandler().acceptMode(getMode(), !isBusy(), ObserveUIMode.DB)}; } #menuNavigationProgram { - text: "observe.content.action.goto.open.program.short"; - toolTipText: "observe.content.action.goto.open.program.tip"; - icon: "navigation.fr.ird.observe.services.dto.referential.ProgramDto"; - mnemonic: P; - enabled: {getDataContext().isOpenProgram()}; + _observeAction:{GotoOpenProgramAction.ACTION_NAME}; } #menuNavigationTrip { - text: "observe.content.action.goto.open.trip.short"; - toolTipText: "observe.content.action.goto.open.trip.tip"; - icon: "navigation.fr.ird.observe.services.dto.TripDto"; - mnemonic: M; - enabled: {getDataContext().isOpenTrip()}; + _observeAction:{GotoOpenTripAction.ACTION_NAME}; } #menuNavigationRoute { - text: "observe.content.action.goto.open.route.short"; - toolTipText: "observe.content.action.goto.open.route.tip"; - icon: "navigation.fr.ird.observe.services.dto.seine.RouteDto"; - mnemonic: R; - enabled: {getDataContext().isOpenRoute()}; + _observeAction:{GotoOpenRouteAction.ACTION_NAME}; } #menuNavigationActivity { - text: "observe.content.action.goto.open.activity.short"; - toolTipText: "observe.content.action.goto.open.activity.tip"; - icon: "navigation.fr.ird.observe.services.dto.ActivityDto"; - mnemonic: A; - enabled: {getDataContext().isOpenActivity()}; + _observeAction:{GotoOpenActivityAction.ACTION_NAME}; } #menuNavigationSet { - text: "observe.content.action.goto.open.set.short"; - toolTipText: "observe.content.action.goto.open.set.tip"; - icon: "navigation.fr.ird.observe.services.dto.SetDto"; - mnemonic: C; - enabled: {getDataContext().isOpenSet()}; + _observeAction:{GotoOpenSetAction.ACTION_NAME}; } #menuNavigationReferentiel { + _observeAction:{GotoReferentialAction.ACTION_NAME}; text: "observe.action.goto.referentiel.short"; toolTipText: "observe.action.goto.referentiel.tip"; icon: "navigation.referentiel"; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIInitializer.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIInitializer.java index 38a76ff..c3eb9b6 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIInitializer.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveMainUIInitializer.java @@ -27,8 +27,10 @@ import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.decoration.DecoratorService; import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.content.ContentUIManager; +import fr.ird.observe.application.swing.ui.content.ObserveActionMap; import fr.ird.observe.application.swing.ui.tree.ObserveNavigationTreeShowPopupAction; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTreeModel; @@ -46,6 +48,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.i18n.I18n; +import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.SwingUtilities; import javax.swing.border.Border; @@ -60,7 +63,9 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Objects; +import static fr.ird.observe.application.swing.ui.content.ContentUIInitializer.OBSERVE_ACTION; import static org.nuiton.i18n.I18n.t; /** @@ -172,39 +177,44 @@ public class ObserveMainUIInitializer { DataContext context = ui.getDataContext(); context.populateSelectedIds(selectedIds); - JComponent focusOwner = (JComponent) ui.getFocusOwner(); boolean focusOnNavigation = false; + JComponent focusOwner; + if (ui.getFocusOwner() == ui) { + focusOnNavigation = true; + focusOwner = ui.getNavigation(); + } else { + focusOwner = (JComponent) ui.getFocusOwner(); - if (focusOwner != null) { - if (ui.getNavigation().equals(focusOwner)) { - focusOnNavigation = true; - } - if (ui.getNavigationTreeHeader().equals(focusOwner)) { - focusOnNavigation = true; - } - if (ui.getNavigationView().equals(focusOwner)) { - focusOnNavigation = true; - } - if (!focusOnNavigation) { - Container focusOwnerParent = focusOwner.getParent(); - while (focusOwnerParent != null) { - if (ui.getNavigation().equals(focusOwnerParent)) { - focusOnNavigation = true; - break; - } - if (ui.getNavigationTreeHeader().equals(focusOwnerParent)) { - focusOnNavigation = true; - break; - } - if (ui.getNavigationView().equals(focusOwnerParent)) { - focusOnNavigation = true; - break; + if (focusOwner != null) { + if (ui.getNavigation().equals(focusOwner)) { + focusOnNavigation = true; + } + if (ui.getNavigationTreeHeader().equals(focusOwner)) { + focusOnNavigation = true; + } + if (ui.getNavigationView().equals(focusOwner)) { + focusOnNavigation = true; + } + if (!focusOnNavigation) { + Container focusOwnerParent = focusOwner.getParent(); + while (focusOwnerParent != null) { + if (ui.getNavigation().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + if (ui.getNavigationTreeHeader().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + if (ui.getNavigationView().equals(focusOwnerParent)) { + focusOnNavigation = true; + break; + } + focusOwnerParent = focusOwnerParent.getParent(); } - focusOwnerParent = focusOwnerParent.getParent(); } } } - if (focusOnNavigation) { if (log.isInfoEnabled()) { log.info("Focus on navigation: " + focusOwner); @@ -304,7 +314,7 @@ public class ObserveMainUIInitializer { ObserveSwingDataSource mainStorage = rootContext.getDataSourcesManager().getMainDataSource(); ObserveUIMode oldMode = null; - String[] ids = null; + Object[] ids = null; if (ui != null) { oldMode = ui.getMode(); @@ -363,6 +373,24 @@ public class ObserveMainUIInitializer { protected void initialize() { + //FIXME Je ne sais pas comment ces bindings sont générés et on n'en veut pas!!! + ui.removeDataBinding(ObserveMainUI.BINDING_MENU_NAVIGATION_PROGRAM_ENABLED); + ui.removeDataBinding(ObserveMainUI.BINDING_MENU_NAVIGATION_TRIP_ENABLED); + ui.removeDataBinding(ObserveMainUI.BINDING_MENU_NAVIGATION_ROUTE_ENABLED); + ui.removeDataBinding(ObserveMainUI.BINDING_MENU_NAVIGATION_ACTIVITY_ENABLED); + ui.removeDataBinding(ObserveMainUI.BINDING_MENU_NAVIGATION_SET_ENABLED); + + ObserveActionMap actionMap = ui.getObserveActionMap(); + + for (Object o : ui.get$objectMap().values()) { + + if (o instanceof AbstractButton) { + init(actionMap, (AbstractButton) o); + continue; + } + + } + MnemonicHelper.addKeyStrokeFromMnemonic(ui); // bad binding, force value @@ -416,6 +444,25 @@ public class ObserveMainUIInitializer { }); } + protected void init(ObserveActionMap actionMap, AbstractButton editor) { + String actionId = (String) editor.getClientProperty(OBSERVE_ACTION); + if (actionId == null) { + + return; + } + + // on a trouve une action commune + AbstractUIAction action = (AbstractUIAction) actionMap.get(actionId); + Objects.requireNonNull(action, "action [" + actionId + "] not found for ui " + ui.getClass().getName()); + + if (log.isDebugEnabled()) { + log.debug("init common action " + actionId); + } + + action.initForMainUi(editor); + + } + private Border focusBorder; private Border noFocusBorder; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java index 4a1bcff..ba328a0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/ObserveUICallback.java @@ -25,8 +25,8 @@ package fr.ird.observe.application.swing.ui; import fr.ird.observe.application.swing.ObserveRunner; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig; -import fr.ird.observe.application.swing.ui.actions.CloseApplicationAction; -import fr.ird.observe.application.swing.ui.actions.ReloadStorageAction; +import fr.ird.observe.application.swing.ui.actions.menu.file.CloseApplicationAction; +import fr.ird.observe.application.swing.ui.actions.menu.storage.ReloadStorageAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java similarity index 88% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java index fcfd9bf..781852d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/AbstractUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/AbstractUIAction.java @@ -19,7 +19,7 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.MnemonicHelper; @@ -33,10 +33,8 @@ import javax.swing.AbstractAction; import javax.swing.AbstractButton; import javax.swing.Icon; import javax.swing.JComponent; -import javax.swing.JPopupMenu; import javax.swing.KeyStroke; import java.awt.event.ActionEvent; -import java.util.Objects; import static org.nuiton.i18n.I18n.t; @@ -90,6 +88,20 @@ public abstract class AbstractUIAction extends AbstractAction { } } + public void initForMainUi(AbstractButton editor) { + editor.setAction(this); + editor.putClientProperty("ui", mainUI); + putValue(EDITOR, editor); + + KeyStroke keyStroke = getAcceleratorKey(); + if (keyStroke != null) { + + String actionCommandKey = getActionCommandKey(); + mainUI.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(keyStroke, actionCommandKey); + mainUI.getRootPane().getActionMap().put(actionCommandKey, this); + } + } + public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { MnemonicHelper.addKeyStroke2(editor, getAcceleratorKey()); @@ -136,10 +148,4 @@ public abstract class AbstractUIAction extends AbstractAction { return ui; } - protected JPopupMenu getPopup(ActionEvent e) { - JComponent c = (JComponent) e.getSource(); - JPopupMenu ui = (JPopupMenu) c.getClientProperty("popup"); - Objects.requireNonNull(ui, "could not find client property popup on component" + c); - return ui; - } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseHelpAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseHelpAction.java deleted file mode 100644 index 2d26402..0000000 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseHelpAction.java +++ /dev/null @@ -1,76 +0,0 @@ -package fr.ird.observe.application.swing.ui.actions; - -/* - * #%L - * ObServe :: Application Swing - * %% - * Copyright (C) 2008 - 2016 IRD, Code Lutin, Tony Chemit - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ird.observe.application.swing.ObserveSwingApplicationContext; -import fr.ird.observe.application.swing.db.ObserveSwingDataSource; -import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.ObserveUIMode; -import jaxx.runtime.SwingUtil; - -import javax.swing.AbstractAction; -import java.awt.event.ActionEvent; - -import static org.nuiton.i18n.I18n.t; - -/** - * Created on 1/17/15. - * - * @author Tony Chemit - chemit@codelutin.com - * @since 3.13 - */ -public class CloseHelpAction extends AbstractAction { - - private static final long serialVersionUID = 1L; - - private final ObserveMainUI ui; - - public CloseHelpAction(ObserveMainUI ui) { - - super(null, SwingUtil.getUIManagerActionIcon("closeTab")); - this.ui = ui; - putValue(SHORT_DESCRIPTION, t("observe.action.quitHelp.tip")); - putValue(MNEMONIC_KEY, (int) 'F'); - - } - - @Override - public void actionPerformed(ActionEvent event) { - - ObserveUIMode oldMode = ui.getContextValue(ObserveUIMode.class, "oldMode"); - if (oldMode == null) { - - // on regarde si une base est chargee - ObserveSwingDataSource mainStorage = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); - - if (mainStorage == null) { - oldMode = ObserveUIMode.NO_DB; - } else { - oldMode = ObserveUIMode.DB; - } - } - ui.setMode(oldMode); - - } - -} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java index 6744253..45ff43e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/AbstractContentUIAction.java @@ -23,7 +23,7 @@ package fr.ird.observe.application.swing.ui.actions.content; */ import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import java.awt.event.ActionEvent; @@ -37,6 +37,8 @@ import java.awt.event.ActionEvent; public abstract class AbstractContentUIAction extends AbstractUIAction { + protected ActionEvent e; + public AbstractContentUIAction(ObserveMainUI mainUI, String actionCommandKey, String label, String shortDescription, String actionIcon, String acceleratorKey) { super(mainUI, actionCommandKey, label, shortDescription, actionIcon, acceleratorKey); } @@ -48,6 +50,8 @@ public abstract class AbstractContentUIAction extends AbstractUIAction { if (!canExecuteAction()) { return; } + this.e=e; + ContentUI<?, ?> contentUI = getContentUI(e); actionPerformed(contentUI); } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java index 70b0e52..eaaa9fe 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/CloseAndCreateUIAction.java @@ -78,7 +78,12 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, getMainUI().getDataContext()); // selection du noeud de l'activity ouverte - tree.selectOpenNode(ActivitySeineDto.class); + getMainUI().getMenuNavigationActivity().doClick(); + + NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); + selectedNode = tree.getActivitySeineNode(selectedNode, getMainUI().getDataContext().getOpenActivitySeineId()); + + tree.selectNode(selectedNode); // on conserve le path de l'activity TreePath path = tree.getSelectionPath(); @@ -109,7 +114,10 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, getMainUI().getDataContext()); // selection du noeud de l'activity ouverte - tree.selectOpenNode(ActivityLonglineDto.class); + NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); + selectedNode = tree.getActivityLonglineNode(selectedNode, getMainUI().getDataContext().getOpenActivitySeineId()); + tree.selectNode(selectedNode); +// tree.selectOpenNode(ActivityLonglineDto.class); // on conserve le path de l'activity TreePath path = tree.getSelectionPath(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoDownUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java similarity index 59% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoDownUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java index a17ce17..f29d495 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoDownUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoDownUIAction.java @@ -19,7 +19,7 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; @@ -27,14 +27,9 @@ import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.Icon; import javax.swing.JComponent; -import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; -import java.awt.Color; -import java.awt.event.ActionEvent; import java.util.Enumeration; import static org.nuiton.i18n.I18n.n; @@ -46,7 +41,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public class GoDownUIAction extends AbstractUIAction { +public class GoDownUIAction extends AbstractContentUIAction { private static final long serialVersionUID = 1L; @@ -58,40 +53,27 @@ public class GoDownUIAction extends AbstractUIAction { n("observe.action.goDown"), n("observe.action.goDown.tip"), "go-down", - null - ); + "alt pressed D"); } @Override - public void actionPerformed(ActionEvent e) { - + protected void actionPerformed(ContentUI<?, ?> contentUI) { SwingUtilities.invokeLater(() -> { - JComponent c = (JComponent) e.getSource(); - JPopupMenu p = getPopup(e); + JComponent c = contentUI.getActionDown(); + JPopupMenu p = getMainUI().getScopeDownPopup(); p.show(c, 2, c.getHeight()); }); } @Override - public void initAction(ContentUI<?, ?> ui, AbstractButton editor) { - super.initAction(ui, editor); - editor.putClientProperty("popup", getMainUI().getScopeDownPopup()); - } - - @Override public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { - ObserveMainUI mainUI = getMainUI(); + ObserveMainUI mainUI = getMainUI(); NavigationTree tree = getMainUI().getNavigation(); - - NavigationTreeNodeSupport node; - - super.updateAction(ui, editor); - JPopupMenu scopePopup = mainUI.getScopeDownPopup(); - Action action = - mainUI.getRootPane().getActionMap().get(SelectNodeUIAction.ACTION_NAME); - node = tree.getSelectedNode(); + SelectNodeUIAction action = (SelectNodeUIAction) mainUI.getObserveActionMap().get(SelectNodeUIAction.ACTION_NAME); + + NavigationTreeNodeSupport<?> node = tree.getSelectedNode(); NavigationTreeNodeSupport nodeOriginal = node; scopePopup.removeAll(); Enumeration<?> e = node.children(); @@ -101,36 +83,14 @@ public class GoDownUIAction extends AbstractUIAction { if (text == null) { continue; } - Color color = node.getColor(); - Icon icon = node.getIcon("-16"); - JMenuItem mi = new JMenuItem(); - mi.setAction(action); - mi.setText(text.trim()); - mi.setIcon(icon); - mi.setForeground(color); - mi.putClientProperty("node", node); - mi.putClientProperty("ui", ui); - mi.setAction(action); - scopePopup.add(mi); + scopePopup.add(node.toMenuItem(action, ui)); } - if (nodeOriginal.getChildCount() == 1 && - !nodeOriginal.getChildAt(0).isLeaf()) { + if (nodeOriginal.getChildCount() == 1 && !nodeOriginal.getChildAt(0).isLeaf()) { e = nodeOriginal.getChildAt(0).children(); while (e.hasMoreElements()) { node = (NavigationTreeNodeSupport) e.nextElement(); - Color color = node.getColor(); - Icon icon = node.getIcon("-16"); - String text = node.getText(); - JMenuItem mi = new JMenuItem(); - mi.setAction(action); - mi.setText(text.trim()); - mi.setIcon(icon); - mi.setForeground(color); - mi.putClientProperty("node", node); - mi.putClientProperty("ui", ui); - mi.setAction(action); - scopePopup.add(mi); + scopePopup.add(node.toMenuItem(action, ui)); } } @@ -138,4 +98,5 @@ public class GoDownUIAction extends AbstractUIAction { editor.setEnabled(nbNodes > 0); } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoUpUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java similarity index 65% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoUpUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java index d4b414a..2c80fcc 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/GoUpUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/GoUpUIAction.java @@ -19,24 +19,21 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.swing.AbstractButton; -import javax.swing.Action; -import javax.swing.Icon; import javax.swing.JComponent; -import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; import javax.swing.tree.TreeNode; -import java.awt.Color; import java.awt.GridLayout; -import java.awt.event.ActionEvent; import static org.nuiton.i18n.I18n.n; @@ -47,10 +44,13 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public class GoUpUIAction extends AbstractUIAction { +public class GoUpUIAction extends AbstractContentUIAction { private static final long serialVersionUID = 1L; + /** Logger */ + private static final Log log = LogFactory.getLog(GoUpUIAction.class); + public static final String ACTION_NAME = "goUp"; public GoUpUIAction(ObserveMainUI mainUI) { @@ -59,38 +59,30 @@ public class GoUpUIAction extends AbstractUIAction { n("observe.action.goUp"), n("observe.action.goUp.tip"), "go-up", - null + "alt pressed U" ); } @Override - public void actionPerformed(ActionEvent e) { + protected void actionPerformed(ContentUI<?, ?> contentUI) { SwingUtilities.invokeLater(() -> { - JComponent c = (JComponent) e.getSource(); - JPopupMenu p = getPopup(e); + JComponent c = contentUI.getActionUp(); + JPopupMenu p = getMainUI().getScopeUpPopup(); p.show(c, 2, c.getHeight()); }); } @Override - public void initAction(ContentUI<?, ?> ui, AbstractButton editor) { - super.initAction(ui, editor); - editor.putClientProperty("popup", getMainUI().getScopeUpPopup()); - } - - @Override public void updateAction(ContentUI<?, ?> ui, AbstractButton editor) { - super.updateAction(ui, editor); NavigationTree treeHelper = getMainUI().getNavigation(); - NavigationTreeNodeSupport node; + NavigationTreeNodeSupport<?> node; JPopupMenu scopePopup = getMainUI().getScopeUpPopup(); - Action action = - getMainUI().getRootPane().getActionMap().get(SelectNodeUIAction.ACTION_NAME); + SelectNodeUIAction action = (SelectNodeUIAction) getMainUI().getObserveActionMap().get(SelectNodeUIAction.ACTION_NAME); node = treeHelper.getSelectedNode(); TreeNode root = node.getRoot(); @@ -98,19 +90,7 @@ public class GoUpUIAction extends AbstractUIAction { scopePopup.setLayout(new GridLayout(0, 1)); while (!root.equals(node.getParent())) { node = node.getParent(); - Color color = node.getColor(); - Icon icon = node.getIcon("-16"); - String text = node.getText(); - JMenuItem mi = new JMenuItem(); - mi.setAction(action); - mi.setText(text.trim()); - mi.setIcon(icon); - mi.setForeground(color); - mi.setBackground(Color.WHITE); - mi.putClientProperty("node", node); - mi.putClientProperty("ui", ui); - mi.setAction(action); - scopePopup.add(mi); + scopePopup.add(node.toMenuItem(action, ui)); } scopePopup.revalidate(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java index e986b23..0799399 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivityLonglinesUIAction.java @@ -170,8 +170,8 @@ public class MoveActivityLonglinesUIAction extends AbstractContentUIAction { // Let's reload the sub tree of each activities node. // As the change have already be done in database, we just call the child loaders to regenerate the activities nodes sub trees - tree.reloadNodeSubTree(oldActivitiesNode, true); - tree.reloadNodeSubTree(newActivitiesNode, true); + tree.reloadNodeSubTree(oldActivitiesNode); + tree.reloadNodeSubTree(newActivitiesNode); // Let's put the focus on the activities node which received the activities tree.selectNode(newActivitiesNode); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java index a3adf22..c7e6639 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveActivitySeinesUIAction.java @@ -161,8 +161,8 @@ public class MoveActivitySeinesUIAction extends AbstractContentUIAction { // Let's reload the sub tree of each activities node. // As the change have already be done in database, we just call the child loaders to regenerate the activities nodes sub trees - tree.reloadNodeSubTree(oldActivitiesNode, true); - tree.reloadNodeSubTree(newActivitiesNode, true); + tree.reloadNodeSubTree(oldActivitiesNode); + tree.reloadNodeSubTree(newActivitiesNode); // Let's put the focus on the activities node which received the activities tree.selectNode(newActivitiesNode); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java index e510eb5..767d352 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/MoveRoutesUIAction.java @@ -157,8 +157,8 @@ public class MoveRoutesUIAction extends AbstractContentUIAction { // Let's reload the sub tree of each routes node. // As the change have already be done in database, we just call the child loaders to regenerate the routes nodes sub trees - tree.reloadNodeSubTree(oldRoutesNode, true); - tree.reloadNodeSubTree(newRoutesNode, true); + tree.reloadNodeSubTree(oldRoutesNode); + tree.reloadNodeSubTree(newRoutesNode); // 1. Select the newRoutesNode : // only a selected node can be reloaded (@see fr.ird.observe.application.swing.ui.tree.ObserveTreeBridge.canLoadChild). diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectNodeUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectNodeUIAction.java similarity index 50% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectNodeUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectNodeUIAction.java index 14a0b4a..cd13a56 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectNodeUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectNodeUIAction.java @@ -19,14 +19,20 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; 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.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.services.dto.DataReference; import javax.swing.JComponent; -import java.awt.event.ActionEvent; +import javax.swing.SwingUtilities; +import java.util.Objects; +import static fr.ird.observe.application.swing.ui.content.ContentUIHandler.getTreeHelper; import static org.nuiton.i18n.I18n.n; /** @@ -36,7 +42,7 @@ import static org.nuiton.i18n.I18n.n; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public class SelectNodeUIAction extends AbstractUIAction { +public class SelectNodeUIAction extends AbstractContentUIAction { private static final long serialVersionUID = 1L; @@ -50,14 +56,41 @@ public class SelectNodeUIAction extends AbstractUIAction { n("observe.action.selectNode"), n("observe.action.selectNode.tip"), "go-jump", - null - ); + "alt pressed ENTER"); } @Override - public void actionPerformed(ActionEvent e) { - JComponent source = (JComponent) e.getSource(); + public void actionPerformed(ContentUI<?, ?> contentUI) { + + if (contentUI instanceof ContentListUI<?, ?, ?>) { + ContentListUI<?, ?, ?> contentListUI = (ContentListUI<?, ?, ?>) contentUI; + + boolean oneSelectedData = contentListUI.getModel().isOneSelectedData(); + if (!oneSelectedData) { + return; + } + + DataReference<?> dataReference = contentListUI.getModel().getSelectedDatas().get(0); + Objects.requireNonNull(dataReference); + + NavigationTree tree = getTreeHelper(contentListUI); + + NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); + NavigationTreeNodeSupport nodeToSelect = tree.getChild(selectedNode, dataReference.getId()); + + SwingUtilities.invokeLater(() -> tree.selectNode(nodeToSelect)); + return; + } + + actionPerformed((JComponent) e.getSource()); + + } + + public void actionPerformed(JComponent source) { + NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) source.getClientProperty(NODE); - getMainUI().getNavigation().selectNode(node); + Objects.requireNonNull(node); + + SwingUtilities.invokeLater(() -> getMainUI().getNavigation().selectNode(node)); } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectOpenNodeUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectOpenNodeUIAction.java similarity index 55% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectOpenNodeUIAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectOpenNodeUIAction.java index 6a38c34..cf9c536 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/shared/SelectOpenNodeUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/content/SelectOpenNodeUIAction.java @@ -19,13 +19,15 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ -package fr.ird.observe.application.swing.ui.actions.shared; +package fr.ird.observe.application.swing.ui.actions.content; 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.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; -import javax.swing.JComponent; -import java.awt.event.ActionEvent; -import java.util.Objects; +import static fr.ird.observe.application.swing.ui.content.ContentUIHandler.getTreeHelper; /** * Action pour sélectionner un noeud (attaché à l'éditeur) dans l'arbre de @@ -34,29 +36,29 @@ import java.util.Objects; * @author Tony Chemit - chemit@codelutin.com * @since 1.4 */ -public class SelectOpenNodeUIAction extends AbstractUIAction { +public class SelectOpenNodeUIAction extends AbstractContentUIAction { public static final String ACTION_NAME = "selectOpen"; private static final long serialVersionUID = 1L; public SelectOpenNodeUIAction(ObserveMainUI mainUI) { - super(mainUI, - ACTION_NAME, - "<NONE>", - "<NONE>", - "go-down", - null); + super(mainUI, ACTION_NAME, "<NONE>", "<NONE>", "go-down", "alt shift pressed ENTER"); } @Override - public void actionPerformed(ActionEvent e) { - if (!canExecuteAction()) { + protected void actionPerformed(ContentUI<?, ?> contentUI) { + + if (!(contentUI instanceof ContentListUI)) { return; } - JComponent c = (JComponent) e.getSource(); - Class<?> type = (Class<?>) c.getClientProperty("type"); - Objects.requireNonNull(type, "could not find client property type on component" + c); - getMainUI().getNavigation().selectOpenNode(type); + + ContentListUI<?, ?, ?> contentListUI = (ContentListUI<?, ?, ?>) contentUI; + + NavigationTreeNodeSupport<?> node = contentListUI.getOpenNode(); + NavigationTree tree = getTreeHelper(contentListUI); + tree.selectNode(node); + } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java index b8a3502..85bdf9e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/global/AbstractGlobalUIAction.java @@ -23,7 +23,7 @@ package fr.ird.observe.application.swing.ui.actions.global; */ import fr.ird.observe.application.swing.ui.ObserveMainUI; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import javax.swing.JComponent; import javax.swing.SwingUtilities; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/LaunchAdminAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/action/LaunchAdminAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/LaunchAdminAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/action/LaunchAdminAction.java index cc58de5..2292df0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/LaunchAdminAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/action/LaunchAdminAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.action; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeApplicationLanguageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeApplicationLanguageAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeApplicationLanguageAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeApplicationLanguageAction.java index 7cd449d..f1ae4d7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeApplicationLanguageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeApplicationLanguageAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.config; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeDbLanguageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeDbLanguageAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeDbLanguageAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeDbLanguageAction.java index 016497d..3eaa181 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeDbLanguageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ChangeDbLanguageAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.config; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadDefaultConfigurationAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadDefaultConfigurationAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadDefaultConfigurationAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadDefaultConfigurationAction.java index 0d540bc..b8cce05 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadDefaultConfigurationAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadDefaultConfigurationAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.config; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadResourcesAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadResourcesAction.java similarity index 98% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadResourcesAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadResourcesAction.java index 9c29d6d..6bf1579 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadResourcesAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ReloadResourcesAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.config; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ShowConfigAction.java similarity index 99% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ShowConfigAction.java index 1c455f9..008d038 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowConfigAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/config/ShowConfigAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.config; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseApplicationAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/CloseApplicationAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseApplicationAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/CloseApplicationAction.java index 06ab0e6..e89f387 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseApplicationAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/CloseApplicationAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.file; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadApplicationAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ReloadApplicationAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadApplicationAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ReloadApplicationAction.java index f9ebfdb..20aba71 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadApplicationAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ReloadApplicationAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.file; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToFullScreenAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToFullScreenAction.java similarity index 94% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToFullScreenAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToFullScreenAction.java index 5580057..3aa62e0 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToFullScreenAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToFullScreenAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.file; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToWindowScreenAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToWindowScreenAction.java similarity index 94% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToWindowScreenAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToWindowScreenAction.java index 6e75251..4cb3d0d 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ToWindowScreenAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/file/ToWindowScreenAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.file; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.ui.ObserveMainUI; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/GotoSiteAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/GotoSiteAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/GotoSiteAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/GotoSiteAction.java index 14f3d86..7922ec8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/GotoSiteAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/GotoSiteAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.help; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowAboutAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/ShowAboutAction.java similarity index 98% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowAboutAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/ShowAboutAction.java index bb5558e..978e247 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowAboutAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/help/ShowAboutAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.help; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoActionSupport.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoActionSupport.java new file mode 100644 index 0000000..64eb5a9 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoActionSupport.java @@ -0,0 +1,80 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import java.awt.event.ActionEvent; +import java.util.Optional; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public abstract class GotoActionSupport extends AbstractUIAction { + + /** Logger */ + private static final Log log = LogFactory.getLog(GotoActionSupport.class); + + protected abstract boolean computeIsOpen(DataContext dataContext); + + protected abstract Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext); + + public GotoActionSupport(ObserveMainUI mainUI, + String actionName, + String openPropertyName, + int mnemonic, + String label, + String tip, + String icon) { + + super(mainUI, actionName, label, tip, null, null); + + putValue(SMALL_ICON, UIHelper.getUIManagerIcon(icon)); + putValue(MNEMONIC_KEY, mnemonic); + + if (openPropertyName != null) { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + dataContext.addPropertyChangeListener(openPropertyName, e -> setEnabled(BooleanUtils.isTrue((Boolean) e.getNewValue()))); + } + } + + @Override + public void initForMainUi(AbstractButton editor) { + super.initForMainUi(editor); + + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + boolean open = computeIsOpen(dataContext); + if (log.isInfoEnabled()) { + log.info("Action [" + getValue(ACTION_COMMAND_KEY) + "] - open? " + open); + } + setEnabled(open); + + } + + @Override + public final void actionPerformed(ActionEvent e) { + + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + boolean open = computeIsOpen(dataContext); + if (!open) { + return; + } + + NavigationTree navigation = getMainUI().getNavigation(); + + getNodeToSelect(navigation, dataContext).ifPresent(navigation::selectNode); + + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenActivityAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenActivityAction.java new file mode 100644 index 0000000..a031622 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenActivityAction.java @@ -0,0 +1,50 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoOpenActivityAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoOpenActivityAction"; + + public GotoOpenActivityAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + DataContext.PROPERTY_OPEN_ACTIVITY, + (int) 'A', + t("observe.content.action.goto.open.activity.short"), + t("observe.content.action.goto.open.activity.tip"), + "navigation.fr.ird.observe.services.dto.ActivityDto"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return dataContext.isOpenActivity(); + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + + NavigationTreeNodeSupport result = null; + if (dataContext.isOpenActivitySeine()) { + result = navigation.getActivitySeineNode(dataContext.getOpenProgramId(), dataContext.getOpenTripId(), dataContext.getOpenRouteId(), dataContext.getOpenActivityId()); + } else if (dataContext.isOpenActivityLongline()) { + result = navigation.getActivityLonglineNode(dataContext.getOpenProgramId(), dataContext.getOpenTripId(), dataContext.getOpenActivityId()); + + } + return Optional.ofNullable(result); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenProgramAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenProgramAction.java new file mode 100644 index 0000000..6b31227 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenProgramAction.java @@ -0,0 +1,42 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoOpenProgramAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoOpenProgram"; + + public GotoOpenProgramAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + DataContext.PROPERTY_OPEN_PROGRAM, + (int) 'P', + t("observe.content.action.goto.open.program.short"), + t("observe.content.action.goto.open.program.tip"), + "navigation.fr.ird.observe.services.dto.referential.ProgramDto"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return dataContext.isOpenProgram(); + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + return Optional.of(navigation.getProgramNode(dataContext.getOpenProgramId())); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenRouteAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenRouteAction.java new file mode 100644 index 0000000..cc4a452 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenRouteAction.java @@ -0,0 +1,42 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoOpenRouteAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoOpenRouteAction"; + + public GotoOpenRouteAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + DataContext.PROPERTY_OPEN_ROUTE, + (int) 'R', + t("observe.content.action.goto.open.route.short"), + t("observe.content.action.goto.open.route.tip"), + "navigation.fr.ird.observe.services.dto.seine.RouteDto"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return dataContext.isOpenRoute(); + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + return Optional.of(navigation.getRouteNode(dataContext.getOpenProgramId(), dataContext.getOpenTripId(), dataContext.getOpenRouteId())); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenSetAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenSetAction.java new file mode 100644 index 0000000..9c4ae23 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenSetAction.java @@ -0,0 +1,59 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoOpenSetAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoOpenSetAction"; + + public GotoOpenSetAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + DataContext.PROPERTY_OPEN_SET, + (int) 'C', + t("observe.content.action.goto.open.set.short"), + t("observe.content.action.goto.open.set.tip"), + "navigation.fr.ird.observe.services.dto.SetDto"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return dataContext.isOpenSet(); + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + + NavigationTreeNodeSupport programNode = navigation.getProgramNode(dataContext.getOpenProgramId()); + NavigationTreeNodeSupport tripNode = navigation.getTripNode(programNode, dataContext.getOpenTripId()); + + if (dataContext.isOpenActivitySeine()) { + + NavigationTreeNodeSupport routeNode = navigation.getRouteNode(tripNode, dataContext.getOpenRouteId()); + NavigationTreeNodeSupport activitySeineNode = navigation.getActivitySeineNode(routeNode, dataContext.getOpenActivityId()); + return Optional.of(navigation.getSetSeineNode(activitySeineNode)); + + } else if (dataContext.isOpenActivityLongline()) { + + NavigationTreeNodeSupport activityLonglineNode = navigation.getActivityLonglineNode(tripNode, dataContext.getOpenActivityId()); + return Optional.of(navigation.getSetLonglineNode(activityLonglineNode)); + + } + + return Optional.empty(); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenTripAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenTripAction.java new file mode 100644 index 0000000..499c7b3 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoOpenTripAction.java @@ -0,0 +1,42 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoOpenTripAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoOpenTripAction"; + + public GotoOpenTripAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + DataContext.PROPERTY_OPEN_TRIP, + (int) 'M', + t("observe.content.action.goto.open.trip.short"), + t("observe.content.action.goto.open.trip.tip"), + "navigation.fr.ird.observe.services.dto.TripDto"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return dataContext.isOpenTrip(); + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + return Optional.of(navigation.getTripNode(dataContext.getOpenProgramId(), dataContext.getOpenTripId())); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoReferentialAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoReferentialAction.java new file mode 100644 index 0000000..f13b198 --- /dev/null +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/navigation/GotoReferentialAction.java @@ -0,0 +1,42 @@ +package fr.ird.observe.application.swing.ui.actions.menu.navigation; + +import fr.ird.observe.application.swing.db.DataContext; +import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; + +import java.util.Optional; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 02/12/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 6.0 + */ +public class GotoReferentialAction extends GotoActionSupport { + + public static final String ACTION_NAME = "GotoReferential"; + + public GotoReferentialAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + null, + (int) 'e', + t("observe.action.goto.referentiel.short"), + t("observe.action.goto.referentiel.tip"), + "navigation.referentiel"); + } + + @Override + protected boolean computeIsOpen(DataContext dataContext) { + return true; + } + + @Override + protected Optional<NavigationTreeNodeSupport> getNodeToSelect(NavigationTree navigation, DataContext dataContext) { + return Optional.of(navigation.getReferentialNode()); + } + +} diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ChangeStorageAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeStorageAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ChangeStorageAction.java index 4e9e16b..e727c9e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ChangeStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ChangeStorageAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java similarity index 94% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java index 87f26fa..90ab336 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/CloseStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/CloseStorageAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L @@ -25,6 +25,7 @@ package fr.ird.observe.application.swing.ui.actions; import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.ObserveMainUI; +import fr.ird.observe.application.swing.ui.actions.AbstractObserveAction; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ImportStorageFromFileAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ImportStorageFromFileAction.java similarity index 98% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ImportStorageFromFileAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ImportStorageFromFileAction.java index d4d9c08..e27081a 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ImportStorageFromFileAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ImportStorageFromFileAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java similarity index 95% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java index 5a88364..8284ce7 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ReloadStorageAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ReloadStorageAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L @@ -27,6 +27,7 @@ import fr.ird.observe.application.swing.configuration.ObserveSwingApplicationCon import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractObserveAction; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaH2; import fr.ird.observe.services.configuration.topia.ObserveDataSourceConfigurationTopiaPG; import jaxx.runtime.SwingUtil; @@ -80,7 +81,7 @@ public class ReloadStorageAction extends AbstractObserveAction { ui.setBusy(false); - String[] ids = ui.getNavigation().getSelectedIds(); + Object[] ids = ui.getNavigation().getSelectedIds(); try { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/SaveStorageToFileAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/SaveStorageToFileAction.java similarity index 95% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/SaveStorageToFileAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/SaveStorageToFileAction.java index b1f86b0..ecaafef 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/SaveStorageToFileAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/SaveStorageToFileAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L @@ -26,6 +26,7 @@ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.UIHelper; +import fr.ird.observe.application.swing.ui.actions.AbstractObserveAction; import fr.ird.observe.application.swing.ui.storage.StorageBackupUILauncher; import jaxx.runtime.SwingUtil; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowStorageInfoAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ShowStorageInfoAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowStorageInfoAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ShowStorageInfoAction.java index 91666e7..7155469 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/ShowStorageInfoAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/ShowStorageInfoAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartH2WebServerAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartH2WebServerAction.java similarity index 97% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartH2WebServerAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartH2WebServerAction.java index c31bee8..882c966 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartH2WebServerAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartH2WebServerAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartServerModeAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartServerModeAction.java similarity index 98% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartServerModeAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartServerModeAction.java index fdde95e..e8cfbd1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StartServerModeAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StartServerModeAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopH2WebServerAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopH2WebServerAction.java similarity index 93% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopH2WebServerAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopH2WebServerAction.java index 22e83fc..e726743 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopH2WebServerAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopH2WebServerAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L @@ -61,6 +61,12 @@ public class StopH2WebServerAction extends AbstractAction { @Override public void actionPerformed(ActionEvent e) { + launchStopH2WebServer(ui); + + } + + public static void launchStopH2WebServer(ObserveMainUI ui) { + if (ui.isH2WebServer()) { if (log.isInfoEnabled()) { log.info("Will stop web server mode..."); @@ -78,5 +84,4 @@ public class StopH2WebServerAction extends AbstractAction { } } - } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopServerModeAction.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopServerModeAction.java similarity index 77% rename from application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopServerModeAction.java rename to application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopServerModeAction.java index 15eda1c..d657858 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/StopServerModeAction.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/actions/menu/storage/StopServerModeAction.java @@ -1,4 +1,4 @@ -package fr.ird.observe.application.swing.ui.actions; +package fr.ird.observe.application.swing.ui.actions.menu.storage; /* * #%L @@ -76,30 +76,9 @@ public class StopServerModeAction extends AbstractAction { if (ui.isH2WebServer()) { // stop also the h2 web server - launchStopH2WebServer(ui); + StopH2WebServerAction.launchStopH2WebServer(ui); } } - public void launchStopH2WebServer(ObserveMainUI ui) { - - if (ui.isH2WebServer()) { - if (log.isInfoEnabled()) { - log.info("Will stop web server mode..."); - } - - Server server = ObserveSwingApplicationContext.get().getH2WebServer(); - if (server != null) { - server.stop(); - } - ui.setH2WebServer(false); - } else { - if (log.isWarnEnabled()) { - log.warn("Can not stop h2 web server... (no web server found)"); - } - } - - } - - } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/config/ConfigUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/config/ConfigUIHandler.java index 287c22f..4089507 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/config/ConfigUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/admin/config/ConfigUIHandler.java @@ -124,7 +124,7 @@ public class ConfigUIHandler extends AdminTabUIHandler<ConfigUI> implements UIHa if (valid) { ObserveDataSourceInformation dataSourceInformation = sourceModel.getDataSourceInformation(); - if (dataSourceInformation != null) { + if (dataSourceInformation != null && dataSourceInformation.getVersion() != null) { ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveTextGenerator textGenerator = applicationContext.getTextGenerator(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx index e2b53e0..2f819ae 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUI.jaxx @@ -38,8 +38,8 @@ fr.ird.observe.application.swing.db.DataContext fr.ird.observe.application.swing.db.ObserveSwingDataSource fr.ird.observe.application.swing.configuration.ObserveSwingApplicationConfig - fr.ird.observe.application.swing.ui.actions.shared.GoUpUIAction - fr.ird.observe.application.swing.ui.actions.shared.GoDownUIAction + fr.ird.observe.application.swing.ui.actions.content.GoUpUIAction + fr.ird.observe.application.swing.ui.actions.content.GoDownUIAction fr.ird.observe.services.dto.IdDto diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java index 5ad8b04..18614d1 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIBlockingLayerUI.java @@ -23,7 +23,7 @@ package fr.ird.observe.application.swing.ui.content; */ import com.google.common.collect.ImmutableSet; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import jaxx.runtime.swing.BlockingLayerUI; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java index ba66cbf..5bbf1b9 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ContentUIHandler.java @@ -35,7 +35,7 @@ import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; import fr.ird.observe.application.swing.decoration.decorators.ReferentialReferenceDecorator; import fr.ird.observe.application.swing.ui.UIHelper; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import fr.ird.observe.application.swing.ui.content.ref.ContentReferenceUIHandler; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTree; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; 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 4a3360d..b135e5e 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 @@ -31,7 +31,7 @@ import fr.ird.observe.application.swing.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.application.swing.decoration.decorators.DataReferenceDecorator; import fr.ird.observe.application.swing.decoration.decorators.ReferentialReferenceDecorator; import fr.ird.observe.application.swing.ui.MnemonicHelper; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import fr.ird.observe.application.swing.ui.util.BooleanEditor; import fr.ird.observe.application.swing.ui.util.tripMap.ObserveMapPane; import fr.ird.observe.application.swing.validation.ObserveSwingValidator; diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java index baa3a2b..5737957 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/ObserveActionMap.java @@ -26,7 +26,7 @@ import com.google.common.collect.ImmutableMap; import fr.ird.observe.application.swing.ObserveSwingTechnicalException; import fr.ird.observe.application.swing.ui.ObserveMainUI; import fr.ird.observe.application.swing.ui.actions.global.AbstractGlobalUIAction; -import fr.ird.observe.application.swing.ui.actions.shared.AbstractUIAction; +import fr.ird.observe.application.swing.ui.actions.AbstractUIAction; import org.apache.commons.beanutils.ConstructorUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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 9b1c48a..0f51db3 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 @@ -27,7 +27,8 @@ fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport fr.ird.observe.services.dto.IdDto fr.ird.observe.services.dto.DataDto @@ -74,6 +75,10 @@ public final List<DataReference<C>> getSelectedDatas() { return (List<DataReference<C>>) list.getSelectedValuesList(); } +public NavigationTreeNodeSupport<?> getOpenNode() { + return getHandler().getOpenNode(); +} + ]]></script> <JPanel id='body'> 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 94c17d6..c2b79f2 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.actions.shared.SelectNodeUIAction; 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.tree.navigation.NavigationTree; @@ -38,7 +37,6 @@ import org.apache.commons.logging.LogFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.Icon; -import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; @@ -161,6 +159,9 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U SwingUtilities.invokeLater(() -> { getUi().getListSelectionModel().clearSelection(); + if (!getModel().isEmpty()) { + getUi().getListSelectionModel().setSelectionInterval(0, 0); + } }); // finalize openUI with specified code @@ -187,6 +188,8 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U protected abstract boolean computeCanClose(); + public abstract NavigationTreeNodeSupport<?> getOpenNode(); + @Override protected void updateToolbarActions() { super.updateToolbarActions(); @@ -204,24 +207,11 @@ public abstract class ContentListUIHandler<E extends IdDto, C extends DataDto, U * @param event the mouse event fired */ void onDataSelected(MouseEvent event) { - DataReference<C> selectedData = getUi().getSelectedData(); if (event.getClickCount() > 1) { - gotoChild(selectedData); - return; - } - NavigationTreeNodeSupport node = null; - if (selectedData != null) { - - // obtain the node corresponding to the selected data - String id = selectedData.getId(); - NavigationTree helper = getTreeHelper(getUi()); - NavigationTreeNodeSupport selectedNode = helper.getSelectedNode(); - node = helper.getChild(selectedNode, id); + if (getModel().isOneSelectedData()) { + gotoChild(getUi().getSelectedData()); + } } - - // attach the node to action - JButton button = getUi().getGotoSelected(); - button.putClientProperty(SelectNodeUIAction.NODE, node); } <EE> List<EE> updateList(BeanListHeader<EE> list, List<EE> data) { diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java index 622abab..822f9d5 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/ContentListUIModel.java @@ -55,7 +55,6 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext public static final String PROPERTYCAN_GOTO_OPEN = "canGotoOpen"; public static final String PROPERTY_CAN_CLOSE = "canClose"; public static final String PROPERTY_CAN_CREATE = "canCreate"; - public static final String PROPERTY_CAN_DELETE = "canDelete"; public static final String PROPERTY_CAN_MOVE = "canMove"; @@ -73,7 +72,6 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext private boolean canGotoOpen; private boolean canClose; private boolean canCreate; - private boolean canDelete; private boolean canMove; public ContentListUIModel(Class<E> beanType, Class<C> childType) { @@ -98,25 +96,19 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext setSelectedDatas(null); } - public DataReference<C> getSelectedData() { - return CollectionUtils.isNotEmpty(selectedDatas) ? selectedDatas.get(0) : null; - } - public List<DataReference<C>> getSelectedDatas() { return selectedDatas; } public void setSelectedDatas(List<DataReference<C>> selectedDatas) { - boolean oldOneSelectedData = isOneSelectedData(); - boolean oldOneOrMoreSelectedData = isOneOrMoreSelectedData(); List<DataReference<C>> old = getSelectedDatas(); this.selectedDatas = selectedDatas; if (log.isDebugEnabled()) { log.debug("New selected datas : " + selectedDatas); } firePropertyChange(PROPERTY_SELECTED_DATAS, old, selectedDatas); - firePropertyChange(PROPERTY_ONE_SELECTED_DATA, null, isOneSelectedData()); - firePropertyChange(PROPERTY_ONE_OR_MORE_SELECTED_DATA, null, isOneOrMoreSelectedData()); + firePropertyChange(PROPERTY_ONE_SELECTED_DATA, isOneSelectedData()); + firePropertyChange(PROPERTY_ONE_OR_MORE_SELECTED_DATA, isOneOrMoreSelectedData()); } public boolean isOneSelectedData() { @@ -132,7 +124,6 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext } public void setCanReopen(boolean canReopen) { - boolean old = isCanReopen(); this.canReopen = canReopen; firePropertyChange(PROPERTY_CAN_REOPEN, canReopen); } @@ -178,15 +169,6 @@ public abstract class ContentListUIModel<E extends IdDto, C extends DataDto> ext firePropertyChange(PROPERTY_CAN_CREATE, canCreate); } - public boolean isCanDelete() { - return canDelete; - } - - public void setCanDelete(boolean canDelete) { - this.canDelete = canDelete; - firePropertyChange(PROPERTY_CAN_DELETE, canDelete); - } - public boolean isCanMove() { return canMove; } 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 382c8c4..38aa3ee 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 @@ -34,8 +34,8 @@ fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction fr.ird.observe.application.swing.ui.actions.content.MoveActivityLonglinesUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectOpenNodeUIAction static org.nuiton.i18n.I18n.n static org.nuiton.i18n.I18n.t diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss index 7e61ef6..8c834db 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/ActivityLonglinesUI.jcss @@ -26,7 +26,6 @@ } #gotoOpen { - _type:{ActivityLonglineDto.class}; _text:{t("observe.content.action.goto.open.activity")}; _toolTipText:{t("observe.content.action.goto.open.activity.tip")}; } 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 773f5f1..a5e513b 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 @@ -27,6 +27,8 @@ 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.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.longline.TripLonglineDto; @@ -69,6 +71,13 @@ public class ActivityLonglinesUIHandler extends ContentListUIHandler<TripLonglin } @Override + public NavigationTreeNodeSupport<?> getOpenNode() { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + NavigationTree treeHelper = getTreeHelper(ui); + return treeHelper.getActivityLonglineNode(dataContext.getOpenProgramId(), dataContext.getOpenTripLonglineId(), dataContext.getOpenActivityLonglineId()); + } + + @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 2528813..1a32450 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 @@ -30,8 +30,8 @@ fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectOpenNodeUIAction fr.ird.observe.application.swing.ui.actions.content.MoveTripLonglinesUIAction static org.nuiton.i18n.I18n.n diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss index 573c2db..cea6053 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/longline/TripLonglinesUI.jcss @@ -26,7 +26,6 @@ } #gotoOpen { - _type:{TripLonglineDto.class}; _text:{t("observe.content.action.goto.open.maree")}; _toolTipText:{t("observe.content.action.goto.open.trip.tip")}; } 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 437a7fe..a559283 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 @@ -28,6 +28,7 @@ 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.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.ProgramLonglineNavigationTreeNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.longline.TripLonglineDto; @@ -126,5 +127,12 @@ public class TripLonglinesUIHandler extends ContentListUIHandler<ProgramDto, Tri return computeCanGotoOpen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenActivityLongline(); } + @Override + public NavigationTreeNodeSupport<?> getOpenNode() { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + NavigationTree treeHelper = getTreeHelper(ui); + return treeHelper.getTripNode(dataContext.getOpenProgramId(), dataContext.getOpenTripLonglineId()); + } + } 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 435d66d..0d6175b 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 @@ -32,8 +32,8 @@ fr.ird.observe.application.swing.ui.actions.content.CloseOpenUIAction fr.ird.observe.application.swing.ui.actions.content.MoveActivitySeinesUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectOpenNodeUIAction static org.nuiton.i18n.I18n.n static org.nuiton.i18n.I18n.t diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jcss index d700602..e617a30 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/ActivitySeinesUI.jcss @@ -26,7 +26,6 @@ } #gotoOpen { - _type:{ActivitySeineDto.class}; _text:{t("observe.content.action.goto.open.activity")}; _toolTipText:{t("observe.content.action.goto.open.activity.tip")}; } 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 ca536e9..376613a 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 @@ -26,6 +26,8 @@ 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.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.longline.ActivityLonglineDto; import fr.ird.observe.services.dto.seine.ActivitySeineDto; @@ -67,6 +69,13 @@ public class ActivitySeinesUIHandler extends ContentListUIHandler<RouteDto, Acti } @Override + public NavigationTreeNodeSupport<?> getOpenNode() { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + NavigationTree treeHelper = getTreeHelper(ui); + return treeHelper.getActivitySeineNode(dataContext.getOpenProgramId(), dataContext.getOpenTripSeineId(), dataContext.getOpenRouteId(), dataContext.getOpenActivitySeineId()); + } + + @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 34a76e6..ea484c9 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 @@ -33,8 +33,8 @@ fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction fr.ird.observe.application.swing.ui.actions.content.MoveRoutesUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectOpenNodeUIAction static org.nuiton.i18n.I18n.n static org.nuiton.i18n.I18n.t diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jcss index 636e69c..3de5790 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/RoutesUI.jcss @@ -26,7 +26,6 @@ } #gotoOpen { - _type:{RouteDto.class}; _text:{t("observe.content.action.goto.open.route")}; _toolTipText:{t("observe.content.action.goto.open.route.tip")}; } 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 baeaf6e..42284ec 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 @@ -26,6 +26,8 @@ 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.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.seine.RouteDto; import fr.ird.observe.services.dto.seine.TripSeineDto; @@ -71,6 +73,13 @@ public class RoutesUIHandler extends ContentListUIHandler<TripSeineDto, RouteDto } @Override + public NavigationTreeNodeSupport<?> getOpenNode() { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + NavigationTree treeHelper = getTreeHelper(ui); + return treeHelper.getRouteNode(dataContext.getOpenProgramId(), dataContext.getOpenTripSeineId(), dataContext.getOpenRouteId()); + } + + @Override protected ContentMode getContentMode(DataContext dataContext) { // autorisé à écrire 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 5f2cdee..4764967 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 @@ -32,8 +32,8 @@ fr.ird.observe.application.swing.ui.actions.content.CreateOpenUIAction fr.ird.observe.application.swing.ui.actions.content.MoveTripSeinesUIAction fr.ird.observe.application.swing.ui.actions.content.ReOpenUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectNodeUIAction - fr.ird.observe.application.swing.ui.actions.shared.SelectOpenNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction + fr.ird.observe.application.swing.ui.actions.content.SelectOpenNodeUIAction static org.nuiton.i18n.I18n.n static org.nuiton.i18n.I18n.t diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jcss index 286faa4..a986912 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/list/impl/seine/TripSeinesUI.jcss @@ -26,7 +26,6 @@ } #gotoOpen { - _type:{TripSeineDto.class}; _text:{t("observe.content.action.goto.open.maree")}; _toolTipText:{t("observe.content.action.goto.open.trip.tip")}; } 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 743a93b..5440750 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 @@ -27,6 +27,7 @@ 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.application.swing.ui.tree.navigation.NavigationTree; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode; import fr.ird.observe.services.dto.DataReference; import fr.ird.observe.services.dto.referential.ProgramDto; @@ -114,4 +115,11 @@ public class TripSeinesUIHandler extends ContentListUIHandler<ProgramDto, TripSe return computeCanGotoOpen() && !ObserveSwingApplicationContext.get().getDataContext().isOpenRoute(); } + @Override + public NavigationTreeNodeSupport<?> getOpenNode() { + DataContext dataContext = ObserveSwingApplicationContext.get().getDataContext(); + NavigationTree treeHelper = getTreeHelper(ui); + return treeHelper.getTripNode(dataContext.getOpenProgramId(), dataContext.getOpenTripSeineId()); + } + } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jcss b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jcss index 05ca7ee..c4e9296 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jcss +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/content/table/ContentTableUI.jcss @@ -124,7 +124,7 @@ } #up { - _observeAction:{fr.ird.observe.application.swing.ui.actions.shared.GoUpUIAction.ACTION_NAME}; + _observeAction:{fr.ird.observe.application.swing.ui.actions.content.GoUpUIAction.ACTION_NAME}; visible:{!model.isCreatingMode()}; } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java index e1642d1..51c59e8 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTree.java @@ -27,14 +27,18 @@ import fr.ird.observe.application.swing.db.DataContext; import fr.ird.observe.application.swing.db.ObserveSwingDataSource; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.RootNavigationTreeNode; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.ActivitiesLonglineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.ActivityLonglineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.ProgramLonglineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.SetLonglineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.longline.TripLonglineNavigationTreeNode; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.referential.ReferentialsNavigationTreeNode; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.ActivitiesSeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.ActivitySeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.FloatingObjectSeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.RouteSeineNavigationTreeNode; +import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.RoutesSeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.SetSeineNavigationTreeNode; import fr.ird.observe.application.swing.ui.tree.navigation.nodes.seine.TripSeineNavigationTreeNode; import fr.ird.observe.services.dto.DataReference; @@ -64,7 +68,6 @@ import javax.swing.tree.ExpandVetoException; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import java.util.List; @@ -152,53 +155,14 @@ public class NavigationTree extends JXTree { return isSelectionEmpty() ? null : (NavigationTreeNodeSupport) getSelectionPath().getLastPathComponent(); } - public void selectOpenNode(Class<?> type) { - - DataContext context = ObserveSwingApplicationContext.get().getDataContext(); - - String[] ids = context.getOpenIds(type); - - if (log.isDebugEnabled()) { - log.debug("using open ids = " + Arrays.toString(ids)); - } - if (ids == null) { - - // rien n'est ouvert, rien à selectionner - return; - } - - selectNode(ids); - } - - /** - * Selects the node described by his given {@code path} of ids. - * - * @param path the absolute path of ids from root node to node to select. - */ - public void selectNode(String... path) { - - if (log.isDebugEnabled()) { - log.debug("try to select node from ids " + Arrays.toString(path)); - } - RootNavigationTreeNode root = this.getTreeModel().getRoot(); - NavigationTreeNodeSupport node = getTreeModel().findNode(root, path); - if (log.isDebugEnabled()) { - log.debug("selected node [" + node + "]"); - } - if (node != null) { - selectNode(node); - } - } - - /** * Selects the given {@code node} in the registred tree. * * @param node the node to select */ public void selectNode(NavigationTreeNodeSupport node) { - if (log.isDebugEnabled()) { - log.debug("try to select node [" + node + "]"); + if (log.isInfoEnabled()) { + log.info("try to select node [" + node + "]"); } TreePath path = new TreePath(getTreeModel().getPathToRoot(node)); @@ -207,7 +171,7 @@ public class NavigationTree extends JXTree { } public NavigationTreeNodeSupport getChild(NavigationTreeNodeSupport node, String id) { - return node.getChild(getTreeModel(), id); + return node.findChildById(getTreeModel(), id); } public void removeNode(NavigationTreeNodeSupport node) { @@ -235,60 +199,97 @@ public class NavigationTree extends JXTree { } DataContext context = ObserveSwingApplicationContext.get().getDataContext(); - String[] path; - - List<String> selectedIds = ObserveSwingApplicationContext.get().getNodesToReselect(); + List<Object> selectedIds = ObserveSwingApplicationContext.get().getNodesToReselect(); if (CollectionUtils.isNotEmpty(selectedIds)) { if (log.isDebugEnabled()) { log.debug("will select previous ids " + selectedIds); } - path = selectedIds.toArray(new String[selectedIds.size()]); + + NavigationTreeNodeSupport selectedNode = getTreeModel().findNode(getRootNode(), selectedIds); + + if (selectedNode != null) { + + + if (log.isInfoEnabled()) { + log.info("Selected node: " + selectedNode); + } + + try { + + selectNode(selectedNode); + } finally { + + // nettoyage du context + ObserveSwingApplicationContext.get().setNodesToReselect(null); + } + } + } else { // on trouve le meilleur noeud a selectionner. String id = context.getHigherOpenId(); + NavigationTreeNodeSupport selectedNode = null; if (id != null) { // on se positionne sur la donnée la plus haute ouverte - path = context.getOpenIds(); - if (log.isDebugEnabled()) { - log.debug("will select open ids " + Arrays.toString(path)); - } - } else { + if (context.isOpenTrip()) { + + NavigationTreeNodeSupport tripNode = getTripNode(context.getOpenProgramId(), context.getOpenTripId()); + selectedNode = tripNode; + + if (context.isOpenRoute()) { + + NavigationTreeNodeSupport routeNode = getRouteNode(tripNode, context.getOpenRouteId()); + selectedNode = routeNode; + if (context.isOpenActivity()) { + + NavigationTreeNodeSupport activitySeineNode = getActivitySeineNode(routeNode, context.getOpenActivityId()); + selectedNode = activitySeineNode; + if (context.isOpenSet()) { + selectedNode = getSetSeineNode(activitySeineNode); + + } + } + } + + if (context.isOpenActivityLongline()) { - // on selectionne le premier noeud de $root + NavigationTreeNodeSupport activityLonglineNode = getActivityLonglineNode(tripNode, context.getOpenActivityId()); + selectedNode = activityLonglineNode; + if (context.isOpenSet()) { + selectedNode = getSetLonglineNode(activityLonglineNode); - NavigationTreeNodeSupport node = getTreeModel().getRoot(); - if (!node.isLeaf()) { - node = (NavigationTreeNodeSupport) node.getFirstChild(); + } + } } - path = new String[]{node.getId()}; - if (log.isDebugEnabled()) { - log.debug("will select first program " + Arrays.toString(path)); + + } else { + selectedNode = getTreeModel().getRoot(); + if (!selectedNode.isLeaf()) { + selectedNode = (NavigationTreeNodeSupport) selectedNode.getFirstChild(); } + } - } - if (log.isDebugEnabled()) { - log.debug("Selected path : " + Arrays.toString(path)); - } - try { + if (selectedNode != null) { - selectNode(path); - } finally { + if (log.isInfoEnabled()) { + log.info("will selected open node: " + selectedNode); + } + + selectNode(selectedNode); + } - // nettoyage du context - ObserveSwingApplicationContext.get().setNodesToReselect(null); } // navigation tree should acquire focus SwingUtilities.invokeLater(this::grabFocus); } - public void reloadNodeSubTree(NavigationTreeNodeSupport node, boolean expandNode) { + public void reloadNodeSubTree(NavigationTreeNodeSupport node) { Objects.requireNonNull(node, "node is null, we can not reload its structure"); // 1. Let's clear node structure @@ -300,13 +301,9 @@ public class NavigationTree extends JXTree { node.reload(); node.populateChilds(getTreeModel()); + // Fix bug (if no child in parent node, it will not expand...) + fireTreeExpanded(new TreePath(node.getPath())); - if (expandNode) { - - // Fix bug (if no child in parent node, it will not expand...) - fireTreeExpanded(new TreePath(node.getPath())); - - } } public void reloadNode(NavigationTreeNodeSupport<?> node, boolean deep) { @@ -326,25 +323,23 @@ public class NavigationTree extends JXTree { } - /** - * Obtains the path of ids fro the root node to the selected node on the - * registred tree. - * - * @return the array of ids from root node to selected node. - */ - public String[] getSelectedIds() { - List<String> result = new ArrayList<>(); + public Object[] getSelectedIds() { + List<Object> result = new ArrayList<>(); NavigationTreeNodeSupport selectedNode = getSelectedNode(); while (selectedNode != null && !selectedNode.isRoot()) { - result.add(selectedNode.getId()); + String id = selectedNode.getId(); + if (id == null) { + result.add(selectedNode.getClass()); + } else { + result.add(id); + } selectedNode = selectedNode.getParent(); } Collections.reverse(result); - return result.toArray(new String[result.size()]); + return result.toArray(); } - public void reloadSelectedNode(boolean refreshFromParent, boolean refreshChilds) { NavigationTreeNodeSupport node = getSelectedNode(); node.setLoaded(false); @@ -544,4 +539,60 @@ public class NavigationTree extends JXTree { getTreeModel().nodeStructureChanged(parentNode); } + + public NavigationTreeNodeSupport getReferentialNode() { + RootNavigationTreeNode root = getTreeModel().getRoot(); + return getTreeModel().findNodeByType(root, ReferentialsNavigationTreeNode.class); + } + + public NavigationTreeNodeSupport getProgramNode(String programId) { + RootNavigationTreeNode root = getTreeModel().getRoot(); + return getTreeModel().findNode(root, programId); + } + + public NavigationTreeNodeSupport getTripNode(String programId, String tripId) { + return getTreeModel().findNode(getProgramNode(programId), tripId); + } + + public NavigationTreeNodeSupport getTripNode(NavigationTreeNodeSupport programNode, String tripId) { + return getTreeModel().findNode(programNode, tripId); + } + + public NavigationTreeNodeSupport getRouteNode(NavigationTreeNodeSupport tripNode, String routeId) { + NavigationTreeNodeSupport routesNode = getTreeModel().findNodeByType(tripNode, RoutesSeineNavigationTreeNode.class); + return getTreeModel().findNode(routesNode, routeId); + } + + public NavigationTreeNodeSupport getActivityLonglineNode(NavigationTreeNodeSupport tripNode, String activityId) { + NavigationTreeNodeSupport activitiesNode = getTreeModel().findNodeByType(tripNode, ActivitiesLonglineNavigationTreeNode.class); + return getTreeModel().findNode(activitiesNode, activityId); + } + + public NavigationTreeNodeSupport getActivitySeineNode(NavigationTreeNodeSupport routeNode, String activityId) { + NavigationTreeNodeSupport activitiesNode = getTreeModel().findNodeByType(routeNode, ActivitiesSeineNavigationTreeNode.class); + return getTreeModel().findNode(activitiesNode, activityId); + } + + public NavigationTreeNodeSupport getSetSeineNode(NavigationTreeNodeSupport activitySeineNode) { + return getTreeModel().findNodeByType(activitySeineNode, SetSeineNavigationTreeNode.class); + } + + public NavigationTreeNodeSupport getSetLonglineNode(NavigationTreeNodeSupport activityLonglineNode) { + return getTreeModel().findNodeByType(activityLonglineNode, SetLonglineNavigationTreeNode.class); + } + + public NavigationTreeNodeSupport<?> getRouteNode(String programId, String tripSeineId, String routeId) { + NavigationTreeNodeSupport tripNode = getTripNode(programId, tripSeineId); + return getRouteNode(tripNode, routeId); + } + + public NavigationTreeNodeSupport<?> getActivityLonglineNode(String programId, String tripLonglineId, String activityLonglineId) { + NavigationTreeNodeSupport tripNode = getTripNode(programId, tripLonglineId); + return getActivityLonglineNode(tripNode, activityLonglineId); + } + + public NavigationTreeNodeSupport<?> getActivitySeineNode(String programId, String tripSeineId, String routeId, String activitySeineId) { + NavigationTreeNodeSupport routeNode = getRouteNode(programId, tripSeineId, routeId); + return getActivitySeineNode(routeNode, activitySeineId); + } } diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java index a0b510d..c0feaba 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/NavigationTreeModel.java @@ -67,12 +67,16 @@ public class NavigationTreeModel extends DefaultTreeModel { super(new RootNavigationTreeNode()); } - public NavigationTreeNodeSupport findNode(NavigationTreeNodeSupport node, String... ids) { - NavigationTreeNodeSupport result = null; - for (String id : ids) { + public NavigationTreeNodeSupport<?> findNode(NavigationTreeNodeSupport<?> node, Object... ids) { + NavigationTreeNodeSupport<?> result = null; + for (Object id : ids) { - result = node.getChild(this, id); + if (id instanceof String) { + result = node.findChildById(this, (String) id); + } else if (id instanceof Class) { + result = node.findChildByType(this, (Class) id); + } if (result == null) { // un des noeud n'a pas ete trouve, on sortReferential @@ -83,6 +87,10 @@ public class NavigationTreeModel extends DefaultTreeModel { return result; } + public NavigationTreeNodeSupport<?> findNodeByType(NavigationTreeNodeSupport<?> node, Class<?> nodeType) { + return node.findChildByType(this, nodeType); + } + public void populate() { NavigationService navigationService = ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider().newNavigationService(); diff --git a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java index cd8d6de..c72a72e 100644 --- a/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java +++ b/application-swing/src/main/java/fr/ird/observe/application/swing/ui/tree/navigation/nodes/NavigationTreeNodeSupport.java @@ -23,12 +23,20 @@ package fr.ird.observe.application.swing.ui.tree.navigation.nodes; */ import fr.ird.observe.application.swing.ObserveSwingApplicationContext; +import fr.ird.observe.application.swing.ui.MnemonicHelper; +import fr.ird.observe.application.swing.ui.actions.content.SelectNodeUIAction; import fr.ird.observe.application.swing.ui.content.ContentUI; import fr.ird.observe.application.swing.ui.tree.ObserveTreeNodeSupport; import fr.ird.observe.application.swing.ui.tree.navigation.NavigationTreeModel; import fr.ird.observe.services.ObserveServicesProvider; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import javax.swing.AbstractAction; +import javax.swing.JMenuItem; +import javax.swing.KeyStroke; import java.awt.Color; +import java.awt.event.ActionEvent; import java.util.Enumeration; /** @@ -89,7 +97,7 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor return ObserveSwingApplicationContext.get().getMainDataSourceServicesProvider(); } - public NavigationTreeNodeSupport getChild(NavigationTreeModel treeModel, String id) { + public NavigationTreeNodeSupport findChildById(NavigationTreeModel treeModel, String id) { if (id == null) { // id null ? donc rien a faire @@ -123,6 +131,36 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor return null; } + public NavigationTreeNodeSupport findChildByType(NavigationTreeModel treeModel, Class<?> childType) { + + if (childType.isAssignableFrom(getClass())) { + + // on a trouve le bon noeud + return this; + } + + if (!isLoaded()) { + + // il faut charger les fils du noeud pour effectuer la recherche + populateChilds(treeModel); + } + + if (isLeaf()) { + + // au final le noeud est une feuille, donc ne convient pas + return null; + } + Enumeration<NavigationTreeNodeSupport> children = children(); + while (children.hasMoreElements()) { + NavigationTreeNodeSupport node = children.nextElement(); + if (childType.isAssignableFrom(node.getClass())) { + return node; + } + } + + return null; + } + @Override public boolean isLeaf() { return isLoaded() && super.isLeaf(); @@ -136,4 +174,32 @@ public abstract class NavigationTreeNodeSupport<O> extends ObserveTreeNodeSuppor public Color getColor() { return isOpen() ? Color.BLACK : Color.GRAY; } + + /** Logger */ + private static final Log log = LogFactory.getLog(NavigationTreeNodeSupport.class); + + public JMenuItem toMenuItem(SelectNodeUIAction action, ContentUI<?, ?> ui) { + + JMenuItem mi = new JMenuItem(); + AbstractAction a = new AbstractAction() { + + @Override + public void actionPerformed(ActionEvent e) { + if (log.isInfoEnabled()) { + log.info("Select action from menuItem: " + e.getSource()); + } + action.actionPerformed(mi); + } + }; + mi.setAction(a); + mi.setText(getText().trim()); + MnemonicHelper.addKeyStroke(mi, KeyStroke.getKeyStroke("pressed ENTER")); + mi.setIcon(getIcon("-16")); + mi.setForeground(getColor()); + mi.setBackground(Color.WHITE); + mi.putClientProperty("node", this); + mi.putClientProperty("ui", ui); + return mi; + } + } diff --git a/services-configuration/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java b/services-configuration/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java index 03316c2..4eea1e5 100644 --- a/services-configuration/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java +++ b/services-configuration/src/main/java/fr/ird/observe/services/configuration/ObserveDataSourceInformation.java @@ -38,18 +38,18 @@ public class ObserveDataSourceInformation { protected final boolean writeData; - protected final Version minnimumVersion; + protected final Version minimumVersion; protected final Version version; protected final ImmutableList<Version> migrations; - public ObserveDataSourceInformation(boolean readReferential, boolean writeReferential, boolean readData, boolean writeData, Version minnimumVersion, Version version, ImmutableList<Version> migrations) { + public ObserveDataSourceInformation(boolean readReferential, boolean writeReferential, boolean readData, boolean writeData, Version minimumVersion, Version version, ImmutableList<Version> migrations) { this.readReferential = readReferential; this.writeReferential = writeReferential; this.readData = readData; this.writeData = writeData; - this.minnimumVersion = minnimumVersion; + this.minimumVersion = minimumVersion; this.version = version; this.migrations = migrations; } @@ -70,12 +70,12 @@ public class ObserveDataSourceInformation { return writeData; } - public Version getMinnimumVersion() { - return minnimumVersion; + public Version getMinimumVersion() { + return minimumVersion; } public Version getVersion() { - return version; + return version == null ? Version.VZERO : version; } public ImmutableList<Version> getMigrations() { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.