mailman.cloud.codelutin.com
Sign In Sign Up
Manage this list Sign In Sign Up

Keyboard Shortcuts

Thread View

  • j: Next unread message
  • k: Previous unread message
  • j a: Jump to all threads
  • j l: Jump to MailingList overview

Observe-commits

Thread Start a new thread
Download
Threads by month
  • ----- 2026 -----
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2025 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2024 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2023 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2022 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2021 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2020 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2019 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2018 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2017 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2016 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2015 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2014 -----
  • December
  • November
  • October
  • September
  • August
  • July
  • June
  • May
  • April
  • March
  • February
  • January
  • ----- 2013 -----
  • December
  • November
  • October
  • September
observe-commits@list.forge.codelutin.com

  • 7199 discussions
[Git][ultreiaio/ird-observe][develop] Fix navigation tree scrollPane and his jaxx design
by Tony CHEMIT 05 Apr '18

05 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 4d78fa47 by Tony CHEMIT at 2018-04-05T21:21:34Z Fix navigation tree scrollPane and his jaxx design - - - - - 21 changed files: - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/GoDownUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/GoUpUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveMultipleDataUIActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/main/global/ChangeFocusGlobalUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/navigation/GotoActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/storage/ReloadStorageAction.java - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java Changes: ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx @@ -78,9 +78,6 @@ fr.ird.observe.client.ui.content.ContentUIManager fr.ird.observe.client.ui.content.ObserveActionMap fr.ird.observe.client.ui.tree.navigation.NavigationUI - fr.ird.observe.client.ui.tree.navigation.NavigationTree - fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel - fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel fr.ird.observe.client.ui.util.UIHelper fr.ird.observe.client.ui.util.ObserveBlockingLayerUI @@ -255,7 +252,6 @@ protected void finalize() throws Throwable { <JXTitledPanel id='navigationView'> <NavigationUI id="navigationUI" initializer="new NavigationUI((JAXXContext)this)"/> - <NavigationTree id="navigation" initializer="navigationUI.getTree()"/> </JXTitledPanel> <!-- right : (content + messages) --> ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java @@ -153,7 +153,7 @@ public class ObserveMainUIInitializer { // set fullscreen propery on main ui ui.getGraphicsConfiguration().getDevice().setFullScreenWindow(config.isFullScreen() ? ui : null); - new ObserveNavigationTreeShowPopupAction(ui.getNavigation(), ui.getNavigationUI(), ui.getNavigationPopup()); + new ObserveNavigationTreeShowPopupAction(ui.getNavigationUI().getTree(), ui.getNavigationUI(), ui.getNavigationPopup()); return ui; } @@ -180,7 +180,7 @@ public class ObserveMainUIInitializer { log.debug("No open Data source."); return; } - if (ui.getNavigation().isSelectionEmpty()) { + if (ui.getNavigationUI().getTree().isSelectionEmpty()) { log.debug("No selection, show empty panel..."); boolean foundEmptySelection = false; @@ -260,12 +260,12 @@ public class ObserveMainUIInitializer { JComponent focusOwner; if (ui.getFocusOwner() == ui) { focusOnNavigation = true; - focusOwner = ui.getNavigation(); + focusOwner = ui.getNavigationUI().getTree(); } else { focusOwner = (JComponent) ui.getFocusOwner(); if (focusOwner != null) { - if (ui.getNavigation().equals(focusOwner)) { + if (ui.getNavigationUI().getTree().equals(focusOwner)) { focusOnNavigation = true; } if (ui.getNavigationUI().equals(focusOwner)) { @@ -277,7 +277,7 @@ public class ObserveMainUIInitializer { if (!focusOnNavigation) { Container focusOwnerParent = focusOwner.getParent(); while (focusOwnerParent != null) { - if (ui.getNavigation().equals(focusOwnerParent)) { + if (ui.getNavigationUI().getTree().equals(focusOwnerParent)) { focusOnNavigation = true; break; } @@ -337,7 +337,7 @@ public class ObserveMainUIInitializer { oldMode = ui.getModel().getMode(); - ids = ui.getNavigation().getSelectedIds(); + ids = ui.getNavigationUI().getTree().getSelectedIds(); ErrorDialogUI.init(null); @@ -368,7 +368,7 @@ public class ObserveMainUIInitializer { if (oldMode == ObserveUIMode.DB) { // on met à jour le modèle de navigation - NavigationTreeModel treeModel = ui.getNavigation().getTreeModel(); + NavigationTreeModel treeModel = ui.getNavigationUI().getTree().getTreeModel(); treeModel.load(config); treeModel.populate(); @@ -378,7 +378,7 @@ public class ObserveMainUIInitializer { // selection du noeud d'ouverture (le noeud precedemment selectionne, // ou le noeud le plus ouvert // ou le premier program si aucune donnée ouverte) - ui.getNavigation().selectInitialNode(); + ui.getNavigationUI().getTree().selectInitialNode(); } // show ui @@ -405,7 +405,7 @@ public class ObserveMainUIInitializer { // ajout d'un ecouteur sur la navigation pour toujours mettre la scrollbar // tout à droite a chaque selection - ui.getNavigation().addTreeSelectionListener(this::changeNavigationNode); + ui.getNavigationUI().getTree().addTreeSelectionListener(this::changeNavigationNode); SwingValidatorUtil.installUI(ui.getErrorTable(), new ObserveValidatorMessageTableRenderer()); @@ -433,12 +433,12 @@ public class ObserveMainUIInitializer { } }; ui.getNavigationView().addMouseListener(mouseAdapter); - ui.getNavigation().addMouseListener(mouseAdapter); + ui.getNavigationUI().getTree().addMouseListener(mouseAdapter); ui.getNavigationUI().addMouseListener(mouseAdapter); init(ui.getSplitpane()); init(ui.getSplitpane2()); - init(ui.getNavigation()); + init(ui.getNavigationUI().getTree()); ui.getNavigationView().setRightDecoration(ui.getNavigationUI().getToolbar()); // ui.getNavigationView().addComponentListener(new ComponentAdapter() { @@ -555,7 +555,7 @@ public class ObserveMainUIInitializer { ui.getContextValue(SwingValidatorMessageTableModel.class).clear(); // clean tree model - NavigationTree tree = ui.getNavigation(); + NavigationTree tree = ui.getNavigationUI().getTree(); tree.clearModel(); progressModel.incrementsCurrentStep(); @@ -574,7 +574,7 @@ public class ObserveMainUIInitializer { */ public void loadNavigationUI(ProgressModel progressModel) { - NavigationTree tree = ui.getNavigation(); + NavigationTree tree = ui.getNavigationUI().getTree(); NavigationTreeModel treeModel = tree.getTreeModel(); treeModel.populate(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseAndCreateUIAction.java @@ -78,7 +78,7 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { return; } - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, dataContext); @@ -120,7 +120,7 @@ public class CloseAndCreateUIAction extends AbstractContentUIAction { return; } - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); boolean wasCollapsed = isOpenActivityNodeCollapsed(tree, dataContext); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/CloseOpenUIAction.java @@ -102,7 +102,7 @@ public class CloseOpenUIAction extends AbstractContentUIAction { private void closeData(ObserveSwingApplicationContext applicationContext, ContentUI<?, ?> ui, String id) { - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); NavigationTreeNodeSupport node = tree.getChild(selectedNode, id); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/GoDownUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/GoDownUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/GoDownUIAction.java @@ -71,7 +71,7 @@ public class GoDownUIAction extends AbstractContentUIAction { public void updateAction(JAXXObject ui, AbstractButton editor) { ObserveMainUI mainUI = getMainUI(); - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); JPopupMenu scopePopup = mainUI.getScopeDownPopup(); SelectNodeUIAction action = (SelectNodeUIAction) mainUI.getObserveActionMap().get(SelectNodeUIAction.ACTION_NAME); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/GoUpUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/GoUpUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/GoUpUIAction.java @@ -73,7 +73,7 @@ public class GoUpUIAction extends AbstractContentUIAction { @Override public void updateAction(JAXXObject ui, AbstractButton editor) { - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport<?> node; ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivityLonglinesUIAction.java @@ -73,7 +73,7 @@ public class MoveActivityLonglinesUIAction extends MoveMultipleDataUIActionSuppo ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport oldTripLonglineNode = oldActivitiesNode.getParent(); NavigationTreeNodeSupport programNode = oldTripLonglineNode.getParent(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveActivitySeinesUIAction.java @@ -73,7 +73,7 @@ public class MoveActivitySeinesUIAction extends MoveMultipleDataUIActionSupport< ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport oldRouteNode = oldParentNode.getParent(); NavigationTreeNodeSupport routesNode = oldRouteNode.getParent(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveMultipleDataUIActionSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveMultipleDataUIActionSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveMultipleDataUIActionSupport.java @@ -71,7 +71,7 @@ public abstract class MoveMultipleDataUIActionSupport<U extends ContentListUI<?, @SuppressWarnings("unchecked") U ui = (U) ui1; - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); NavigationTreeNodeSupport oldParentNode = node.getParent().isRoot() ? node : node.getParent(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveRoutesUIAction.java @@ -72,7 +72,7 @@ public class MoveRoutesUIAction extends MoveMultipleDataUIActionSupport<RoutesUI void updateUI(RoutesUI ui, NavigationTreeNodeSupport oldRoutesNode, String tripSeineId, ImmutableSet<String> routeIds, List<Integer> positions) { ObserveOpenDataManager openDataManager = getOpenDataManager(); - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport oldTripSeineNode = oldRoutesNode.getParent(); NavigationTreeNodeSupport programNode = oldTripSeineNode.getParent(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveSingleDataUIActionSupport.java @@ -50,7 +50,7 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport { @Override public final void actionPerformed(ActionEvent e) { - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); NavigationTreeNodeSupport oldParentNode = node.getParent().getParent().equals(node.getRoot()) ? node.getParent() : node.getParent().getParent(); Optional<String> optionalNewParentId = getNewParentId(getMainUI(), oldParentNode); @@ -62,7 +62,7 @@ public abstract class MoveSingleDataUIActionSupport extends UIActionSupport { private void apply(NavigationTreeNodeSupport oldParentNode, String dataId, String newParentId) { - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); NavigationTreeNodeSupport grandParentNode = oldParentNode.getParent(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripUIAction.java @@ -94,7 +94,7 @@ public abstract class MoveTripUIAction extends MoveSingleDataUIActionSupport { static Optional<String> chooseNewProgram(ObserveMainUI mainUI, GearType gearType, String oldProgramId) { - NavigationTree treeHelper = mainUI.getNavigation(); + NavigationTree treeHelper = mainUI.getNavigationUI().getTree(); // racine NavigationTreeNodeSupport rootNode = treeHelper.getRootNode(); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/MoveTripsUIAction.java @@ -77,7 +77,7 @@ public abstract class MoveTripsUIAction<U extends ContentListUI<?, ?, ?, ?>> ext ObserveSwingApplicationContext applicationContext = ObserveSwingApplicationContext.get(); ObserveOpenDataManager openDataManager = applicationContext.getOpenDataManager(); - NavigationTree treeHelper = getMainUI().getNavigation(); + NavigationTree treeHelper = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport rootNode = treeHelper.getRootNode(); NavigationTreeNodeSupport newProgramNode = treeHelper.getChild(rootNode, newParentId); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/ReOpenUIAction.java @@ -70,7 +70,7 @@ public class ReOpenUIAction extends AbstractContentUIAction { String id = selectedData.getId(); - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport selectedNode = tree.getSelectedNode(); NavigationTreeNodeSupport node = tree.getChild(selectedNode, id); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/ResetEditUIAction.java @@ -57,7 +57,7 @@ public class ResetEditUIAction extends AbstractContentUIAction { if (ui.getModel().isCreatingMode()) { ui.stopEdit(); - NavigationTree tree = getMainUI().getNavigation(); + NavigationTree tree = getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport parentNode = tree.getSelectedNode().getParent(); tree.removeNode(tree.getSelectedNode()); tree.selectNode(parentNode); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/content/SelectNodeUIAction.java @@ -92,6 +92,6 @@ public class SelectNodeUIAction extends AbstractContentUIAction { NavigationTreeNodeSupport node = (NavigationTreeNodeSupport) source.getClientProperty(NODE); Objects.requireNonNull(node); - SwingUtilities.invokeLater(() -> getMainUI().getNavigation().selectNode(node)); + SwingUtilities.invokeLater(() -> getMainUI().getNavigationUI().getTree().selectNode(node)); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/main/global/ChangeFocusGlobalUIAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/main/global/ChangeFocusGlobalUIAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/main/global/ChangeFocusGlobalUIAction.java @@ -76,7 +76,7 @@ public class ChangeFocusGlobalUIAction extends UIActionSupport { log.info("Focus to navigation"); } getMainUI().getModel().setFocusOnNavigation(true); - focusComponent = getMainUI().getNavigation(); + focusComponent = getMainUI().getNavigationUI().getTree(); } SwingUtilities.invokeLater(focusComponent::requestFocusInWindow); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/navigation/GotoActionSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/navigation/GotoActionSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/navigation/GotoActionSupport.java @@ -89,7 +89,7 @@ public abstract class GotoActionSupport extends MenuActionSupport { return; } - NavigationTree navigation = getMainUI().getNavigation(); + NavigationTree navigation = getMainUI().getNavigationUI().getTree(); getNodeToSelect(navigation, dataContext).ifPresent(navigation::selectNode); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/storage/ReloadStorageAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/storage/ReloadStorageAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/storage/ReloadStorageAction.java @@ -82,7 +82,7 @@ public class ReloadStorageAction extends MenuActionSupport { ui.getModel().setBusy(false); - Object[] ids = ui.getNavigation().getSelectedIds(); + Object[] ids = ui.getNavigationUI().getTree().getSelectedIds(); try { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java @@ -222,7 +222,7 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U } public static NavigationTree getNavigationTree() { - return ObserveSwingApplicationContext.get().getMainUI().getNavigation(); + return ObserveSwingApplicationContext.get().getMainUI().getNavigationUI().getTree(); } /** @@ -444,10 +444,10 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U if (focusOnNavigation) { SwingUtilities.invokeLater(() -> { Component focusOwner = mainUI.getFocusOwner(); - if (!mainUI.getNavigation().equals(focusOwner)) { + if (!mainUI.getNavigationUI().getTree().equals(focusOwner)) { SwingUtilities.invokeLater(() -> { - mainUI.getNavigation().requestFocusInWindow(); + mainUI.getNavigationUI().getTree().requestFocusInWindow(); log.debug("Focus old owner: " + focusOwner); log.debug("Focus new owner: " + mainUI.getFocusOwner()); ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/ref/ReferenceHomeUIHandler.java @@ -68,7 +68,7 @@ public class ReferenceHomeUIHandler extends ContentUIHandler<ProgramDto, Referen JPanel panel = ui.getBody(); String nodeName = ui.getModel().getNodeName(); - NavigationTree navigation = ObserveSwingApplicationContext.get().getMainUI().getNavigation(); + NavigationTree navigation = ObserveSwingApplicationContext.get().getMainUI().getNavigationUI().getTree(); NavigationTreeNodeSupport<?> referentialNode = navigation.getReferentialNode(nodeName); for (Class<? extends ReferentialDto> type : ui.getModel().getTypes()) { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/4d78fa47e770d7c68d510a5ee8d… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/4d78fa47e770d7c68d510a5ee8d… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][feature/v8_maquette] Ajout de la donnée observe_longline.SampleLogbook (see #913) Maquettage
by Tony CHEMIT 04 Apr '18

04 Apr '18
Tony CHEMIT pushed to branch feature/v8_maquette at ultreiaio / ird-observe Commits: 2dc500e7 by Tony CHEMIT at 2018-04-04T18:08:41Z Ajout de la donnée observe_longline.SampleLogbook (see #913) Maquettage - - - - - 30 changed files: - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIModel.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LandingUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SampleLogbookUI.jaxx - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SampleLogbookUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SampleLogbookUIHandler.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SampleLogbookUIModel.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SamplePartLogbookUI.jaxx - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SamplePartLogbookUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SamplePartLogbookUIHandler.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SamplePartLogbookUIModel.java - client/src/main/java/fr/ird/observe/client/ui/content/table/ContentTableModel.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivityLonglineNavigationTreeNode.java - + client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/ActivitySampleLogbookLonglineNavigationTreeNode.java - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/TripLonglineNavigationTreeNode.java - + client/src/main/java/fr/ird/observe/client/ui/tree/navigation/nodes/longline/TripSampleLogbookLonglineNavigationTreeNode.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties - + dto/src/main/java/fr/ird/observe/dto/data/longline/SampleLogbookDto.java - dto/src/main/java/fr/ird/observe/dto/decoration/DecoratorService.java - dto/src/main/models/Observe.model - dto/src/main/resources/i18n/dto_en_GB.properties - dto/src/main/resources/i18n/dto_es_ES.properties - dto/src/main/resources/i18n/dto_fr_FR.properties - + persistence/src/main/java/fr/ird/observe/binder/data/longline/SampleLogbookEntityDtoBinder.java - + persistence/src/main/java/fr/ird/observe/binder/data/longline/SamplePartLogbookEntityDtoBinder.java - + validation/src/main/resources/fr/ird/observe/dto/data/longline/SampleLogbookDto-create-error-validation.xml - + validation/src/main/resources/fr/ird/observe/dto/data/longline/SampleLogbookDto-update-error-validation.xml - + validation/src/main/resources/fr/ird/observe/dto/data/longline/SamplePartLogbookDto-update-error-validation.xml The diff was not included because it is too large. View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2dc500e7dae6137fa34b5d6d868… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2dc500e7dae6137fa34b5d6d868… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Deleted 4 commits: Ajout de la donnée observe_longline.ActivityLogbook (See #907) Maquettage
by Tony CHEMIT 03 Apr '18

03 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe WARNING: The push did not contain any new commits, but force pushed to delete the commits and changes below. Deleted commits: 30fedc4d by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.ActivityLogbook (See #907) Maquettage - - - - - e6646c3e by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.SetLogbook (See #909) - - - - - 018ebdbf by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.CatchLogbook (See #911) Maquettage - - - - - 355b9469 by Tony CHEMIT at 2018-04-03T20:13:33Z update i18n (see #911, see #907, see #909) - - - - - 15 changed files: - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jaxx - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIModel.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jaxx - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIHandler.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIModel.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jaxx - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jcss - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIHandler.java - + client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIModel.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties Changes: ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jaxx ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jaxx @@ -0,0 +1,192 @@ +<!-- + #%L + ObServe :: Client + %% + Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<fr.ird.observe.client.ui.content.open.ContentOpenableUI + i18nFormat="observe.common.ActivityLonglineDto.%s" + superGenericType='ActivityLonglineDto, ActivityLonglineLogbookUI' + contentTitle='{n("observe.common.ActivityLonglineDto.title")}'> + + <style source="../../Common.jcss"/> + + <import> + fr.ird.observe.dto.data.longline.ActivityLonglineDto + fr.ird.observe.dto.data.longline.ActivityLonglineReference + fr.ird.observe.dto.data.longline.SetLonglineDto + fr.ird.observe.dto.referential.FpaZoneReference + fr.ird.observe.dto.referential.longline.VesselActivityLonglineReference + fr.ird.observe.dto.referential.seine.WindReference + fr.ird.observe.dto.referential.DataQualityReference + + fr.ird.observe.client.ui.actions.content.AddActivityLonglineSetUIAction + fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.main.global.DeleteDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.OpenDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.CloseDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.NewNextDataGlobalUIAction + fr.ird.observe.client.ui.util.JComment + + org.nuiton.jaxx.widgets.temperature.TemperatureFormat + org.nuiton.jaxx.widgets.temperature.TemperatureEditor + org.nuiton.jaxx.widgets.temperature.TemperatureEditorConfig + + org.nuiton.jaxx.widgets.number.NumberEditor + org.nuiton.jaxx.widgets.select.BeanComboBox + + org.nuiton.jaxx.widgets.datetime.DateTimeEditor + org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor + + java.awt.Dimension + + static fr.ird.observe.client.ui.util.UIHelper.getStringValue + static org.nuiton.i18n.I18n.n + </import> + + <!-- model --> + <ActivityLonglineLogbookUIModel id='model'/> + + <!-- edit bean --> + <ActivityLonglineDto id='bean'/> + + <!-- validator --> + <BeanValidator id='validator' autoField='true' beanClass='fr.ird.observe.dto.data.longline.ActivityLonglineDto' + errorTableModel='{getErrorTableModel()}' context='create'> + + <field name='longitude' component='coordinatesEditor'/> + <field name='latitude' component='coordinatesEditor'/> + <field name='quadrant' component='coordinatesEditor'/> + + </BeanValidator> + + <!-- formulaire --> + <JPanel id="body"> + <Table fill='both' constraints="BorderLayout.CENTER"> + + <!-- date - time --> + <row> + <cell columns="2" weightx="1"> + <DateTimeEditor id='timeStamp' constructorParams='this'/> + </cell> + </row> + + <!-- position --> + <row> + <cell columns="2" weightx="1"> + <CoordinatesEditor id='coordinatesEditor' constructorParams='this'/> + </cell> + </row> + + <!-- activity vessel --> + <row> + <cell anchor='west'> + <JLabel id='vesselActivityLonglineLabel'/> + </cell> + <cell anchor='east' fill="both"> + <BeanComboBox id='vesselActivityLongline' genericType='VesselActivityLonglineReference' + constructorParams='this'/> + </cell> + </row> + + <!--zone FPA--> + <row> + <cell anchor='west'> + <JLabel id='fpaZoneLabel'/> + </cell> + <cell anchor='east' fill="both"> + <BeanComboBox id='fpaZone' genericType='FpaZoneReference' constructorParams='this'/> + </cell> + </row> + + <!-- vitesse vessel --> + <row> + <cell anchor='west'> + <JLabel id='vesselSpeedLabel'/> + </cell> + <cell anchor='east' weightx="1" fill="both"> + <NumberEditor id='vesselSpeed' constructorParams='this' styleClass="float2"/> + </cell> + </row> + + <!-- température de surface --> + <row> + <cell anchor='west'> + <JLabel id='seaSurfaceTemperatureLabel'/> + </cell> + <cell anchor='east' fill="both"> + <TemperatureEditor id='seaSurfaceTemperature' constructorParams='this'/> + </cell> + </row> + + <!-- vent beaufort --> + <row> + <cell anchor='west'> + <JLabel id='windLabel'/> + </cell> + <cell anchor='east' fill="both"> + <BeanComboBox id='wind' genericType='WindReference' constructorParams='this'/> + </cell> + </row> + + <!-- dataQuality --> + <row> + <cell anchor='west'> + <JLabel id='dataQualityLabel'/> + </cell> + <cell anchor='east' weightx="1" fill="both"> + <BeanComboBox id='dataQuality' genericType='DataQualityReference' constructorParams='this'/> + </cell> + </row> + + <!-- activité observation --> + <row> + <cell anchor='west'> + <JLabel id='relatedObservedActivityLabel'/> + </cell> + <cell anchor='east' fill="both"> + <BeanComboBox id='relatedObservedActivity' genericType='ActivityLonglineReference' constructorParams='this'/> + </cell> + </row> + + <!-- comment --> + <row> + <cell columns='2' weighty="1"> + <JComment id="comment"/> + </cell> + </row> + </Table> + </JPanel> + + <!-- surcharge des actions (pour appliquer la css specifique) --> + <JButton id='delete'/> + <JButton id='reopen'/> + <JButton id='close'/> + <JButton id='closeAndCreate'/> + <JButton id='actionDown'/> + + <Table id='extraActions' fill="both" weightx="1" insets='2'> + <row> + <cell weightx="0.5" fill="both"> + <JButton id='addSet'/> + </cell> + </row> + </Table> + +</fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jcss ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUI.jcss @@ -0,0 +1,99 @@ +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +#model { + editable:true; + modified:{validator.isChanged()}; + valid:{validator.isValid()}; +} + +#body { + layout:{new BorderLayout()}; +} + +#extraActions { + visible:{model.isUpdatingMode()}; +} + +#timeStamp { + propertyDate:{ActivityLonglineDto.PROPERTY_TIME_STAMP}; + propertyDayDate:{ActivityLonglineUIModel.PROPERTY_DATE}; + propertyTimeDate:{ActivityLonglineUIModel.PROPERTY_TIME}; + date:{bean.getTimeStamp()}; +} + +#coordinatesEditor { + propertyLatitude:{ActivityLonglineDto.PROPERTY_LATITUDE}; + propertyLongitude:{ActivityLonglineDto.PROPERTY_LONGITUDE}; + propertyQuadrant:{ActivityLonglineDto.PROPERTY_QUADRANT}; +} + +#vesselActivityLongline { + property:{ActivityLonglineDto.PROPERTY_VESSEL_ACTIVITY_LONGLINE}; + selectedItem:{bean.getVesselActivityLongline()}; + enabled:{!model.isUpdatingMode()}; +} + +#fpaZone { + property:{ActivityLonglineDto.PROPERTY_FPA_ZONE}; + selectedItem:{bean.getFpaZone()}; +} + +#seaSurfaceTemperature { + format:{TemperatureFormat.C}; + storageTemperature:{bean.getSeaSurfaceTemperature()}; +} + +#dataQuality { + property:{ActivityLonglineDto.PROPERTY_DATA_QUALITY}; + selectedItem:{bean.getDataQuality()}; +} + +#reopen { + _toolTipText:{t("observe.common.ActivityDto.action.reopen.tip")}; +} + +#close { + enabled:{!model.isModified() && (model.isHistoricalData() || model.isValid())}; + _toolTipText:{t("observe.common.ActivityDto.action.close.tip")}; +} + +#closeAndCreate { + _globalAction:{NewNextDataGlobalUIAction.ACTION_NAME}; + enabled:{!model.isModified() && (model.isHistoricalData() || model.isValid())}; + _text:{t("observe.common.ActivityDto.action.closeAndCreate")}; + _toolTipText:{t("observe.common.ActivityDto.action.closeAndCreate.tip")}; +} + +#delete { + _globalAction:{DeleteDataGlobalUIAction.ACTION_NAME}; + _toolTipText:{t("observe.common.ActivityDto.action.delete.tip")}; +} + +#addSet { + actionIcon:add; + text:"observe.common.ActivityLonglineDto.action.addSet"; + toolTipText:"observe.common.ActivityLonglineDto.action.addSet.tip"; + enabled:{!model.isModified() && model.isValid() && model.isSetOperation() && ! bean.isHasSetLongline()}; + _observeAction:{AddActivityLonglineSetUIAction.ACTION_NAME}; + +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIHandler.java @@ -0,0 +1,306 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.db.ClientDataContext; +import fr.ird.observe.client.db.constants.DataContextType; +import fr.ird.observe.client.ui.content.ContentMode; +import fr.ird.observe.client.ui.content.ContentUIModel; +import fr.ird.observe.client.ui.content.open.ContentOpenableUIHandler; +import fr.ird.observe.client.validation.ClientValidationContext; +import fr.ird.observe.dto.data.longline.ActivityLonglineDto; +import fr.ird.observe.dto.data.longline.ActivityLonglineHelper; +import fr.ird.observe.dto.data.longline.TripLonglineDto; +import fr.ird.observe.dto.form.Form; +import fr.ird.observe.dto.reference.DataDtoReference; +import fr.ird.observe.dto.result.TripChildSaveResultDto; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.runtime.spi.UIHandler; +import org.nuiton.validator.NuitonValidatorScope; + +import javax.swing.SwingUtilities; +import java.util.Optional; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 8/29/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since 3.7 + */ +class ActivityLonglineLogbookUIHandler extends ContentOpenableUIHandler<ActivityLonglineDto, ActivityLonglineLogbookUI> implements UIHandler<ActivityLonglineLogbookUI> { + + /** Logger */ + private static final Log log = LogFactory.getLog(ActivityLonglineLogbookUIHandler.class); + + ActivityLonglineLogbookUIHandler() { + super(DataContextType.TripLongline, DataContextType.ActivityLongline, n("observe.common.ActivityLonglineDto.message.not.open")); + } + + @Override + protected boolean doOpenData() { + boolean result = getOpenDataManager().canOpenActivityLongline(getSelectedParentId()); + if (result) { + String setLonglineId = Optional.ofNullable(getBean().getSetLongline()).map(DataDtoReference::getId).orElse(null); + getOpenDataManager().openActivityLongline(getSelectedParentId(), getSelectedId(), setLonglineId); + + } + return result; + } + + @Override + public boolean doCloseData() { + boolean result = getOpenDataManager().isOpenActivityLongline(getSelectedId()); + if (result) { + getOpenDataManager().closeActivityLongline(getSelectedId()); + } + return result; + } + + @Override + protected ContentMode getContentMode(ClientDataContext dataContext) { + + String activityId = getSelectedId(); + + if (activityId == null) { + + // mode creation + return ContentMode.CREATE; + } + + // l'activity existe en base + if (getOpenDataManager().isOpenActivityLongline(getSelectedId())) { + + // l'activity est ouverte, donc modifiable + return ContentMode.UPDATE; + } + + ActivityLonglineLogbookUI ui = getUi(); + + // l'activity n'est pas ouverte, donc pas éditable + if (!getOpenDataManager().isOpenTripLongline(getSelectedParentId())) { + + // la marée n'est pas ouverte + addMessage(ui, + NuitonValidatorScope.INFO, + getTypeI18nKey(TripLonglineDto.class), + t("observe.common.TripLonglineDto.message.not.open")); + + if (getModel().isHistoricalData()) { + + addInfoMessage(t("observe.common.DataDto.message.historical.data")); + } + + } else { + + // seule l'activity n'est pas ouverte + addInfoMessage(t(closeMessage)); + } + + return ContentMode.READ; + } + + @Override + public void openUI() { + super.openUI(); + + getUi().getCoordinatesEditor().resetModel(); + + String tripId = getSelectedParentId(); + String activityId = getSelectedId(); + + if (log.isInfoEnabled()) { + log.info(prefix + "tripId = " + tripId); + log.info(prefix + "activityId = " + activityId); + } + + ContentMode mode = computeContentMode(); + if (log.isInfoEnabled()) { + log.info(prefix + "content mode " + mode); + } + ActivityLonglineDto bean = getBean(); + + boolean create = activityId == null; + + Form<ActivityLonglineDto> form; + if (create) { + + // create mode + form = getActivityLonglineService().preCreate(tripId); + + } else { + + // update mode + form = getActivityLonglineService().loadForm(activityId); + + } + + setContentMode(mode); + + loadReferentialReferenceSetsInModel(form); + + getModel().setForm(form); + ActivityLonglineHelper.copyActivityLonglineDto(form.getObject(), bean); + + if (log.isDebugEnabled()) { + log.debug(" long - lat = " + bean.getLongitude() + " - " + bean.getLatitude()); + } + finalizeOpenUI(mode, create); + + // Mise à jour du composant de coordonnées + // 1. Mise à jour latitude/longitude: + getUi().getCoordinatesEditor().setLatitudeAndLongitude(bean.getLatitude(), bean.getLongitude()); + + // 2. Mise à jour du quadrant : + // Si le bean de données contient un quadrant, on met simplement à jour le composant de coordonnées pour sélectionner le quadrant voulu + // sinon, on réinitialise les quadrants du composant afin qu'aucun d'eux ne soit sélectionné (par exemple dans le cas de la création de la première activité d'une marée) + if (bean.getQuadrant() == null) { + getUi().getCoordinatesEditor().resetQuadrant(); + } else { + getUi().getCoordinatesEditor().setQuadrant(bean.getQuadrant()); + } + + // on annule la modification engendree par ce binding + getModel().setModified(create); + } + + @Override + public void startEditUI(String... binding) { + ActivityLonglineLogbookUI ui = getUi(); + + ContentUIModel<ActivityLonglineDto> model = getModel(); + + boolean create = model.getMode() == ContentMode.CREATE; + String contextName = getValidatorContextName(model.getMode()); + ui.getValidator().setContext(contextName); + if (create) { + addMessage(ui, + NuitonValidatorScope.INFO, + getTypeI18nKey(ActivityLonglineDto.class), + t("observe.common.ActivityLonglineDto.message.creating")); + } else { + addMessage(ui, + NuitonValidatorScope.INFO, + getTypeI18nKey(ActivityLonglineDto.class), + t("observe.common.ActivityLonglineDto.message.updating")); + } + + super.startEditUI( + ActivityLonglineLogbookUI.BINDING_TIME_STAMP_DATE, + ActivityLonglineLogbookUI.BINDING_SEA_SURFACE_TEMPERATURE_STORAGE_TEMPERATURE, + ActivityLonglineLogbookUI.BINDING_COMMENT_MODEL, + ActivityLonglineLogbookUI.BINDING_VESSEL_ACTIVITY_LONGLINE_SELECTED_ITEM, + ActivityLonglineLogbookUI.BINDING_FPA_ZONE_SELECTED_ITEM, + ActivityLonglineLogbookUI.BINDING_CLOSE_ENABLED, + ActivityLonglineLogbookUI.BINDING_CLOSE_AND_CREATE_ENABLED); + model.setModified(create); + } + + @Override + protected void prepareValidationContext() { + super.prepareValidationContext(); + + ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext(); + validationContext.setCoordinatesEditor("coordinate", getUi().getCoordinatesEditor()); + + } + + @Override + protected boolean doSave(ActivityLonglineDto bean) { + + boolean notPersisted = bean.isNotPersisted(); + + String tripId = getSelectedParentId(); + + TripChildSaveResultDto saveResult = getActivityLonglineService().save(tripId, getModel().getBean()); + saveResult.toDto(bean); + + setUpdateMareeNodeTag(saveResult.isTripEndDateUpdated()); + + obtainChildPosition(bean); + + if (notPersisted) { + // ouverture de l'activité après création + getOpenDataManager().openActivityLongline(getSelectedParentId(), bean.getId(), null); + + if (ActivityLonglineHelper.FISHING_OPERATION_ID.equals(bean.getVesselActivityLongline().getId())) { + + // création de l'opération de pêche + SwingUtilities.invokeLater(() -> getUi().getAddSet().doClick()); + } + } + + return true; + } + + @Override + protected int getOpenablePosition(String parentId, ActivityLonglineDto bean) { + return getActivityLonglineService().getActivityLonglinePositionInTripLongline(parentId, bean.getId()); + } + + @Override + protected boolean doDelete(ActivityLonglineDto bean) { + + if (askToDelete(bean)) { + return false; + } + if (log.isInfoEnabled()) { + log.info("Will delete Activity " + bean.getId()); + } + + String tripId = getSelectedParentId(); + boolean wasTripEndDateUpdated = getActivityLonglineService().delete(tripId, bean.getId()); + if (log.isInfoEnabled()) { + log.info("Delete done for Activity " + bean.getId()); + } + getOpenDataManager().closeActivityLongline(bean.getId()); + + setUpdateMareeNodeTag(wasTripEndDateUpdated); + return true; + + } + + @Override + protected void afterSave(boolean refresh) { + super.afterSave(refresh); + repaintTripNode(); + } + + @Override + protected void afterDelete() { + super.afterDelete(); + repaintTripNode(); + } + + @Override + protected boolean obtainCanReopen(boolean create) { + + return !create && getOpenDataManager().canOpenActivityLongline(getSelectedParentId()); + + } + +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIModel.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineLogbookUIModel.java @@ -0,0 +1,88 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ui.content.open.ContentOpenableUIModel; +import fr.ird.observe.dto.data.longline.ActivityLonglineDto; +import fr.ird.observe.dto.referential.longline.VesselActivityLonglineHelper; +import fr.ird.observe.dto.referential.longline.VesselActivityLonglineReference; +import org.nuiton.util.DateUtil; + +import java.util.Date; + +/** + * Created on 9/26/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since XXX + */ +public class ActivityLonglineLogbookUIModel extends ContentOpenableUIModel<ActivityLonglineDto> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_SET_OPERATION = "setOperation"; + + public static final String PROPERTY_DATE = "date"; + + public static final String PROPERTY_TIME = "time"; + + public ActivityLonglineLogbookUIModel() { + super(ActivityLonglineDto.class); + + getBean().addPropertyChangeListener(ActivityLonglineDto.PROPERTY_VESSEL_ACTIVITY_LONGLINE, evt -> { + boolean oldValue = VesselActivityLonglineHelper.isSetOperation((VesselActivityLonglineReference) evt.getOldValue()); + boolean newValue = VesselActivityLonglineHelper.isSetOperation((VesselActivityLonglineReference) evt.getNewValue()); + firePropertyChange(PROPERTY_SET_OPERATION, oldValue, newValue); + }); + } + + public boolean isSetOperation() { + return VesselActivityLonglineHelper.isSetOperation(bean.getVesselActivityLongline()); + } + + public Date getDate() { + Date timeStamp = bean.getTimeStamp(); + return timeStamp == null ? null : DateUtil.getDay(timeStamp); + } + + public Date getTime() { + Date timeStamp = bean.getTimeStamp(); + return timeStamp == null ? null : DateUtil.getTime(timeStamp, false, false); + } + + public void setDate(Date date) { + Date timeStamp = bean.getTimeStamp(); + if (timeStamp != null) { + Date dateAndTime = date == null ? timeStamp : DateUtil.getDateAndTime(date, timeStamp, true, false); + bean.setTimeStamp(dateAndTime); + } + } + + public void setTime(Date time) { + Date timeStamp = bean.getTimeStamp(); + if (timeStamp != null) { + Date dateAndTime = time == null ? timeStamp : DateUtil.getDateAndTime(timeStamp, time, false, false); + bean.setTimeStamp(dateAndTime); + } + } +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jaxx ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jaxx @@ -0,0 +1,282 @@ +<!-- + #%L + ObServe :: Client + %% + Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<fr.ird.observe.client.ui.content.table.ContentTableUI + i18nFormat="observe.common.CatchLonglineDto.%s" + superGenericType='SetLonglineCatchDto, CatchLonglineDto, CatchLonglineLogbookUI' + contentTitle='{n("observe.common.CatchLonglineDto.title")}' + newEntryText='{n("observe.common.CatchLonglineDto.action.new")}' + newEntryTip='{n("observe.common.CatchLonglineDto.action.new.tip")}' + saveNewEntryText='{n("observe.common.CatchLonglineDto.action.create")}' + saveNewEntryTip='{n("observe.common.CatchLonglineDto.action.create.tip")}'> + + <style source="../CommonTable.jcss"/> + + <import> + fr.ird.observe.dto.data.longline.BasketReference + fr.ird.observe.dto.data.longline.BranchlineDto + fr.ird.observe.dto.data.longline.BranchlineReference + fr.ird.observe.dto.data.longline.CatchLonglineDto + fr.ird.observe.dto.data.longline.SectionReference + fr.ird.observe.dto.data.longline.SetLonglineCatchDto + fr.ird.observe.dto.referential.SpeciesReference + fr.ird.observe.dto.referential.SexReference + fr.ird.observe.dto.referential.longline.BaitHaulingStatusReference + fr.ird.observe.dto.referential.longline.CatchFateLonglineReference + fr.ird.observe.dto.referential.longline.HealthnessReference + fr.ird.observe.dto.referential.longline.HookPositionReference + fr.ird.observe.dto.referential.longline.MaturityStatusReference + fr.ird.observe.dto.referential.longline.StomacFullnessReference + fr.ird.observe.client.constants.CatchAcquisitionMode + fr.ird.observe.client.ui.content.table.* + fr.ird.observe.client.ui.util.BooleanEditor + fr.ird.observe.client.ui.util.JComment + + org.nuiton.jaxx.widgets.number.NumberEditor + org.nuiton.jaxx.widgets.select.BeanComboBox + org.nuiton.jaxx.widgets.select.FilterableDoubleList + org.nuiton.jaxx.widgets.datetime.DateTimeEditor + org.nuiton.jaxx.widgets.datetime.TimeEditor + + java.awt.Dimension + + java.util.Collection + + org.apache.commons.lang3.BooleanUtils + + static fr.ird.observe.client.ui.util.UIHelper.getStringValue + static org.nuiton.i18n.I18n.n + </import> + + <!-- model --> + <CatchLonglineLogbookUIModel id='model'/> + + <!-- edit bean --> + <SetLonglineCatchDto id='bean'/> + + <!-- table edit bean --> + <CatchLonglineDto id='tableEditBean'/> + + <!-- table model --> + <ContentTableModel id='tableModel' genericType='SetLonglineCatchDto, CatchLonglineDto'/> + + <!-- edit branchline --> + <BranchlineDto id='branchlineBean' initializer='new BranchlineDto()'/> + + <!-- le validateur de l'écran --> + <BeanValidator id='validator' context='update' + beanClass='fr.ird.observe.dto.data.longline.SetLonglineCatchDto' + errorTableModel='{getErrorTableModel()}'> + </BeanValidator> + + <!-- le validateur d'une entrée de tableau --> + <BeanValidator id='validatorTable' autoField='true' context='update' + beanClass='fr.ird.observe.dto.data.longline.CatchLonglineDto' + errorTableModel='{getErrorTableModel()}' + parentValidator='{validator}'/> + + <JPopupMenu id='catchLonglinesPopup'> + <JMenuItem id='moveCatchLonglineUp' onActionPerformed='getHandler().moveCatchLonglineUp()'/> + <JMenuItem id='moveCatchLonglineDown' onActionPerformed='getHandler().moveCatchLonglineDown()'/> + </JPopupMenu> + + <ButtonGroup id='acquisitionModeGroup' + onStateChanged='getHandler().updateCatchAcquisitionMode((CatchAcquisitionMode) acquisitionModeGroup.getSelectedValue())'/> + + <Table id='editorPanel' fill='both' insets='0'> + <row> + <cell weightx="1" weighty="1"> + <JTabbedPane id='mainTabbedPane'> + <tab id='caracteristicTab' computeI18n=""> + <Table id='editForm' fill='both' insets='1'> + + <row> + <cell columns="4"> + <JPanel layout="{new GridLayout()}"> + + <!-- acquisition Mode --> + <JPanel id='acquisitionModePanel'> + <JRadioButton id='acquisitionModeIndividual'/> + <JRadioButton id='acquisitionModeGrouped'/> + </JPanel> + + </JPanel> + </cell> + </row> + + <!-- speciesCatch --> + <!-- tagNumber --> + <row> + <cell> + <JLabel id='speciesCatchLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='speciesCatch' genericType='SpeciesReference' constructorParams='this'/> + </cell> + <cell anchor='west'> + <JLabel id='tagNumberLabel'/> + </cell> + <cell anchor='east' weightx="1" fill="both"> + <JPanel layout='{new BorderLayout()}'> + <JToolBar id='tagNumberToolbar' constraints='BorderLayout.WEST'> + <JButton id='resetTagNumber' styleClass='resetButton'/> + </JToolBar> + <JTextField id='tagNumber' constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> + + <!-- count --> + <row> + <cell> + <JLabel id='countLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='count' constructorParams='this' styleClass="int6"/> + </cell> + </row> + + <!-- count --> + <!-- total weight --> + <row> + <cell> + <JLabel id='totalWeightLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='totalWeight' constructorParams='this' styleClass="float3"/> + </cell> + <cell> + <JLabel id='weightDeterminationMethodLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='weightDeterminationMethod' constructorParams='this' genericType='HealthnessReference'/> + </cell> + </row> + + + <!-- catch healthness --> + <row> + <cell> + <JLabel id='catchHealthnessLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='catchHealthness' constructorParams='this' genericType='HealthnessReference'/> + </cell> + </row> + + <!-- catch fate --> + <!-- discard healthness --> + <row> + <cell> + <JLabel id='catchFateLonglineLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='catchFateLongline' constructorParams='this' genericType='CatchFateLonglineReference'/> + </cell> + <cell> + <JLabel id='discardHealthnessLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='discardHealthness' constructorParams='this' genericType='HealthnessReference'/> + </cell> + </row> + + <!-- onBordDataProcessing --> + <row> + <cell> + <JLabel id='onBordDataProcessingLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <BeanComboBox id='onBordDataProcessing' constructorParams='this' genericType='CatchFateLonglineReference'/> + </cell> + <cell anchor='east' weightx="1" fill="both"> + <JPanel layout='{new BorderLayout()}'> + <JToolBar id='photoReferencesToolbar' constraints='BorderLayout.WEST'> + <JButton id='resetPhotoReferences' styleClass='resetButton'/> + </JToolBar> + <JTextField id='photoReferences' constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> + </Table> + </tab> + + <tab id='depredatedTab' computeI18n=""> + + <Table id='depredatedForm' fill='both' insets='1'> + + <!-- depredated --> + <row> + <cell anchor='west' fill="both"> + <JCheckBox id='depredated' styleClass="i18n"/> + </cell> + </row> + + <!-- beatDiameter --> + <row> + <cell> + <JLabel id='beatDiameterLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='beatDiameter' constructorParams='this' styleClass="float3"/> + </cell> + </row> + <!-- countDepredated --> + <row> + <cell> + <JLabel id='countDepredatedLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='countDepredated' constructorParams='this' styleClass="float3"/> + </cell> + </row> + <!-- depredatedProportion --> + <row> + <cell> + <JLabel id='depredatedProportionLabel'/> + </cell> + <cell weightx='1' anchor='east'> + <NumberEditor id='depredatedProportion' constructorParams='this' styleClass="float3"/> + </cell> + </row> + + <!-- predator --> + <row> + <cell columns="2" fill="both" weighty="0.7"> + <JScrollPane id='predatorPane'> + <FilterableDoubleList id='predator' genericType='SpeciesReference'/> + </JScrollPane> + </cell> + </row> + + </Table> + </tab> + </JTabbedPane> + </cell> + </row> + <row> + <cell weighty='1'> + <JComment id="comment"/> + </cell> + </row> + </Table> +</fr.ird.observe.client.ui.content.table.ContentTableUI> \ No newline at end of file ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jcss ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUI.jcss @@ -0,0 +1,360 @@ +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +.i18nBranchline { + computeI18n:"observe.common.BranchlineDto.%s" +} + +#model { + valid:{validator.isValid() && validatorTable.isValid()}; + canSaveRow:{validatorTable.isChanged() && validatorTable.isValid() }; + canResetRow:{validatorTable.isChanged()}; +} + +#moveCatchLonglineUp { + text: "observe.common.CatchLonglineDto.action.moveCatchLonglineUp"; + toolTipText: "observe.common.CatchLonglineDto.action.moveCatchLonglineUp.tip"; + actionIcon: go-up; +} + +#moveCatchLonglineDown { + text: "observe.common.CatchLonglineDto.action.moveCatchLonglineDown"; + toolTipText: "observe.common.CatchLonglineDto.action.moveCatchLonglineDown.tip"; + actionIcon: go-down; +} + + +/* ***************************************************************************** */ +/* CARACTERISTIC TAB ********************************************************** */ +/* ***************************************************************************** */ + +#caracteristicTab { + icon:{handler.getErrorIconIfFalse(model.isCaracteristicsTabValid())}; +} + +#acquisitionModeGroup { + selectedValue:{CatchAcquisitionMode.valueOf(tableEditBean.getAcquisitionMode())}; +} + +#acquisitionModePanel { + border:{new TitledBorder(t("observe.common.CatchLonglineDto.acquisitionMode"))}; + layout:{new GridLayout(0,1)}; +} + +#acquisitionModeIndividual { + buttonGroup:acquisitionModeGroup; + value:{CatchAcquisitionMode.INDIVIDUAL}; + text:{CatchAcquisitionMode.INDIVIDUAL.toString()}; + selected:{tableEditBean.getAcquisitionMode() == 0}; + enabled:{!tableModel.isEditable() || tableModel.isCreate()}; +} + +#acquisitionModeGrouped { + buttonGroup:acquisitionModeGroup; + value:{CatchAcquisitionMode.GROUPED}; + text:{CatchAcquisitionMode.GROUPED.toString()}; + selected:{tableEditBean.getAcquisitionMode() == 1}; + enabled:{!tableModel.isEditable() || tableModel.isCreate()}; +} + +#locationOnLonglinePanel { + border:{new TitledBorder(t("observe.common.CatchLonglineDto.locationOnLongline"))}; +} + +#section { + property:{CatchLonglineDto.PROPERTY_SECTION}; + selectedItem:{tableEditBean.getSection()}; + force:true; + _listNoLoad:{true}; +} + +#basket { + property:{CatchLonglineDto.PROPERTY_BASKET}; + selectedItem:{tableEditBean.getBasket()}; + _listNoLoad:{true}; +} + +#branchline { + property:{CatchLonglineDto.PROPERTY_BRANCHLINE}; + selectedItem:{tableEditBean.getBranchline()}; + _listNoLoad:{true}; +} + +#speciesCatch { + property:{CatchLonglineDto.PROPERTY_SPECIES_CATCH}; + selectedItem:{tableEditBean.getSpeciesCatch()}; +} + +#resetPhotoReferences { + toolTipText:"observe.common.CatchLonglineDto.action.reset.photoReferences.tip"; + _resetTablePropertyName:{CatchLonglineDto.PROPERTY_PHOTO_REFERENCES}; +} + +#photoReferences { + text:{getStringValue(tableEditBean.getPhotoReferences())}; + _tablePropertyName:{CatchLonglineDto.PROPERTY_PHOTO_REFERENCES}; +} + +#resetTagNumber { + toolTipText:"observe.common.DataDto.action.resetTagNumber"; + _resetTablePropertyName:{CatchLonglineDto.PROPERTY_TAG_NUMBER}; + enabled:{tableEditBean.getAcquisitionMode() == 0}; +} + +#tagNumber { + text:{getStringValue(tableEditBean.getTagNumber())}; + _tablePropertyName:{CatchLonglineDto.PROPERTY_TAG_NUMBER}; + enabled:{tableEditBean.getAcquisitionMode() == 0}; +} + +#count { + property:{CatchLonglineDto.PROPERTY_COUNT}; + numberValue:{tableEditBean.getCount()}; +} + +#totalWeight { + property:{CatchLonglineDto.PROPERTY_TOTAL_WEIGHT}; + numberValue:{tableEditBean.getTotalWeight()}; +} + +#hookWhenDiscarded { + _tablePropertyName:{CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED}; + booleanValue:{tableEditBean.getHookWhenDiscarded()}; +} + +#catchFateLongline { + property:{CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE}; + selectedItem:{tableEditBean.getCatchFateLongline()}; +} + +#catchHealthness { + property:{CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS}; + selectedItem:{tableEditBean.getCatchHealthness()}; +} + +#discardHealthness { + property:{CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS}; + selectedItem:{tableEditBean.getDiscardHealthness()}; +} + +#catchFateLongline { + property:{CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE}; + selectedItem:{tableEditBean.getCatchFateLongline()}; +} + +#hookPosition { + property:{CatchLonglineDto.PROPERTY_HOOK_POSITION}; + selectedItem:{tableEditBean.getHookPosition()}; +} + +#comment { + title:"observe.common.CatchLonglineDto.comment"; +} + +/* ***************************************************************************** */ +/* DEPREDATED TAB ************************************************************* */ +/* ***************************************************************************** */ + +#depredatedFormTab { + icon:{handler.getErrorIconIfFalse(model.isDepredatedTabValid())}; +} + +#beatDiameter { + property:{CatchLonglineDto.PROPERTY_BEAT_DIAMETER}; + numberValue:{tableEditBean.getBeatDiameter()}; +} + +#depredated { + horizontalTextPosition:{JCheckBox.LEFT}; + _tablePropertyName:{CatchLonglineDto.PROPERTY_DEPREDATED}; + selected:{BooleanUtils.isTrue(tableEditBean.getDepredated())}; +} + +#predatorPane { + minimumSize:{new Dimension(10,150)}; +} + +#predator { + property: predator; + selected:{(Collection)tableEditBean.getPredator()}; + showListLabel: true; + universeLabel:{t("observe.common.CatchLonglineDto.availablePredator")}; + selectedLabel:{t("observe.common.CatchLonglineDto.selectedPredator")}; +} + +/* ***************************************************************************** */ +/* FOOD AND SEXUAL TAB ******************************************************** */ +/* ***************************************************************************** */ + +#foodAndSexualFormTab { + icon:{handler.getErrorIconIfFalse(model.isFoodAndSexualTabValid())}; +} + +#foodAndSexualForm { + border:{new TitledBorder( (String) null)}; +} + +#sex { + property:{CatchLonglineDto.PROPERTY_SEX}; + selectedItem:{tableEditBean.getSex()}; +} + +#stomacFullness { + property:{CatchLonglineDto.PROPERTY_STOMAC_FULLNESS}; + selectedItem:{tableEditBean.getStomacFullness()}; +} + +#maturityStatus { + property:{CatchLonglineDto.PROPERTY_MATURITY_STATUS}; + selectedItem:{tableEditBean.getMaturityStatus()}; +} + +#gonadeWeight { + property:{CatchLonglineDto.PROPERTY_GONADE_WEIGHT}; + numberValue:{tableEditBean.getGonadeWeight()}; +} + +/* ***************************************************************************** */ +/* SIZE MEASURES TAB ********************************************************** */ +/* ***************************************************************************** */ + +#sizeMeasuresFormTab { + icon:{handler.getErrorIconIfFalse(sizeMeasuresTableModel.isValid())}; +} + +#sizeMeasuresTable { + model: {sizeMeasuresTableModel}; +} + +#addSizeMeasure { + text: "observe.common.CatchLonglineDto.action.addSizeMeasure"; + toolTipText: "observe.common.CatchLonglineDto.action.addSizeMeasure.tip"; + actionIcon: add; +} + +#deleteSelectedSizeMeasure { + text: "observe.common.CatchLonglineDto.action.deleteSelectedSizeMeasure"; + toolTipText: "observe.common.CatchLonglineDto.action.deleteSelectedSizeMeasure.tip"; + actionIcon: delete; +} + +/* ***************************************************************************** */ +/* WEIGHT MEASURES TAB ******************************************************** */ +/* ***************************************************************************** */ + +#weightMeasuresFormTab { + icon:{handler.getErrorIconIfFalse(weightMeasuresTableModel.isValid())}; +} + +#weightMeasuresTable { + model: {weightMeasuresTableModel}; +} + +#addWeightMeasure { + text: "observe.common.CatchLonglineDto.action.addWeightMeasure"; + toolTipText: "observe.common.CatchLonglineDto.action.addWeightMeasure.tip"; + actionIcon: add; +} + +#deleteSelectedWeightMeasure { + text: "observe.common.CatchLonglineDto.action.deleteSelectedWeightMeasure"; + toolTipText: "observe.common.CatchLonglineDto.action.deleteSelectedWeightMeasure.tip"; + actionIcon: delete; +} + +/* ***************************************************************************** */ +/* BRANCHLINE TAB ************************************************************* */ +/* ***************************************************************************** */ + +#branchlineFormTab { + icon:{handler.getErrorIconIfFalse(model.isBranchlineTabValid())}; + enabled:{!tableModel.isCreate() && tableEditBean.getBranchline() != null}; +} + +#branchlineForm { + border:{new TitledBorder( (String) null)}; + visible:{!tableModel.isCreate() && tableEditBean.getBranchline() != null}; +} + +#depthRecorder { + horizontalTextPosition:{JCheckBox.LEFT}; + _branchlineBeanPropertyName:{BranchlineDto.PROPERTY_DEPTH_RECORDER}; + selected:{BooleanUtils.isTrue(branchlineBean.getDepthRecorder())}; +} + +#hookLost { + horizontalTextPosition:{JCheckBox.LEFT}; + _branchlineBeanPropertyName:{BranchlineDto.PROPERTY_HOOK_LOST}; + selected:{BooleanUtils.isTrue(branchlineBean.getHookLost())}; +} + +#traceCutOff { + horizontalTextPosition:{JCheckBox.LEFT}; + _branchlineBeanPropertyName:{BranchlineDto.PROPERTY_TRACE_CUT_OFF}; + selected:{BooleanUtils.isTrue(branchlineBean.getTraceCutOff())}; +} + +#timer { + horizontalTextPosition:{JCheckBox.LEFT}; + _branchlineBeanPropertyName:{BranchlineDto.PROPERTY_TIMER}; + selected:{BooleanUtils.isTrue(branchlineBean.getTimer())}; +} + +#timeSinceContact { + propertyTime:{CatchLonglineUIModel.PROPERTY_BRANCHLINE_TIME_SINCE_CONTACT}; + bean:{model}; + enabled:{BooleanUtils.isTrue(branchlineBean.getTimer())}; + time:{model.getBranchlineTimeSinceContact()}; + showTimeEditorSlider:false; +} + +#timerTimeOnBoard { + date:{branchlineBean.getTimerTimeOnBoard()}; + propertyDate: {BranchlineDto.PROPERTY_TIMER_TIME_ON_BOARD}; + bean:{branchlineBean}; + showTimeEditorSlider:false; + enabled:{BooleanUtils.isTrue(branchlineBean.getTimer())}; +} + +#baitHaulingStatus { + property:{BranchlineDto.PROPERTY_BAIT_HAULING_STATUS}; + bean:{branchlineBean}; + selectedItem:{branchlineBean.getBaitHaulingStatus()}; +} + +#branchlineActions { + visible:{tableModel.isEditable()}; +} + +#resetBranchline { + text:"observe.common.CatchLonglineDto.resetBranchline"; + toolTipText:"observe.common.CatchLonglineDto.resetBranchline.tip"; + actionIcon:"revert"; + enabled:{branchlineValidator.isChanged()}; +} + +#saveBranchline{ + text:"observe.common.CatchLonglineDto.saveBranchline"; + toolTipText:"observe.common.CatchLonglineDto.saveBranchline.tip"; + actionIcon:"save"; + enabled:{branchlineValidator.isChanged() && branchlineValidator.isValid()}; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIHandler.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIHandler.java @@ -0,0 +1,508 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.constants.CatchAcquisitionMode; +import fr.ird.observe.client.db.constants.DataContextType; +import fr.ird.observe.client.ui.content.ContentUIModel; +import fr.ird.observe.client.ui.content.table.ContentTableModel; +import fr.ird.observe.client.ui.content.table.ContentTableUIHandler; +import fr.ird.observe.client.ui.content.table.ContentTableUIInitializer; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.ui.tree.navigation.nodes.longline.TripLonglineNavigationTreeNode; +import fr.ird.observe.client.ui.util.UIHelper; +import fr.ird.observe.client.ui.util.table.AutotSelectRowAndShowPopupActionSupport; +import fr.ird.observe.dto.data.longline.BranchlineDto; +import fr.ird.observe.dto.data.longline.CatchLonglineDto; +import fr.ird.observe.dto.data.longline.SetLonglineCatchDto; +import fr.ird.observe.dto.data.longline.TripLonglineReference; +import fr.ird.observe.dto.form.Form; +import fr.ird.observe.dto.form.FormDefinition; +import fr.ird.observe.dto.reference.DtoReferenceCollection; +import fr.ird.observe.dto.referential.SpeciesDto; +import fr.ird.observe.dto.referential.SpeciesReference; +import fr.ird.observe.dto.referential.longline.CatchFateLonglineReference; +import fr.ird.observe.dto.referential.longline.HealthnessReference; +import fr.ird.observe.dto.result.SaveResultDto; +import fr.ird.observe.spi.DtoModelHelper; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.runtime.spi.UIHandler; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.validator.NuitonValidatorScope; + +import javax.swing.JComponent; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.event.TableModelListener; +import javax.swing.table.DefaultTableCellRenderer; +import java.beans.PropertyChangeListener; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 9/11/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since 3.7 + */ +public class CatchLonglineLogbookUIHandler extends ContentTableUIHandler<SetLonglineCatchDto, CatchLonglineDto, CatchLonglineLogbookUI> implements UIHandler<CatchLonglineLogbookUI> { + + /** Logger */ + private static final Log log = LogFactory.getLog(CatchLonglineLogbookUIHandler.class); + private static final String GROUPED_TRIP_TYPE_ID = "fr.ird.observe.entities.referentiel.longline.TripType#1239832686136#0.1"; + // Compute valid state of tab from the error table + protected final TableModelListener computeTabValidStateListener; + private final PropertyChangeListener catchFateChanged; + private final PropertyChangeListener depredatedChanged; + + CatchLonglineLogbookUIHandler() { + super(DataContextType.SetLongline); + computeTabValidStateListener = e -> { + + SwingValidatorMessageTableModel source = (SwingValidatorMessageTableModel) e.getSource(); + computeTabValidState(source); + + }; + catchFateChanged = evt -> onCatchFateChanged((CatchFateLonglineReference) evt.getNewValue()); + depredatedChanged = evt -> onDepredatedChanged((Boolean) evt.getNewValue(), (CatchLonglineDto) evt.getSource()); + + addReferentialFilter(CatchLonglineDto.PROPERTY_SPECIES_CATCH, (ReferentialReferencesFilter<SpeciesDto, SpeciesReference>) incomingReferences -> { + String speciesListId = ObserveSwingApplicationContext.get().getConfig().getSpeciesListLonglineCatchId(); + String tripLonglineId = getDataContext().getSelectedTripLonglineId(); + List<SpeciesReference> result = getTripLonglineService().getSpeciesByListAndTrip(tripLonglineId, speciesListId).toList(); + return DtoReferenceCollection.filterEnabled(result); + }); + + addReferentialFilter(CatchLonglineDto.PROPERTY_PREDATOR, (ReferentialReferencesFilter<SpeciesDto, SpeciesReference>) incomingReferences -> { + String speciesListId = ObserveSwingApplicationContext.get().getConfig().getSpeciesListLonglineDepredatorId(); + String tripLonglineId = getDataContext().getSelectedTripLonglineId(); + List<SpeciesReference> result = getTripLonglineService().getSpeciesByListAndTrip(tripLonglineId, speciesListId).toList(); + return DtoReferenceCollection.filterEnabled(result); + }); + } + + @Override + public CatchLonglineLogbookUIModel getModel() { + return (CatchLonglineLogbookUIModel) super.getModel(); + } + + @Override + public void afterInit(CatchLonglineLogbookUI ui) { + + ContentTableUIInitializer<SetLonglineCatchDto, CatchLonglineDto, CatchLonglineLogbookUI> uiInitializer = new ContentTableUIInitializer<>(ui); + uiInitializer.initUI(); + + ui.setTitle(t(updateTitle(ui.getContentTitle()))); + updateTitle(getModel().getMode()); + + installFocusTraversalPolicy(); + + CatchLonglineLogbookUIModel model = ui.getModel(); + + model.addPropertyChangeListener(ContentUIModel.PROPERTY_FORM, evt -> updateUiWithReferenceSetsFromModel()); + } + + @Override + public void openUI() { + + if (log.isInfoEnabled()) { + log.info("OpenUI: " + getModel()); + } + + super.openUI(); + + // To be sure always remove listener (could prevent some leaks) + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + // listen messages to see if required to add + getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + + SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); + computeTabValidState(errorTableModel); + + } + + void updateCatchAcquisitionMode(CatchAcquisitionMode newMode) { + + if (log.isDebugEnabled()) { + log.debug("Change CatchAcquisitionMode " + newMode); + } + if (newMode == null) { + + // mode null (cela peut arriver avec les bindings) + return; + } + + CatchLonglineLogbookUI ui = getUi(); + + boolean createMode = ui.getTableModel().isCreate(); + + CatchLonglineDto editBean = ui.getTableEditBean(); + + switch (newMode) { + + case GROUPED: + + if (createMode) { + + editBean.setTotalWeight(null); + editBean.setCount(null); + editBean.setHookPosition(null); + + } + + break; + + case INDIVIDUAL: + + if (createMode) { + + // on positionne le count à 1 (seule valeur possible) + editBean.setCount(1); + + } + + break; + } + + boolean isGrouped = CatchAcquisitionMode.GROUPED.equals(newMode); + + ui.getTotalWeight().setEnabled(isGrouped); + ui.getCount().setEnabled(isGrouped); + + if (createMode) { + + // on propage le mode de saisie dans le bean + editBean.setAcquisitionMode(newMode.ordinal()); + + } + } + + @Override + protected void onSelectedRowChanged(int editingRow, CatchLonglineDto bean, boolean create) { + + if (log.isInfoEnabled()) { + log.info("Selected row changed: " + editingRow + ", create? " + create); + } + + CatchLonglineLogbookUI ui = getUi(); + + CatchLonglineTableModel tableModel = getTableModel(); + + if (!tableModel.isEditable()) { + return; + } + + JComponent requestFocus; + + CatchAcquisitionMode acquisitionModeEnum; + + if (tableModel.isCreate()) { + + // go back to first pane + ui.getMainTabbedPane().setSelectedIndex(0); + + NavigationTree treeHelper = getNavigationTree(); + NavigationTreeNodeSupport selectedNode = treeHelper.getSelectedNode(); + while (!(selectedNode instanceof TripLonglineNavigationTreeNode)) { + selectedNode = selectedNode.getParent(); + } + TripLonglineReference tripReference = ((TripLonglineNavigationTreeNode) selectedNode).getData(); + String tripTypeId = tripReference.getTripTypeId(); + if (log.isInfoEnabled()) { + log.info("Use tripId: " + tripTypeId); + } + acquisitionModeEnum = GROUPED_TRIP_TYPE_ID.equals(tripTypeId) ? CatchAcquisitionMode.GROUPED : CatchAcquisitionMode.INDIVIDUAL; + + ui.getPredator().setEnabled(false); + ui.getDiscardHealthness().setEnabled(false); + ui.getBeatDiameter().setEnabled(false); + + requestFocus = ui.getSpeciesCatch(); + + } else { + + int acquisitionMode = bean.getAcquisitionMode(); + + acquisitionModeEnum = CatchAcquisitionMode.valueOf(acquisitionMode); + + if (acquisitionModeEnum.equals(CatchAcquisitionMode.GROUPED)) { + + requestFocus = ui.getCount(); + + } else { + + requestFocus = ui.getCatchHealthness(); + + } + + //FIXME Voir si pas besoin aussi de relancer les binding (catchFateChanged, branchlineChanged) ? + onDepredatedChanged(bean.getDepredated(), bean); + + } + + ui.getAcquisitionModeGroup().setSelectedValue(null); + ui.getAcquisitionModeGroup().setSelectedValue(acquisitionModeEnum); + + bean.removePropertyChangeListener(CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, catchFateChanged); + bean.addPropertyChangeListener(CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, catchFateChanged); + + bean.removePropertyChangeListener(CatchLonglineDto.PROPERTY_DEPREDATED, depredatedChanged); + bean.addPropertyChangeListener(CatchLonglineDto.PROPERTY_DEPREDATED, depredatedChanged); + + UIHelper.askFocus(requestFocus); + + } + + @Override + protected void initTableUI(DefaultTableCellRenderer renderer) { + + CatchLonglineLogbookUI ui = getUi(); + { + // init main table + + JTable table = ui.getTable(); + + UIHelper.setI18nTableHeaderRenderer( + table, + + n("observe.common.CatchLonglineDto.table.speciesCatch"), + n("observe.common.CatchLonglineDto.table.speciesCatch.tip"), + n("observe.common.CatchLonglineDto.table.acquisitionMode"), + n("observe.common.CatchLonglineDto.table.acquisitionMode.tip"), + n("observe.common.CatchLonglineDto.table.count"), + n("observe.common.CatchLonglineDto.table.count.tip"), + n("observe.common.CatchLonglineDto.table.catchHealthness"), + n("observe.common.CatchLonglineDto.table.catchHealthness.tip"), + n("observe.common.CatchLonglineDto.table.catchFateLongline"), + n("observe.common.CatchLonglineDto.table.catchFateLongline.tip"), + n("observe.common.CatchLonglineDto.table.discardHealthness"), + n("observe.common.CatchLonglineDto.table.discardHealthness.tip"), + n("observe.common.CatchLonglineDto.table.depredated"), + n("observe.common.CatchLonglineDto.table.depredated.tip"), + n("observe.common.CatchLonglineDto.table.comment"), + n("observe.common.CatchLonglineDto.table.comment.tip")); + + + UIHelper.setTableColumnRenderer(table, 0, UIHelper.newReferentialReferenceDecorateTableCellRenderer(renderer, SpeciesReference.class)); + UIHelper.setTableColumnRenderer(table, 1, UIHelper.newEnumTableCellRenderer(renderer, CatchAcquisitionMode.class)); + UIHelper.setTableColumnRenderer(table, 2, UIHelper.newEmptyNumberTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 3, UIHelper.newReferentialReferenceDecorateTableCellRenderer(renderer, HealthnessReference.class)); + UIHelper.setTableColumnRenderer(table, 4, UIHelper.newReferentialReferenceDecorateTableCellRenderer(renderer, CatchFateLonglineReference.class)); + UIHelper.setTableColumnRenderer(table, 5, UIHelper.newReferentialReferenceDecorateTableCellRenderer(renderer, HealthnessReference.class)); + UIHelper.setTableColumnRenderer(table, 6, UIHelper.newBooleanTableCellRenderer(renderer)); + UIHelper.setTableColumnRenderer(table, 7, UIHelper.newStringTableCellRenderer(renderer, 10, true)); + + new CatchLonglinesAutotSelectRowAndShowPopupAction(ui, ui.getTableScrollPane(), table, ui.getCatchLonglinesPopup()); + + } + + getTableModel().addPropertyChangeListener(ContentTableModel.CREATE_PROPERTY, evt -> { + Boolean oldValue = (Boolean) evt.getOldValue(); + Boolean newValue = (Boolean) evt.getNewValue(); + setTableModelCreate(oldValue, newValue); + }); + } + + @Override + protected String getEditBeanIdToLoad() { + return getDataContext().getSelectedSetLonglineId(); + } + + @Override + protected void doPersist(SetLonglineCatchDto bean) { + SaveResultDto saveResult = getSetLonglineCatchService().save(bean); + bean.setLastUpdateDate(saveResult.getLastUpdateDate()); + } + + @Override + protected boolean prepareSave(SetLonglineCatchDto editBean, List<CatchLonglineDto> objets) throws Exception { + boolean doSave = super.prepareSave(editBean, objets); + if (doSave) { + editBean.setCatchLongline(objets); + } + return doSave; + } + + @Override + protected void loadEditBean(String beanId) { + + Form<SetLonglineCatchDto> form = getSetLonglineCatchService().loadForm(beanId); + + CatchLonglineLogbookUIModel model = getModel(); + + // On supprime l'entrée sélectionnée dans le tableau + getTableModel().setSelectedRow(-1); + + loadReferentialReferenceSetsInModel(form); + + Optional<FormDefinition<BranchlineDto>> optionalFormDefinition = DtoModelHelper.getOptionalFormDefinition(BranchlineDto.class); + optionalFormDefinition.ifPresent(branchlineDtoFormDefinition -> loadReferentialReferenceSetsInModel(branchlineDtoFormDefinition, false)); + + model.setForm(form); + } + + @Override + protected void closeSafeUI() { + + if (log.isInfoEnabled()) { + log.info("CloseUI: " + getModel()); + } + super.closeSafeUI(); + + // remove listener + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + + } + + private void setTableModelCreate(Boolean oldValue, Boolean newValue) { + + if (BooleanUtils.isTrue(oldValue) && BooleanUtils.isFalse(newValue)) { + + // just save a row + // reload acquisition mode (will rebind some stuff) + + CatchAcquisitionMode acquisitionModeEnum = (CatchAcquisitionMode) getUi().getAcquisitionModeGroup().getSelectedValue(); + + getUi().getAcquisitionModeGroup().setSelectedValue(null); + getUi().getAcquisitionModeGroup().setSelectedValue(acquisitionModeEnum); + + } + + } + + private void onCatchFateChanged(CatchFateLonglineReference newValue) { + + CatchLonglineLogbookUI ui = getUi(); + + if (newValue == null || !"fr.ird.observe.entities.referentiel.longline.CatchFateLongline#1239832686125#0.3".equals(newValue.getId())) { + + // not discarded + ui.getDiscardHealthness().setEnabled(false); + + getTableEditBean().setHookWhenDiscarded(null); + getTableEditBean().setDiscardHealthness(null); + + } else { + + // discarded + ui.getDiscardHealthness().setEnabled(true); + } + + } + + private void onDepredatedChanged(Boolean newValue, CatchLonglineDto tableEditBean) { + + CatchLonglineLogbookUI ui = getUi(); + + if (BooleanUtils.isTrue(newValue)) { + + // depredated + ui.getBeatDiameter().setEnabled(true); + ui.getPredator().setEnabled(true); + + } else { + + // not depredated + ui.getBeatDiameter().setEnabled(false); + ui.getPredator().setEnabled(false); + tableEditBean.setBeatDiameter(null); + tableEditBean.setPredator(null); + + } + + } + + protected void computeTabValidState(SwingValidatorMessageTableModel errorTableModel) { + + Set<String> errorProperties = new HashSet<>(); + int rowCount = errorTableModel.getRowCount(); + for (int i = 0; i < rowCount; i++) { + + SwingValidatorMessage row = errorTableModel.getRow(i); + if (NuitonValidatorScope.ERROR.equals(row.getScope())) { + errorProperties.add(row.getField()); + } + } + + boolean caracteristicsTabValid = !errorProperties.removeAll(CatchLonglineLogbookUIModel.CARACTERISTIC_TAB_PROPERTIES); + boolean depredatedTabValid = !errorProperties.removeAll(CatchLonglineLogbookUIModel.DEPREDATED_TAB_PROPERTIES); + + CatchLonglineLogbookUIModel model = getModel(); + + model.setCaracteristicsTabValid(caracteristicsTabValid); + model.setDepredatedTabValid(depredatedTabValid); + } + + @Override + protected CatchLonglineTableModel getTableModel() { + return (CatchLonglineTableModel) super.getTableModel(); + } + + public void moveCatchLonglineUp() { + int selectedRow = getUi().getTable().getSelectedRow(); + getTableModel().moveUp(selectedRow); + } + + public void moveCatchLonglineDown() { + int selectedRow = getUi().getTable().getSelectedRow(); + getTableModel().moveDown(selectedRow); + } + + static class CatchLonglinesAutotSelectRowAndShowPopupAction extends AutotSelectRowAndShowPopupActionSupport { + + private final CatchLonglineLogbookUI ui; + + CatchLonglinesAutotSelectRowAndShowPopupAction(CatchLonglineLogbookUI ui, + JScrollPane pane, + JTable table, + JPopupMenu popup) { + super(pane, table, popup); + this.ui = ui; + } + + @Override + protected void beforeOpenPopup(int modelRowIndex, int modelColumnIndex) { + + CatchLonglineTableModel model = (CatchLonglineTableModel) getTable().getModel(); + + boolean canMoveUp = !ui.getModel().isCanSaveRow() && modelRowIndex > 0; + boolean canMoveDown = !ui.getModel().isCanSaveRow() && modelRowIndex < model.getRowCount() - 1; + + ui.getMoveCatchLonglineUp().setEnabled(canMoveUp); + ui.getMoveCatchLonglineDown().setEnabled(canMoveDown); + + } + + } +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIModel.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/CatchLonglineLogbookUIModel.java @@ -0,0 +1,152 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.client.ui.content.table.ContentTableMeta; +import fr.ird.observe.client.ui.content.table.ContentTableModel; +import fr.ird.observe.client.ui.content.table.ContentTableUIModel; +import fr.ird.observe.client.ui.content.table.ObserveContentTableUI; +import fr.ird.observe.dto.data.longline.CatchLonglineDto; +import fr.ird.observe.dto.data.longline.SetLonglineCatchDto; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderModelBuilder; + +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +/** + * Created on 9/26/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since 3.7 + */ +public class CatchLonglineLogbookUIModel extends ContentTableUIModel<SetLonglineCatchDto, CatchLonglineDto> { + + public static final String PROPERTY_CARACTERISTICS_TAB_VALID = "caracteristicsTabValid"; + + public static final String PROPERTY_DEPREDATED_TAB_VALID = "depredatedTabValid"; + + public static final Set<String> CARACTERISTIC_TAB_PROPERTIES = + ImmutableSet.<String>builder().add(CatchLonglineDto.PROPERTY_SPECIES_CATCH, + CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, + CatchLonglineDto.PROPERTY_COUNT, + CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, + CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, + CatchLonglineDto.PROPERTY_HOOK_POSITION, + CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, + CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, + CatchLonglineDto.PROPERTY_TAG_NUMBER, + CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED).build(); + + public static final Set<String> DEPREDATED_TAB_PROPERTIES = + ImmutableSet.<String>builder().add(CatchLonglineDto.PROPERTY_DEPREDATED, + CatchLonglineDto.PROPERTY_BEAT_DIAMETER, + CatchLonglineDto.PROPERTY_PREDATOR).build(); + + + private static final long serialVersionUID = 1L; + + protected boolean caracteristicsTabValid; + + protected boolean depredatedTabValid; + + public CatchLonglineLogbookUIModel(CatchLonglineUI ui) { + super(SetLonglineCatchDto.class, + CatchLonglineDto.class, + new String[]{ + SetLonglineCatchDto.PROPERTY_CATCH_LONGLINE + }, + new String[]{CatchLonglineDto.PROPERTY_SPECIES_CATCH, + CatchLonglineDto.PROPERTY_ACQUISITION_MODE, + CatchLonglineDto.PROPERTY_COUNT, + CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, + CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, + CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, + CatchLonglineDto.PROPERTY_DEPREDATED, + CatchLonglineDto.PROPERTY_NUMBER, + CatchLonglineDto.PROPERTY_HOME_ID, + CatchLonglineDto.PROPERTY_HOOK_POSITION, + CatchLonglineDto.PROPERTY_HOOK_WHEN_DISCARDED, + CatchLonglineDto.PROPERTY_MATURITY_STATUS, + CatchLonglineDto.PROPERTY_PHOTO_REFERENCES, + CatchLonglineDto.PROPERTY_SEX, + CatchLonglineDto.PROPERTY_PREDATOR, + CatchLonglineDto.PROPERTY_STOMAC_FULLNESS, + CatchLonglineDto.PROPERTY_TOTAL_WEIGHT, + CatchLonglineDto.PROPERTY_BEAT_DIAMETER, + CatchLonglineDto.PROPERTY_GONADE_WEIGHT, + CatchLonglineDto.PROPERTY_TAG_NUMBER, + CatchLonglineDto.PROPERTY_COMMENT + }); + + List<ContentTableMeta<CatchLonglineDto>> metas = Arrays.asList( + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_SPECIES_CATCH, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_ACQUISITION_MODE, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_COUNT, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_CATCH_HEALTHNESS, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_CATCH_FATE_LONGLINE, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_DISCARD_HEALTHNESS, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_DEPREDATED, false), + ContentTableModel.newTableMeta(CatchLonglineDto.class, CatchLonglineDto.PROPERTY_COMMENT, false)); + + initModel(ui, metas); + + } + + public boolean isCaracteristicsTabValid() { + return caracteristicsTabValid; + } + + public void setCaracteristicsTabValid(boolean caracteristicsTabValid) { + this.caracteristicsTabValid = caracteristicsTabValid; + firePropertyChange(PROPERTY_CARACTERISTICS_TAB_VALID, null, caracteristicsTabValid); + } + + public boolean isDepredatedTabValid() { + return depredatedTabValid; + } + + public void setDepredatedTabValid(boolean depredatedTabValid) { + this.depredatedTabValid = depredatedTabValid; + firePropertyChange(PROPERTY_DEPREDATED_TAB_VALID, null, depredatedTabValid); + } + + @Override + protected CatchLonglineTableModel createTableModel(ObserveContentTableUI<SetLonglineCatchDto, CatchLonglineDto, ?> ui, List<ContentTableMeta<CatchLonglineDto>> contentTableMetas) { + return new CatchLonglineTableModel(ui, contentTableMetas); + } + + @Override + protected BinderModelBuilder<CatchLonglineDto, CatchLonglineDto> prepareChildLoador(String binderName) { + + BinderModelBuilder<CatchLonglineDto, CatchLonglineDto> builder = super.prepareChildLoador(binderName); + + builder.addCollectionStrategy(Binder.CollectionStrategy.duplicate, CatchLonglineDto.PROPERTY_PREDATOR); + + return builder; + + } + +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jaxx ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jaxx @@ -0,0 +1,452 @@ +<!-- + #%L + ObServe :: Client + %% + Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<fr.ird.observe.client.ui.content.ContentUI + i18nFormat="observe.common.SetLonglineDto.%s" + superGenericType='SetLonglineDto, SetLonglineLogbookUI' + contentTitle='{n("observe.common.SetLonglineDto.title")}'> + + <import> + fr.ird.observe.dto.data.longline.SetLonglineDto + fr.ird.observe.dto.referential.longline.SettingShapeReference + fr.ird.observe.dto.referential.longline.LineTypeReference + fr.ird.observe.dto.referential.longline.LightsticksTypeReference + fr.ird.observe.dto.referential.longline.LightsticksColorReference + + fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.ResetEditUIAction + fr.ird.observe.client.ui.actions.content.SaveEditUIAction + fr.ird.observe.client.ui.actions.main.global.DeleteDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.NewNextDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.ResetDataGlobalUIAction + fr.ird.observe.client.ui.actions.main.global.SaveDataGlobalUIAction + + fr.ird.observe.client.ui.content.ContentUIModel + fr.ird.observe.client.ui.util.BooleanEditor + fr.ird.observe.client.ui.util.JComment + + org.nuiton.jaxx.widgets.number.NumberEditor + org.nuiton.jaxx.widgets.select.BeanComboBox + org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditor + org.nuiton.jaxx.widgets.datetime.DateTimeEditor + + org.apache.commons.lang3.BooleanUtils + + java.awt.Dimension + + static fr.ird.observe.client.ui.util.UIHelper.getStringValue + static org.nuiton.i18n.I18n.n + </import> + + <style source="../../Common.jcss"/> + + <!-- model --> + <SetLonglineLogbookUIModel id='model'/> + + <!-- edit bean --> + <SetLonglineDto id='bean'/> + + <!-- validator --> + <BeanValidator id='validator' autoField='true' context='update' + beanClass='fr.ird.observe.dto.data.longline.SetLonglineDto' + errorTableModel='{getErrorTableModel()}'> + + <field name='settingStartLongitude' component='settingStartCoordinates'/> + <field name='settingStartLatitude' component='settingStartCoordinates'/> + <field name='settingStartQuadrant' component='settingStartCoordinates'/> + + <field name='settingEndLongitude' component='settingEndCoordinates'/> + <field name='settingEndLatitude' component='settingEndCoordinates'/> + <field name='settingEndQuadrant' component='settingEndCoordinates'/> + + <field name='haulingStartLongitude' component='haulingStartCoordinates'/> + <field name='haulingStartLatitude' component='haulingStartCoordinates'/> + <field name='haulingStartQuadrant' component='haulingStartCoordinates'/> + + <field name='haulingEndLongitude' component='haulingEndCoordinates'/> + <field name='haulingEndLatitude' component='haulingEndCoordinates'/> + <field name='haulingEndQuadrant' component='haulingEndCoordinates'/> + + </BeanValidator> + + <!-- formulaire --> + <JPanel id="body" layout='{new BorderLayout()}'> + + <Table insets="0" fill="both" constraints='BorderLayout.CENTER'> + <row> + <cell anchor="north"> + <JTabbedPane id='mainTabbedPane'> + <tab id='settingTab' computeI18n=""> + <JPanel layout='{new BorderLayout()}'> + <Table fill='both' constraints='BorderLayout.NORTH'> + + <!-- homeId --> + <row> + <cell anchor='west'> + <JLabel id='homeIdLabel'/> + </cell> + <cell anchor='east' weightx="1" fill="both"> + <JPanel layout='{new BorderLayout()}'> + <JToolBar id='homeIdToolbar' constraints='BorderLayout.WEST'> + <JButton id='resetHomeId' constraints='BorderLayout.WEST' styleClass='resetButton'/> + </JToolBar> + <JTextField id='homeId' constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> + <!-- number --> + <row> + <cell anchor='west'> + <JLabel id='numberLabel'/> + </cell> + <cell columns="2" weightx="1" fill="both"> + <NumberEditor id='number' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- setting shape --> + <row> + <cell anchor='west'> + <JLabel id='settingShapeLabel'/> + </cell> + <cell columns="3" fill="both"> + <BeanComboBox id='settingShape' constructorParams='this' genericType='SettingShapeReference'/> + </cell> + </row> + <row> + <cell columns="2"> + <Table insets="0" fill='both'> + <!-- setting start timeStamp --> + <row> + <cell weightx="1"> + <DateTimeEditor id='settingStartTimeStamp' constructorParams='this'/> + </cell> + </row> + + <!-- setting start position --> + <row> + <cell anchor="east"> + <CoordinatesEditor id='settingStartCoordinates' constructorParams='this'/> + </cell> + </row> + + <!-- setting end timeStamp --> + <row> + <cell> + <DateTimeEditor id='settingEndTimeStamp' constructorParams='this'/> + </cell> + </row> + + <!-- setting end position --> + <row> + <cell anchor="east"> + <CoordinatesEditor id='settingEndCoordinates' constructorParams='this'/> + </cell> + </row> + </Table> + </cell> + </row> + </Table> + </JPanel> + + </tab> + + <tab id='settingCaracteristicsTab' computeI18n=""> + <Table fill='both'> + + <!-- setting vessel speed --> + <row> + <cell> + <JLabel id='settingVesselSpeedLabel'/> + </cell> + <cell columns="3"> + <NumberEditor id='settingVesselSpeed' constructorParams='this' styleClass="float3"/> + </cell> + </row> + <!-- time between hooks --> + <row> + <cell anchor='west'> + <JLabel id='timeBetweenHooksLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='timeBetweenHooks' constructorParams='this' styleClass="long10"/> + </cell> + </row> + <!-- total line length --> + <row> + <cell anchor='west'> + <JLabel id='totalLineLengthLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='totalLineLength' constructorParams='this' styleClass="long10"/> + </cell> + </row> + <!-- basket line length --> + <row> + <cell anchor='west'> + <JLabel id='basketLineLengthLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='basketLineLength' constructorParams='this' styleClass="long10"/> + </cell> + </row> + <!-- lengthBetweenBranchlines --> + <row> + <cell anchor='west'> + <JLabel id='lengthBetweenBranchlinesLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='lengthBetweenBranchlines' constructorParams='this' styleClass="long10"/> + </cell> + </row> + + <!-- shooter used --> + <!-- shooter speed --> + <row> + <cell anchor="east"> + <JCheckBox id='shooterUsed' styleClass="i18n"/> + </cell> + <cell> + <JLabel id='shooterSpeedLabel'/> + </cell> + <cell columns="2"> + <NumberEditor id='shooterSpeed' constructorParams='this' styleClass="float3"/> + </cell> + </row> + <!-- max depth targeted (m) --> + <row> + <cell> + <JLabel id='maxDepthTargetedLabel'/> + </cell> + <cell columns="3"> + <NumberEditor id='maxDepthTargeted' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- total section count --> + <row> + <cell anchor='west'> + <JLabel id='totalSectionsCountLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='totalSectionsCount' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- basket per section count --> + <!-- total basket count --> + <row> + <cell anchor='west'> + <JLabel id='basketsPerSectionCountLabel'/> + </cell> + <cell fill='both' weightx="1"> + <NumberEditor id='basketsPerSectionCount' constructorParams='this' styleClass="int6"/> + </cell> + <cell anchor='west'> + <JLabel id='totalBasketsCountLabel'/> + </cell> + <cell fill='both' weightx="1"> + <NumberEditor id='totalBasketsCount' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- branchlines per basket count --> + <!-- total hooks count --> + <row> + <cell anchor='west'> + <JLabel id='branchlinesPerBasketCountLabel'/> + </cell> + <cell fill='both' weightx="1"> + <NumberEditor id='branchlinesPerBasketCount' constructorParams='this' styleClass="int6"/> + </cell> + <cell anchor='west'> + <JLabel id='totalHooksCountLabel'/> + </cell> + <cell fill='both' weightx="1"> + <NumberEditor id='totalHooksCount' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- line type --> + <row> + <cell anchor='west'> + <JLabel id='lineTypeLabel'/> + </cell> + <cell columns="3"> + <BeanComboBox id='lineType' constructorParams='this' genericType='LineTypeReference'/> + </cell> + </row> + <!-- weighted swivels --> + <!-- swivels weights --> + <row> + <cell anchor="east"> + <JCheckBox id='weightedSwivel' styleClass="i18n"/> + </cell> + <cell anchor="west"> + <JLabel id='swivelWeightLabel'/> + </cell> + <cell columns="2"> + <NumberEditor id='swivelWeight' constructorParams='this' styleClass="float3"/> + </cell> + </row> + + <!-- weighted snaps --> + <!-- snap weights --> + <row> + <cell anchor='east'> + <JCheckBox id='weightedSnap' styleClass="i18n"/> + </cell> + <cell> + <JLabel id='snapWeightLabel'/> + </cell> + <cell columns="2"> + <NumberEditor id='snapWeight' constructorParams='this' styleClass="float3"/> + </cell> + </row> + <!-- monitored --> + <row> + <cell anchor='east'> + <JCheckBox id='monitored' styleClass="i18n"/> + </cell> + </row> + </Table> + </tab> + + <tab id='lightstickssTab' computeI18n=""> + <JPanel layout='{new BorderLayout()}'> + <Table fill='both' constraints='BorderLayout.NORTH'> + <!-- lightsticksUsed --> + <row> + <cell anchor='east'> + <JCheckBox id='lightsticksUsed' styleClass="i18n"/> + </cell> + </row> + <!-- lightsticks per basket count --> + <row> + <cell anchor='west'> + <JLabel id='lightsticksPerBasketCountLabel'/> + </cell> + <cell fill='both' weightx="1" columns="3"> + <NumberEditor id='lightsticksPerBasketCount' constructorParams='this' styleClass="int6"/> + </cell> + </row> + <!-- lightsticks type --> + <row> + <cell anchor='west'> + <JLabel id='lightsticksTypeLabel'/> + </cell> + <cell columns="3"> + <BeanComboBox id='lightsticksType' constructorParams='this' genericType='LightsticksTypeReference'/> + </cell> + </row> + <!-- lightsticks color --> + <row> + <cell anchor='west'> + <JLabel id='lightsticksColorLabel'/> + </cell> + <cell columns="3"> + <BeanComboBox id='lightsticksColor' constructorParams='this' genericType='LightsticksColorReference'/> + </cell> + </row> + </Table> + </JPanel> + </tab> + + <tab id='haulingTab' computeI18n=""> + + <JPanel layout='{new BorderLayout()}'> + <Table fill='both' constraints='BorderLayout.NORTH'> + + <!-- hauling same direction as setting --> + <row> + <cell> + <JLabel id='haulingDirectionSameAsSettingLabel'/> + </cell> + <cell> + <BooleanEditor id='haulingDirectionSameAsSetting'/> + </cell> + </row> + + <!-- hauling start timeStamp --> + <row> + <cell columns="2" weightx="1"> + <DateTimeEditor id='haulingStartTimeStamp' constructorParams='this'/> + </cell> + </row> + + <!-- hauling start position --> + <row> + <cell columns="2" anchor='east'> + <CoordinatesEditor id='haulingStartCoordinates' constructorParams='this'/> + </cell> + </row> + + <!-- hauling end timeStamp --> + <row> + <cell columns="2" weightx="1"> + <DateTimeEditor id='haulingEndTimeStamp' constructorParams='this'/> + </cell> + </row> + + <!-- hauling end position --> + <row> + <cell columns="2" anchor='east'> + <CoordinatesEditor id='haulingEndCoordinates' constructorParams='this'/> + </cell> + </row> + + <row> + <!-- hauling breaks --> + <cell anchor="west"> + <JLabel id='haulingBreaksLabel'/> + </cell> + <cell weightx="1" fill="both"> + <NumberEditor id='haulingBreaks' constructorParams='this' styleClass="int6"/> + </cell> + </row> + </Table> + </JPanel> + </tab> + </JTabbedPane> + </cell> + </row> + + <row> + <cell fill="both" weighty="1" weightx="1"> + <JComment id="comment"/> + </cell> + </row> + + </Table> + </JPanel> + + <!-- actions --> + <Table id="actions" fill='both' weightx='1' insets='0'> + <row> + <cell weightx="0.5" fill="both"> + <JButton id='reset'/> + </cell> + <cell weightx="0.5"> + <JButton id='save'/> + </cell> + <cell weightx="0.5"> + <JButton id='delete'/> + </cell> + </row> + </Table> + +</fr.ird.observe.client.ui.content.ContentUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jcss ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUI.jcss @@ -0,0 +1,254 @@ +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +#model { + editable:true; + modified:{validator.isChanged()}; + valid:{validator.isValid()}; + enabled:{!model.isReadingMode()}; +} + +/* ***************************************************************************** */ +/* SETTING TAB **************************************************************** */ +/* ***************************************************************************** */ + +#settingTab { + icon:{handler.getErrorIconIfFalse(model.isSettingTabValid())}; +} + +#homeId { + text: {getStringValue(bean.getHomeId())}; + _propertyName: {SetLonglineDto.PROPERTY_HOME_ID}; +} + +#resetHomeId { + _resetPropertyName: {SetLonglineDto.PROPERTY_HOME_ID}; + toolTipText:"observe.common.SetLonglineDto.action.reset.homeId.tip"; +} + +#number { + property: {SetLonglineDto.PROPERTY_NUMBER}; + numberValue:{bean.getNumber()}; +} + +#settingStartTimeStamp { + date:{bean.getSettingStartTimeStamp()}; + propertyDate: {SetLonglineDto.PROPERTY_SETTING_START_TIME_STAMP}; +} + +#settingStartCoordinates { + propertyLatitude:{SetLonglineDto.PROPERTY_SETTING_START_LATITUDE}; + propertyLongitude:{SetLonglineDto.PROPERTY_SETTING_START_LONGITUDE}; + propertyQuadrant:{SetLonglineDto.PROPERTY_SETTING_START_QUADRANT}; + latitude:{bean.getSettingStartLatitude()}; + longitude:{bean.getSettingStartLongitude()}; + quadrant:{bean.getSettingStartQuadrant()}; +} + +#settingEndTimeStamp { + date:{bean.getSettingEndTimeStamp()}; + propertyDate: {SetLonglineDto.PROPERTY_SETTING_END_TIME_STAMP}; +} + +#settingEndCoordinates { + propertyLatitude:{SetLonglineDto.PROPERTY_SETTING_END_LATITUDE}; + propertyLongitude:{SetLonglineDto.PROPERTY_SETTING_END_LONGITUDE}; + propertyQuadrant:{SetLonglineDto.PROPERTY_SETTING_END_QUADRANT}; + latitude:{bean.getSettingEndLatitude()}; + longitude:{bean.getSettingEndLongitude()}; + quadrant:{bean.getSettingEndQuadrant()}; +} + +/* ***************************************************************************** */ +/* SETTING CARACTERISTICS TAB ************************************************* */ +/* ***************************************************************************** */ + +#settingCaracteristicsTab { + icon:{handler.getErrorIconIfFalse(model.isSettingCaracteristicsTabValid())}; +} + +#settingVesselSpeed { + property:{SetLonglineDto.PROPERTY_SETTING_VESSEL_SPEED}; + numberValue:{bean.getSettingVesselSpeed()}; +} + +#shooterUsed { + horizontalTextPosition:{JCheckBox.LEFT}; + _propertyName:{SetLonglineDto.PROPERTY_SHOOTER_USED}; + selected:{BooleanUtils.isTrue(bean.getShooterUsed())}; +} + +#shooterSpeed { + enabled:{BooleanUtils.isTrue(bean.getShooterUsed())}; + property:{SetLonglineDto.PROPERTY_SHOOTER_SPEED}; + numberValue:{bean.getShooterSpeed()}; +} + +#settingShape { + property:{SetLonglineDto.PROPERTY_SETTING_SHAPE}; + selectedItem:{bean.getSettingShape()}; +} + +#weightedSwivel { + horizontalTextPosition:{JCheckBox.LEFT}; + _propertyName:{SetLonglineDto.PROPERTY_WEIGHTED_SWIVEL}; + selected:{BooleanUtils.isTrue(bean.getWeightedSwivel())}; +} + +#swivelWeight { + enabled:{BooleanUtils.isTrue(bean.getWeightedSwivel())}; + property:{SetLonglineDto.PROPERTY_SWIVEL_WEIGHT}; + numberValue:{bean.getSwivelWeight()}; +} + +#weightedSnap { + horizontalTextPosition:{JCheckBox.LEFT}; + _propertyName:{SetLonglineDto.PROPERTY_WEIGHTED_SNAP}; + selected:{BooleanUtils.isTrue(bean.getWeightedSnap())}; +} + +#snapWeight { + enabled:{BooleanUtils.isTrue(bean.getWeightedSnap())}; + property:{SetLonglineDto.PROPERTY_SNAP_WEIGHT}; + numberValue:{bean.getSnapWeight()}; +} + +#lineType { + property:{SetLonglineDto.PROPERTY_LINE_TYPE}; + selectedItem:{bean.getLineType()}; +} + +#maxDepthTargeted { + property:{SetLonglineDto.PROPERTY_MAX_DEPTH_TARGETED}; + numberValue:{bean.getMaxDepthTargeted()}; +} + +#monitored { + horizontalTextPosition:{JCheckBox.LEFT}; + _propertyName:{SetLonglineDto.PROPERTY_MONITORED}; + selected:{BooleanUtils.isTrue(bean.getMonitored())}; +} + +#lightsticksType { + property:{SetLonglineDto.PROPERTY_LIGHTSTICKS_TYPE}; + selectedItem:{bean.getLightsticksType()}; + enabled:{bean.getLightsticksPerBasketCount() !=null && bean.getLightsticksPerBasketCount() > 0}; +} + +#lightsticksColor { + property:{SetLonglineDto.PROPERTY_LIGHTSTICKS_COLOR}; + selectedItem:{bean.getLightsticksColor()}; + enabled:{bean.getLightsticksPerBasketCount() !=null && bean.getLightsticksPerBasketCount() > 0}; +} + +#timeBetweenHooks { + property:{SetLonglineDto.PROPERTY_TIME_BETWEEN_HOOKS}; + numberValue:{bean.getTimeBetweenHooks()}; +} + +#lightsticksPerBasketCount { + property:{SetLonglineDto.PROPERTY_LIGHTSTICKS_PER_BASKET_COUNT}; + numberValue:{bean.getLightsticksPerBasketCount()}; +} + +#basketsPerSectionCount { + property:{SetLonglineDto.PROPERTY_BASKETS_PER_SECTION_COUNT}; + numberValue:{bean.getBasketsPerSectionCount()}; +} + +#totalBasketsCount { + property:{SetLonglineDto.PROPERTY_TOTAL_BASKETS_COUNT}; + numberValue:{bean.getTotalBasketsCount()}; +} + +#branchlinesPerBasketCount { + property:{SetLonglineDto.PROPERTY_BRANCHLINES_PER_BASKET_COUNT}; + numberValue:{bean.getBranchlinesPerBasketCount()}; +} + +#totalSectionsCount { + property:{SetLonglineDto.PROPERTY_TOTAL_SECTIONS_COUNT}; + numberValue:{bean.getTotalSectionsCount()}; +} + +#totalHooksCount { + property:{SetLonglineDto.PROPERTY_TOTAL_HOOKS_COUNT}; + numberValue:{bean.getTotalHooksCount()}; +} + +/* ***************************************************************************** */ +/* HAULING TAB **************************************************************** */ +/* ***************************************************************************** */ + +#haulingTab { + icon:{handler.getErrorIconIfFalse(model.isHaulingTabValid())}; +} + +#haulingDirectionSameAsSetting { + booleanValue:{bean.getHaulingDirectionSameAsSetting()}; + _propertyName: {SetLonglineDto.PROPERTY_HAULING_DIRECTION_SAME_AS_SETTING}; +} + +#haulingStartTimeStamp { + date:{bean.getHaulingStartTimeStamp()}; + propertyDate: {SetLonglineDto.PROPERTY_HAULING_START_TIME_STAMP}; +} + +#haulingStartCoordinates { + propertyLatitude:{SetLonglineDto.PROPERTY_HAULING_START_LATITUDE}; + propertyLongitude:{SetLonglineDto.PROPERTY_HAULING_START_LONGITUDE}; + propertyQuadrant:{SetLonglineDto.PROPERTY_HAULING_START_QUADRANT}; + latitude:{bean.getHaulingStartLatitude()}; + longitude:{bean.getHaulingStartLongitude()}; + quadrant:{bean.getHaulingStartQuadrant()}; +} + +#haulingEndTimeStamp { + date:{bean.getHaulingEndTimeStamp()}; + propertyDate: {SetLonglineDto.PROPERTY_HAULING_END_TIME_STAMP}; +} + +#haulingEndCoordinates { + propertyLatitude:{SetLonglineDto.PROPERTY_HAULING_END_LATITUDE}; + propertyLongitude:{SetLonglineDto.PROPERTY_HAULING_END_LONGITUDE}; + propertyQuadrant:{SetLonglineDto.PROPERTY_HAULING_END_QUADRANT}; + latitude:{bean.getHaulingEndLatitude()}; + longitude:{bean.getHaulingEndLongitude()}; + quadrant:{bean.getHaulingEndQuadrant()}; +} + +#haulingBreaks { + property:{SetLonglineDto.PROPERTY_HAULING_BREAKS}; + numberValue:{bean.getHaulingBreaks()}; +} + +#delete { + _globalAction:{DeleteDataGlobalUIAction.ACTION_NAME}; +} + +#save { + _globalAction:{SaveDataGlobalUIAction.ACTION_NAME}; +} + +#reset { + _globalAction:{ResetDataGlobalUIAction.ACTION_NAME}; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIHandler.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIHandler.java @@ -0,0 +1,495 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.db.ClientDataContext; +import fr.ird.observe.client.db.ObserveSwingDataSource; +import fr.ird.observe.client.db.constants.DataContextType; +import fr.ird.observe.client.ui.content.ContentMode; +import fr.ird.observe.client.ui.content.ContentUIHandler; +import fr.ird.observe.client.ui.content.ContentUIModel; +import fr.ird.observe.client.ui.tree.navigation.NavigationTree; +import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; +import fr.ird.observe.client.validation.ClientValidationContext; +import fr.ird.observe.dto.data.longline.ActivityLonglineDto; +import fr.ird.observe.dto.data.longline.SetLonglineDto; +import fr.ird.observe.dto.data.longline.SetLonglineHelper; +import fr.ird.observe.dto.data.longline.SetLonglineReference; +import fr.ird.observe.dto.form.Form; +import fr.ird.observe.dto.result.SaveResultDto; +import fr.ird.observe.spi.DtoModelHelper; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.runtime.spi.UIHandler; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessage; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; +import org.nuiton.jaxx.widgets.gis.CoordinateFormat; +import org.nuiton.jaxx.widgets.gis.absolute.CoordinatesEditorModel; +import org.nuiton.jaxx.widgets.hidor.HidorButton; +import org.nuiton.validator.NuitonValidatorScope; + +import javax.swing.event.TableModelListener; +import java.beans.PropertyChangeListener; +import java.util.HashSet; +import java.util.Set; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 9/1/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since 3.7 + */ +public class SetLonglineLogbookUIHandler extends ContentUIHandler<SetLonglineDto, SetLonglineLogbookUI> implements UIHandler<SetLonglineLogbookUI> { + + /** Logger */ + private static final Log log = LogFactory.getLog(SetLonglineLogbookUIHandler.class); + + // Compute valid state of tab from the error table + protected final TableModelListener computeTabValidStateListener; + + // Change toogle target visible on all TimeEditors + private final PropertyChangeListener onToogleTimeEditorSliderChangedListener; + + // Change toogle target visible on all TimeEditors + private final PropertyChangeListener onCoordinateFormatChangedListener; + + private boolean toogleTimeEditorSliderIsChanging; + + private boolean coordinateFormatChangedIsChanging; + + SetLonglineLogbookUIHandler() { + super(DataContextType.ActivityLongline, DataContextType.SetLongline); + computeTabValidStateListener = e -> { + + SwingValidatorMessageTableModel source = (SwingValidatorMessageTableModel) e.getSource(); + computeTabValidState(source); + + }; + onToogleTimeEditorSliderChangedListener = evt -> { + Boolean newValue = (Boolean) evt.getNewValue(); + onToogleTimeEditorSliderChanged(newValue); + }; + onCoordinateFormatChangedListener = evt -> { + CoordinateFormat newValue = (CoordinateFormat) evt.getNewValue(); + onCoordinateFormatChanged(newValue); + }; + } + + @Override + protected boolean computeCanWrite(ObserveSwingDataSource source) { + return source.canWriteData(); + } + + @Override + protected ContentMode getContentMode(ClientDataContext dataContext) { + + String setId = getSelectedId(); + + if (setId == null) { + + // mode creation + return ContentMode.CREATE; + + } + + if (getOpenDataManager().isOpenActivityLongline(dataContext.getSelectedActivityLonglineId())) { + + // l'activité est ouverte, mode édition + return ContentMode.UPDATE; + + } + + // l'activité n'est pas ouverte, mode lecture + addMessage(getUi(), + NuitonValidatorScope.INFO, + getTypeI18nKey(ActivityLonglineDto.class), + t("observe.common.ActivityLonglineDto.message.not.open")); + + return ContentMode.READ; + + } + + @Override + public void afterInit(SetLonglineLogbookUI ui) { + super.afterInit(ui); + + ui.getSettingStartTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getSettingEndTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getHaulingStartTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + ui.getHaulingEndTimeStamp().getSliderHidor().addPropertyChangeListener(HidorButton.PROPERTY_TARGET_VISIBLE, onToogleTimeEditorSliderChangedListener); + + ui.getSettingStartCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + ui.getSettingEndCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + ui.getHaulingStartCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + ui.getHaulingEndCoordinates().getModel().addPropertyChangeListener(CoordinatesEditorModel.PROPERTY_FORMAT, onCoordinateFormatChangedListener); + + } + + @Override + public void openUI() { + + getUi().getSettingStartCoordinates().resetModel(); + getUi().getSettingEndCoordinates().resetModel(); + getUi().getHaulingStartCoordinates().resetModel(); + getUi().getHaulingEndCoordinates().resetModel(); + + if (log.isInfoEnabled()) { + log.info("OpenUI: " + getModel()); + } + super.openUI(); + + String activityId = getSelectedParentId(); + String setId = getSelectedId(); + + if (log.isInfoEnabled()) { + log.info("activityId = " + activityId); + log.info("setId = " + setId); + } + ContentMode mode = computeContentMode(); + + SetLonglineDto bean = getBean(); + + Form<SetLonglineDto> form; + if (setId == null) { + + // create mode + form = getSetLonglineService().preCreate(activityId); + + } else { + + // update mode + form = getSetLonglineService().loadForm(setId); + + } + + loadReferentialReferenceSetsInModel(form); + + getModel().setForm(form); + SetLonglineHelper.copySetLonglineDto(form.getObject(), bean); + + // 1. Mise à jour latitude/longitude: + getUi().getSettingStartCoordinates().setLatitudeAndLongitude(bean.getSettingStartLatitude(), bean.getSettingStartLongitude()); + // 2. Mise à jour du quadrant : + // Si le bean de données contient un quadrant, on met simplement à jour le composant de coordonnées pour sélectionner le quadrant voulu + // sinon, on réinitialise les quadrants du composant afin qu'aucun d'eux ne soit sélectionné (par exemple dans le cas de la création de la première activité d'une route) + if (bean.getSettingStartQuadrant() == null) { + getUi().getSettingStartCoordinates().resetQuadrant(); + } else { + getUi().getSettingStartCoordinates().setQuadrant(bean.getSettingStartQuadrant()); + } + + // 1. Mise à jour latitude/longitude: + getUi().getSettingEndCoordinates().setLatitudeAndLongitude(bean.getSettingEndLatitude(), bean.getSettingEndLongitude()); + // 2. Mise à jour du quadrant : + // Si le bean de données contient un quadrant, on met simplement à jour le composant de coordonnées pour sélectionner le quadrant voulu + // sinon, on réinitialise les quadrants du composant afin qu'aucun d'eux ne soit sélectionné (par exemple dans le cas de la création de la première activité d'une route) + if (bean.getSettingEndQuadrant() == null) { + getUi().getSettingEndCoordinates().resetQuadrant(); + } else { + getUi().getSettingEndCoordinates().setQuadrant(bean.getSettingEndQuadrant()); + } + + // 1. Mise à jour latitude/longitude: + getUi().getHaulingStartCoordinates().setLatitudeAndLongitude(bean.getHaulingStartLatitude(), bean.getHaulingStartLongitude()); + // 2. Mise à jour du quadrant : + // Si le bean de données contient un quadrant, on met simplement à jour le composant de coordonnées pour sélectionner le quadrant voulu + // sinon, on réinitialise les quadrants du composant afin qu'aucun d'eux ne soit sélectionné (par exemple dans le cas de la création de la première activité d'une route) + if (bean.getHaulingStartQuadrant() == null) { + getUi().getHaulingStartCoordinates().resetQuadrant(); + } else { + getUi().getHaulingStartCoordinates().setQuadrant(bean.getHaulingStartQuadrant()); + } + + // 1. Mise à jour latitude/longitude: + getUi().getHaulingEndCoordinates().setLatitudeAndLongitude(bean.getHaulingEndLatitude(), bean.getHaulingEndLongitude()); + // 2. Mise à jour du quadrant : + // Si le bean de données contient un quadrant, on met simplement à jour le composant de coordonnées pour sélectionner le quadrant voulu + // sinon, on réinitialise les quadrants du composant afin qu'aucun d'eux ne soit sélectionné (par exemple dans le cas de la création de la première activité d'une route) + if (bean.getHaulingEndQuadrant() == null) { + getUi().getHaulingEndCoordinates().resetQuadrant(); + } else { + getUi().getHaulingEndCoordinates().setQuadrant(bean.getHaulingEndQuadrant()); + } + + // utilisation du mode requis + setContentMode(mode); + + // To be sure always remove listener (could prevent some leaks) + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + // listen messages to see if required to add + getUi().getErrorTableModel().addTableModelListener(computeTabValidStateListener); + + SwingValidatorMessageTableModel errorTableModel = getUi().getErrorTableModel(); + computeTabValidState(errorTableModel); + + if (mode != ContentMode.READ) { + getUi().startEdit(null); + } + + } + + @Override + protected void closeSafeUI() { + + if (log.isInfoEnabled()) { + log.info("CloseUI: " + getModel()); + } + super.closeSafeUI(); + + // remove listener + getUi().getErrorTableModel().removeTableModelListener(computeTabValidStateListener); + + } + + @Override + public void startEditUI(String... binding) { + + ContentUIModel<SetLonglineDto> model = getModel(); + boolean create = model.getMode() == ContentMode.CREATE; + String contextName = getValidatorContextName(model.getMode()); + getUi().getValidator().setContext(contextName); + if (create) { + addInfoMessage(t("observe.common.SetLonglineDto.message.creating")); + } else { + addInfoMessage(t("observe.common.SetLonglineDto.message.updating")); + } + + super.startEditUI(SetLonglineLogbookUI.BINDING_COMMENT_MODEL, + + // setting tab + SetLonglineLogbookUI.BINDING_HOME_ID_TEXT, + SetLonglineLogbookUI.BINDING_NUMBER_NUMBER_VALUE, + + SetLonglineLogbookUI.BINDING_SETTING_START_TIME_STAMP_DATE, + SetLonglineLogbookUI.BINDING_SETTING_START_COORDINATES_LATITUDE, + SetLonglineLogbookUI.BINDING_SETTING_START_COORDINATES_LONGITUDE, + + SetLonglineLogbookUI.BINDING_SETTING_END_TIME_STAMP_DATE, + SetLonglineLogbookUI.BINDING_SETTING_END_COORDINATES_LATITUDE, + SetLonglineLogbookUI.BINDING_SETTING_END_COORDINATES_LONGITUDE, + + // setting caracteristics tab + SetLonglineLogbookUI.BINDING_SETTING_VESSEL_SPEED_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_SHOOTER_USED_SELECTED, + SetLonglineLogbookUI.BINDING_SHOOTER_SPEED_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_TIME_BETWEEN_HOOKS_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_SETTING_SHAPE_SELECTED_ITEM, + SetLonglineLogbookUI.BINDING_WEIGHTED_SWIVEL_SELECTED, + SetLonglineLogbookUI.BINDING_SWIVEL_WEIGHT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_WEIGHTED_SNAP_SELECTED, + SetLonglineLogbookUI.BINDING_SNAP_WEIGHT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_LINE_TYPE_SELECTED_ITEM, + SetLonglineLogbookUI.BINDING_MAX_DEPTH_TARGETED_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_MONITORED_SELECTED, + SetLonglineLogbookUI.BINDING_LIGHTSTICKS_TYPE_SELECTED_ITEM, + SetLonglineLogbookUI.BINDING_LIGHTSTICKS_COLOR_SELECTED_ITEM, + SetLonglineLogbookUI.BINDING_LIGHTSTICKS_PER_BASKET_COUNT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_BASKETS_PER_SECTION_COUNT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_TOTAL_BASKETS_COUNT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_BRANCHLINES_PER_BASKET_COUNT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_TOTAL_SECTIONS_COUNT_NUMBER_VALUE, + SetLonglineLogbookUI.BINDING_TOTAL_HOOKS_COUNT_NUMBER_VALUE, + + // hauling tab + SetLonglineLogbookUI.BINDING_HAULING_DIRECTION_SAME_AS_SETTING_BOOLEAN_VALUE, + + SetLonglineLogbookUI.BINDING_HAULING_START_TIME_STAMP_DATE, + SetLonglineLogbookUI.BINDING_HAULING_START_COORDINATES_LATITUDE, + SetLonglineLogbookUI.BINDING_HAULING_START_COORDINATES_LONGITUDE, + + SetLonglineLogbookUI.BINDING_HAULING_END_TIME_STAMP_DATE, + SetLonglineLogbookUI.BINDING_HAULING_END_COORDINATES_LATITUDE, + SetLonglineLogbookUI.BINDING_HAULING_END_COORDINATES_LONGITUDE, + + SetLonglineLogbookUI.BINDING_HAULING_BREAKS_NUMBER_VALUE); + + model.setModified(create); + + } + + @Override + protected boolean doSave(SetLonglineDto bean) { + + String activityId = getSelectedParentId(); + + boolean notPersisted = bean.isNotPersisted(); + + SaveResultDto saveResult = getSetLonglineService().save(activityId, bean); + saveResult.toDto(bean); + + if (notPersisted) { + getOpenDataManager().openSetLongline(activityId, bean.getId()); + } + + return true; + + } + + @Override + protected void afterSave(boolean refresh) { + + super.afterSave(refresh); + + SetLonglineDto bean = getBean(); + + SwingValidatorUtil.setValidatorChanged(getUi(), false); + + NavigationTree treeHelper = getNavigationTree(); + + NavigationTreeNodeSupport node = treeHelper.getSelectedNode(); + boolean create = node.getId() == null; + + if (create) { + + getModel().setMode(ContentMode.UPDATE); + + // remove old node and recreate new node + NavigationTreeNodeSupport parentNode = node.getParent(); + treeHelper.removeNode(node); + + SetLonglineReference reference = DtoModelHelper.fromDataDto(SetLonglineDto.class).toReference(getDecoratorService().getReferentialLocale(), bean); + node = treeHelper.addSetLongline(parentNode, reference); + + stopEditUI(); + treeHelper.selectNode(node); + + } else { + + // select ancestor node + treeHelper.reloadSelectedNode(false, false); + + } + + } + + @Override + protected boolean doDelete(SetLonglineDto bean) { + + if (askToDelete(bean)) { + return false; + } + + String activityId = getSelectedParentId(); + getSetLonglineService().delete(activityId, bean.getId()); + + return true; + + } + + @Override + protected void prepareValidationContext() { + super.prepareValidationContext(); + + ClientValidationContext validationContext = ObserveSwingApplicationContext.get().getValidationContext(); + validationContext.setCoordinatesEditor("haulingStart", getUi().getHaulingStartCoordinates()); + validationContext.setCoordinatesEditor("haulingEnd", getUi().getHaulingEndCoordinates()); + validationContext.setCoordinatesEditor("settingStart", getUi().getSettingStartCoordinates()); + validationContext.setCoordinatesEditor("settingEnd", getUi().getSettingEndCoordinates()); + + } + + + protected void computeTabValidState(SwingValidatorMessageTableModel errorTableModel) { + + Set<String> errorProperties = new HashSet<>(); + int rowCount = errorTableModel.getRowCount(); + for (int i = 0; i < rowCount; i++) { + + SwingValidatorMessage row = errorTableModel.getRow(i); + if (NuitonValidatorScope.ERROR.equals(row.getScope())) { + errorProperties.add(row.getField()); + } + } + + boolean settingTabValid = !errorProperties.removeAll(SetLonglineLogbookUIModel.SETTING_TAB_PROPERTIES); + boolean settingCaracteristicsTabValid = !errorProperties.removeAll(SetLonglineLogbookUIModel.SETTING_CARACTERISTICS_TAB_PROPERTIES); + boolean haulingTabValid = !errorProperties.removeAll(SetLonglineLogbookUIModel.HAULING_TAB_PROPERTIES); + + SetLonglineLogbookUIModel model = (SetLonglineLogbookUIModel) getModel(); + model.setSettingTabValid(settingTabValid); + model.setSettingCaracteristicsTabValid(settingCaracteristicsTabValid); + model.setHaulingTabValid(haulingTabValid); + + } + + private void onToogleTimeEditorSliderChanged(boolean newValue) { + + if (!toogleTimeEditorSliderIsChanging) { + + toogleTimeEditorSliderIsChanging = true; + + boolean selected = !newValue; + + try { + + getUi().getSettingStartTimeStamp().getSliderHidor().setSelected(selected); + getUi().getSettingStartTimeStamp().getSliderHidor().setTargetVisible(newValue); + + getUi().getSettingEndTimeStamp().getSliderHidor().setSelected(selected); + getUi().getSettingEndTimeStamp().getSliderHidor().setTargetVisible(newValue); + + getUi().getHaulingStartTimeStamp().getSliderHidor().setSelected(selected); + getUi().getHaulingStartTimeStamp().getSliderHidor().setTargetVisible(newValue); + + getUi().getHaulingEndTimeStamp().getSliderHidor().setSelected(selected); + getUi().getHaulingEndTimeStamp().getSliderHidor().setTargetVisible(newValue); + + } finally { + + toogleTimeEditorSliderIsChanging = false; + + } + + } + + } + + private synchronized void onCoordinateFormatChanged(CoordinateFormat newValue) { + + if (!coordinateFormatChangedIsChanging) { + + coordinateFormatChangedIsChanging = true; + + try { + + getUi().getSettingStartCoordinates().setFormat(newValue); + getUi().getSettingEndCoordinates().setFormat(newValue); + + getUi().getHaulingStartCoordinates().setFormat(newValue); + getUi().getHaulingEndCoordinates().setFormat(newValue); + + } finally { + + coordinateFormatChangedIsChanging = false; + + } + + } + + } + +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIModel.java ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/SetLonglineLogbookUIModel.java @@ -0,0 +1,132 @@ +package fr.ird.observe.client.ui.content.data.longline; + +/* + * #%L + * ObServe :: Client + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.ImmutableSet; +import fr.ird.observe.client.ui.content.ContentUIModel; +import fr.ird.observe.dto.data.longline.SetLonglineDto; + +import java.util.Set; + +/** + * Created on 9/28/14. + * + * @author Tony Chemit - dev(a)tchemit.fr + * @since XXX + */ +public class SetLonglineLogbookUIModel extends ContentUIModel<SetLonglineDto> { + + public static final String PROPERTY_SETTING_TAB_VALID = "settingTabValid"; + + public static final String PROPERTY_SETTING_CARACTERISTICS_TAB_VALID = "settingCaracteristicsTabValid"; + + public static final String PROPERTY_HAULING_TAB_VALID = "haulingTabValid"; + + public static final Set<String> SETTING_TAB_PROPERTIES = + ImmutableSet.<String>builder().add( + SetLonglineDto.PROPERTY_HOME_ID, + SetLonglineDto.PROPERTY_NUMBER, + SetLonglineDto.PROPERTY_SETTING_START_TIME_STAMP, + SetLonglineDto.PROPERTY_SETTING_START_LATITUDE, + SetLonglineDto.PROPERTY_SETTING_START_LONGITUDE, + SetLonglineDto.PROPERTY_SETTING_END_TIME_STAMP, + SetLonglineDto.PROPERTY_SETTING_END_LATITUDE, + SetLonglineDto.PROPERTY_SETTING_END_LONGITUDE + ).build(); + + public static final Set<String> SETTING_CARACTERISTICS_TAB_PROPERTIES = + ImmutableSet.<String>builder().add( + SetLonglineDto.PROPERTY_SETTING_SHAPE, + SetLonglineDto.PROPERTY_LINE_TYPE, + SetLonglineDto.PROPERTY_LIGHTSTICKS_TYPE, + SetLonglineDto.PROPERTY_LIGHTSTICKS_COLOR, + SetLonglineDto.PROPERTY_SETTING_VESSEL_SPEED, + SetLonglineDto.PROPERTY_MAX_DEPTH_TARGETED, + SetLonglineDto.PROPERTY_SHOOTER_USED, + SetLonglineDto.PROPERTY_SHOOTER_SPEED, + SetLonglineDto.PROPERTY_WEIGHTED_SWIVEL, + SetLonglineDto.PROPERTY_SWIVEL_WEIGHT, + SetLonglineDto.PROPERTY_WEIGHTED_SNAP, + SetLonglineDto.PROPERTY_SNAP_WEIGHT, + SetLonglineDto.PROPERTY_MONITORED, + SetLonglineDto.PROPERTY_TIME_BETWEEN_HOOKS, + SetLonglineDto.PROPERTY_BASKETS_PER_SECTION_COUNT, + SetLonglineDto.PROPERTY_BRANCHLINES_PER_BASKET_COUNT, + SetLonglineDto.PROPERTY_LIGHTSTICKS_PER_BASKET_COUNT, + SetLonglineDto.PROPERTY_TOTAL_SECTIONS_COUNT, + SetLonglineDto.PROPERTY_TOTAL_BASKETS_COUNT, + SetLonglineDto.PROPERTY_TOTAL_HOOKS_COUNT + ).build(); + + public static final Set<String> HAULING_TAB_PROPERTIES = + ImmutableSet.<String>builder().add( + SetLonglineDto.PROPERTY_HAULING_DIRECTION_SAME_AS_SETTING, + SetLonglineDto.PROPERTY_HAULING_START_LATITUDE, + SetLonglineDto.PROPERTY_HAULING_START_LONGITUDE, + SetLonglineDto.PROPERTY_HAULING_START_TIME_STAMP, + SetLonglineDto.PROPERTY_HAULING_END_LATITUDE, + SetLonglineDto.PROPERTY_HAULING_END_LONGITUDE, + SetLonglineDto.PROPERTY_HAULING_END_TIME_STAMP, + SetLonglineDto.PROPERTY_HAULING_BREAKS + ).build(); + + private static final long serialVersionUID = 1L; + + protected boolean settingTabValid; + + protected boolean settingCaracteristicsTabValid; + + protected boolean haulingTabValid; + + public SetLonglineLogbookUIModel() { + super(SetLonglineDto.class); + } + + public boolean isHaulingTabValid() { + return haulingTabValid; + } + + public void setHaulingTabValid(boolean haulingTabValid) { + this.haulingTabValid = haulingTabValid; + firePropertyChange(PROPERTY_HAULING_TAB_VALID, null, haulingTabValid); + } + + public boolean isSettingCaracteristicsTabValid() { + return settingCaracteristicsTabValid; + } + + public void setSettingCaracteristicsTabValid(boolean settingCaracteristicsTabValid) { + this.settingCaracteristicsTabValid = settingCaracteristicsTabValid; + firePropertyChange(PROPERTY_SETTING_CARACTERISTICS_TAB_VALID, null, settingCaracteristicsTabValid); + } + + public boolean isSettingTabValid() { + return settingTabValid; + } + + public void setSettingTabValid(boolean settingTabValid) { + this.settingTabValid = settingTabValid; + firePropertyChange(PROPERTY_SETTING_TAB_VALID, null, settingTabValid); + } + +} ===================================== client/src/main/resources/i18n/client_en_GB.properties ===================================== --- a/client/src/main/resources/i18n/client_en_GB.properties +++ b/client/src/main/resources/i18n/client_en_GB.properties @@ -364,8 +364,11 @@ observe.common.ActivityLonglineDto.message.no.active.found.for.other.trip=No ope observe.common.ActivityLonglineDto.message.nonForTrip=< No activity for current trip > observe.common.ActivityLonglineDto.message.not.open=Activity is not opened, no edit possible. observe.common.ActivityLonglineDto.message.updating=Updating an activity +observe.common.ActivityLonglineDto.relatedObservedActivity=Observed activity observe.common.ActivityLonglineDto.timeStamp=timestamp observe.common.ActivityLonglineDto.titles=Activities +observe.common.ActivityLonglineDto.vesselSpeed=Speed +observe.common.ActivityLonglineDto.wind=Wind observe.common.ActivitySeineDto.action.addFloatingObject=Add FAD observe.common.ActivitySeineDto.action.addFloatingObject.tip=Add a FAD to the activity observe.common.ActivitySeineDto.action.addSet=Add a Set @@ -454,11 +457,14 @@ observe.common.CatchLonglineDto.availablePredator=Avaiable predators observe.common.CatchLonglineDto.beatDiameter=Beat diameter observe.common.CatchLonglineDto.branchlineTab=Branchline observe.common.CatchLonglineDto.caracteristicTab=Caracteristics +observe.common.CatchLonglineDto.countDepredated=\#TODO observe.common.CatchLonglineDto.depredated=Depredated +observe.common.CatchLonglineDto.depredatedProportion=\#TODO observe.common.CatchLonglineDto.depredatedTab=Depredation observe.common.CatchLonglineDto.foodAndSexualTab=Food and sexual maturity observe.common.CatchLonglineDto.hookWhenDiscarded=Discarded with hook observe.common.CatchLonglineDto.locationOnLongline=Location on longline +observe.common.CatchLonglineDto.onBordDataProcessing=On bord data processing observe.common.CatchLonglineDto.photoReferences=Photo references observe.common.CatchLonglineDto.resetBranchline=Cancel observe.common.CatchLonglineDto.resetBranchline.tip=Cancel any modification @@ -490,6 +496,7 @@ observe.common.CatchLonglineDto.table.speciesCatch=Species observe.common.CatchLonglineDto.table.speciesCatch.tip=Species observe.common.CatchLonglineDto.tagNumber=Tag number observe.common.CatchLonglineDto.totalWeight=Total weight (kg) +observe.common.CatchLonglineDto.weightDeterminationMethod=Weight Determination method observe.common.CatchLonglineDto.weightMeasuresTab=Weights observe.common.DataDto.action.createEntry.tip=Create a new entry observe.common.DataDto.action.deleteEntry.tip=Delete entry in edition @@ -912,14 +919,20 @@ observe.common.SensorUsedDto.table.sensorType.tip=Sensor type observe.common.SetDto.action.goToOpen.short=Open set observe.common.SetDto.action.goToOpen.tip=Open set observe.common.SetLonglineDto.action.reset.homeId.tip=Reset home id +observe.common.SetLonglineDto.basketLineLength=\#TODO observe.common.SetLonglineDto.haulingTab=Hauling +observe.common.SetLonglineDto.lengthBetweenBranchlines=\#TODO +observe.common.SetLonglineDto.lightsticksUsed=\#TODO +observe.common.SetLonglineDto.lightstickssTab=\#TODO observe.common.SetLonglineDto.message.creating=Creating fishing operation observe.common.SetLonglineDto.message.updating=Updating fishing operation observe.common.SetLonglineDto.monitored=Monitored observe.common.SetLonglineDto.settingCaracteristicsTab=Caracteristics observe.common.SetLonglineDto.settingTab=Setting +observe.common.SetLonglineDto.shooterUsed=Shooter used observe.common.SetLonglineDto.targetCatchCompositionEstimatedByObserver=Composition estimated by observer? observe.common.SetLonglineDto.targetDiscardCatchCompositionEstimatedByObserver=Composition estimated by observer? +observe.common.SetLonglineDto.totalLineLength=\#TODO observe.common.SetLonglineDto.weightedSnap=Weighted snap observe.common.SetLonglineDto.weightedSwivel=Weighted swivel observe.common.SetLonglineGlobalCompositionDto.availableMitigationType=Available mitigations ===================================== client/src/main/resources/i18n/client_es_ES.properties ===================================== --- a/client/src/main/resources/i18n/client_es_ES.properties +++ b/client/src/main/resources/i18n/client_es_ES.properties @@ -364,8 +364,11 @@ observe.common.ActivityLonglineDto.message.no.active.found.for.other.trip=Ningun observe.common.ActivityLonglineDto.message.nonForTrip=< Ninguna actividad por la marea actual > observe.common.ActivityLonglineDto.message.not.open=La actividad no está abierta, imposible modificar. observe.common.ActivityLonglineDto.message.updating=Se está modificando la actividad actual. +observe.common.ActivityLonglineDto.relatedObservedActivity=\#TODO observe.common.ActivityLonglineDto.timeStamp=Timestamp observe.common.ActivityLonglineDto.titles=Actividades +observe.common.ActivityLonglineDto.vesselSpeed=\#TODO +observe.common.ActivityLonglineDto.wind=\#TODO observe.common.ActivitySeineDto.action.addFloatingObject=Añadir un DCP observe.common.ActivitySeineDto.action.addFloatingObject.tip=Añadir un objeto flotante a la actividad observe.common.ActivitySeineDto.action.addSet=Añadir un lance @@ -454,11 +457,14 @@ observe.common.CatchLonglineDto.availablePredator=Deprepadaores disponibles observe.common.CatchLonglineDto.beatDiameter=Diametro de la mordedura observe.common.CatchLonglineDto.branchlineTab=Arponcillo observe.common.CatchLonglineDto.caracteristicTab=Características +observe.common.CatchLonglineDto.countDepredated=\#TODO observe.common.CatchLonglineDto.depredated=Victima de depredación +observe.common.CatchLonglineDto.depredatedProportion=\#TODO observe.common.CatchLonglineDto.depredatedTab=Depredación observe.common.CatchLonglineDto.foodAndSexualTab=Alimentación y maturidad sexual observe.common.CatchLonglineDto.hookWhenDiscarded=Echazado con el anzuelo observe.common.CatchLonglineDto.locationOnLongline=Posición sobre la línea +observe.common.CatchLonglineDto.onBordDataProcessing=On bord data processing \#TODO observe.common.CatchLonglineDto.photoReferences=Referencias foto observe.common.CatchLonglineDto.resetBranchline=Cancelar observe.common.CatchLonglineDto.resetBranchline.tip=Cancelar las modificaciones sobre el arponcillo @@ -490,6 +496,7 @@ observe.common.CatchLonglineDto.table.speciesCatch=Especie observe.common.CatchLonglineDto.table.speciesCatch.tip=Especie observe.common.CatchLonglineDto.tagNumber=Numéro d'échantillon \#TODO observe.common.CatchLonglineDto.totalWeight=Peso total (kg) +observe.common.CatchLonglineDto.weightDeterminationMethod=\#TODO observe.common.CatchLonglineDto.weightMeasuresTab=Pesos (kg) observe.common.DataDto.action.createEntry.tip=Crear una nueva entrada observe.common.DataDto.action.deleteEntry.tip=Cancelar la edición de la entrada actual @@ -912,14 +919,20 @@ observe.common.SensorUsedDto.table.sensorType.tip=Tipo de sensor observe.common.SetDto.action.goToOpen.short=Lance abierto observe.common.SetDto.action.goToOpen.tip=Acceder al lance abierto observe.common.SetLonglineDto.action.reset.homeId.tip=Reiniciar el id de negocio +observe.common.SetLonglineDto.basketLineLength=\#TODO observe.common.SetLonglineDto.haulingTab=Arrastre +observe.common.SetLonglineDto.lengthBetweenBranchlines=\#TODO +observe.common.SetLonglineDto.lightsticksUsed=\#TODO +observe.common.SetLonglineDto.lightstickssTab=\#TODO observe.common.SetLonglineDto.message.creating=Lance en proceso de creación. observe.common.SetLonglineDto.message.updating=La operación de pesca está en proceso de modificación. observe.common.SetLonglineDto.monitored=Instrumentada observe.common.SetLonglineDto.settingCaracteristicsTab=Características observe.common.SetLonglineDto.settingTab=Calada +observe.common.SetLonglineDto.shooterUsed=Shooter used \#TODO observe.common.SetLonglineDto.targetCatchCompositionEstimatedByObserver=Composition estimée par l'observateur ? \#TODO observe.common.SetLonglineDto.targetDiscardCatchCompositionEstimatedByObserver=Composition estimée par l'observateur ? \#TODO +observe.common.SetLonglineDto.totalLineLength=Total line length (m) \#TODO observe.common.SetLonglineDto.weightedSnap=Snap lesté observe.common.SetLonglineDto.weightedSwivel=Émerillon lesté observe.common.SetLonglineGlobalCompositionDto.availableMitigationType=Atenuaciónes disponibles ===================================== client/src/main/resources/i18n/client_fr_FR.properties ===================================== --- a/client/src/main/resources/i18n/client_fr_FR.properties +++ b/client/src/main/resources/i18n/client_fr_FR.properties @@ -364,8 +364,11 @@ observe.common.ActivityLonglineDto.message.no.active.found.for.other.trip=Aucune observe.common.ActivityLonglineDto.message.nonForTrip=< Aucune activité pour la marée courante > observe.common.ActivityLonglineDto.message.not.open=L'opération de pêche n'est pas ouverte, aucune modification possible. observe.common.ActivityLonglineDto.message.updating=L'activité est en cours de modification. +observe.common.ActivityLonglineDto.relatedObservedActivity=Activité observée observe.common.ActivityLonglineDto.timeStamp=Horodatage observe.common.ActivityLonglineDto.titles=Activités +observe.common.ActivityLonglineDto.vesselSpeed=Vitesse du courant (nd) +observe.common.ActivityLonglineDto.wind=Vent Beaufort observe.common.ActivitySeineDto.action.addFloatingObject=Ajouter un DCP observe.common.ActivitySeineDto.action.addFloatingObject.tip=Ajouter un objet flottant à l'activité observe.common.ActivitySeineDto.action.addSet=Ajouter la calée @@ -454,11 +457,14 @@ observe.common.CatchLonglineDto.availablePredator=Prédateurs disponibles observe.common.CatchLonglineDto.beatDiameter=Diamètre de la morsure observe.common.CatchLonglineDto.branchlineTab=Avançon observe.common.CatchLonglineDto.caracteristicTab=Caractéristiques +observe.common.CatchLonglineDto.countDepredated=Nombre déprédaté observe.common.CatchLonglineDto.depredated=Victime de déprédation +observe.common.CatchLonglineDto.depredatedProportion=Proportion déprédaté observe.common.CatchLonglineDto.depredatedTab=Déprédation observe.common.CatchLonglineDto.foodAndSexualTab=Alimentation et maturité sexuelle observe.common.CatchLonglineDto.hookWhenDiscarded=Rejeté avec hameçon observe.common.CatchLonglineDto.locationOnLongline=Position sur la ligne +observe.common.CatchLonglineDto.onBordDataProcessing=Traitement effectué à bord observe.common.CatchLonglineDto.photoReferences=Références photo observe.common.CatchLonglineDto.resetBranchline=Annuler observe.common.CatchLonglineDto.resetBranchline.tip=Annuler les modifications sur l'avançon @@ -490,6 +496,7 @@ observe.common.CatchLonglineDto.table.speciesCatch=Espèce observe.common.CatchLonglineDto.table.speciesCatch.tip=Espèce observe.common.CatchLonglineDto.tagNumber=Id marque observe.common.CatchLonglineDto.totalWeight=Poids total (kg) +observe.common.CatchLonglineDto.weightDeterminationMethod=Méthode d'estimation observe.common.CatchLonglineDto.weightMeasuresTab=Poids (kg) observe.common.DataDto.action.createEntry.tip=Créer une nouvelle entrée observe.common.DataDto.action.deleteEntry.tip=Supprimer l'entrée en cours d'édition @@ -912,14 +919,20 @@ observe.common.SensorUsedDto.table.sensorType.tip=Type de capteur observe.common.SetDto.action.goToOpen.short=Calée ouverte observe.common.SetDto.action.goToOpen.tip=Accéder à la calée ouverte observe.common.SetLonglineDto.action.reset.homeId.tip=Réinitialiser l'id métier +observe.common.SetLonglineDto.basketLineLength=Longueur de la ligne par panier (m) observe.common.SetLonglineDto.haulingTab=Virage +observe.common.SetLonglineDto.lengthBetweenBranchlines=Distance entre avançons (m) +observe.common.SetLonglineDto.lightsticksUsed=Utilisation des cyalumes ? +observe.common.SetLonglineDto.lightstickssTab=Cyalumes observe.common.SetLonglineDto.message.creating=L'opération de pêche est en cours de création. observe.common.SetLonglineDto.message.updating=L'opération de pêche est en cours de modification. observe.common.SetLonglineDto.monitored=Instrumentée observe.common.SetLonglineDto.settingCaracteristicsTab=Caractéristiques observe.common.SetLonglineDto.settingTab=Filage +observe.common.SetLonglineDto.shooterUsed=Utilisation du shooter observe.common.SetLonglineDto.targetCatchCompositionEstimatedByObserver=Composition estimée par l'observateur ? observe.common.SetLonglineDto.targetDiscardCatchCompositionEstimatedByObserver=Composition estimée par l'observateur ? +observe.common.SetLonglineDto.totalLineLength=Longueur totale de la ligne (m) observe.common.SetLonglineDto.weightedSnap=Snap lesté observe.common.SetLonglineDto.weightedSwivel=Émerillon lesté observe.common.SetLonglineGlobalCompositionDto.availableMitigationType=Atténuations disponibles View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0fb8cb2d7fde3846a306b71857… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0fb8cb2d7fde3846a306b71857… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe] Pushed new branch feature/v8_maquette
by Tony CHEMIT 03 Apr '18

03 Apr '18
Tony CHEMIT pushed new branch feature/v8_maquette at ultreiaio / ird-observe --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/tree/feature/v8_maquette You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 17 commits: Ajout du référentiel observe_common.DataQuality (Closes #895)
by Tony CHEMIT 03 Apr '18

03 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 279f46d6 by Tony CHEMIT at 2018-04-03T20:13:24Z Ajout du référentiel observe_common.DataQuality (Closes #895) - - - - - 2d8494c8 by Tony CHEMIT at 2018-04-03T20:13:32Z Correction des labels sur les enums avec methods - - - - - 59c09cb4 by Tony CHEMIT at 2018-04-03T20:13:32Z fix option type - - - - - 20029748 by Tony CHEMIT at 2018-04-03T20:13:32Z fix some references API - - - - - 5627f267 by Tony CHEMIT at 2018-04-03T20:13:32Z add more log levels in tests - - - - - 1db069f0 by Tony CHEMIT at 2018-04-03T20:13:32Z fix i18n typo - - - - - 8b8b05cf by Tony CHEMIT at 2018-04-03T20:13:32Z improve gis triggers (if not migration can&#39;t work since it will trigger the gis computation on each activity changed, and here we modify all activities...) - - - - - d944529b by Tony CHEMIT at 2018-04-03T20:13:32Z improve longline position api (but still could be improved ?) - - - - - f799a4a0 by Tony CHEMIT at 2018-04-03T20:13:32Z improve sql request api (requires now db version) - - - - - 0718ae70 by Tony CHEMIT at 2018-04-03T20:13:32Z optimize dependences + add missing license header - - - - - 8156f85c by Tony CHEMIT at 2018-04-03T20:13:32Z fix a template - - - - - 27381abd by Tony CHEMIT at 2018-04-03T20:13:32Z Amélioration de l&#39;arbre de navigation - - - - - 0fb8cb2d by Tony CHEMIT at 2018-04-03T20:13:32Z Correction d&#39;un appel a UIHelper.askUser - - - - - 30fedc4d by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.ActivityLogbook (See #907) Maquettage - - - - - e6646c3e by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.SetLogbook (See #909) - - - - - 018ebdbf by Tony CHEMIT at 2018-04-03T20:13:33Z Ajout de la donnée observe_longline.CatchLogbook (See #911) Maquettage - - - - - 355b9469 by Tony CHEMIT at 2018-04-03T20:13:33Z update i18n (see #911, see #907, see #909) - - - - - 30 changed files: - client-configuration/pom.xml - client-configuration/src/main/config/Client.ini - client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java - client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties - client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties - client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties - client/pom.xml - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-1-activity.sql → client/src/main/assembly/dist/obstuna-admin/extra/01_create-postgis-1-activity.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-2-harbour.sql → client/src/main/assembly/dist/obstuna-admin/extra/02_create-postgis-2-harbour.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-3-activity-seine.sql → client/src/main/assembly/dist/obstuna-admin/extra/03_create-postgis-3-activity-seine.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-4-activity-longine.sql → client/src/main/assembly/dist/obstuna-admin/extra/04_create-postgis-4-activity-longine.sql - client/src/main/assembly/dist/obstuna-admin/extra/function_enhanced_sets_school_types.sql → client/src/main/assembly/dist/obstuna-admin/extra/05_function_enhanced_sets_school_types.sql - client/src/main/ftl/dataSourceConnectionReport_en.ftl - client/src/main/ftl/dataSourceConnectionReport_es.ftl - client/src/main/ftl/dataSourceConnectionReport_fr.ftl - client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/admin/LaunchAdminActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/resume/ShowResumeUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java The diff was not included because it is too large. View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/cdbaa4e78c89734f40c43e7cc0… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/cdbaa4e78c89734f40c43e7cc0… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Amélioration de l'arbre de navigation
by Tony CHEMIT 01 Apr '18

01 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: cdbaa4e7 by Tony CHEMIT at 2018-04-01T13:39:24Z Amélioration de l&#39;arbre de navigation - - - - - 27 changed files: - client-configuration/pom.xml - client-configuration/src/main/config/Client.ini - client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java - client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties - client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties - client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties - client/pom.xml - client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss - − client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java - + client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties - pom.xml Changes: ===================================== client-configuration/pom.xml ===================================== --- a/client-configuration/pom.xml +++ b/client-configuration/pom.xml @@ -104,6 +104,14 @@ <groupId>io.ultreia.java4all.jaxx</groupId> <artifactId>jaxx-widgets-gis</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all.jaxx</groupId> + <artifactId>jaxx-widgets-temperature</artifactId> + </dependency> + <dependency> + <groupId>io.ultreia.java4all</groupId> + <artifactId>java-bean</artifactId> + </dependency> </dependencies> ===================================== client-configuration/src/main/config/Client.ini ===================================== --- a/client-configuration/src/main/config/Client.ini +++ b/client-configuration/src/main/config/Client.ini @@ -174,6 +174,11 @@ description = observe.config.h2.can.migrate.description key = h2.canMigrate type = Boolean defaultValue = true +[option h2CanEditReferential] +description = observe.config.h2.can.editReferential.description +key = h2.canEditReferential +type = boolean +defaultValue = false [option h2ServerPort] description = observe.config.h2.serverPort.description @@ -501,6 +506,12 @@ key = ui.coordinate.format type = org.nuiton.jaxx.widgets.gis.CoordinateFormat defaultValue = "dmd" +[option temperatureFormat] +description = observe.config.temperature.format +key = ui.temperature.format +type = org.nuiton.jaxx.widgets.temperature.TemperatureFormat +defaultValue = "C" + [option focusBorderColor] description = observe.config.ui.focusBorderColor key = ui.focusBorder.color @@ -531,6 +542,30 @@ key = server.checkServerVersion type = Boolean defaultValue = true +[option showSeineTrip] +description = observe.config.ui.tree.showSeineTrip.description +key = ui.tree.showSeineTrip +type = Boolean +defaultValue = true + +[option showLonglineTrip] +description = observe.config.ui.tree.showLonglineTrip.description +key = ui.tree.showLonglineTrip +type = Boolean +defaultValue = true + +[option showReferential] +description = observe.config.ui.tree.showReferential.description +key = ui.tree.showReferential +type = Boolean +defaultValue = true + +[option showEmptyProgram] +description = observe.config.ui.tree.showEmptyProgram.description +key = ui.tree.showEmptyProgram +type = Boolean +defaultValue = true + [action help] description = observe.action.commandline.help action = "fr.ird.observe.client.ObserveCLAction#help" ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java ===================================== --- a/client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java @@ -8,12 +8,12 @@ * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. @@ -30,6 +30,16 @@ import fr.ird.observe.client.constants.DbMode; import fr.ird.observe.dto.FloatingObjectPreset; import fr.ird.observe.dto.presets.RemoteDataSourceConfiguration; import fr.ird.observe.dto.presets.ServerDataSourceConfiguration; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ArgumentsParserException; +import org.nuiton.jaxx.widgets.gis.CoordinateFormat; +import org.nuiton.jaxx.widgets.temperature.TemperatureFormat; +import org.nuiton.version.Version; +import org.nuiton.version.Versions; + import java.beans.PropertyChangeListener; import java.io.File; import java.nio.charset.StandardCharsets; @@ -44,15 +54,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Properties; import java.util.Set; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.config.ApplicationConfig; -import org.nuiton.config.ArgumentsParserException; -import org.nuiton.jaxx.widgets.gis.CoordinateFormat; -import org.nuiton.version.Version; -import org.nuiton.version.Versions; - import static org.nuiton.i18n.I18n.t; @@ -62,52 +63,72 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - dev(a)tchemit.fr * @since 1.0 */ -public class ClientConfig extends GeneratedClientConfig { +public class ClientConfig extends GeneratedClientConfig implements NavigationTreeConfig { + public static final String DB_NAME = "obstuna"; + public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of( + ClientConfigOption.MAP_LAYER1, + ClientConfigOption.MAP_LAYER2, + ClientConfigOption.MAP_LAYER3, + ClientConfigOption.MAP_LAYER4, + ClientConfigOption.MAP_LAYER5, + ClientConfigOption.MAP_LAYER6, + ClientConfigOption.MAP_LAYER7, + ClientConfigOption.MAP_LAYER8, + ClientConfigOption.MAP_LAYER9, + ClientConfigOption.MAP_LAYER10); /** le pattern du fichier de sauvegarde d'une base locale */ private static final String BACKUP_DB_PATTERN = "obstuna-local-%1$tF--%1$tk-%1$tM-%1$tS.sql.gz"; - - public static final String DB_NAME = "obstuna"; - private static final String APPLICATION_VERSION = "application.version"; - private static final String VERSION = "version"; - private static final String PROPERTY_LOCAL_STORAGE_EXIST = "localStorageExist"; - private static final String PROPERTY_INITIAL_DUMP_EXIST = "initialDumpExist"; - private static final String PROPERTY_MAIN_STORAGE_OPENED = "mainStorageOpened"; - /** Logger */ private static final Log log = LogFactory.getLog(ClientConfig.class); - private static final String DEFAULT_OBSERVE_SWING_CONFIGURATION_FILENAME = "observe-client.conf"; - + /** + * Liste des options qu'on ne peut pas sauvegarder (les mots de passes, + * les options d'admin pour les simples utilisateurs,...). + * + * @since 1.5 + */ + private final String[] unsavables = new String[]{ +// ClientConfigOption.OBSTUNA_PASSWORD.getKey(), + ClientConfigOption.H2_PASSWORD.getKey(), + ClientConfigOption.OBSTUNA_CAN_MIGRATE.getKey(), + }; + //FIXME + private final ImmutableSet<String> longlinVesselTypeIds = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675736#0.8708229847859869", + "fr.ird.observe.entities.referentiel.VesselType#1239832686137#0.1")); + private final ImmutableSet<String> seineVesselTypeIds = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.7380146830307519", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.9086075071905084", + "fr.ird.observe.entities.referentiel.VesselType#1239832675737#0.43324169605639407")); + private final SimpleDateFormat dateFormat = new SimpleDateFormat(); /** * un drapeau pour savoir s'il faut lancer l'interface graphique. Cette * valeur peut être programmées lors des actions. */ private boolean displayMainUI = true; - /** drapeau pour savoir si une base locale existe */ private boolean localStorageExist; - /** * drapeau pour savoir si le dump initial a ete chargée depuis la base * centrale */ private boolean initialDumpExist; - /** drapeau pour savoir si une source de données est ouverte */ private boolean mainStorageOpened; - /** * drapeau pour savoir si la source ouverte est locale (attention, lorsqu'il * n'y a pas de storage d'ouvert, la valeur est null). */ private Boolean mainStorageOpenedLocal; - /** * drapeau pour savoir si on peut utiliser des ui dans l'environnement. * <p> @@ -116,37 +137,12 @@ public class ClientConfig extends GeneratedClientConfig { * trouvé. */ private boolean canUseUI = true; - /** La version de l'application */ private Version version; - /** Texte du copyright (calculé dynamiquement). */ private String copyrightText; - - /** - * Liste des options qu'on ne peut pas sauvegarder (les mots de passes, - * les options d'admin pour les simples utilisateurs,...). - * - * @since 1.5 - */ - private final String[] unsavables = new String[]{ -// ClientConfigOption.OBSTUNA_PASSWORD.getKey(), - ClientConfigOption.H2_PASSWORD.getKey(), - ClientConfigOption.OBSTUNA_CAN_MIGRATE.getKey(), - }; - - //FIXME - private final ImmutableSet<String> longlinVesselTypeIds = ImmutableSet.copyOf( - Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", - "fr.ird.observe.entities.referentiel.VesselType#1239832675736#0.8708229847859869", - "fr.ird.observe.entities.referentiel.VesselType#1239832686137#0.1")); - - private final ImmutableSet<String> seineVesselTypeIds = ImmutableSet.copyOf( - Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.7380146830307519", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.9086075071905084", - "fr.ird.observe.entities.referentiel.VesselType#1239832675737#0.43324169605639407")); + private ImmutableList<ServerDataSourceConfiguration> serverDataSourceConfigurationList; + private ImmutableList<RemoteDataSourceConfiguration> remoteDataSourceConfigurationList; public ClientConfig() { this(DEFAULT_OBSERVE_SWING_CONFIGURATION_FILENAME); @@ -217,6 +213,11 @@ public class ClientConfig extends GeneratedClientConfig { return CoordinateFormat.valueOf(get().getOption(ClientConfigOption.COORDINATE_FORMAT.getKey())); } + @Override + public TemperatureFormat getTemperatureFormat() { + return get().getOption(TemperatureFormat.class, ClientConfigOption.TEMPERATURE_FORMAT.getKey()); + } + public String getCopyrightText() { if (copyrightText == null) { Date date = new Date(); @@ -232,6 +233,10 @@ public class ClientConfig extends GeneratedClientConfig { return version; } + private void setVersion(Version version) { + this.version = version; + } + public boolean isShowTimeEditorSlider() { return isShowDateTimeEditorSlider(); } @@ -244,24 +249,24 @@ public class ClientConfig extends GeneratedClientConfig { return displayMainUI; } - public boolean isCanUseUI() { - return canUseUI; - } - - public boolean isLocalStorageExist() { - return localStorageExist; + public void setDisplayMainUI(boolean b) { + displayMainUI = b; } - public boolean isInitialDumpExist() { - return initialDumpExist; + public boolean isCanUseUI() { + return canUseUI; } - public boolean isMainStorageOpened() { - return mainStorageOpened; + public void setCanUseUI(boolean canUseUI) { + this.canUseUI = canUseUI; + if (!canUseUI) { + // on ne pourra pas lancer l'ui principale + setDisplayMainUI(false); + } } - public Boolean getMainStorageOpenedLocal() { - return mainStorageOpenedLocal; + public boolean isLocalStorageExist() { + return localStorageExist; } public void setLocalStorageExist(boolean newValue) { @@ -270,12 +275,20 @@ public class ClientConfig extends GeneratedClientConfig { firePropertyChange(PROPERTY_LOCAL_STORAGE_EXIST, newValue); } + public boolean isInitialDumpExist() { + return initialDumpExist; + } + public void setInitialDumpExist(boolean newValue) { initialDumpExist = newValue; // always force propagation firePropertyChange(PROPERTY_INITIAL_DUMP_EXIST, newValue); } + public boolean isMainStorageOpened() { + return mainStorageOpened; + } + public void setMainStorageOpened(boolean newValue) { mainStorageOpened = newValue; if (!newValue) { @@ -286,36 +299,16 @@ public class ClientConfig extends GeneratedClientConfig { firePropertyChange(PROPERTY_MAIN_STORAGE_OPENED, newValue); } + public Boolean getMainStorageOpenedLocal() { + return mainStorageOpenedLocal; + } + public void setMainStorageOpenedLocal(Boolean newValue) { mainStorageOpenedLocal = newValue; // always force propagation firePropertyChange(PROPERTY_MAIN_STORAGE_OPENED + "Local", newValue); } - public void setDisplayMainUI(boolean b) { - displayMainUI = b; - } - - public void setCanUseUI(boolean canUseUI) { - this.canUseUI = canUseUI; - if (!canUseUI) { - // on ne pourra pas lancer l'ui principale - setDisplayMainUI(false); - } - } - - public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of( - ClientConfigOption.MAP_LAYER1, - ClientConfigOption.MAP_LAYER2, - ClientConfigOption.MAP_LAYER3, - ClientConfigOption.MAP_LAYER4, - ClientConfigOption.MAP_LAYER5, - ClientConfigOption.MAP_LAYER6, - ClientConfigOption.MAP_LAYER7, - ClientConfigOption.MAP_LAYER8, - ClientConfigOption.MAP_LAYER9, - ClientConfigOption.MAP_LAYER10); - public List<File> getMapLayerFiles() { List<File> layers = new LinkedList<>(); @@ -399,10 +392,6 @@ public class ClientConfig extends GeneratedClientConfig { } } - private void setVersion(Version version) { - this.version = version; - } - public Set<String> getSeineVesselTypeIds() { return seineVesselTypeIds; } @@ -429,10 +418,17 @@ public class ClientConfig extends GeneratedClientConfig { return option == null ? new RemoteDataSourceConfiguration[0] : new Gson().fromJson(option, RemoteDataSourceConfiguration[].class); } + @Override + public void setRemoteDataSourceConfigurations(RemoteDataSourceConfiguration[] configurations) { + String option = new Gson().toJson(configurations); + get().setOption(ClientConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + remoteDataSourceConfigurationList = null; + } + public void addRemoteDataSourceConfiguration(RemoteDataSourceConfiguration configuration) { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.add(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } @@ -440,27 +436,17 @@ public class ClientConfig extends GeneratedClientConfig { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); remoteDataSourceConfigurations.add(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } public void removeRemoteDataSourceConfiguration(RemoteDataSourceConfiguration configuration) { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } - @Override - public void setRemoteDataSourceConfigurations(RemoteDataSourceConfiguration[] configurations) { - String option = new Gson().toJson(configurations); - get().setOption(ClientConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey(), option); - remoteDataSourceConfigurationList=null; - } - - ImmutableList<ServerDataSourceConfiguration> serverDataSourceConfigurationList; - ImmutableList<RemoteDataSourceConfiguration> remoteDataSourceConfigurationList; - public ImmutableList<RemoteDataSourceConfiguration> getRemoteDataSourceConfigurationList() { if (remoteDataSourceConfigurationList == null) { List<RemoteDataSourceConfiguration> configurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); @@ -485,10 +471,17 @@ public class ClientConfig extends GeneratedClientConfig { return option == null ? new ServerDataSourceConfiguration[0] : new Gson().fromJson(option, ServerDataSourceConfiguration[].class); } + @Override + public void setServerDataSourceConfigurations(ServerDataSourceConfiguration[] configurations) { + String option = new Gson().toJson(configurations); + get().setOption(ClientConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + serverDataSourceConfigurationList = null; + } + public void addServerDataSourceConfiguration(ServerDataSourceConfiguration configuration) { List<ServerDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); remoteDataSourceConfigurations.add(configuration); - setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } @@ -496,27 +489,18 @@ public class ClientConfig extends GeneratedClientConfig { List<ServerDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); remoteDataSourceConfigurations.add(configuration); - setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } public void removeServerDataSourceConfiguration(ServerDataSourceConfiguration configuration) { List<ServerDataSourceConfiguration> serverDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); serverDataSourceConfigurations.remove(configuration); - setServerDataSourceConfigurations(serverDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[serverDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(serverDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } @Override - public void setServerDataSourceConfigurations(ServerDataSourceConfiguration[] configurations) { - String option = new Gson().toJson(configurations); - get().setOption(ClientConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey(), option); - serverDataSourceConfigurationList=null; - } - - private final SimpleDateFormat dateFormat = new SimpleDateFormat(); - - @Override public Date getBuildDate() { String dateStr = get().getOption(ClientConfigOption.BUILD_DATE.getKey()); try { ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java ===================================== --- /dev/null +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java @@ -0,0 +1,64 @@ +package fr.ird.observe.client.configuration; + +/*- + * #%L + * ObServe :: Client Configuration + * %% + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.services.service.data.NavigationRequest; + +/** + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr + */ +public interface NavigationTreeConfig { + + boolean isShowSeineTrip(); + + void setShowSeineTrip(boolean showSeineTrip); + + boolean isShowLonglineTrip(); + + void setShowLonglineTrip(boolean showLonglineTrip); + + boolean isShowReferential(); + + void setShowReferential(boolean showReferential); + + boolean isShowEmptyProgram(); + + void setShowEmptyProgram(boolean showEmptyProgram); + + default NavigationRequest toRequest() { + NavigationRequest navigationRequest = new NavigationRequest(); + navigationRequest.setLoadLongline(isShowLonglineTrip()); + navigationRequest.setLoadSeine(isShowSeineTrip()); + navigationRequest.setLoadEmptyProgram(isShowEmptyProgram()); + return navigationRequest; + } + + default void load(NavigationTreeConfig config) { + setShowEmptyProgram(config.isShowEmptyProgram()); + setShowReferential(config.isShowReferential()); + setShowLonglineTrip(config.isShowLonglineTrip()); + setShowSeineTrip(config.isShowSeineTrip()); + } +} ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java ===================================== --- /dev/null +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java @@ -0,0 +1,87 @@ +package fr.ird.observe.client.configuration; + +/*- + * #%L + * ObServe :: Client Configuration + * %% + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import io.ultreia.java4all.bean.AbstractJavaBean; + +/** + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr + */ +public class NavigationTreeConfigBean extends AbstractJavaBean implements NavigationTreeConfig { + + + private boolean showSeineTrip = true; + private boolean showLonglineTrip = true; + private boolean showReferential = true; + private boolean showEmptyProgram = true; + + @Override + public boolean isShowSeineTrip() { + return showSeineTrip; + } + + @Override + public void setShowSeineTrip(boolean showSeineTrip) { + boolean oldValue = isShowSeineTrip(); + this.showSeineTrip = showSeineTrip; + firePropertyChange("showSeineTrip", oldValue, showSeineTrip); + } + + @Override + public boolean isShowLonglineTrip() { + return showLonglineTrip; + } + + @Override + public void setShowLonglineTrip(boolean showLonglineTrip) { + boolean oldValue = isShowLonglineTrip(); + this.showLonglineTrip = showLonglineTrip; + firePropertyChange("showLonglineTrip", oldValue, showLonglineTrip); + } + + @Override + public boolean isShowReferential() { + return showReferential; + } + + @Override + public void setShowReferential(boolean showReferential) { + boolean oldValue = isShowReferential(); + this.showReferential = showReferential; + firePropertyChange("showReferential", oldValue, showReferential); + } + + @Override + public boolean isShowEmptyProgram() { + return showEmptyProgram; + } + + @Override + public void setShowEmptyProgram(boolean showEmptyProgram) { + boolean oldValue = isShowEmptyProgram(); + this.showEmptyProgram = showEmptyProgram; + firePropertyChange("showEmptyProgram", oldValue, showEmptyProgram); + } +} ===================================== client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Default temporary directory used observe.config.defaultValidationReportDirectory.description=Default validation report directory observe.config.devMode=Dev mode observe.config.floatingObjectPresets.description=Floating Objects references +observe.config.h2.can.editReferential.description=Local database can edit referential observe.config.h2.can.migrate.description=Flag to know if you can migrate h2 data sources observe.config.h2.login.description=H2 Login observe.config.h2.password.description=H2 Password @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Species for object school observe.config.speciesList.seine.schoolEstimate=Species for school esitmates observe.config.speciesList.seine.targetCatch=Species for target catches observe.config.swingSessionFile.description=Swing session file. +observe.config.temperature.format=Default temperature format observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks observe.config.ui.focusBorderColor=Color of the focus container border @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Show mnemonic on actions observe.config.ui.showNumberEditorButton=Flag sets to true to show button to invoke popup on number's editors observe.config.ui.showTimeEditorSlider=Show timer slider observe.config.ui.storeRemoteStorage=Flag sets to true to store in config a remote connexion (except passwords) +observe.config.ui.tree.showEmptyProgram.description=Show programs with no trip inside +observe.config.ui.tree.showLonglineTrip.description=Show Longline trips +observe.config.ui.tree.showReferential.description=Show Referential +observe.config.ui.tree.showSeineTrip.description=Show Seine Trips observe.config.ui.treeOpenNodes=Opened data from last session observe.config.ui.treeSelectedNodes.description=Selected nodes on last data source observe.config.validation.lengthWeightEnable=Force validation of species length max ===================================== client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Directorio temporal por defecto observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación observe.config.devMode=Modo desarrollador observe.config.floatingObjectPresets.description=Objets flottants de référence \#TODO +observe.config.h2.can.editReferential.description=Local database can edit referential \#TODO observe.config.h2.can.migrate.description=Autorizar la actualización de las bases locales (h2) observe.config.h2.login.description=Login h2 observe.config.h2.password.description=Contraseña h2 @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Especies para las estimaci observe.config.speciesList.seine.schoolEstimate=Especies para las estimaciones observe.config.speciesList.seine.targetCatch=Especies par las capturas objetivo observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. \#TODO +observe.config.temperature.format=Default temperature format \#TODO observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus \#TODO @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Afficher les racourcis clavier \#TODO observe.config.ui.showNumberEditorButton=Para mostrar el botón que permite usar el editor numérico a la izquierda de cada campo numérico observe.config.ui.showTimeEditorSlider=Para mostrar la regla de edición de las horas observe.config.ui.storeRemoteStorage=Para activar la copia de seguridad de la configuración de la fuente de datos remota +observe.config.ui.tree.showEmptyProgram.description=Show programs with no trip inside \#TODO +observe.config.ui.tree.showLonglineTrip.description=Show Longline trips \#TODO +observe.config.ui.tree.showReferential.description=Show Referential \#TODO +observe.config.ui.tree.showSeineTrip.description=Show Seine Trips \#TODO observe.config.ui.treeOpenNodes=Nudos abiertos del arbol abiertos cuando se cerró la base por última vez observe.config.ui.treeSelectedNodes.description=Selected nodes on last data source \#TODO observe.config.validation.lengthWeightEnable=Forcer la validation des bormes min/max de taille d'espèce \#TODO ===================================== client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Le répertoire temporaire par dé observe.config.defaultValidationReportDirectory.description=Le répertoire par défaut où sont stockés les rapports de validation observe.config.devMode=Mode développeur observe.config.floatingObjectPresets.description=Objets flottants de référence +observe.config.h2.can.editReferential.description=Pour pouvoir éditer le référentiel d'une base locale observe.config.h2.can.migrate.description=Autoriser la mise à jour des bases locales (H2) observe.config.h2.login.description=L'identifiant H2 observe.config.h2.password.description=Le mot de passe H2 @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Espèces pour les estimati observe.config.speciesList.seine.schoolEstimate=Espèces pour les estimations observe.config.speciesList.seine.targetCatch=Espèces pour les captures cible observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. +observe.config.temperature.format=Unité de température observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Afficher les racourcis clavier observe.config.ui.showNumberEditorButton=Pour afficher le bouton qui permet d'utiliser l'éditeur numérique à gauche de chaque champs numérique observe.config.ui.showTimeEditorSlider=Pour afficher la réglette d'édition des heures observe.config.ui.storeRemoteStorage=Pour activer la sauvegarde de la configuration de la source distante +observe.config.ui.tree.showEmptyProgram.description=Voir les programmes sans marée +observe.config.ui.tree.showLonglineTrip.description=Voir les marées Palangre +observe.config.ui.tree.showReferential.description=Voir le référentiel +observe.config.ui.tree.showSeineTrip.description=Voir les marées Senne observe.config.ui.treeOpenNodes=Nœuds de l'arbre ouverts lors de la dernière fermeture de la base observe.config.ui.treeSelectedNodes.description=Nœuds sélectionnés sur la dernière base ouverte observe.config.validation.lengthWeightEnable=Forcer la validation des bormes min/max de taille d'espèce ===================================== client/pom.xml ===================================== --- a/client/pom.xml +++ b/client/pom.xml @@ -382,10 +382,20 @@ <artifactId>class-mapping</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all</groupId> + <artifactId>java-lang</artifactId> + <scope>runtime</scope> + </dependency> + <!-- jaxx dependencies --> <dependency> <groupId>io.ultreia.java4all.jaxx</groupId> + <artifactId>jaxx-runtime-spi</artifactId> + </dependency> + <dependency> + <groupId>io.ultreia.java4all.jaxx</groupId> <artifactId>jaxx-runtime</artifactId> </dependency> <dependency> ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java @@ -61,10 +61,11 @@ public abstract class ObserveKeyStrokes { public static final KeyStroke KEY_STROKE_RELOAD_DEFAULT_CONFIGURATION = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK); public static final KeyStroke KEY_STROKE_ESCAPE = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); public static final KeyStroke KEY_STROKE_ENTER = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); - public static final KeyStroke KEY_STROKE_SHOW_SEINE = KeyStroke.getKeyStroke("ctrl pressed F1"); - public static final KeyStroke KEY_STROKE_SHOW_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed F2"); - public static final KeyStroke KEY_STROKE_SHOW_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed F3"); - public static final KeyStroke KEY_STROKE_SHOW_EMPTY_PROGRAM = KeyStroke.getKeyStroke("ctrl pressed F4"); + public static final KeyStroke KEY_STROKE_NAVIGATION_CONFIGURE = KeyStroke.getKeyStroke("ctrl pressed F1"); + public static final KeyStroke KEY_STROKE_SHOW_SEINE = KeyStroke.getKeyStroke("ctrl pressed F2"); + public static final KeyStroke KEY_STROKE_SHOW_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed F3"); + public static final KeyStroke KEY_STROKE_SHOW_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed F4"); + public static final KeyStroke KEY_STROKE_SHOW_EMPTY_PROGRAM = KeyStroke.getKeyStroke("ctrl pressed F5"); public static final KeyStroke KEY_STROKE_CONFIGURE_LOCAL_SOURCE = KeyStroke.getKeyStroke("ctrl pressed L"); public static final KeyStroke KEY_STROKE_CONFIGURE_REMOTE_SOURCE = KeyStroke.getKeyStroke("ctrl pressed R"); public static final KeyStroke KEY_STROKE_SAVE_TABLE_ENTRY = KeyStroke.getKeyStroke("ctrl pressed S"); ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx @@ -77,8 +77,10 @@ fr.ird.observe.client.ui.content.ContentUIManager fr.ird.observe.client.ui.content.ObserveActionMap + fr.ird.observe.client.ui.tree.navigation.NavigationUI fr.ird.observe.client.ui.tree.navigation.NavigationTree - fr.ird.observe.client.ui.tree.navigation.NavigationTreeHeader + fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel + fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel fr.ird.observe.client.ui.util.UIHelper fr.ird.observe.client.ui.util.ObserveBlockingLayerUI @@ -252,10 +254,8 @@ protected void finalize() throws Throwable { <!-- left : navigation --> <JXTitledPanel id='navigationView'> - <JScrollPane id='navigationScrollPane' columnHeaderView='{navigationTreeHeader}'> - <NavigationTree id="navigation"/> - <NavigationTreeHeader id='navigationTreeHeader' tree='{navigation}'/> - </JScrollPane> + <NavigationUI id="navigationUI" initializer="new NavigationUI((JAXXContext)this)"/> + <NavigationTree id="navigation" initializer="navigationUI.getTree()"/> </JXTitledPanel> <!-- right : (content + messages) --> ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java @@ -6,15 +6,15 @@ * %% * 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 + * 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 + * + * 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% @@ -32,7 +32,6 @@ import fr.ird.observe.client.ui.content.ContentUIManager; import fr.ird.observe.client.ui.content.ObserveActionMap; import fr.ird.observe.client.ui.tree.ObserveNavigationTreeShowPopupAction; import fr.ird.observe.client.ui.tree.navigation.NavigationTree; -import fr.ird.observe.client.ui.tree.navigation.NavigationTreeHeader; import fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport; @@ -44,19 +43,14 @@ import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.dto.decoration.DecoratorService; import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.dto.referential.ReferentialLocale; -import java.awt.Component; -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Objects; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.jaxx.runtime.context.JAXXInitialContext; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; +import org.nuiton.jaxx.widgets.error.ErrorDialogUI; + import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JSplitPane; @@ -67,14 +61,16 @@ import javax.swing.border.Border; import javax.swing.border.LineBorder; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreePath; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.i18n.I18n; -import org.nuiton.jaxx.runtime.context.JAXXInitialContext; -import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; -import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; -import org.nuiton.jaxx.widgets.error.ErrorDialogUI; - +import java.awt.Component; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +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.client.ui.content.ContentUIInitializer.OBSERVE_ACTION; import static org.nuiton.i18n.I18n.t; @@ -94,11 +90,87 @@ public class ObserveMainUIInitializer { private static final String EMPTY_SELECTION = "emptySelection"; private final ObserveMainUI ui; + private Border focusBorder; + private Border noFocusBorder; ObserveMainUIInitializer(ObserveMainUI ui) { this.ui = ui; } + /** + * Methode pour initialiser l'ui principale sans l'afficher. + * + * @param context le context applicatif + * @param config la configuration a utiliser + * @return l'ui instancie et initialisee mais non visible encore + */ + public static ObserveMainUI initUI(ObserveSwingApplicationContext context, ClientConfig config) { + + SwingValidatorMessageTableModel errorModel = new ObserveSwingValidatorMessageTableModel(); + + DecoratorService decoratorService = context.getDecoratorService(); + + boolean reloadDecorators = false; + Locale currentLocale = I18n.getDefaultLocale(); + Locale configurationLocale = config.getLocale(); + if (!configurationLocale.equals(currentLocale)) { + if (log.isInfoEnabled()) { + log.info("re-init I18n with locale " + configurationLocale); + } + I18n.setDefaultLocale(configurationLocale); + reloadDecorators = true; + } + if (!config.getDbLocale().equals(decoratorService.getReferentialLocale().getLocale())) { + if (log.isInfoEnabled()) { + log.info("re-init db with locale " + config.getDbLocale()); + } + decoratorService.setReferentialLocale(ReferentialLocale.valueOf(config.getDbLocale())); + + reloadDecorators = true; + } + + if (reloadDecorators) { + if (log.isInfoEnabled()) { + log.info("reload decorators"); + } + decoratorService.reload(); + } + + JAXXInitialContext tx = new JAXXInitialContext(); + tx.add(context).add(errorModel); + + // show main ui + ObserveMainUI ui = new ObserveMainUI(tx); + ui.setUndecorated(config.isFullScreen()); + + String title = t("observe.title.welcome.admin") + (" v " + config.getVersion()); + ui.setTitle(title); + + context.setMainUI(ui); + + ErrorDialogUI.init(ui); + + // set fullscreen propery on main ui + ui.getGraphicsConfiguration().getDevice().setFullScreenWindow(config.isFullScreen() ? ui : null); + + new ObserveNavigationTreeShowPopupAction(ui.getNavigation(), ui.getNavigationUI(), ui.getNavigationPopup()); + + return ui; + } + + public static void setMainUIVisible(ObserveSwingApplicationContext rootContext, ObserveMainUI ui, boolean replace) { + + // force le redimensionnement du splitpane + ui.getSplitpane().revalidate(); + + // force le redimensionnement du splitpane2 + ui.getSplitpane2().revalidate(); + + // affichage de l'interface graphique + SwingUtilities.invokeLater(() -> ui.setVisible(true)); + rootContext.getSwingSessionHelper().addComponent(ui, replace); + } + private void changeNavigationNode(TreeSelectionEvent event) { ObserveSwingDataSource source = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); @@ -196,7 +268,7 @@ public class ObserveMainUIInitializer { if (ui.getNavigation().equals(focusOwner)) { focusOnNavigation = true; } - if (ui.getNavigationTreeHeader().equals(focusOwner)) { + if (ui.getNavigationUI().equals(focusOwner)) { focusOnNavigation = true; } if (ui.getNavigationView().equals(focusOwner)) { @@ -209,7 +281,7 @@ public class ObserveMainUIInitializer { focusOnNavigation = true; break; } - if (ui.getNavigationTreeHeader().equals(focusOwnerParent)) { + if (ui.getNavigationUI().equals(focusOwnerParent)) { focusOnNavigation = true; break; } @@ -243,67 +315,6 @@ public class ObserveMainUIInitializer { } /** - * Methode pour initialiser l'ui principale sans l'afficher. - * - * @param context le context applicatif - * @param config la configuration a utiliser - * @return l'ui instancie et initialisee mais non visible encore - */ - public static ObserveMainUI initUI(ObserveSwingApplicationContext context, ClientConfig config) { - - SwingValidatorMessageTableModel errorModel = new ObserveSwingValidatorMessageTableModel(); - - DecoratorService decoratorService = context.getDecoratorService(); - - boolean reloadDecorators = false; - Locale currentLocale = I18n.getDefaultLocale(); - Locale configurationLocale = config.getLocale(); - if (!configurationLocale.equals(currentLocale)) { - if (log.isInfoEnabled()) { - log.info("re-init I18n with locale " + configurationLocale); - } - I18n.setDefaultLocale(configurationLocale); - reloadDecorators = true; - } - if (!config.getDbLocale().equals(decoratorService.getReferentialLocale().getLocale())) { - if (log.isInfoEnabled()) { - log.info("re-init db with locale " + config.getDbLocale()); - } - decoratorService.setReferentialLocale(ReferentialLocale.valueOf(config.getDbLocale())); - - reloadDecorators = true; - } - - if (reloadDecorators) { - if (log.isInfoEnabled()) { - log.info("reload decorators"); - } - decoratorService.reload(); - } - - JAXXInitialContext tx = new JAXXInitialContext(); - tx.add(context).add(errorModel); - - // show main ui - ObserveMainUI ui = new ObserveMainUI(tx); - ui.setUndecorated(config.isFullScreen()); - - String title = t("observe.title.welcome.admin") + (" v " + config.getVersion()); - ui.setTitle(title); - - context.setMainUI(ui); - - ErrorDialogUI.init(ui); - - // set fullscreen propery on main ui - ui.getGraphicsConfiguration().getDevice().setFullScreenWindow(config.isFullScreen() ? ui : null); - - new ObserveNavigationTreeShowPopupAction(ui.getNavigation(), ui.getNavigationScrollPane(), ui.getNavigationPopup()); - - return ui; - } - - /** * Permet de recharger l'ui principale et de changer de le mode * d'affichage. * @@ -358,11 +369,7 @@ public class ObserveMainUIInitializer { // on met à jour le modèle de navigation NavigationTreeModel treeModel = ui.getNavigation().getTreeModel(); - treeModel.setLoadSeine(ui.getNavigationTreeHeader().getShowSeine().isSelected()); - treeModel.setLoadLongline(ui.getNavigationTreeHeader().getShowLongline().isSelected()); - treeModel.setLoadReferential(ui.getNavigationTreeHeader().getShowReferential().isSelected()); - treeModel.setLoadEmptyProgram(ui.getNavigationTreeHeader().getShowEmptyProgram().isSelected()); - + treeModel.load(config); treeModel.populate(); // on conserve les noeuds a reselectionner @@ -378,19 +385,6 @@ public class ObserveMainUIInitializer { setMainUIVisible(rootContext, ui, true); } - public static void setMainUIVisible(ObserveSwingApplicationContext rootContext, ObserveMainUI ui, boolean replace) { - - // force le redimensionnement du splitpane - ui.getSplitpane().revalidate(); - - // force le redimensionnement du splitpane2 - ui.getSplitpane2().revalidate(); - - // affichage de l'interface graphique - SwingUtilities.invokeLater(() -> ui.setVisible(true)); - rootContext.getSwingSessionHelper().addComponent(ui, replace); - } - void initialize() { ObserveActionMap actionMap = ui.getObserveActionMap(); @@ -440,43 +434,43 @@ public class ObserveMainUIInitializer { }; ui.getNavigationView().addMouseListener(mouseAdapter); ui.getNavigation().addMouseListener(mouseAdapter); - ui.getNavigationTreeHeader().addMouseListener(mouseAdapter); + ui.getNavigationUI().addMouseListener(mouseAdapter); init(ui.getSplitpane()); init(ui.getSplitpane2()); init(ui.getNavigation()); - ui.getNavigationView().setRightDecoration(ui.getNavigationTreeHeader().getToolbar()); - ui.getNavigationView().addComponentListener(new ComponentAdapter() { - - @Override - public void componentResized(ComponentEvent e) { - - JComponent source = (JComponent) e.getSource(); - - NavigationTreeHeader actions = ui.getNavigationTreeHeader(); - - Dimension preferredLayoutSize = actions.getLayout().preferredLayoutSize(actions); - - Dimension showLonglineSize = actions.getShowLongline().getSize(); - Dimension showSeineSize = actions.getShowSeine().getSize(); - Dimension showReferential = actions.getShowReferential().getSize(); - Dimension showEmpty = actions.getShowEmptyProgram().getSize(); - int minWidth = 18 + (int) Math.max(showLonglineSize.getWidth() + showSeineSize.getWidth(), showReferential.getWidth() + showEmpty.getWidth()); - source.setMinimumSize(new Dimension(minWidth, (int) source.getSize().getHeight())); - log.debug("Header resized to minumun: " + source.getMinimumSize()); - - int maxWidth = ui.getNavigationView().getWidth() - 10; - - int currentWidth = (int) preferredLayoutSize.getWidth(); - int height = 32; - if (currentWidth > maxWidth) { - height += 32; - } - actions.setPreferredSize(new Dimension(maxWidth, height)); - - } - }); + ui.getNavigationView().setRightDecoration(ui.getNavigationUI().getToolbar()); +// ui.getNavigationView().addComponentListener(new ComponentAdapter() { +// +// @Override +// public void componentResized(ComponentEvent e) { +// +// JComponent source = (JComponent) e.getSource(); +// +// NavigationTreeHeader actions = ui.getNavigationUI(); +// +// Dimension preferredLayoutSize = actions.getLayout().preferredLayoutSize(actions); +// +// Dimension showLonglineSize = actions.getShowLongline().getSize(); +// Dimension showSeineSize = actions.getShowSeine().getSize(); +// Dimension showReferential = actions.getShowReferential().getSize(); +// Dimension showEmpty = actions.getShowEmptyProgram().getSize(); +// int minWidth = 18 + (int) Math.max(showLonglineSize.getWidth() + showSeineSize.getWidth(), showReferential.getWidth() + showEmpty.getWidth()); +// source.setMinimumSize(new Dimension(minWidth, (int) source.getSize().getHeight())); +// log.debug("Header resized to minumun: " + source.getMinimumSize()); +// +// int maxWidth = ui.getNavigationView().getWidth() - 10; +// +// int currentWidth = (int) preferredLayoutSize.getWidth(); +// int height = 32; +// if (currentWidth > maxWidth) { +// height += 32; +// } +// actions.setPreferredSize(new Dimension(maxWidth, height)); +// +// } +// }); } protected void init(ObserveActionMap actionMap, AbstractButton editor) { @@ -498,9 +492,6 @@ public class ObserveMainUIInitializer { } - private Border focusBorder; - private Border noFocusBorder; - private Border getFocusBorder() { if (focusBorder == null) { focusBorder = new LineBorder(ObserveSwingApplicationContext.get().getConfig().getFocusBorderColor(), 3, true); @@ -549,7 +540,7 @@ public class ObserveMainUIInitializer { /** * Nettoye des ui tout ce qui concerne un modèle de navigation. - * <p> + * * <b>Note:</b> cette méthode doit être appelée avant tout rechargement de modèle de naivgation. * * @param progressModel progress model to interact with ui @@ -576,7 +567,7 @@ public class ObserveMainUIInitializer { /** * Charge dans l'ui un nouveau modèle de navigation. - * <p> + * * <b>Note:</b> cette méthode doit être appelée après tout rechargement de modèle de naivgation. * * @param progressModel the progress model to interact with ui ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java @@ -72,15 +72,15 @@ public class DataSynchroModel extends AdminActionModel { super(AdminStep.DATA_SYNCHRONIZE); // leftSelectionDataModel = new SelectionTreeModel(); -// leftSelectionDataModel.setLoadLongline(true); -// leftSelectionDataModel.setLoadSeine(true); -// leftSelectionDataModel.setLoadReferential(false); +// leftSelectionDataModel.setShowLonglineTrip(true); +// leftSelectionDataModel.setShowSeineTrip(true); +// leftSelectionDataModel.setShowReferential(false); // leftSelectionDataModel.setShowEmptyTrips(false); // // rightSelectionDataModel = new SelectionTreeModel(); -// rightSelectionDataModel.setLoadLongline(true); -// rightSelectionDataModel.setLoadSeine(true); -// rightSelectionDataModel.setLoadReferential(false); +// rightSelectionDataModel.setShowLonglineTrip(true); +// rightSelectionDataModel.setShowSeineTrip(true); +// rightSelectionDataModel.setShowReferential(false); // rightSelectionDataModel.setShowEmptyTrips(false); tasks = new DefaultListModel<>(); ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx @@ -33,6 +33,7 @@ fr.ird.observe.client.constants.ValidationModelMode org.nuiton.validator.NuitonValidatorScope + org.nuiton.i18n.I18n java.io.File ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss @@ -24,7 +24,7 @@ layout:{new BorderLayout()}; } #referentialSynchronizeConfigPanel { - border:{new TitledBorder(t("observe.actions.synchro.referential.config.mode"))}; + border:{new TitledBorder(I18n.t("observe.actions.synchro.referential.config.mode"))}; } #synchronizeMode { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java @@ -415,7 +415,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> Action resetAction = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - beanComboBox.doActionPerformed__on__resetButton(null); + beanComboBox.getResetButton().doClick(); SwingUtilities.invokeLater(beanComboBox::grabFocus); } }; @@ -768,7 +768,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, new ArrayList<>(), new ArrayList<>()); JList<R> selectedList = list.getSelectedList(); - ListCellRenderer<? super R> renderer = selectedList.getCellRenderer(); + ListCellRenderer renderer = selectedList.getCellRenderer(); selectedList.setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); list.getUniverseList().setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); @@ -795,7 +795,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, new ArrayList<>(), new ArrayList<>()); JList<R> selectedList = list.getSelectedList(); - ListCellRenderer<? super R> renderer = selectedList.getCellRenderer(); + ListCellRenderer renderer = selectedList.getCellRenderer(); selectedList.setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); list.getUniverseList().setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); @@ -822,7 +822,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, Collections.emptyList()); JList<R> list1 = list.getList(); - ListCellRenderer<? super R> renderer = list1.getCellRenderer(); + ListCellRenderer renderer = list1.getCellRenderer(); list1.setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); } @@ -847,7 +847,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, Collections.emptyList()); JList<R> list1 = list.getList(); - ListCellRenderer<? super R> renderer = list1.getCellRenderer(); + ListCellRenderer renderer = list1.getCellRenderer(); list1.setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); } ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx @@ -30,6 +30,8 @@ fr.ird.observe.client.ui.storage.tabs.SecurityModel fr.ird.observe.client.ui.storage.StorageStep fr.ird.observe.client.ui.storage.StorageUIModel + + org.nuiton.i18n.I18n </import> <StorageStep id='step' initializer='StorageStep.ROLES'/> @@ -44,7 +46,7 @@ <script><![CDATA[ public String updateAdministrateur(String role) { - return t("observe.storage.security.administrateur", role); + return I18n.t("observe.storage.security.administrateur", role); } ]]> </script> ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss @@ -25,7 +25,7 @@ } #administrateurPanel { - border:{new TitledBorder(t("observe.storage.security.administrateur"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.administrateur"))}; layout:{new BorderLayout()}; } @@ -43,13 +43,13 @@ } #techniciens { - border:{new TitledBorder(t("observe.storage.security.technicien"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.technicien"))}; } #readers { - border:{new TitledBorder(t("observe.storage.security.reader"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.reader"))}; } #referentiels { - border:{new TitledBorder(t("observe.storage.security.referentiel"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.referentiel"))}; } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx deleted ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx +++ /dev/null @@ -1,38 +0,0 @@ -<!-- - #%L - ObServe :: Client - %% - Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JPanel layout='{new FlowLayout(FlowLayout.LEFT, 2, 2)}'> - - <import> - java.awt.FlowLayout - </import> - - <JToggleButton id='showSeine' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showLongline' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showReferential' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showEmptyProgram' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - - <NavigationTree id='tree' javaBean='new NavigationTree()'/> - - <JToolBar id='toolbar'> - <JButton id='colapseAll' onActionPerformed='handler.collapseAll()'/> - <JButton id='expandAll' onActionPerformed='handler.expandAll()'/> - </JToolBar> - -</JPanel> ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java @@ -10,18 +10,20 @@ package fr.ird.observe.client.ui.tree.navigation; * 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.client.configuration.ClientConfig; +import fr.ird.observe.client.configuration.NavigationTreeConfigBean; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.tree.navigation.nodes.RootNavigationTreeNode; @@ -33,19 +35,20 @@ import fr.ird.observe.client.ui.tree.navigation.nodes.referential.ReferentialsSe import fr.ird.observe.client.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode; import fr.ird.observe.dto.data.longline.TripLonglineHelper; import fr.ird.observe.dto.data.longline.TripLonglineReference; -import fr.ird.observe.dto.referential.ProgramHelper; -import fr.ird.observe.dto.referential.ProgramReference; import fr.ird.observe.dto.data.seine.TripSeineHelper; import fr.ird.observe.dto.data.seine.TripSeineReference; +import fr.ird.observe.dto.referential.ProgramHelper; +import fr.ird.observe.dto.referential.ProgramReference; import fr.ird.observe.services.service.data.NavigationRequest; import fr.ird.observe.services.service.data.NavigationResult; import fr.ird.observe.services.service.data.NavigationService; + +import javax.swing.tree.DefaultTreeModel; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import javax.swing.tree.DefaultTreeModel; /** * Created on 14/11/16. @@ -55,44 +58,50 @@ import javax.swing.tree.DefaultTreeModel; */ public class NavigationTreeModel extends DefaultTreeModel { - private boolean loadSeine = true; - private boolean loadLongline = true; - private boolean loadReferential = true; - private boolean loadEmptyProgram = true; + private final NavigationTreeConfigBean config; - public NavigationTreeModel() { + NavigationTreeModel() { super(new RootNavigationTreeNode()); + config = new NavigationTreeConfigBean(); } - public NavigationTreeNodeSupport<?> findNode(NavigationTreeNodeSupport<?> node, Object... ids) { - NavigationTreeNodeSupport<?> result = null; - for (Object id : ids) { + public NavigationTreeConfigBean getConfig() { + return config; + } - if (id instanceof String) { - result = node.findChildById((String) id); - } else if (id instanceof Class) { - result = node.findChildByType((Class) id); + @Override + public RootNavigationTreeNode getRoot() { + return (RootNavigationTreeNode) super.getRoot(); + } - } - if (result == null) { + public <N extends NavigationTreeNodeSupport> void reload(N node) { + node.reload(); + super.reload(node); + } - // un des noeud n'a pas ete trouve, on sortReferential - break; + public <N extends NavigationTreeNodeSupport> void open(N node) { + if (node instanceof WithChildsToReload) { + boolean updated = node.populateChilds(); + if (updated) { + reload(node); } - node = result; } - return result; } - public NavigationTreeNodeSupport<?> findNodeByType(NavigationTreeNodeSupport<?> node, Class<?> nodeType) { - return node.findChildByType(nodeType); + public void save(ClientConfig config) { + config.load(this.config); + config.saveForUser(); + } + + public void load(ClientConfig config) { + this.config.load(config); } public void populate() { NavigationService navigationService = ObserveSwingDataSource.MAIN.getNavigationService(); - NavigationRequest navigationRequest = toNavigationRequest(); + NavigationRequest navigationRequest = config.toRequest(); NavigationResult navigationResult = navigationService.getNavigation(navigationRequest); List<ProgramReference> programs = new ArrayList<>(navigationResult.getPrograms()); @@ -119,75 +128,38 @@ public class NavigationTreeModel extends DefaultTreeModel { ProgramSeineNavigationTreeNode programNode = new ProgramSeineNavigationTreeNode(program, references); root.add(programNode); } - } - if (isLoadReferential()) { + if (config.isShowReferential()) { root.add(new ReferentialsCommonNavigationTreeNode()); root.add(new ReferentialsLonglineNavigationTreeNode()); root.add(new ReferentialsSeineNavigationTreeNode()); } - setRoot(root); } - private NavigationRequest toNavigationRequest() { - NavigationRequest navigationRequest = new NavigationRequest(); - navigationRequest.setLoadLongline(isLoadLongline()); - navigationRequest.setLoadSeine(isLoadSeine()); - navigationRequest.setLoadEmptyProgram(isLoadEmptyProgram()); - return navigationRequest; - } - - @Override - public RootNavigationTreeNode getRoot() { - return (RootNavigationTreeNode) super.getRoot(); - } - - public boolean isLoadSeine() { - return loadSeine; - } - - public void setLoadSeine(boolean loadSeine) { - this.loadSeine = loadSeine; - } - - public boolean isLoadLongline() { - return loadLongline; - } - - public void setLoadLongline(boolean loadLongline) { - this.loadLongline = loadLongline; - } - - public boolean isLoadReferential() { - return loadReferential; - } - - public void setLoadReferential(boolean loadReferential) { - this.loadReferential = loadReferential; - } - - public boolean isLoadEmptyProgram() { - return loadEmptyProgram; - } + NavigationTreeNodeSupport<?> findNode(NavigationTreeNodeSupport<?> node, Object... ids) { + NavigationTreeNodeSupport<?> result = null; + for (Object id : ids) { - public void setLoadEmptyProgram(boolean loadEmptyProgram) { - this.loadEmptyProgram = loadEmptyProgram; - } + if (id instanceof String) { + result = node.findChildById((String) id); + } else if (id instanceof Class) { + result = node.findChildByType((Class) id); - public <N extends NavigationTreeNodeSupport> void reload(N node) { - node.reload(); - super.reload(node); - } + } + if (result == null) { - public <N extends NavigationTreeNodeSupport> void open(N node) { - if (node instanceof WithChildsToReload) { - boolean updated = node.populateChilds(); - if (updated) { - reload(node); + // un des noeud n'a pas ete trouve, on sortReferential + break; } + node = result; } + return result; + } + + NavigationTreeNodeSupport<?> findNodeByType(NavigationTreeNodeSupport<?> node, Class<?> nodeType) { + return node.findChildByType(nodeType); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx @@ -0,0 +1,24 @@ +<JScrollPane id='navigationScrollPane' columnHeaderView='{toolbar}' viewportView="{tree}"> + + <import> + fr.ird.observe.client.configuration.NavigationTreeConfigBean + static org.nuiton.i18n.I18n.t + </import> + <NavigationTree id='tree' /> + <NavigationTreeModel id='treeModel' javaBean='{tree.getTreeModel()}'/> + <NavigationTreeConfigBean id='navigationConfig' javaBean='treeModel.getConfig()'/> + + <JPopupMenu id='configurePopup'> + <JCheckBoxMenuItem id='showSeineTrip' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showLonglineTrip' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showReferential' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showEmptyProgram' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + </JPopupMenu> + + <JToolBar id='toolbar'> + <JButton id='colapseAll' onActionPerformed='handler.collapseAll()'/> + <JButton id='expandAll' onActionPerformed='handler.expandAll()'/> + <JToggleButton id='configure' onActionPerformed='handler.configure()'/> + </JToolBar> + +</JScrollPane> ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss @@ -8,36 +8,35 @@ * 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% */ -#showSeine { - selected: {tree.getTreeModel().isLoadSeine()}; +#showSeineTrip { + selected: {navigationConfig.isShowSeineTrip()}; text:"observe.constant.ObserveModelType.PS"; toolTipText:"observe.constant.ObserveModelType.PS.description"; } -#showLongline { - selected: {tree.getTreeModel().isLoadLongline()}; +#showLonglineTrip { + selected: {navigationConfig.isShowLonglineTrip()}; text:"observe.constant.ObserveModelType.LL"; toolTipText:"observe.constant.ObserveModelType.LL.description"; } #showReferential { - selected: {tree.getTreeModel().isLoadReferential()}; + selected: {navigationConfig.isShowReferential()}; text:"observe.constant.ObserveModelType.REF"; toolTipText:"observe.constant.ObserveModelType.REF.description"; } - #showEmptyProgram { - selected: {tree.getTreeModel().isLoadEmptyProgram()}; + selected: {navigationConfig.isShowEmptyProgram()}; text:"observe.constant.ObserveModelType.EMPTY"; toolTipText:"observe.constant.ObserveModelType.EMPTY.description"; } @@ -61,3 +60,8 @@ JButton { actionIcon:expand; toolTipText:"observe.tree.action.expandAll.tip"; } + +#configure { + actionIcon:generate; + toolTipText:"observe.tree.action.configure.tip"; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java @@ -1,39 +1,11 @@ package fr.ird.observe.client.ui.tree.navigation; -/* - * #%L - * ObServe :: Client - * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.configuration.ClientConfig; +import fr.ird.observe.client.configuration.NavigationTreeConfig; import fr.ird.observe.client.ui.ObserveKeyStrokes; -import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; -import fr.ird.observe.dto.referential.ProgramDto; -import fr.ird.observe.dto.data.seine.TripSeineDto; -import java.awt.Color; -import java.awt.event.ActionEvent; -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; +import fr.ird.observe.client.ui.util.UIHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.decorator.ColorHighlighter; @@ -41,17 +13,29 @@ import org.jdesktop.swingx.search.Searchable; import org.jdesktop.swingx.search.TreeSearchable; import org.nuiton.jaxx.runtime.spi.UIHandler; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; + /** - * @author Samuel Maisonneuve- maisonneuve(a)codelutin.com + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr */ -public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHeader> { +public class NavigationUIHandler implements UIHandler<NavigationUI> { /** Logger */ - private static final Log log = LogFactory.getLog(NavigationTreeHeaderHandler.class); + private static final Log log = LogFactory.getLog(NavigationUIHandler.class); - private NavigationTreeHeader ui; + private NavigationUI ui; - public NavigationTreeHeader getUi() { + public NavigationUI getUi() { return ui; } @@ -60,15 +44,15 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } @Override - public void beforeInit(NavigationTreeHeader ui) { + public void beforeInit(NavigationUI ui) { this.ui = ui; } @Override - public void afterInit(NavigationTreeHeader ui) { + public void afterInit(NavigationUI ui) { - ui.getShowSeine().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); - ui.getShowLongline().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); + ui.getShowSeineTrip().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); + ui.getShowLonglineTrip().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); ui.getShowReferential().setIcon(UIHelper.getUIManagerIcon("navigation.referentiel-16")); ui.getShowEmptyProgram().setIcon(UIHelper.getUIManagerIcon("navigation.data.seine.TripSeine-16")); @@ -77,10 +61,16 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead tree.setSearchable(searchable); searchable.setMatchHighlighter(new ColorHighlighter(Color.YELLOW, Color.BLACK)); - ObserveKeyStrokes.addKeyStroke(ui.getShowSeine(), ObserveKeyStrokes.KEY_STROKE_SHOW_SEINE); - ObserveKeyStrokes.addKeyStroke(ui.getShowLongline(), ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE); + ObserveKeyStrokes.addKeyStroke(ui.getShowSeineTrip(), ObserveKeyStrokes.KEY_STROKE_SHOW_SEINE); + ObserveKeyStrokes.addKeyStroke(ui.getShowLonglineTrip(), ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE); ObserveKeyStrokes.addKeyStroke(ui.getShowReferential(), ObserveKeyStrokes.KEY_STROKE_SHOW_REFERENTIAL); ObserveKeyStrokes.addKeyStroke(ui.getShowEmptyProgram(), ObserveKeyStrokes.KEY_STROKE_SHOW_EMPTY_PROGRAM); + ObserveKeyStrokes.addKeyStroke(ui.getConfigure(), ObserveKeyStrokes.KEY_STROKE_NAVIGATION_CONFIGURE); + //FIXME (no text, so no text after...) + ui.getConfigure().setText(null); + ClientConfig config = ObserveSwingApplicationContext.get().getConfig(); + NavigationTreeModel treeModel = (NavigationTreeModel) tree.getModel(); + treeModel.load(config); InputMap inputMap = ui.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = ui.getActionMap(); @@ -88,32 +78,66 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead actionMap.put("showSeine", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowSeine().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowSeineTrip().doClick(); + } + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE, "showLongline"); actionMap.put("showLongline", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowLongline().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowLonglineTrip().doClick(); + } + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_REFERENTIAL, "showReferential"); actionMap.put("showReferential", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowReferential().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowReferential().doClick(); + } + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_EMPTY_PROGRAM, "showEmptyProgram"); actionMap.put("showEmptyProgram", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowEmptyProgram().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowEmptyProgram().doClick(); + } + ui.getConfigurePopup().setVisible(false); + } + }); + inputMap.put(ObserveKeyStrokes.KEY_STROKE_NAVIGATION_CONFIGURE, "configure"); + actionMap.put("configure", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + ui.getConfigure().doClick(); } }); } + void configure() { + SwingUtilities.invokeLater(() -> { + JComponent c = ui.getConfigure(); + JPopupMenu p = ui.getConfigurePopup(); + if (p.isVisible()) { + p.setVisible(false); + return; + } + int width = ui.getParent().getWidth() - 5; + int height = p.getPreferredSize().height; + p.setPreferredSize(new Dimension(width, height)); + p.show(c, (c.getWidth() == 0 ? 24 : c.getWidth()) - width + 2, c.getHeight()); + }); + } + public void search(String term) { Searchable searchable = getTree().getSearchable(); @@ -121,7 +145,7 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } - public void tryToUpdateNavigationTree() { + void tryToUpdateNavigationTree() { boolean canContinue = ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI(); @@ -137,23 +161,24 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } tree.clearSelection(); - boolean showSeine = ui.getShowSeine().isSelected(); - boolean showLongline = ui.getShowLongline().isSelected(); + boolean showSeine = ui.getShowSeineTrip().isSelected(); + boolean showLongline = ui.getShowLonglineTrip().isSelected(); boolean showReferential = ui.getShowReferential().isSelected(); boolean showEmptyProgram = ui.getShowEmptyProgram().isSelected(); NavigationTreeModel treeModel = tree.getTreeModel(); - treeModel.setLoadSeine(showSeine); - treeModel.setLoadLongline(showLongline); - treeModel.setLoadReferential(showReferential); - treeModel.setLoadEmptyProgram(showEmptyProgram); - + NavigationTreeConfig navigationTreeConfig = treeModel.getConfig(); + navigationTreeConfig.setShowSeineTrip(showSeine); + navigationTreeConfig.setShowLonglineTrip(showLongline); + navigationTreeConfig.setShowReferential(showReferential); + navigationTreeConfig.setShowEmptyProgram(showEmptyProgram); + treeModel.save(ObserveSwingApplicationContext.get().getConfig()); treeModel.populate(); - //FIXME repositionner le nœud sélectionné if (!treeModel.getRoot().isLeaf()) { tree.setSelectionRow(0); } + ui.getConfigure().setSelected(false); } public void collapseAll() { ===================================== client/src/main/resources/i18n/client_en_GB.properties ===================================== --- a/client/src/main/resources/i18n/client_en_GB.properties +++ b/client/src/main/resources/i18n/client_en_GB.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Storage details observe.title.unique.key=Unique keys used in a referentiel observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Collapse all +observe.tree.action.configure.tip=Configure observe.tree.action.expandAll.tip=Expand all observe.tree.action.selectAll.tip=Select All observe.tree.action.unselectAll.tip=Unselect All ===================================== client/src/main/resources/i18n/client_es_ES.properties ===================================== --- a/client/src/main/resources/i18n/client_es_ES.properties +++ b/client/src/main/resources/i18n/client_es_ES.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Información sobre la fuente de datos observe.title.unique.key=Ids de negocio del referencial %1$s observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Cerrar los nudos +observe.tree.action.configure.tip=Configure \#TODO observe.tree.action.expandAll.tip=Abrir los nudos observe.tree.action.selectAll.tip=Seleccionar todo observe.tree.action.unselectAll.tip=Deseleccionar todo ===================================== client/src/main/resources/i18n/client_fr_FR.properties ===================================== --- a/client/src/main/resources/i18n/client_fr_FR.properties +++ b/client/src/main/resources/i18n/client_fr_FR.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Information sur la source de données observe.title.unique.key=Clefs métier du référentiel %1$s observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Tout grouper +observe.tree.action.configure.tip=Configurer observe.tree.action.expandAll.tip=Tout déplier observe.tree.action.selectAll.tip=Tout sélectionner observe.tree.action.unselectAll.tip=Tout désélectionner ===================================== pom.xml ===================================== --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ <packaging>pom</packaging> <name>ObServe :: Pom</name> - <description>Projet ObServe</description> + <description>Project ObServe</description> <url>https://ultreiaio.gitlab.io/ird-observe</url> <inceptionYear>2008</inceptionYear> <organization> @@ -142,10 +142,10 @@ <projectId>ird-observe</projectId> <stageId>frirdobserve</stageId> - <!-- dev version (for develop purpose --> + <!-- dev version --> <devMode>true</devMode> - <!--Modèle version--> + <!--persistence model version--> <observe.model.version>7.0</observe.model.version> <!-- build timestamp configuration --> @@ -157,7 +157,7 @@ <!--<eugenePluginVersion>3.0-alpha-13</eugenePluginVersion>--> <!--<processorPluginVersion>1.3</processorPluginVersion>--> - <lib.version.java4all.jaxx>3.0-alpha-12</lib.version.java4all.jaxx> + <lib.version.java4all.jaxx>3.0-alpha-26</lib.version.java4all.jaxx> <lib.version.nuiton.topia>3.3</lib.version.nuiton.topia> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> <xworkVersion>2.3.34</xworkVersion> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/cdbaa4e78c89734f40c43e7cc03… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/cdbaa4e78c89734f40c43e7cc03… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Amélioration de l'arbre de navigation
by Tony CHEMIT 01 Apr '18

01 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 2e66cbe9 by Tony CHEMIT at 2018-04-01T13:34:33Z Amélioration de l&#39;arbre de navigation - - - - - 27 changed files: - client-configuration/pom.xml - client-configuration/src/main/config/Client.ini - client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java - + client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java - client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties - client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties - client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties - client/pom.xml - client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss - − client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java - + client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss - client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties - pom.xml Changes: ===================================== client-configuration/pom.xml ===================================== --- a/client-configuration/pom.xml +++ b/client-configuration/pom.xml @@ -104,6 +104,14 @@ <groupId>io.ultreia.java4all.jaxx</groupId> <artifactId>jaxx-widgets-gis</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all.jaxx</groupId> + <artifactId>jaxx-widgets-temperature</artifactId> + </dependency> + <dependency> + <groupId>io.ultreia.java4all</groupId> + <artifactId>java-bean</artifactId> + </dependency> </dependencies> ===================================== client-configuration/src/main/config/Client.ini ===================================== --- a/client-configuration/src/main/config/Client.ini +++ b/client-configuration/src/main/config/Client.ini @@ -174,6 +174,11 @@ description = observe.config.h2.can.migrate.description key = h2.canMigrate type = Boolean defaultValue = true +[option h2CanEditReferential] +description = observe.config.h2.can.editReferential.description +key = h2.canEditReferential +type = boolean +defaultValue = false [option h2ServerPort] description = observe.config.h2.serverPort.description @@ -501,6 +506,12 @@ key = ui.coordinate.format type = org.nuiton.jaxx.widgets.gis.CoordinateFormat defaultValue = "dmd" +[option temperatureFormat] +description = observe.config.temperature.format +key = ui.temperature.format +type = org.nuiton.jaxx.widgets.temperature.TemperatureFormat +defaultValue = "C" + [option focusBorderColor] description = observe.config.ui.focusBorderColor key = ui.focusBorder.color @@ -531,6 +542,30 @@ key = server.checkServerVersion type = Boolean defaultValue = true +[option showSeineTrip] +description = observe.config.ui.tree.showSeineTrip.description +key = ui.tree.showSeineTrip +type = Boolean +defaultValue = true + +[option showLonglineTrip] +description = observe.config.ui.tree.showLonglineTrip.description +key = ui.tree.showLonglineTrip +type = Boolean +defaultValue = true + +[option showReferential] +description = observe.config.ui.tree.showReferential.description +key = ui.tree.showReferential +type = Boolean +defaultValue = true + +[option showEmptyProgram] +description = observe.config.ui.tree.showEmptyProgram.description +key = ui.tree.showEmptyProgram +type = Boolean +defaultValue = true + [action help] description = observe.action.commandline.help action = "fr.ird.observe.client.ObserveCLAction#help" ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java ===================================== --- a/client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/ClientConfig.java @@ -8,12 +8,12 @@ * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. @@ -30,6 +30,16 @@ import fr.ird.observe.client.constants.DbMode; import fr.ird.observe.dto.FloatingObjectPreset; import fr.ird.observe.dto.presets.RemoteDataSourceConfiguration; import fr.ird.observe.dto.presets.ServerDataSourceConfiguration; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.config.ApplicationConfig; +import org.nuiton.config.ArgumentsParserException; +import org.nuiton.jaxx.widgets.gis.CoordinateFormat; +import org.nuiton.jaxx.widgets.temperature.TemperatureFormat; +import org.nuiton.version.Version; +import org.nuiton.version.Versions; + import java.beans.PropertyChangeListener; import java.io.File; import java.nio.charset.StandardCharsets; @@ -44,15 +54,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Properties; import java.util.Set; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.config.ApplicationConfig; -import org.nuiton.config.ArgumentsParserException; -import org.nuiton.jaxx.widgets.gis.CoordinateFormat; -import org.nuiton.version.Version; -import org.nuiton.version.Versions; - import static org.nuiton.i18n.I18n.t; @@ -62,52 +63,72 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - dev(a)tchemit.fr * @since 1.0 */ -public class ClientConfig extends GeneratedClientConfig { +public class ClientConfig extends GeneratedClientConfig implements NavigationTreeConfig { + public static final String DB_NAME = "obstuna"; + public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of( + ClientConfigOption.MAP_LAYER1, + ClientConfigOption.MAP_LAYER2, + ClientConfigOption.MAP_LAYER3, + ClientConfigOption.MAP_LAYER4, + ClientConfigOption.MAP_LAYER5, + ClientConfigOption.MAP_LAYER6, + ClientConfigOption.MAP_LAYER7, + ClientConfigOption.MAP_LAYER8, + ClientConfigOption.MAP_LAYER9, + ClientConfigOption.MAP_LAYER10); /** le pattern du fichier de sauvegarde d'une base locale */ private static final String BACKUP_DB_PATTERN = "obstuna-local-%1$tF--%1$tk-%1$tM-%1$tS.sql.gz"; - - public static final String DB_NAME = "obstuna"; - private static final String APPLICATION_VERSION = "application.version"; - private static final String VERSION = "version"; - private static final String PROPERTY_LOCAL_STORAGE_EXIST = "localStorageExist"; - private static final String PROPERTY_INITIAL_DUMP_EXIST = "initialDumpExist"; - private static final String PROPERTY_MAIN_STORAGE_OPENED = "mainStorageOpened"; - /** Logger */ private static final Log log = LogFactory.getLog(ClientConfig.class); - private static final String DEFAULT_OBSERVE_SWING_CONFIGURATION_FILENAME = "observe-client.conf"; - + /** + * Liste des options qu'on ne peut pas sauvegarder (les mots de passes, + * les options d'admin pour les simples utilisateurs,...). + * + * @since 1.5 + */ + private final String[] unsavables = new String[]{ +// ClientConfigOption.OBSTUNA_PASSWORD.getKey(), + ClientConfigOption.H2_PASSWORD.getKey(), + ClientConfigOption.OBSTUNA_CAN_MIGRATE.getKey(), + }; + //FIXME + private final ImmutableSet<String> longlinVesselTypeIds = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675736#0.8708229847859869", + "fr.ird.observe.entities.referentiel.VesselType#1239832686137#0.1")); + private final ImmutableSet<String> seineVesselTypeIds = ImmutableSet.copyOf( + Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.7380146830307519", + "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.9086075071905084", + "fr.ird.observe.entities.referentiel.VesselType#1239832675737#0.43324169605639407")); + private final SimpleDateFormat dateFormat = new SimpleDateFormat(); /** * un drapeau pour savoir s'il faut lancer l'interface graphique. Cette * valeur peut être programmées lors des actions. */ private boolean displayMainUI = true; - /** drapeau pour savoir si une base locale existe */ private boolean localStorageExist; - /** * drapeau pour savoir si le dump initial a ete chargée depuis la base * centrale */ private boolean initialDumpExist; - /** drapeau pour savoir si une source de données est ouverte */ private boolean mainStorageOpened; - /** * drapeau pour savoir si la source ouverte est locale (attention, lorsqu'il * n'y a pas de storage d'ouvert, la valeur est null). */ private Boolean mainStorageOpenedLocal; - /** * drapeau pour savoir si on peut utiliser des ui dans l'environnement. * <p> @@ -116,37 +137,12 @@ public class ClientConfig extends GeneratedClientConfig { * trouvé. */ private boolean canUseUI = true; - /** La version de l'application */ private Version version; - /** Texte du copyright (calculé dynamiquement). */ private String copyrightText; - - /** - * Liste des options qu'on ne peut pas sauvegarder (les mots de passes, - * les options d'admin pour les simples utilisateurs,...). - * - * @since 1.5 - */ - private final String[] unsavables = new String[]{ -// ClientConfigOption.OBSTUNA_PASSWORD.getKey(), - ClientConfigOption.H2_PASSWORD.getKey(), - ClientConfigOption.OBSTUNA_CAN_MIGRATE.getKey(), - }; - - //FIXME - private final ImmutableSet<String> longlinVesselTypeIds = ImmutableSet.copyOf( - Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", - "fr.ird.observe.entities.referentiel.VesselType#1239832675736#0.8708229847859869", - "fr.ird.observe.entities.referentiel.VesselType#1239832686137#0.1")); - - private final ImmutableSet<String> seineVesselTypeIds = ImmutableSet.copyOf( - Sets.newHashSet("fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.044156847891821505", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.307197212385357", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.7380146830307519", - "fr.ird.observe.entities.referentiel.VesselType#1239832675735#0.9086075071905084", - "fr.ird.observe.entities.referentiel.VesselType#1239832675737#0.43324169605639407")); + private ImmutableList<ServerDataSourceConfiguration> serverDataSourceConfigurationList; + private ImmutableList<RemoteDataSourceConfiguration> remoteDataSourceConfigurationList; public ClientConfig() { this(DEFAULT_OBSERVE_SWING_CONFIGURATION_FILENAME); @@ -217,6 +213,11 @@ public class ClientConfig extends GeneratedClientConfig { return CoordinateFormat.valueOf(get().getOption(ClientConfigOption.COORDINATE_FORMAT.getKey())); } + @Override + public TemperatureFormat getTemperatureFormat() { + return get().getOption(TemperatureFormat.class, ClientConfigOption.TEMPERATURE_FORMAT.getKey()); + } + public String getCopyrightText() { if (copyrightText == null) { Date date = new Date(); @@ -232,6 +233,10 @@ public class ClientConfig extends GeneratedClientConfig { return version; } + private void setVersion(Version version) { + this.version = version; + } + public boolean isShowTimeEditorSlider() { return isShowDateTimeEditorSlider(); } @@ -244,24 +249,24 @@ public class ClientConfig extends GeneratedClientConfig { return displayMainUI; } - public boolean isCanUseUI() { - return canUseUI; - } - - public boolean isLocalStorageExist() { - return localStorageExist; + public void setDisplayMainUI(boolean b) { + displayMainUI = b; } - public boolean isInitialDumpExist() { - return initialDumpExist; + public boolean isCanUseUI() { + return canUseUI; } - public boolean isMainStorageOpened() { - return mainStorageOpened; + public void setCanUseUI(boolean canUseUI) { + this.canUseUI = canUseUI; + if (!canUseUI) { + // on ne pourra pas lancer l'ui principale + setDisplayMainUI(false); + } } - public Boolean getMainStorageOpenedLocal() { - return mainStorageOpenedLocal; + public boolean isLocalStorageExist() { + return localStorageExist; } public void setLocalStorageExist(boolean newValue) { @@ -270,12 +275,20 @@ public class ClientConfig extends GeneratedClientConfig { firePropertyChange(PROPERTY_LOCAL_STORAGE_EXIST, newValue); } + public boolean isInitialDumpExist() { + return initialDumpExist; + } + public void setInitialDumpExist(boolean newValue) { initialDumpExist = newValue; // always force propagation firePropertyChange(PROPERTY_INITIAL_DUMP_EXIST, newValue); } + public boolean isMainStorageOpened() { + return mainStorageOpened; + } + public void setMainStorageOpened(boolean newValue) { mainStorageOpened = newValue; if (!newValue) { @@ -286,36 +299,16 @@ public class ClientConfig extends GeneratedClientConfig { firePropertyChange(PROPERTY_MAIN_STORAGE_OPENED, newValue); } + public Boolean getMainStorageOpenedLocal() { + return mainStorageOpenedLocal; + } + public void setMainStorageOpenedLocal(Boolean newValue) { mainStorageOpenedLocal = newValue; // always force propagation firePropertyChange(PROPERTY_MAIN_STORAGE_OPENED + "Local", newValue); } - public void setDisplayMainUI(boolean b) { - displayMainUI = b; - } - - public void setCanUseUI(boolean canUseUI) { - this.canUseUI = canUseUI; - if (!canUseUI) { - // on ne pourra pas lancer l'ui principale - setDisplayMainUI(false); - } - } - - public static final List<ClientConfigOption> MAP_LAYERS = ImmutableList.of( - ClientConfigOption.MAP_LAYER1, - ClientConfigOption.MAP_LAYER2, - ClientConfigOption.MAP_LAYER3, - ClientConfigOption.MAP_LAYER4, - ClientConfigOption.MAP_LAYER5, - ClientConfigOption.MAP_LAYER6, - ClientConfigOption.MAP_LAYER7, - ClientConfigOption.MAP_LAYER8, - ClientConfigOption.MAP_LAYER9, - ClientConfigOption.MAP_LAYER10); - public List<File> getMapLayerFiles() { List<File> layers = new LinkedList<>(); @@ -399,10 +392,6 @@ public class ClientConfig extends GeneratedClientConfig { } } - private void setVersion(Version version) { - this.version = version; - } - public Set<String> getSeineVesselTypeIds() { return seineVesselTypeIds; } @@ -429,10 +418,17 @@ public class ClientConfig extends GeneratedClientConfig { return option == null ? new RemoteDataSourceConfiguration[0] : new Gson().fromJson(option, RemoteDataSourceConfiguration[].class); } + @Override + public void setRemoteDataSourceConfigurations(RemoteDataSourceConfiguration[] configurations) { + String option = new Gson().toJson(configurations); + get().setOption(ClientConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + remoteDataSourceConfigurationList = null; + } + public void addRemoteDataSourceConfiguration(RemoteDataSourceConfiguration configuration) { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.add(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } @@ -440,27 +436,17 @@ public class ClientConfig extends GeneratedClientConfig { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); remoteDataSourceConfigurations.add(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } public void removeRemoteDataSourceConfiguration(RemoteDataSourceConfiguration configuration) { List<RemoteDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); - setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setRemoteDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new RemoteDataSourceConfiguration[0])); saveForUser(); } - @Override - public void setRemoteDataSourceConfigurations(RemoteDataSourceConfiguration[] configurations) { - String option = new Gson().toJson(configurations); - get().setOption(ClientConfigOption.REMOTE_DATA_SOURCE_CONFIGURATIONS.getKey(), option); - remoteDataSourceConfigurationList=null; - } - - ImmutableList<ServerDataSourceConfiguration> serverDataSourceConfigurationList; - ImmutableList<RemoteDataSourceConfiguration> remoteDataSourceConfigurationList; - public ImmutableList<RemoteDataSourceConfiguration> getRemoteDataSourceConfigurationList() { if (remoteDataSourceConfigurationList == null) { List<RemoteDataSourceConfiguration> configurations = new ArrayList<>(Arrays.asList(getRemoteDataSourceConfigurations())); @@ -485,10 +471,17 @@ public class ClientConfig extends GeneratedClientConfig { return option == null ? new ServerDataSourceConfiguration[0] : new Gson().fromJson(option, ServerDataSourceConfiguration[].class); } + @Override + public void setServerDataSourceConfigurations(ServerDataSourceConfiguration[] configurations) { + String option = new Gson().toJson(configurations); + get().setOption(ClientConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey(), option); + serverDataSourceConfigurationList = null; + } + public void addServerDataSourceConfiguration(ServerDataSourceConfiguration configuration) { List<ServerDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); remoteDataSourceConfigurations.add(configuration); - setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } @@ -496,27 +489,18 @@ public class ClientConfig extends GeneratedClientConfig { List<ServerDataSourceConfiguration> remoteDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); remoteDataSourceConfigurations.remove(configuration); remoteDataSourceConfigurations.add(configuration); - setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[remoteDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(remoteDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } public void removeServerDataSourceConfiguration(ServerDataSourceConfiguration configuration) { List<ServerDataSourceConfiguration> serverDataSourceConfigurations = new ArrayList<>(Arrays.asList(getServerDataSourceConfigurations())); serverDataSourceConfigurations.remove(configuration); - setServerDataSourceConfigurations(serverDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[serverDataSourceConfigurations.size()])); + setServerDataSourceConfigurations(serverDataSourceConfigurations.toArray(new ServerDataSourceConfiguration[0])); saveForUser(); } @Override - public void setServerDataSourceConfigurations(ServerDataSourceConfiguration[] configurations) { - String option = new Gson().toJson(configurations); - get().setOption(ClientConfigOption.SERVER_DATA_SOURCE_CONFIGURATIONS.getKey(), option); - serverDataSourceConfigurationList=null; - } - - private final SimpleDateFormat dateFormat = new SimpleDateFormat(); - - @Override public Date getBuildDate() { String dateStr = get().getOption(ClientConfigOption.BUILD_DATE.getKey()); try { ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java ===================================== --- /dev/null +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfig.java @@ -0,0 +1,64 @@ +package fr.ird.observe.client.configuration; + +/*- + * #%L + * ObServe :: Client Configuration + * %% + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ird.observe.services.service.data.NavigationRequest; + +/** + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr + */ +public interface NavigationTreeConfig { + + boolean isShowSeineTrip(); + + void setShowSeineTrip(boolean showSeineTrip); + + boolean isShowLonglineTrip(); + + void setShowLonglineTrip(boolean showLonglineTrip); + + boolean isShowReferential(); + + void setShowReferential(boolean showReferential); + + boolean isShowEmptyProgram(); + + void setShowEmptyProgram(boolean showEmptyProgram); + + default NavigationRequest toRequest() { + NavigationRequest navigationRequest = new NavigationRequest(); + navigationRequest.setLoadLongline(isShowLonglineTrip()); + navigationRequest.setLoadSeine(isShowSeineTrip()); + navigationRequest.setLoadEmptyProgram(isShowEmptyProgram()); + return navigationRequest; + } + + default void load(NavigationTreeConfig config) { + setShowEmptyProgram(config.isShowEmptyProgram()); + setShowReferential(config.isShowReferential()); + setShowLonglineTrip(config.isShowLonglineTrip()); + setShowSeineTrip(config.isShowSeineTrip()); + } +} ===================================== client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java ===================================== --- /dev/null +++ b/client-configuration/src/main/java/fr/ird/observe/client/configuration/NavigationTreeConfigBean.java @@ -0,0 +1,87 @@ +package fr.ird.observe.client.configuration; + +/*- + * #%L + * ObServe :: Client Configuration + * %% + * Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import io.ultreia.java4all.bean.AbstractJavaBean; + +/** + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr + */ +public class NavigationTreeConfigBean extends AbstractJavaBean implements NavigationTreeConfig { + + + private boolean showSeineTrip = true; + private boolean showLonglineTrip = true; + private boolean showReferential = true; + private boolean showEmptyProgram = true; + + @Override + public boolean isShowSeineTrip() { + return showSeineTrip; + } + + @Override + public void setShowSeineTrip(boolean showSeineTrip) { + boolean oldValue = isShowSeineTrip(); + this.showSeineTrip = showSeineTrip; + firePropertyChange("showSeineTrip", oldValue, showSeineTrip); + } + + @Override + public boolean isShowLonglineTrip() { + return showLonglineTrip; + } + + @Override + public void setShowLonglineTrip(boolean showLonglineTrip) { + boolean oldValue = isShowLonglineTrip(); + this.showLonglineTrip = showLonglineTrip; + firePropertyChange("showLonglineTrip", oldValue, showLonglineTrip); + } + + @Override + public boolean isShowReferential() { + return showReferential; + } + + @Override + public void setShowReferential(boolean showReferential) { + boolean oldValue = isShowReferential(); + this.showReferential = showReferential; + firePropertyChange("showReferential", oldValue, showReferential); + } + + @Override + public boolean isShowEmptyProgram() { + return showEmptyProgram; + } + + @Override + public void setShowEmptyProgram(boolean showEmptyProgram) { + boolean oldValue = isShowEmptyProgram(); + this.showEmptyProgram = showEmptyProgram; + firePropertyChange("showEmptyProgram", oldValue, showEmptyProgram); + } +} ===================================== client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_en_GB.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Default temporary directory used observe.config.defaultValidationReportDirectory.description=Default validation report directory observe.config.devMode=Dev mode observe.config.floatingObjectPresets.description=Floating Objects references +observe.config.h2.can.editReferential.description=Local database can edit referential observe.config.h2.can.migrate.description=Flag to know if you can migrate h2 data sources observe.config.h2.login.description=H2 Login observe.config.h2.password.description=H2 Password @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Species for object school observe.config.speciesList.seine.schoolEstimate=Species for school esitmates observe.config.speciesList.seine.targetCatch=Species for target catches observe.config.swingSessionFile.description=Swing session file. +observe.config.temperature.format=Default temperature format observe.config.ui.autoPopupNumberEditor=Flag sets to true when number editor show automaticly popup observe.config.ui.changeSynchroSrc=Flag sets to true if you can change local source in admin tasks observe.config.ui.focusBorderColor=Color of the focus container border @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Show mnemonic on actions observe.config.ui.showNumberEditorButton=Flag sets to true to show button to invoke popup on number's editors observe.config.ui.showTimeEditorSlider=Show timer slider observe.config.ui.storeRemoteStorage=Flag sets to true to store in config a remote connexion (except passwords) +observe.config.ui.tree.showEmptyProgram.description=Show programs with no trip inside +observe.config.ui.tree.showLonglineTrip.description=Show Longline trips +observe.config.ui.tree.showReferential.description=Show Referential +observe.config.ui.tree.showSeineTrip.description=Show Seine Trips observe.config.ui.treeOpenNodes=Opened data from last session observe.config.ui.treeSelectedNodes.description=Selected nodes on last data source observe.config.validation.lengthWeightEnable=Force validation of species length max ===================================== client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_es_ES.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Directorio temporal por defecto observe.config.defaultValidationReportDirectory.description=Directorio por defecto de almacenamiento de los informes de validación observe.config.devMode=Modo desarrollador observe.config.floatingObjectPresets.description=Objets flottants de référence \#TODO +observe.config.h2.can.editReferential.description=Local database can edit referential \#TODO observe.config.h2.can.migrate.description=Autorizar la actualización de las bases locales (h2) observe.config.h2.login.description=Login h2 observe.config.h2.password.description=Contraseña h2 @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Especies para las estimaci observe.config.speciesList.seine.schoolEstimate=Especies para las estimaciones observe.config.speciesList.seine.targetCatch=Especies par las capturas objetivo observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. \#TODO +observe.config.temperature.format=Default temperature format \#TODO observe.config.ui.autoPopupNumberEditor=Para mostrar automáticamente el editor numérico durante la edición de un número observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus \#TODO @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Afficher les racourcis clavier \#TODO observe.config.ui.showNumberEditorButton=Para mostrar el botón que permite usar el editor numérico a la izquierda de cada campo numérico observe.config.ui.showTimeEditorSlider=Para mostrar la regla de edición de las horas observe.config.ui.storeRemoteStorage=Para activar la copia de seguridad de la configuración de la fuente de datos remota +observe.config.ui.tree.showEmptyProgram.description=Show programs with no trip inside \#TODO +observe.config.ui.tree.showLonglineTrip.description=Show Longline trips \#TODO +observe.config.ui.tree.showReferential.description=Show Referential \#TODO +observe.config.ui.tree.showSeineTrip.description=Show Seine Trips \#TODO observe.config.ui.treeOpenNodes=Nudos abiertos del arbol abiertos cuando se cerró la base por última vez observe.config.ui.treeSelectedNodes.description=Selected nodes on last data source \#TODO observe.config.validation.lengthWeightEnable=Forcer la validation des bormes min/max de taille d'espèce \#TODO ===================================== client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties ===================================== --- a/client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties +++ b/client-configuration/src/main/resources/i18n/client-configuration_fr_FR.properties @@ -33,6 +33,7 @@ observe.config.defaultTmpDirectory.description=Le répertoire temporaire par dé observe.config.defaultValidationReportDirectory.description=Le répertoire par défaut où sont stockés les rapports de validation observe.config.devMode=Mode développeur observe.config.floatingObjectPresets.description=Objets flottants de référence +observe.config.h2.can.editReferential.description=Pour pouvoir éditer le référentiel d'une base locale observe.config.h2.can.migrate.description=Autoriser la mise à jour des bases locales (H2) observe.config.h2.login.description=L'identifiant H2 observe.config.h2.password.description=Le mot de passe H2 @@ -74,6 +75,7 @@ observe.config.speciesList.seine.objectSchoolEstimate=Espèces pour les estimati observe.config.speciesList.seine.schoolEstimate=Espèces pour les estimations observe.config.speciesList.seine.targetCatch=Espèces pour les captures cible observe.config.swingSessionFile.description=Fichier de sauvegarde des états des UI. +observe.config.temperature.format=Unité de température observe.config.ui.autoPopupNumberEditor=Pour afficher automatiquement l'éditeur numérique lors de l'édition d'un nombre observe.config.ui.changeSynchroSrc=Pour autoriser la sélection de la base source dans les opérations sur base observe.config.ui.focusBorderColor=Couleur de la bordure de la zone qui a le focus @@ -85,6 +87,10 @@ observe.config.ui.showMnemonic=Afficher les racourcis clavier observe.config.ui.showNumberEditorButton=Pour afficher le bouton qui permet d'utiliser l'éditeur numérique à gauche de chaque champs numérique observe.config.ui.showTimeEditorSlider=Pour afficher la réglette d'édition des heures observe.config.ui.storeRemoteStorage=Pour activer la sauvegarde de la configuration de la source distante +observe.config.ui.tree.showEmptyProgram.description=Voir les programmes sans marée +observe.config.ui.tree.showLonglineTrip.description=Voir les marées Palangre +observe.config.ui.tree.showReferential.description=Voir le référentiel +observe.config.ui.tree.showSeineTrip.description=Voir les marées Senne observe.config.ui.treeOpenNodes=Nœuds de l'arbre ouverts lors de la dernière fermeture de la base observe.config.ui.treeSelectedNodes.description=Nœuds sélectionnés sur la dernière base ouverte observe.config.validation.lengthWeightEnable=Forcer la validation des bormes min/max de taille d'espèce ===================================== client/pom.xml ===================================== --- a/client/pom.xml +++ b/client/pom.xml @@ -382,10 +382,20 @@ <artifactId>class-mapping</artifactId> </dependency> + <dependency> + <groupId>io.ultreia.java4all</groupId> + <artifactId>java-lang</artifactId> + <scope>runtime</scope> + </dependency> + <!-- jaxx dependencies --> <dependency> <groupId>io.ultreia.java4all.jaxx</groupId> + <artifactId>jaxx-runtime-spi</artifactId> + </dependency> + <dependency> + <groupId>io.ultreia.java4all.jaxx</groupId> <artifactId>jaxx-runtime</artifactId> </dependency> <dependency> ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java @@ -61,10 +61,11 @@ public abstract class ObserveKeyStrokes { public static final KeyStroke KEY_STROKE_RELOAD_DEFAULT_CONFIGURATION = KeyStroke.getKeyStroke(KeyEvent.VK_R, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK); public static final KeyStroke KEY_STROKE_ESCAPE = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); public static final KeyStroke KEY_STROKE_ENTER = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0); - public static final KeyStroke KEY_STROKE_SHOW_SEINE = KeyStroke.getKeyStroke("ctrl pressed F1"); - public static final KeyStroke KEY_STROKE_SHOW_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed F2"); - public static final KeyStroke KEY_STROKE_SHOW_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed F3"); - public static final KeyStroke KEY_STROKE_SHOW_EMPTY_PROGRAM = KeyStroke.getKeyStroke("ctrl pressed F4"); + public static final KeyStroke KEY_STROKE_NAVIGATION_CONFIGURE = KeyStroke.getKeyStroke("ctrl pressed F1"); + public static final KeyStroke KEY_STROKE_SHOW_SEINE = KeyStroke.getKeyStroke("ctrl pressed F2"); + public static final KeyStroke KEY_STROKE_SHOW_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed F3"); + public static final KeyStroke KEY_STROKE_SHOW_REFERENTIAL = KeyStroke.getKeyStroke("ctrl pressed F4"); + public static final KeyStroke KEY_STROKE_SHOW_EMPTY_PROGRAM = KeyStroke.getKeyStroke("ctrl pressed F5"); public static final KeyStroke KEY_STROKE_CONFIGURE_LOCAL_SOURCE = KeyStroke.getKeyStroke("ctrl pressed L"); public static final KeyStroke KEY_STROKE_CONFIGURE_REMOTE_SOURCE = KeyStroke.getKeyStroke("ctrl pressed R"); public static final KeyStroke KEY_STROKE_SAVE_TABLE_ENTRY = KeyStroke.getKeyStroke("ctrl pressed S"); ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUI.jaxx @@ -77,8 +77,10 @@ fr.ird.observe.client.ui.content.ContentUIManager fr.ird.observe.client.ui.content.ObserveActionMap + fr.ird.observe.client.ui.tree.navigation.NavigationUI fr.ird.observe.client.ui.tree.navigation.NavigationTree - fr.ird.observe.client.ui.tree.navigation.NavigationTreeHeader + fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel + fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel fr.ird.observe.client.ui.util.UIHelper fr.ird.observe.client.ui.util.ObserveBlockingLayerUI @@ -252,10 +254,8 @@ protected void finalize() throws Throwable { <!-- left : navigation --> <JXTitledPanel id='navigationView'> - <JScrollPane id='navigationScrollPane' columnHeaderView='{navigationTreeHeader}'> - <NavigationTree id="navigation"/> - <NavigationTreeHeader id='navigationTreeHeader' tree='{navigation}'/> - </JScrollPane> + <NavigationUI id="navigationUI" initializer="new NavigationUI((JAXXContext)this)"/> + <NavigationTree id="navigation" initializer="navigationUI.getTree()"/> </JXTitledPanel> <!-- right : (content + messages) --> ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/ObserveMainUIInitializer.java @@ -6,15 +6,15 @@ * %% * 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 + * 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 + * + * 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% @@ -32,7 +32,6 @@ import fr.ird.observe.client.ui.content.ContentUIManager; import fr.ird.observe.client.ui.content.ObserveActionMap; import fr.ird.observe.client.ui.tree.ObserveNavigationTreeShowPopupAction; import fr.ird.observe.client.ui.tree.navigation.NavigationTree; -import fr.ird.observe.client.ui.tree.navigation.NavigationTreeHeader; import fr.ird.observe.client.ui.tree.navigation.NavigationTreeModel; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.tree.navigation.nodes.ReferenceNavigationTreeNodeSupport; @@ -44,19 +43,14 @@ import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.dto.decoration.DecoratorService; import fr.ird.observe.dto.decoration.ObserveI18nDecoratorHelper; import fr.ird.observe.dto.referential.ReferentialLocale; -import java.awt.Component; -import java.awt.Container; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ComponentAdapter; -import java.awt.event.ComponentEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.Objects; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.i18n.I18n; +import org.nuiton.jaxx.runtime.context.JAXXInitialContext; +import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; +import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; +import org.nuiton.jaxx.widgets.error.ErrorDialogUI; + import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JSplitPane; @@ -67,14 +61,16 @@ import javax.swing.border.Border; import javax.swing.border.LineBorder; import javax.swing.event.TreeSelectionEvent; import javax.swing.tree.TreePath; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.i18n.I18n; -import org.nuiton.jaxx.runtime.context.JAXXInitialContext; -import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; -import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; -import org.nuiton.jaxx.widgets.error.ErrorDialogUI; - +import java.awt.Component; +import java.awt.Container; +import java.awt.Cursor; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +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.client.ui.content.ContentUIInitializer.OBSERVE_ACTION; import static org.nuiton.i18n.I18n.t; @@ -94,11 +90,87 @@ public class ObserveMainUIInitializer { private static final String EMPTY_SELECTION = "emptySelection"; private final ObserveMainUI ui; + private Border focusBorder; + private Border noFocusBorder; ObserveMainUIInitializer(ObserveMainUI ui) { this.ui = ui; } + /** + * Methode pour initialiser l'ui principale sans l'afficher. + * + * @param context le context applicatif + * @param config la configuration a utiliser + * @return l'ui instancie et initialisee mais non visible encore + */ + public static ObserveMainUI initUI(ObserveSwingApplicationContext context, ClientConfig config) { + + SwingValidatorMessageTableModel errorModel = new ObserveSwingValidatorMessageTableModel(); + + DecoratorService decoratorService = context.getDecoratorService(); + + boolean reloadDecorators = false; + Locale currentLocale = I18n.getDefaultLocale(); + Locale configurationLocale = config.getLocale(); + if (!configurationLocale.equals(currentLocale)) { + if (log.isInfoEnabled()) { + log.info("re-init I18n with locale " + configurationLocale); + } + I18n.setDefaultLocale(configurationLocale); + reloadDecorators = true; + } + if (!config.getDbLocale().equals(decoratorService.getReferentialLocale().getLocale())) { + if (log.isInfoEnabled()) { + log.info("re-init db with locale " + config.getDbLocale()); + } + decoratorService.setReferentialLocale(ReferentialLocale.valueOf(config.getDbLocale())); + + reloadDecorators = true; + } + + if (reloadDecorators) { + if (log.isInfoEnabled()) { + log.info("reload decorators"); + } + decoratorService.reload(); + } + + JAXXInitialContext tx = new JAXXInitialContext(); + tx.add(context).add(errorModel); + + // show main ui + ObserveMainUI ui = new ObserveMainUI(tx); + ui.setUndecorated(config.isFullScreen()); + + String title = t("observe.title.welcome.admin") + (" v " + config.getVersion()); + ui.setTitle(title); + + context.setMainUI(ui); + + ErrorDialogUI.init(ui); + + // set fullscreen propery on main ui + ui.getGraphicsConfiguration().getDevice().setFullScreenWindow(config.isFullScreen() ? ui : null); + + new ObserveNavigationTreeShowPopupAction(ui.getNavigation(), ui.getNavigationUI(), ui.getNavigationPopup()); + + return ui; + } + + public static void setMainUIVisible(ObserveSwingApplicationContext rootContext, ObserveMainUI ui, boolean replace) { + + // force le redimensionnement du splitpane + ui.getSplitpane().revalidate(); + + // force le redimensionnement du splitpane2 + ui.getSplitpane2().revalidate(); + + // affichage de l'interface graphique + SwingUtilities.invokeLater(() -> ui.setVisible(true)); + rootContext.getSwingSessionHelper().addComponent(ui, replace); + } + private void changeNavigationNode(TreeSelectionEvent event) { ObserveSwingDataSource source = ObserveSwingApplicationContext.get().getDataSourcesManager().getMainDataSource(); @@ -196,7 +268,7 @@ public class ObserveMainUIInitializer { if (ui.getNavigation().equals(focusOwner)) { focusOnNavigation = true; } - if (ui.getNavigationTreeHeader().equals(focusOwner)) { + if (ui.getNavigationUI().equals(focusOwner)) { focusOnNavigation = true; } if (ui.getNavigationView().equals(focusOwner)) { @@ -209,7 +281,7 @@ public class ObserveMainUIInitializer { focusOnNavigation = true; break; } - if (ui.getNavigationTreeHeader().equals(focusOwnerParent)) { + if (ui.getNavigationUI().equals(focusOwnerParent)) { focusOnNavigation = true; break; } @@ -243,67 +315,6 @@ public class ObserveMainUIInitializer { } /** - * Methode pour initialiser l'ui principale sans l'afficher. - * - * @param context le context applicatif - * @param config la configuration a utiliser - * @return l'ui instancie et initialisee mais non visible encore - */ - public static ObserveMainUI initUI(ObserveSwingApplicationContext context, ClientConfig config) { - - SwingValidatorMessageTableModel errorModel = new ObserveSwingValidatorMessageTableModel(); - - DecoratorService decoratorService = context.getDecoratorService(); - - boolean reloadDecorators = false; - Locale currentLocale = I18n.getDefaultLocale(); - Locale configurationLocale = config.getLocale(); - if (!configurationLocale.equals(currentLocale)) { - if (log.isInfoEnabled()) { - log.info("re-init I18n with locale " + configurationLocale); - } - I18n.setDefaultLocale(configurationLocale); - reloadDecorators = true; - } - if (!config.getDbLocale().equals(decoratorService.getReferentialLocale().getLocale())) { - if (log.isInfoEnabled()) { - log.info("re-init db with locale " + config.getDbLocale()); - } - decoratorService.setReferentialLocale(ReferentialLocale.valueOf(config.getDbLocale())); - - reloadDecorators = true; - } - - if (reloadDecorators) { - if (log.isInfoEnabled()) { - log.info("reload decorators"); - } - decoratorService.reload(); - } - - JAXXInitialContext tx = new JAXXInitialContext(); - tx.add(context).add(errorModel); - - // show main ui - ObserveMainUI ui = new ObserveMainUI(tx); - ui.setUndecorated(config.isFullScreen()); - - String title = t("observe.title.welcome.admin") + (" v " + config.getVersion()); - ui.setTitle(title); - - context.setMainUI(ui); - - ErrorDialogUI.init(ui); - - // set fullscreen propery on main ui - ui.getGraphicsConfiguration().getDevice().setFullScreenWindow(config.isFullScreen() ? ui : null); - - new ObserveNavigationTreeShowPopupAction(ui.getNavigation(), ui.getNavigationScrollPane(), ui.getNavigationPopup()); - - return ui; - } - - /** * Permet de recharger l'ui principale et de changer de le mode * d'affichage. * @@ -358,11 +369,7 @@ public class ObserveMainUIInitializer { // on met à jour le modèle de navigation NavigationTreeModel treeModel = ui.getNavigation().getTreeModel(); - treeModel.setLoadSeine(ui.getNavigationTreeHeader().getShowSeine().isSelected()); - treeModel.setLoadLongline(ui.getNavigationTreeHeader().getShowLongline().isSelected()); - treeModel.setLoadReferential(ui.getNavigationTreeHeader().getShowReferential().isSelected()); - treeModel.setLoadEmptyProgram(ui.getNavigationTreeHeader().getShowEmptyProgram().isSelected()); - + treeModel.load(config); treeModel.populate(); // on conserve les noeuds a reselectionner @@ -378,19 +385,6 @@ public class ObserveMainUIInitializer { setMainUIVisible(rootContext, ui, true); } - public static void setMainUIVisible(ObserveSwingApplicationContext rootContext, ObserveMainUI ui, boolean replace) { - - // force le redimensionnement du splitpane - ui.getSplitpane().revalidate(); - - // force le redimensionnement du splitpane2 - ui.getSplitpane2().revalidate(); - - // affichage de l'interface graphique - SwingUtilities.invokeLater(() -> ui.setVisible(true)); - rootContext.getSwingSessionHelper().addComponent(ui, replace); - } - void initialize() { ObserveActionMap actionMap = ui.getObserveActionMap(); @@ -440,43 +434,43 @@ public class ObserveMainUIInitializer { }; ui.getNavigationView().addMouseListener(mouseAdapter); ui.getNavigation().addMouseListener(mouseAdapter); - ui.getNavigationTreeHeader().addMouseListener(mouseAdapter); + ui.getNavigationUI().addMouseListener(mouseAdapter); init(ui.getSplitpane()); init(ui.getSplitpane2()); init(ui.getNavigation()); - ui.getNavigationView().setRightDecoration(ui.getNavigationTreeHeader().getToolbar()); - ui.getNavigationView().addComponentListener(new ComponentAdapter() { - - @Override - public void componentResized(ComponentEvent e) { - - JComponent source = (JComponent) e.getSource(); - - NavigationTreeHeader actions = ui.getNavigationTreeHeader(); - - Dimension preferredLayoutSize = actions.getLayout().preferredLayoutSize(actions); - - Dimension showLonglineSize = actions.getShowLongline().getSize(); - Dimension showSeineSize = actions.getShowSeine().getSize(); - Dimension showReferential = actions.getShowReferential().getSize(); - Dimension showEmpty = actions.getShowEmptyProgram().getSize(); - int minWidth = 18 + (int) Math.max(showLonglineSize.getWidth() + showSeineSize.getWidth(), showReferential.getWidth() + showEmpty.getWidth()); - source.setMinimumSize(new Dimension(minWidth, (int) source.getSize().getHeight())); - log.debug("Header resized to minumun: " + source.getMinimumSize()); - - int maxWidth = ui.getNavigationView().getWidth() - 10; - - int currentWidth = (int) preferredLayoutSize.getWidth(); - int height = 32; - if (currentWidth > maxWidth) { - height += 32; - } - actions.setPreferredSize(new Dimension(maxWidth, height)); - - } - }); + ui.getNavigationView().setRightDecoration(ui.getNavigationUI().getToolbar()); +// ui.getNavigationView().addComponentListener(new ComponentAdapter() { +// +// @Override +// public void componentResized(ComponentEvent e) { +// +// JComponent source = (JComponent) e.getSource(); +// +// NavigationTreeHeader actions = ui.getNavigationUI(); +// +// Dimension preferredLayoutSize = actions.getLayout().preferredLayoutSize(actions); +// +// Dimension showLonglineSize = actions.getShowLongline().getSize(); +// Dimension showSeineSize = actions.getShowSeine().getSize(); +// Dimension showReferential = actions.getShowReferential().getSize(); +// Dimension showEmpty = actions.getShowEmptyProgram().getSize(); +// int minWidth = 18 + (int) Math.max(showLonglineSize.getWidth() + showSeineSize.getWidth(), showReferential.getWidth() + showEmpty.getWidth()); +// source.setMinimumSize(new Dimension(minWidth, (int) source.getSize().getHeight())); +// log.debug("Header resized to minumun: " + source.getMinimumSize()); +// +// int maxWidth = ui.getNavigationView().getWidth() - 10; +// +// int currentWidth = (int) preferredLayoutSize.getWidth(); +// int height = 32; +// if (currentWidth > maxWidth) { +// height += 32; +// } +// actions.setPreferredSize(new Dimension(maxWidth, height)); +// +// } +// }); } protected void init(ObserveActionMap actionMap, AbstractButton editor) { @@ -498,9 +492,6 @@ public class ObserveMainUIInitializer { } - private Border focusBorder; - private Border noFocusBorder; - private Border getFocusBorder() { if (focusBorder == null) { focusBorder = new LineBorder(ObserveSwingApplicationContext.get().getConfig().getFocusBorderColor(), 3, true); @@ -549,7 +540,7 @@ public class ObserveMainUIInitializer { /** * Nettoye des ui tout ce qui concerne un modèle de navigation. - * <p> + * * <b>Note:</b> cette méthode doit être appelée avant tout rechargement de modèle de naivgation. * * @param progressModel progress model to interact with ui @@ -576,7 +567,7 @@ public class ObserveMainUIInitializer { /** * Charge dans l'ui un nouveau modèle de navigation. - * <p> + * * <b>Note:</b> cette méthode doit être appelée après tout rechargement de modèle de naivgation. * * @param progressModel the progress model to interact with ui ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/data/DataSynchroModel.java @@ -72,15 +72,15 @@ public class DataSynchroModel extends AdminActionModel { super(AdminStep.DATA_SYNCHRONIZE); // leftSelectionDataModel = new SelectionTreeModel(); -// leftSelectionDataModel.setLoadLongline(true); -// leftSelectionDataModel.setLoadSeine(true); -// leftSelectionDataModel.setLoadReferential(false); +// leftSelectionDataModel.setShowLonglineTrip(true); +// leftSelectionDataModel.setShowSeineTrip(true); +// leftSelectionDataModel.setShowReferential(false); // leftSelectionDataModel.setShowEmptyTrips(false); // // rightSelectionDataModel = new SelectionTreeModel(); -// rightSelectionDataModel.setLoadLongline(true); -// rightSelectionDataModel.setLoadSeine(true); -// rightSelectionDataModel.setLoadReferential(false); +// rightSelectionDataModel.setShowLonglineTrip(true); +// rightSelectionDataModel.setShowSeineTrip(true); +// rightSelectionDataModel.setShowReferential(false); // rightSelectionDataModel.setShowEmptyTrips(false); tasks = new DefaultListModel<>(); ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx @@ -33,6 +33,7 @@ fr.ird.observe.client.constants.ValidationModelMode org.nuiton.validator.NuitonValidatorScope + org.nuiton.i18n.I18n java.io.File ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jcss @@ -24,7 +24,7 @@ layout:{new BorderLayout()}; } #referentialSynchronizeConfigPanel { - border:{new TitledBorder(t("observe.actions.synchro.referential.config.mode"))}; + border:{new TitledBorder(I18n.t("observe.actions.synchro.referential.config.mode"))}; } #synchronizeMode { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java @@ -415,7 +415,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> Action resetAction = new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - beanComboBox.doActionPerformed__on__resetButton(null); + beanComboBox.getResetButton().doClick(); SwingUtilities.invokeLater(beanComboBox::grabFocus); } }; @@ -768,7 +768,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, new ArrayList<>(), new ArrayList<>()); JList<R> selectedList = list.getSelectedList(); - ListCellRenderer<? super R> renderer = selectedList.getCellRenderer(); + ListCellRenderer renderer = selectedList.getCellRenderer(); selectedList.setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); list.getUniverseList().setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); @@ -795,7 +795,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, new ArrayList<>(), new ArrayList<>()); JList<R> selectedList = list.getSelectedList(); - ListCellRenderer<? super R> renderer = selectedList.getCellRenderer(); + ListCellRenderer renderer = selectedList.getCellRenderer(); selectedList.setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); list.getUniverseList().setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); @@ -822,7 +822,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, Collections.emptyList()); JList<R> list1 = list.getList(); - ListCellRenderer<? super R> renderer = list1.getCellRenderer(); + ListCellRenderer renderer = list1.getCellRenderer(); list1.setCellRenderer(new DataReferenceListCellRenderer<>(renderer)); } @@ -847,7 +847,7 @@ public class ContentUIInitializer<E extends IdDto, UI extends ContentUI<E, UI>> list.init(decorator, Collections.emptyList()); JList<R> list1 = list.getList(); - ListCellRenderer<? super R> renderer = list1.getCellRenderer(); + ListCellRenderer renderer = list1.getCellRenderer(); list1.setCellRenderer(new ReferentialReferenceListCellRenderer<>(renderer)); } ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jaxx @@ -30,6 +30,8 @@ fr.ird.observe.client.ui.storage.tabs.SecurityModel fr.ird.observe.client.ui.storage.StorageStep fr.ird.observe.client.ui.storage.StorageUIModel + + org.nuiton.i18n.I18n </import> <StorageStep id='step' initializer='StorageStep.ROLES'/> @@ -44,7 +46,7 @@ <script><![CDATA[ public String updateAdministrateur(String role) { - return t("observe.storage.security.administrateur", role); + return I18n.t("observe.storage.security.administrateur", role); } ]]> </script> ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/RolesUI.jcss @@ -25,7 +25,7 @@ } #administrateurPanel { - border:{new TitledBorder(t("observe.storage.security.administrateur"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.administrateur"))}; layout:{new BorderLayout()}; } @@ -43,13 +43,13 @@ } #techniciens { - border:{new TitledBorder(t("observe.storage.security.technicien"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.technicien"))}; } #readers { - border:{new TitledBorder(t("observe.storage.security.reader"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.reader"))}; } #referentiels { - border:{new TitledBorder(t("observe.storage.security.referentiel"))}; + border:{new TitledBorder(I18n.t("observe.storage.security.referentiel"))}; } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx deleted ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jaxx +++ /dev/null @@ -1,38 +0,0 @@ -<!-- - #%L - ObServe :: Client - %% - Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as - published by the Free Software Foundation, either version 3 of the - License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - You should have received a copy of the GNU General Public - License along with this program. If not, see - <http://www.gnu.org/licenses/gpl-3.0.html>. - #L% - --> -<JPanel layout='{new FlowLayout(FlowLayout.LEFT, 2, 2)}'> - - <import> - java.awt.FlowLayout - </import> - - <JToggleButton id='showSeine' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showLongline' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showReferential' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - <JToggleButton id='showEmptyProgram' onActionPerformed="handler.tryToUpdateNavigationTree()"/> - - <NavigationTree id='tree' javaBean='new NavigationTree()'/> - - <JToolBar id='toolbar'> - <JButton id='colapseAll' onActionPerformed='handler.collapseAll()'/> - <JButton id='expandAll' onActionPerformed='handler.expandAll()'/> - </JToolBar> - -</JPanel> ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeModel.java @@ -10,18 +10,20 @@ package fr.ird.observe.client.ui.tree.navigation; * 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.client.configuration.ClientConfig; +import fr.ird.observe.client.configuration.NavigationTreeConfigBean; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; import fr.ird.observe.client.ui.tree.navigation.nodes.RootNavigationTreeNode; @@ -33,19 +35,20 @@ import fr.ird.observe.client.ui.tree.navigation.nodes.referential.ReferentialsSe import fr.ird.observe.client.ui.tree.navigation.nodes.seine.ProgramSeineNavigationTreeNode; import fr.ird.observe.dto.data.longline.TripLonglineHelper; import fr.ird.observe.dto.data.longline.TripLonglineReference; -import fr.ird.observe.dto.referential.ProgramHelper; -import fr.ird.observe.dto.referential.ProgramReference; import fr.ird.observe.dto.data.seine.TripSeineHelper; import fr.ird.observe.dto.data.seine.TripSeineReference; +import fr.ird.observe.dto.referential.ProgramHelper; +import fr.ird.observe.dto.referential.ProgramReference; import fr.ird.observe.services.service.data.NavigationRequest; import fr.ird.observe.services.service.data.NavigationResult; import fr.ird.observe.services.service.data.NavigationService; + +import javax.swing.tree.DefaultTreeModel; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; -import javax.swing.tree.DefaultTreeModel; /** * Created on 14/11/16. @@ -55,44 +58,50 @@ import javax.swing.tree.DefaultTreeModel; */ public class NavigationTreeModel extends DefaultTreeModel { - private boolean loadSeine = true; - private boolean loadLongline = true; - private boolean loadReferential = true; - private boolean loadEmptyProgram = true; + private final NavigationTreeConfigBean config; - public NavigationTreeModel() { + NavigationTreeModel() { super(new RootNavigationTreeNode()); + config = new NavigationTreeConfigBean(); } - public NavigationTreeNodeSupport<?> findNode(NavigationTreeNodeSupport<?> node, Object... ids) { - NavigationTreeNodeSupport<?> result = null; - for (Object id : ids) { + public NavigationTreeConfigBean getConfig() { + return config; + } - if (id instanceof String) { - result = node.findChildById((String) id); - } else if (id instanceof Class) { - result = node.findChildByType((Class) id); + @Override + public RootNavigationTreeNode getRoot() { + return (RootNavigationTreeNode) super.getRoot(); + } - } - if (result == null) { + public <N extends NavigationTreeNodeSupport> void reload(N node) { + node.reload(); + super.reload(node); + } - // un des noeud n'a pas ete trouve, on sortReferential - break; + public <N extends NavigationTreeNodeSupport> void open(N node) { + if (node instanceof WithChildsToReload) { + boolean updated = node.populateChilds(); + if (updated) { + reload(node); } - node = result; } - return result; } - public NavigationTreeNodeSupport<?> findNodeByType(NavigationTreeNodeSupport<?> node, Class<?> nodeType) { - return node.findChildByType(nodeType); + public void save(ClientConfig config) { + config.load(this.config); + config.saveForUser(); + } + + public void load(ClientConfig config) { + this.config.load(config); } public void populate() { NavigationService navigationService = ObserveSwingDataSource.MAIN.getNavigationService(); - NavigationRequest navigationRequest = toNavigationRequest(); + NavigationRequest navigationRequest = config.toRequest(); NavigationResult navigationResult = navigationService.getNavigation(navigationRequest); List<ProgramReference> programs = new ArrayList<>(navigationResult.getPrograms()); @@ -119,75 +128,38 @@ public class NavigationTreeModel extends DefaultTreeModel { ProgramSeineNavigationTreeNode programNode = new ProgramSeineNavigationTreeNode(program, references); root.add(programNode); } - } - if (isLoadReferential()) { + if (config.isShowReferential()) { root.add(new ReferentialsCommonNavigationTreeNode()); root.add(new ReferentialsLonglineNavigationTreeNode()); root.add(new ReferentialsSeineNavigationTreeNode()); } - setRoot(root); } - private NavigationRequest toNavigationRequest() { - NavigationRequest navigationRequest = new NavigationRequest(); - navigationRequest.setLoadLongline(isLoadLongline()); - navigationRequest.setLoadSeine(isLoadSeine()); - navigationRequest.setLoadEmptyProgram(isLoadEmptyProgram()); - return navigationRequest; - } - - @Override - public RootNavigationTreeNode getRoot() { - return (RootNavigationTreeNode) super.getRoot(); - } - - public boolean isLoadSeine() { - return loadSeine; - } - - public void setLoadSeine(boolean loadSeine) { - this.loadSeine = loadSeine; - } - - public boolean isLoadLongline() { - return loadLongline; - } - - public void setLoadLongline(boolean loadLongline) { - this.loadLongline = loadLongline; - } - - public boolean isLoadReferential() { - return loadReferential; - } - - public void setLoadReferential(boolean loadReferential) { - this.loadReferential = loadReferential; - } - - public boolean isLoadEmptyProgram() { - return loadEmptyProgram; - } + NavigationTreeNodeSupport<?> findNode(NavigationTreeNodeSupport<?> node, Object... ids) { + NavigationTreeNodeSupport<?> result = null; + for (Object id : ids) { - public void setLoadEmptyProgram(boolean loadEmptyProgram) { - this.loadEmptyProgram = loadEmptyProgram; - } + if (id instanceof String) { + result = node.findChildById((String) id); + } else if (id instanceof Class) { + result = node.findChildByType((Class) id); - public <N extends NavigationTreeNodeSupport> void reload(N node) { - node.reload(); - super.reload(node); - } + } + if (result == null) { - public <N extends NavigationTreeNodeSupport> void open(N node) { - if (node instanceof WithChildsToReload) { - boolean updated = node.populateChilds(); - if (updated) { - reload(node); + // un des noeud n'a pas ete trouve, on sortReferential + break; } + node = result; } + return result; + } + + NavigationTreeNodeSupport<?> findNodeByType(NavigationTreeNodeSupport<?> node, Class<?> nodeType) { + return node.findChildByType(nodeType); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx ===================================== --- /dev/null +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jaxx @@ -0,0 +1,24 @@ +<JScrollPane id='navigationScrollPane' columnHeaderView='{toolbar}' viewportView="{tree}"> + + <import> + fr.ird.observe.client.configuration.NavigationTreeConfigBean + static org.nuiton.i18n.I18n.t + </import> + <NavigationTree id='tree' /> + <NavigationTreeModel id='treeModel' javaBean='{tree.getTreeModel()}'/> + <NavigationTreeConfigBean id='navigationConfig' javaBean='treeModel.getConfig()'/> + + <JPopupMenu id='configurePopup'> + <JCheckBoxMenuItem id='showSeineTrip' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showLonglineTrip' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showReferential' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + <JCheckBoxMenuItem id='showEmptyProgram' onActionPerformed="handler.tryToUpdateNavigationTree()"/> + </JPopupMenu> + + <JToolBar id='toolbar'> + <JButton id='colapseAll' onActionPerformed='handler.collapseAll()'/> + <JButton id='expandAll' onActionPerformed='handler.expandAll()'/> + <JToggleButton id='configure' onActionPerformed='handler.configure()'/> + </JToolBar> + +</JScrollPane> ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeader.jcss +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUI.jcss @@ -8,36 +8,35 @@ * 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% */ -#showSeine { - selected: {tree.getTreeModel().isLoadSeine()}; +#showSeineTrip { + selected: {navigationConfig.isShowSeineTrip()}; text:"observe.constant.ObserveModelType.PS"; toolTipText:"observe.constant.ObserveModelType.PS.description"; } -#showLongline { - selected: {tree.getTreeModel().isLoadLongline()}; +#showLonglineTrip { + selected: {navigationConfig.isShowLonglineTrip()}; text:"observe.constant.ObserveModelType.LL"; toolTipText:"observe.constant.ObserveModelType.LL.description"; } #showReferential { - selected: {tree.getTreeModel().isLoadReferential()}; + selected: {navigationConfig.isShowReferential()}; text:"observe.constant.ObserveModelType.REF"; toolTipText:"observe.constant.ObserveModelType.REF.description"; } - #showEmptyProgram { - selected: {tree.getTreeModel().isLoadEmptyProgram()}; + selected: {navigationConfig.isShowEmptyProgram()}; text:"observe.constant.ObserveModelType.EMPTY"; toolTipText:"observe.constant.ObserveModelType.EMPTY.description"; } @@ -61,3 +60,8 @@ JButton { actionIcon:expand; toolTipText:"observe.tree.action.expandAll.tip"; } + +#configure { + actionIcon:generate; + toolTipText:"observe.tree.action.configure.tip"; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java → client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationTreeHeaderHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/tree/navigation/NavigationUIHandler.java @@ -1,39 +1,11 @@ package fr.ird.observe.client.ui.tree.navigation; -/* - * #%L - * ObServe :: Client - * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.configuration.ClientConfig; +import fr.ird.observe.client.configuration.NavigationTreeConfig; import fr.ird.observe.client.ui.ObserveKeyStrokes; -import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; -import fr.ird.observe.dto.referential.ProgramDto; -import fr.ird.observe.dto.data.seine.TripSeineDto; -import java.awt.Color; -import java.awt.event.ActionEvent; -import javax.swing.AbstractAction; -import javax.swing.ActionMap; -import javax.swing.InputMap; -import javax.swing.JComponent; +import fr.ird.observe.client.ui.util.UIHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.decorator.ColorHighlighter; @@ -41,17 +13,29 @@ import org.jdesktop.swingx.search.Searchable; import org.jdesktop.swingx.search.TreeSearchable; import org.nuiton.jaxx.runtime.spi.UIHandler; +import javax.swing.AbstractAction; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.event.ActionEvent; + /** - * @author Samuel Maisonneuve- maisonneuve(a)codelutin.com + * Created by tchemit on 01/04/2018. + * + * @author Tony Chemit - dev(a)tchemit.fr */ -public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHeader> { +public class NavigationUIHandler implements UIHandler<NavigationUI> { /** Logger */ - private static final Log log = LogFactory.getLog(NavigationTreeHeaderHandler.class); + private static final Log log = LogFactory.getLog(NavigationUIHandler.class); - private NavigationTreeHeader ui; + private NavigationUI ui; - public NavigationTreeHeader getUi() { + public NavigationUI getUi() { return ui; } @@ -60,15 +44,15 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } @Override - public void beforeInit(NavigationTreeHeader ui) { + public void beforeInit(NavigationUI ui) { this.ui = ui; } @Override - public void afterInit(NavigationTreeHeader ui) { + public void afterInit(NavigationUI ui) { - ui.getShowSeine().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); - ui.getShowLongline().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); + ui.getShowSeineTrip().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); + ui.getShowLonglineTrip().setIcon(UIHelper.getUIManagerIcon("navigation.referential.Program-16")); ui.getShowReferential().setIcon(UIHelper.getUIManagerIcon("navigation.referentiel-16")); ui.getShowEmptyProgram().setIcon(UIHelper.getUIManagerIcon("navigation.data.seine.TripSeine-16")); @@ -77,10 +61,16 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead tree.setSearchable(searchable); searchable.setMatchHighlighter(new ColorHighlighter(Color.YELLOW, Color.BLACK)); - ObserveKeyStrokes.addKeyStroke(ui.getShowSeine(), ObserveKeyStrokes.KEY_STROKE_SHOW_SEINE); - ObserveKeyStrokes.addKeyStroke(ui.getShowLongline(), ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE); + ObserveKeyStrokes.addKeyStroke(ui.getShowSeineTrip(), ObserveKeyStrokes.KEY_STROKE_SHOW_SEINE); + ObserveKeyStrokes.addKeyStroke(ui.getShowLonglineTrip(), ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE); ObserveKeyStrokes.addKeyStroke(ui.getShowReferential(), ObserveKeyStrokes.KEY_STROKE_SHOW_REFERENTIAL); ObserveKeyStrokes.addKeyStroke(ui.getShowEmptyProgram(), ObserveKeyStrokes.KEY_STROKE_SHOW_EMPTY_PROGRAM); + ObserveKeyStrokes.addKeyStroke(ui.getConfigure(), ObserveKeyStrokes.KEY_STROKE_NAVIGATION_CONFIGURE); + //FIXME (no text, so no text after...) + ui.getConfigure().setText(null); + ClientConfig config = ObserveSwingApplicationContext.get().getConfig(); + NavigationTreeModel treeModel = (NavigationTreeModel) tree.getModel(); + treeModel.load(config); InputMap inputMap = ui.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); ActionMap actionMap = ui.getActionMap(); @@ -88,32 +78,66 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead actionMap.put("showSeine", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowSeine().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowSeineTrip().doClick(); + } + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_LONGLINE, "showLongline"); actionMap.put("showLongline", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowLongline().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowLonglineTrip().doClick(); + }bre de + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_REFERENTIAL, "showReferential"); actionMap.put("showReferential", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowReferential().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowReferential().doClick(); + } + ui.getConfigurePopup().setVisible(false); } }); inputMap.put(ObserveKeyStrokes.KEY_STROKE_SHOW_EMPTY_PROGRAM, "showEmptyProgram"); actionMap.put("showEmptyProgram", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - ui.getShowEmptyProgram().doClick(); + if (ui.getConfigurePopup().isVisible()) { + ui.getShowEmptyProgram().doClick(); + } + ui.getConfigurePopup().setVisible(false); + } + }); + inputMap.put(ObserveKeyStrokes.KEY_STROKE_NAVIGATION_CONFIGURE, "configure"); + actionMap.put("configure", new AbstractAction() { + @Override + public void actionPerformed(ActionEvent e) { + ui.getConfigure().doClick(); } }); } + void configure() { + SwingUtilities.invokeLater(() -> { + JComponent c = ui.getConfigure(); + JPopupMenu p = ui.getConfigurePopup(); + if (p.isVisible()) { + p.setVisible(false); + return; + } + int width = ui.getParent().getWidth() - 5; + int height = p.getPreferredSize().height; + p.setPreferredSize(new Dimension(width, height)); + p.show(c, (c.getWidth() == 0 ? 24 : c.getWidth()) - width + 2, c.getHeight()); + }); + } + public void search(String term) { Searchable searchable = getTree().getSearchable(); @@ -121,7 +145,7 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } - public void tryToUpdateNavigationTree() { + void tryToUpdateNavigationTree() { boolean canContinue = ObserveSwingApplicationContext.get().getContentUIManager().closeSelectedContentUI(); @@ -137,23 +161,24 @@ public class NavigationTreeHeaderHandler implements UIHandler<NavigationTreeHead } tree.clearSelection(); - boolean showSeine = ui.getShowSeine().isSelected(); - boolean showLongline = ui.getShowLongline().isSelected(); + boolean showSeine = ui.getShowSeineTrip().isSelected(); + boolean showLongline = ui.getShowLonglineTrip().isSelected(); boolean showReferential = ui.getShowReferential().isSelected(); boolean showEmptyProgram = ui.getShowEmptyProgram().isSelected(); NavigationTreeModel treeModel = tree.getTreeModel(); - treeModel.setLoadSeine(showSeine); - treeModel.setLoadLongline(showLongline); - treeModel.setLoadReferential(showReferential); - treeModel.setLoadEmptyProgram(showEmptyProgram); - + NavigationTreeConfig navigationTreeConfig = treeModel.getConfig(); + navigationTreeConfig.setShowSeineTrip(showSeine); + navigationTreeConfig.setShowLonglineTrip(showLongline); + navigationTreeConfig.setShowReferential(showReferential); + navigationTreeConfig.setShowEmptyProgram(showEmptyProgram); + treeModel.save(ObserveSwingApplicationContext.get().getConfig()); treeModel.populate(); - //FIXME repositionner le nœud sélectionné if (!treeModel.getRoot().isLeaf()) { tree.setSelectionRow(0); } + ui.getConfigure().setSelected(false); } public void collapseAll() { ===================================== client/src/main/resources/i18n/client_en_GB.properties ===================================== --- a/client/src/main/resources/i18n/client_en_GB.properties +++ b/client/src/main/resources/i18n/client_en_GB.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Storage details observe.title.unique.key=Unique keys used in a referentiel observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Collapse all +observe.tree.action.configure.tip=Configure observe.tree.action.expandAll.tip=Expand all observe.tree.action.selectAll.tip=Select All observe.tree.action.unselectAll.tip=Unselect All ===================================== client/src/main/resources/i18n/client_es_ES.properties ===================================== --- a/client/src/main/resources/i18n/client_es_ES.properties +++ b/client/src/main/resources/i18n/client_es_ES.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Información sobre la fuente de datos observe.title.unique.key=Ids de negocio del referencial %1$s observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Cerrar los nudos +observe.tree.action.configure.tip=Configure \#TODO observe.tree.action.expandAll.tip=Abrir los nudos observe.tree.action.selectAll.tip=Seleccionar todo observe.tree.action.unselectAll.tip=Deseleccionar todo ===================================== client/src/main/resources/i18n/client_fr_FR.properties ===================================== --- a/client/src/main/resources/i18n/client_fr_FR.properties +++ b/client/src/main/resources/i18n/client_fr_FR.properties @@ -1488,6 +1488,7 @@ observe.title.storage.info=Information sur la source de données observe.title.unique.key=Clefs métier du référentiel %1$s observe.title.welcome.admin=ObServe observe.tree.action.collapseAll.tip=Tout grouper +observe.tree.action.configure.tip=Configurer observe.tree.action.expandAll.tip=Tout déplier observe.tree.action.selectAll.tip=Tout sélectionner observe.tree.action.unselectAll.tip=Tout désélectionner ===================================== pom.xml ===================================== --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ <packaging>pom</packaging> <name>ObServe :: Pom</name> - <description>Projet ObServe</description> + <description>Project ObServe</description> <url>https://ultreiaio.gitlab.io/ird-observe</url> <inceptionYear>2008</inceptionYear> <organization> @@ -142,10 +142,10 @@ <projectId>ird-observe</projectId> <stageId>frirdobserve</stageId> - <!-- dev version (for develop purpose --> + <!-- dev version --> <devMode>true</devMode> - <!--Modèle version--> + <!--persistence model version--> <observe.model.version>7.0</observe.model.version> <!-- build timestamp configuration --> @@ -157,7 +157,7 @@ <!--<eugenePluginVersion>3.0-alpha-13</eugenePluginVersion>--> <!--<processorPluginVersion>1.3</processorPluginVersion>--> - <lib.version.java4all.jaxx>3.0-alpha-12</lib.version.java4all.jaxx> + <lib.version.java4all.jaxx>3.0-alpha-26</lib.version.java4all.jaxx> <lib.version.nuiton.topia>3.3</lib.version.nuiton.topia> <lib.version.nuiton.validation>3.1</lib.version.nuiton.validation> <xworkVersion>2.3.34</xworkVersion> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2e66cbe9569a34d5d033b9317ec… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/2e66cbe9569a34d5d033b9317ec… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 4 commits: improve longline position api (but still could be improved ?)
by Tony CHEMIT 01 Apr '18

01 Apr '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 0c820790 by Tony CHEMIT at 2018-04-01T09:22:55Z improve longline position api (but still could be improved ?) - - - - - 1491da9a by Tony CHEMIT at 2018-04-01T09:22:59Z improve sql request api (requires now db version) - - - - - 9f65eea2 by Tony CHEMIT at 2018-04-01T09:22:59Z optimize dependences + add missing license header - - - - - 4cd6cb75 by Tony CHEMIT at 2018-04-01T09:22:59Z fix a template - - - - - 30 changed files: - client/src/main/ftl/dataSourceConnectionReport_en.ftl - client/src/main/ftl/dataSourceConnectionReport_es.ftl - client/src/main/ftl/dataSourceConnectionReport_fr.ftl - client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglinePositionHelper.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java - dto/src/main/java/fr/ird/observe/binder/data/longline/BasketDtoReferenceBinder.java - dto/src/main/java/fr/ird/observe/binder/data/longline/BranchlineDtoReferenceBinder.java - − dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdDto.java - dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdReference.java - − dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdDto.java - dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdReference.java - dto/src/main/models/Observe.model - persistence/pom.xml - persistence/src/main/java/fr/ird/observe/binder/data/longline/BasketEntityReferenceBinder.java - persistence/src/main/java/fr/ird/observe/binder/data/longline/BranchlineEntityReferenceBinder.java - persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java - persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java - + persistence/src/main/resources/hibernate.properties - services-local/src/main/java/fr/ird/observe/services/local/ObserveJdbcHelper.java - services-local/src/main/java/fr/ird/observe/services/local/ObserveServiceContextLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/data/TripManagementServiceLocal.java - services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/LonglinePositionSetDtoHelper.java - services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java - services-local/src/test/java/fr/ird/observe/services/local/service/sql/MigrateTestsDatabases.java - services-local/src/test/java/fr/ird/observe/services/local/service/sql/SqlScriptProducerServiceLocalTest.java - services/src/main/java/fr/ird/observe/services/service/sql/AddSqlScriptProducerRequest.java Changes: ===================================== client/src/main/ftl/dataSourceConnectionReport_en.ftl ===================================== --- a/client/src/main/ftl/dataSourceConnectionReport_en.ftl +++ b/client/src/main/ftl/dataSourceConnectionReport_en.ftl @@ -57,14 +57,14 @@ <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - [${program.getPropertyValue("gearTypePrefix")}] Programme ${program.getPropertyValue("label")} + [${program.getGearTypePrefix()}] Programme ${program.getLabel()} <ul> <#list selectDataModel.getSelectedTripsByProgram(program) as trip> <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - ${trip.getPropertyValue("startDate")?date?string.short} - ${trip.getPropertyValue("endDate")?date?string.short} - ${trip.getPropertyValue("vessel")} - ${trip.getPropertyValue("observer")} + ${trip.getStartDate()?date?string.short} - ${trip.getEndDate()?date?string.short} - ${trip.getVesselLabel()} - ${trip.getObserverLabel()} </li> </#list> ===================================== client/src/main/ftl/dataSourceConnectionReport_es.ftl ===================================== --- a/client/src/main/ftl/dataSourceConnectionReport_es.ftl +++ b/client/src/main/ftl/dataSourceConnectionReport_es.ftl @@ -62,14 +62,14 @@ <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - [${program.getPropertyValue("gearTypePrefix")}] Programa ${program.getPropertyValue("label")} + [${program.getGearTypePrefix()}] Programa ${program.getLabel()} <ul> <#list selectDataModel.getSelectedTripsByProgram(program) as trip> <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - ${trip.getPropertyValue("startDate")?date?string.short} - ${trip.getPropertyValue("endDate")?date?string.short} - ${trip.getPropertyValue("vessel")} - ${trip.getPropertyValue("observer")} + ${trip.getStartDate()?date?string.short} - ${trip.getEndDate()?date?string.short} - ${trip.getVesselLabel()} - ${trip.getObserverLabel()} </li> </#list> ===================================== client/src/main/ftl/dataSourceConnectionReport_fr.ftl ===================================== --- a/client/src/main/ftl/dataSourceConnectionReport_fr.ftl +++ b/client/src/main/ftl/dataSourceConnectionReport_fr.ftl @@ -57,14 +57,14 @@ <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - [${program.getPropertyValue("gearTypePrefix")}] Programme ${program.getPropertyValue("label")} + [${program.getGearTypePrefix()}] Programme ${program.getLabel()} <ul> <#list selectDataModel.getSelectedTripsByProgram(program) as trip> <li> <!--FIXME Bavencoff 17/03/2016 use decorator--> - ${trip.getPropertyValue("startDate")?date?string.short} - ${trip.getPropertyValue("endDate")?date?string.short} - ${trip.getPropertyValue("vessel")} - ${trip.getPropertyValue("observer")} + ${trip.getStartDate()?date?string.short} - ${trip.getEndDate()?date?string.short} - ${trip.getVesselLabel()} - ${trip.getObserverLabel()} </li> </#list> ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java @@ -140,7 +140,7 @@ public class SaveLocalUIHandler extends AdminTabUIHandler<SaveLocalUI> implement File backupFile = stepModel.getBackupFile(); SqlScriptProducerService dumpService = source.getSqlScriptProducerService(); - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(source.getVersion()).addSchema().addReferential().addAllData(); byte[] dump = dumpService.produceAddSqlScript(request).getSqlCode(); try (FileOutputStream outputStream = new FileOutputStream(backupFile)) { ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglinePositionHelper.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglinePositionHelper.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/longline/LonglinePositionHelper.java @@ -268,39 +268,31 @@ public class LonglinePositionHelper<D extends LonglinePositionAwareDto> { } - protected SectionReference getSection(BasketReference basket) { - - String sectionId = ((BasketWithSectionIdReference) basket).getSectionId(); - + private SectionReference getSection(BasketReference basket) { + String sectionId = basket.getSectionId(); return sectionUniverse.stream() .filter(s -> sectionId.equals(s.getId())) .findFirst() .orElse(null); - } - protected BasketReference getBasket(BranchlineReference branchline) { - - String basketId = ((BranchlineWithBasketIdReference) branchline).getBasketId(); - + private BasketReference getBasket(BranchlineReference branchline) { + String basketId = branchline.getBasketId(); return basketUniverse.stream() .filter(b -> basketId.equals(b.getId())) .findFirst() .orElse(null); - } - protected List<BasketReference> getBaskets(SectionReference section) { - + private List<BasketReference> getBaskets(SectionReference section) { return basketUniverse.stream() - .filter(b -> section.getId().equals(((BasketWithSectionIdReference) b).getSectionId())) + .filter(b -> section.getId().equals(b.getSectionId())) .collect(Collectors.toList()); } - protected List<BranchlineReference> getBranchlines(BasketReference basket) { - + private List<BranchlineReference> getBranchlines(BasketReference basket) { return branchlineUniverse.stream() - .filter(b -> basket.getId().equals(((BranchlineWithBasketIdReference) b).getBasketId())) + .filter(b -> basket.getId().equals(b.getBasketId())) .collect(Collectors.toList()); } ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java @@ -655,7 +655,7 @@ public class StorageUIHandler implements UIHandler<StorageUI> { log.debug(dst); } - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(ObserveSwingApplicationContext.get().getConfig().getModelVersion()).addSchema().addReferential().addAllData(); byte[] dataDump = dumpProducerService.produceAddSqlScript(request).getSqlCode(); try (FileOutputStream outputStream = new FileOutputStream(dst)) { ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java @@ -1546,7 +1546,7 @@ public class StorageUIModel extends WizardModel<StorageStep> { SqlScriptProducerService dumpService = source.getSqlScriptProducerService(); - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(source.getVersion()).addSchema().addReferential(); byte[] dump = dumpService.produceAddSqlScript(request).getSqlCode(); result.setImportDatabase(dump); ===================================== dto/src/main/java/fr/ird/observe/binder/data/longline/BasketDtoReferenceBinder.java ===================================== --- a/dto/src/main/java/fr/ird/observe/binder/data/longline/BasketDtoReferenceBinder.java +++ b/dto/src/main/java/fr/ird/observe/binder/data/longline/BasketDtoReferenceBinder.java @@ -41,7 +41,7 @@ public class BasketDtoReferenceBinder extends DataDtoReferenceBinder<BasketDto, @Override public BasketReference toReference(ReferentialLocale referentialLocale, BasketDto dto) { - return new BasketReference(dto, dto.getSettingIdentifier(), dto.getHaulingIdentifier()); + return new BasketReference(dto, dto.getSettingIdentifier(), dto.getHaulingIdentifier(), null); } } ===================================== dto/src/main/java/fr/ird/observe/binder/data/longline/BranchlineDtoReferenceBinder.java ===================================== --- a/dto/src/main/java/fr/ird/observe/binder/data/longline/BranchlineDtoReferenceBinder.java +++ b/dto/src/main/java/fr/ird/observe/binder/data/longline/BranchlineDtoReferenceBinder.java @@ -41,7 +41,7 @@ public class BranchlineDtoReferenceBinder extends DataDtoReferenceBinder<Branchl @Override public BranchlineReference toReference(ReferentialLocale referentialLocale, BranchlineDto dto) { - return new BranchlineReference(dto, dto.getSettingIdentifier(), dto.getHaulingIdentifier()); + return new BranchlineReference(dto, dto.getSettingIdentifier(), dto.getHaulingIdentifier(), null); } } ===================================== dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdDto.java deleted ===================================== --- a/dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdDto.java +++ /dev/null @@ -1,30 +0,0 @@ -package fr.ird.observe.dto.data.longline; - -/*- - * #%L - * ObServe :: Dto - * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -public class BasketWithSectionIdDto extends BasketDto { - - private static final long serialVersionUID = 3690753995685507632L; - - public static final String PROPERTY_SECTION_ID = "sectionId"; -} ===================================== dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdReference.java ===================================== --- a/dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdReference.java +++ b/dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdReference.java @@ -34,10 +34,11 @@ public class BasketWithSectionIdReference extends BasketReference { private final String sectionId; public BasketWithSectionIdReference(DtoReferenceAware dto, Integer settingIdentifier, Integer haulingIdentifier, String sectionId) { - super(dto, settingIdentifier, haulingIdentifier); + super(dto, settingIdentifier, haulingIdentifier, sectionId); this.sectionId = sectionId; } + @Override public String getSectionId() { return sectionId; } ===================================== dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdDto.java deleted ===================================== --- a/dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdDto.java +++ /dev/null @@ -1,31 +0,0 @@ -package fr.ird.observe.dto.data.longline; - -/*- - * #%L - * ObServe :: Dto - * %% - * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -public class BranchlineWithBasketIdDto extends BranchlineDto { - - private static final long serialVersionUID = 7018072108318352694L; - - public static final String PROPERTY_BASKET_ID = "basketId"; - -} ===================================== dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdReference.java ===================================== --- a/dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdReference.java +++ b/dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdReference.java @@ -10,12 +10,12 @@ package fr.ird.observe.dto.data.longline; * 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>. @@ -34,11 +34,12 @@ public class BranchlineWithBasketIdReference extends BranchlineReference { private final String basketId; public BranchlineWithBasketIdReference(DtoReferenceAware dto, Integer settingIdentifier, Integer haulingIdentifier, String basketId) { - super(dto, settingIdentifier, haulingIdentifier); + super(dto, settingIdentifier, haulingIdentifier, basketId); this.basketId = basketId; } + @Override public String getBasketId() { return basketId; } ===================================== dto/src/main/models/Observe.model ===================================== --- a/dto/src/main/models/Observe.model +++ b/dto/src/main/models/Observe.model @@ -109,14 +109,15 @@ individualWeight + {*:1} Float baitSettingStatus {*:1} fr.ird.observe.dto.referential.longline.BaitSettingStatusReference baitType {*:1} fr.ird.observe.dto.referential.longline.BaitTypeReference -data.longline.Basket > data.Data >> data.longline.LonglineCompositionDto | references=settingIdentifier,haulingIdentifier +data.longline.Basket > data.Data >> data.longline.LonglineCompositionDto | references=settingIdentifier,haulingIdentifier,sectionId settingIdentifier + {*:1} Integer haulingIdentifier + {*:1} Integer floatline1Length + {*:1} Float floatline2Length + {*:1} Float branchline + {*} data.longline.Branchline | ordered unique +section + {*:1} fr.ird.observe.dto.data.longline.SectionReference -data.longline.Branchline > data.Commentable >> data.longline.LonglineCompositionDto | references=settingIdentifier,haulingIdentifier +data.longline.Branchline > data.Commentable >> data.longline.LonglineCompositionDto | references=settingIdentifier,haulingIdentifier,basketId settingIdentifier + {*:1} Integer haulingIdentifier + {*:1} Integer depthRecorder + {*:1} Boolean @@ -139,6 +140,7 @@ hookType {*:0..1} fr.ird.observe.dto.referential.longline.HookTypeReference tracelineType {*:0..1} fr.ird.observe.dto.referential.longline.LineTypeReference topType {*:0..1} fr.ird.observe.dto.referential.longline.LineTypeReference baitType {*:0..1} fr.ird.observe.dto.referential.longline.BaitTypeReference +basket + {*:1} fr.ird.observe.dto.data.longline.BasketReference data.longline.BranchlinesComposition > data.Data | references=topTypeLabel,tracelineTypeLabel,length,proportion length + {*:1} Float ===================================== persistence/pom.xml ===================================== --- a/persistence/pom.xml +++ b/persistence/pom.xml @@ -133,6 +133,11 @@ <artifactId>hibernate-core</artifactId> </dependency> <dependency> + <groupId>net.bytebuddy</groupId> + <artifactId>byte-buddy</artifactId> + <scope>runtime</scope> + </dependency> + <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <scope>runtime</scope> @@ -140,6 +145,7 @@ <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-hikaricp</artifactId> + <scope>runtime</scope> </dependency> <!-- test --> @@ -277,6 +283,26 @@ </executions> </plugin> + <plugin> + <groupId>org.hibernate.orm.tooling</groupId> + <artifactId>hibernate-enhance-maven-plugin</artifactId> + <version>${lib.version.hibernate}</version> + <executions> + <execution> + <configuration> + <failOnError>true</failOnError> + <enableLazyInitialization>true</enableLazyInitialization> + <enableDirtyTracking>true</enableDirtyTracking> + <enableAssociationManagement>true</enableAssociationManagement> + <enableExtendedEnhancement>false</enableExtendedEnhancement> + </configuration> + <goals> + <goal>enhance</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> </build> </project> ===================================== persistence/src/main/java/fr/ird/observe/binder/data/longline/BasketEntityReferenceBinder.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/binder/data/longline/BasketEntityReferenceBinder.java +++ b/persistence/src/main/java/fr/ird/observe/binder/data/longline/BasketEntityReferenceBinder.java @@ -27,6 +27,7 @@ import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.data.longline.BasketDto; import fr.ird.observe.dto.data.longline.BasketReference; import fr.ird.observe.entities.longline.Basket; +import fr.ird.observe.entities.longline.Section; /** * Created on 24/11/15. @@ -39,10 +40,13 @@ public class BasketEntityReferenceBinder extends DataEntityReferenceBinderSuppor super(BasketDto.class, BasketReference.class, Basket.class); } + public BasketReference toReference(Basket entity, Section section) { + return new BasketReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier(), section.getTopiaId()); + } + @Override public BasketReference toReference(ReferentialLocale referentialLocale, Basket entity) { - - return new BasketReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier()); + return new BasketReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier(), null); } } ===================================== persistence/src/main/java/fr/ird/observe/binder/data/longline/BranchlineEntityReferenceBinder.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/binder/data/longline/BranchlineEntityReferenceBinder.java +++ b/persistence/src/main/java/fr/ird/observe/binder/data/longline/BranchlineEntityReferenceBinder.java @@ -23,9 +23,10 @@ package fr.ird.observe.binder.data.longline; */ import fr.ird.observe.binder.data.DataEntityReferenceBinderSupport; -import fr.ird.observe.dto.referential.ReferentialLocale; import fr.ird.observe.dto.data.longline.BranchlineDto; import fr.ird.observe.dto.data.longline.BranchlineReference; +import fr.ird.observe.dto.referential.ReferentialLocale; +import fr.ird.observe.entities.longline.Basket; import fr.ird.observe.entities.longline.Branchline; /** @@ -39,10 +40,13 @@ public class BranchlineEntityReferenceBinder extends DataEntityReferenceBinderSu super(BranchlineDto.class, BranchlineReference.class, Branchline.class); } + public BranchlineReference toReference(Branchline entity, Basket basket) { + return new BranchlineReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier(), basket.getTopiaId()); + } + @Override public BranchlineReference toReference(ReferentialLocale referentialLocale, Branchline entity) { - - return new BranchlineReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier()); + return new BranchlineReference(entity, entity.getSettingIdentifier(), entity.getHaulingIdentifier(), null); } } ===================================== persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java +++ b/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java @@ -279,33 +279,6 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat log.info(String.format("For TripSeine, found %d tables to use.", tripSeineTables.size())); } return tripSeineTables; - - /* - return TopiaSqlTables.builder(filterTable, ObserveEntityEnum.TripSeine) // → TripSeine - .addAndEnterJoinTable(ObserveEntityEnum.GearUseFeaturesSeine) // → GearUseFeaturesSeine - .addJoinTable(ObserveEntityEnum.GearUseFeaturesMeasurementSeine) - .backToParent() // ← TripSeine - .addAndEnterJoinTable(ObserveEntityEnum.Route) // → Route - .addAndEnterJoinTable(ObserveEntityEnum.ActivitySeine) // → ActivitySeine - .addAndEnterReverseJoinTable(ObserveEntityEnum.SetSeine) // → SetSeine - .addJoinTable(ObserveEntityEnum.SchoolEstimate) - .addJoinTable(ObserveEntityEnum.NonTargetCatch) - .addJoinTable(ObserveEntityEnum.TargetCatch) - .addAndEnterJoinTable(ObserveEntityEnum.TargetSample) // → TargetSample - .addJoinTable(ObserveEntityEnum.TargetLength) - .backToParent() // ← SetSeine - .addAndEnterJoinTable(ObserveEntityEnum.NonTargetSample) // → NonTargetSample - .addJoinTable(ObserveEntityEnum.NonTargetLength) - .backToParent() // ← SetSeine - .backToParent() // ← ActivitySeine - .addAssociationTable(ObserveEntityEnum.ObservedSystem.name(), true) - .addAndEnterJoinTable(ObserveEntityEnum.FloatingObject) // → FloatingObject - .addJoinTable(ObserveEntityEnum.ObjectObservedSpecies) - .addJoinTable(ObserveEntityEnum.ObjectSchoolEstimate) - .addJoinTable(ObserveEntityEnum.TransmittingBuoy) - .build(); - */ - } public TopiaSqlTables getTripLonglineTables() { @@ -346,43 +319,9 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat null); tripLonglineTables.replaceTable("observe_longline.branchline", branchlineTable); - - } return tripLonglineTables; - - /* - return TopiaSqlTables.builder(filterTable, ObserveEntityEnum.TripLongline) // → TripLongline - .addAndEnterJoinTable(ObserveEntityEnum.GearUseFeaturesLongline) // → GearUseFeaturesLongline - .addJoinTable(ObserveEntityEnum.GearUseFeaturesMeasurementLongline) - .backToParent() // ← TripLongline - .addAndEnterJoinTable(ObserveEntityEnum.ActivityLongline) // → ActivityLongline - .addAndEnterReverseJoinTable(ObserveEntityEnum.SetLongline) // → SetLongline - .addJoinTable(ObserveEntityEnum.BaitsComposition) - .addJoinTable(ObserveEntityEnum.FloatlinesComposition) - .addJoinTable(ObserveEntityEnum.HooksComposition) - .addJoinTable(ObserveEntityEnum.BranchlinesComposition) - .addAssociationTable(ObserveEntityEnum.MitigationType.name(), true) - .addAndEnterJoinTable(ObserveEntityEnum.Section) // → Section - .addAndEnterJoinTable(ObserveEntityEnum.Basket) // → Basket - .addJoinTable(ObserveEntityEnum.Branchline) - .backToParent() // ← Section - .backToParent() // ← SetLongline - .addAndEnterJoinTable(ObserveEntityEnum.CatchLongline) // → CatchLongline - .addJoinTable(ObserveEntityEnum.SizeMeasure) - .addJoinTable(ObserveEntityEnum.WeightMeasure) - .addAssociationTable("Predator", true) - .backToParent() // ← SetLongline - .addAndEnterJoinTable(ObserveEntityEnum.Tdr) // → Tdr - .addJoinTable(ObserveEntityEnum.TdrRecord) - .addAssociationTable(ObserveEntityEnum.Species.name(), true) - .backToParent() // ← SetLongline - .backToParent() // ← ActivityLongline - .addJoinTable(ObserveEntityEnum.Encounter) - .addJoinTable(ObserveEntityEnum.SensorUsed) - .build(); - */ - } +} public TopiaSqlTables getReferentialTables() { @@ -391,139 +330,9 @@ public class ObserveTopiaApplicationContext extends AbstractObserveTopiaApplicat referentialTables = topiaSqlTablesFactory.newReplicateEntityTables( new TripReplicateTablesPredicate(), Entities.REFERENCE_ENTITIES); -// ObserveEntityEnum.VesselSizeCategory, -// ObserveEntityEnum.Country, -// ObserveEntityEnum.Harbour, -// ObserveEntityEnum.VesselType, -// ObserveEntityEnum.Vessel, -// ObserveEntityEnum.Ocean, -// ObserveEntityEnum.SpeciesGroup, -// ObserveEntityEnum.Species, -// ObserveEntityEnum.Sex, -// ObserveEntityEnum.FpaZone, -// ObserveEntityEnum.SpeciesList, -// ObserveEntityEnum.Person, -// ObserveEntityEnum.Organism, -// ObserveEntityEnum.LengthWeightParameter, -// ObserveEntityEnum.Program, -// ObserveEntityEnum.GearCaracteristicType, -// ObserveEntityEnum.GearCaracteristic, -// ObserveEntityEnum.Gear, -// ObserveEntityEnum.LastUpdateDate, -// ObserveEntityEnum.VesselActivitySeine, -// ObserveEntityEnum.SurroundingActivity, -// ObserveEntityEnum.ReasonForNullSet, -// ObserveEntityEnum.ReasonForNoFishing, -// ObserveEntityEnum.SpeciesFate, -// ObserveEntityEnum.ObjectFate, -// ObserveEntityEnum.WeightCategory, -// ObserveEntityEnum.DetectionMode, -// ObserveEntityEnum.TransmittingBuoyOperation, -// ObserveEntityEnum.ObjectOperation, -// ObserveEntityEnum.ReasonForDiscard, -// ObserveEntityEnum.SpeciesStatus, -// ObserveEntityEnum.ObservedSystem, -// ObserveEntityEnum.TransmittingBuoyType, -// ObserveEntityEnum.ObjectType, -// ObserveEntityEnum.Wind, -// ObserveEntityEnum.BaitHaulingStatus, -// ObserveEntityEnum.BaitSettingStatus, -// ObserveEntityEnum.BaitType, -// ObserveEntityEnum.CatchFateLongline, -// ObserveEntityEnum.EncounterType, -// ObserveEntityEnum.Healthness, -// ObserveEntityEnum.HookPosition, -// ObserveEntityEnum.HookSize, -// ObserveEntityEnum.HookType, -// ObserveEntityEnum.ItemVerticalPosition, -// ObserveEntityEnum.ItemHorizontalPosition, -// ObserveEntityEnum.LightsticksColor, -// ObserveEntityEnum.LightsticksType, -// ObserveEntityEnum.LineType, -// ObserveEntityEnum.MaturityStatus, -// ObserveEntityEnum.MitigationType, -// ObserveEntityEnum.SensorBrand, -// ObserveEntityEnum.SensorDataFormat, -// ObserveEntityEnum.SensorType, -// ObserveEntityEnum.SettingShape, -// ObserveEntityEnum.SizeMeasureType, -// ObserveEntityEnum.StomacFullness, -// ObserveEntityEnum.TripType, -// ObserveEntityEnum.VesselActivityLongline, -// ObserveEntityEnum.WeightMeasureType); } log.info(String.format("For Referential, found %d tables to use.", referentialTables.size())); return referentialTables; - - /* - - return TopiaSqlTables.builder() - .addMainTable(ObserveEntityEnum.VesselSizeCategory) // → VesselSizeCategory - .addMainTable(ObserveEntityEnum.Country) // → Country - .addMainTable(ObserveEntityEnum.Harbour) // → Harbour - .addMainTable(ObserveEntityEnum.VesselType) // → VesselType - .addMainTable(ObserveEntityEnum.Vessel) // → Vessel - .addMainTable(ObserveEntityEnum.Ocean) // → Ocean - .addMainTable(ObserveEntityEnum.SpeciesGroup) // → SpeciesGroup - .addMainTable(ObserveEntityEnum.Species) // → Species - .addAssociationTable(ObserveEntityEnum.Ocean.name(), false) - .addMainTable(ObserveEntityEnum.Sex) // → Sex - .addMainTable(ObserveEntityEnum.FpaZone) // → FpaZone - .addMainTable(ObserveEntityEnum.SpeciesList) // → SpeciesList - .addAssociationTable(ObserveEntityEnum.Species.name(), false) - .addMainTable(ObserveEntityEnum.Person) // → Person - .addMainTable(ObserveEntityEnum.Organism) // → Organism - .addMainTable(ObserveEntityEnum.LengthWeightParameter) // → LengthWeightParameter - .addMainTable(ObserveEntityEnum.Program) // → Program - .addMainTable(ObserveEntityEnum.GearCaracteristicType) // → GearCaracteristicType - .addMainTable(ObserveEntityEnum.GearCaracteristic) // → GearCaracteristic - .addMainTable(ObserveEntityEnum.Gear) // → Gear - .addAssociationTable(ObserveEntityEnum.GearCaracteristic.name(), false) - .addMainTable(ObserveEntityEnum.LastUpdateDate) // → LastUpdateDate - .addMainTable(ObserveEntityEnum.VesselActivitySeine) // → VesselActivitySeine - .addMainTable(ObserveEntityEnum.SurroundingActivity) // → SurroundingActivity - .addMainTable(ObserveEntityEnum.ReasonForNullSet) // → ReasonForNullSet - .addMainTable(ObserveEntityEnum.ReasonForNoFishing) // → ReasonForNoFishing - .addMainTable(ObserveEntityEnum.SpeciesFate) // → SpeciesFate - .addMainTable(ObserveEntityEnum.ObjectFate) // → ObjectFate - .addMainTable(ObserveEntityEnum.WeightCategory) // → WeightCategory - .addMainTable(ObserveEntityEnum.DetectionMode) // → DetectionMode - .addMainTable(ObserveEntityEnum.TransmittingBuoyOperation) // → TransmittingBuoyOperation - .addMainTable(ObserveEntityEnum.ObjectOperation) // → ObjectOperation - .addMainTable(ObserveEntityEnum.ReasonForDiscard) // → ReasonForDiscard - .addMainTable(ObserveEntityEnum.SpeciesStatus) // → SpeciesStatus - .addMainTable(ObserveEntityEnum.ObservedSystem) // → ObservedSystem - .addMainTable(ObserveEntityEnum.TransmittingBuoyType) // → TransmittingBuoyType - .addMainTable(ObserveEntityEnum.ObjectType) // → ObjectType - .addMainTable(ObserveEntityEnum.Wind) // → Wind - .addMainTable(ObserveEntityEnum.BaitHaulingStatus) // → BaitHaulingStatus - .addMainTable(ObserveEntityEnum.BaitSettingStatus) // → BaitSettingStatus - .addMainTable(ObserveEntityEnum.BaitType) // → BaitType - .addMainTable(ObserveEntityEnum.CatchFateLongline) // → CatchFateLongline - .addMainTable(ObserveEntityEnum.EncounterType) // → EncounterType - .addMainTable(ObserveEntityEnum.Healthness) // → Healthness - .addMainTable(ObserveEntityEnum.HookPosition) // → HookPosition - .addMainTable(ObserveEntityEnum.HookSize) // → HookSize - .addMainTable(ObserveEntityEnum.HookType) // → HookType - .addMainTable(ObserveEntityEnum.ItemVerticalPosition) // → ItemVerticalPosition - .addMainTable(ObserveEntityEnum.ItemHorizontalPosition) // → ItemHorizontalPosition - .addMainTable(ObserveEntityEnum.LightsticksColor) // → LightsticksColor - .addMainTable(ObserveEntityEnum.LightsticksType) // → LightsticksType - .addMainTable(ObserveEntityEnum.LineType) // → LineType - .addMainTable(ObserveEntityEnum.MaturityStatus) // → MaturityStatus - .addMainTable(ObserveEntityEnum.MitigationType) // → MitigationType - .addMainTable(ObserveEntityEnum.SensorBrand) // → SensorBrand - .addMainTable(ObserveEntityEnum.SensorDataFormat) // → SensorDataFormat - .addMainTable(ObserveEntityEnum.SensorType) // → SensorType - .addMainTable(ObserveEntityEnum.SettingShape) // → SettingShape - .addMainTable(ObserveEntityEnum.SizeMeasureType) // → SizeMeasureType - .addMainTable(ObserveEntityEnum.StomacFullness) // → StomacFullness - .addMainTable(ObserveEntityEnum.TripType) // → TripType - .addMainTable(ObserveEntityEnum.VesselActivityLongline) // → VesselActivityLongline - .addMainTable(ObserveEntityEnum.WeightMeasureType) // → WeightMeasureType - - .build(); -*/ } public <E extends ObserveReferentialEntity> TopiaSqlTables getReferentialTable(Class<E> entityType) { ===================================== persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java ===================================== --- a/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java +++ b/persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java @@ -22,7 +22,11 @@ package fr.ird.observe.persistence; * #L% */ -import org.hibernate.hikaricp.internal.HikariCPConnectionProvider; +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; import org.nuiton.topia.persistence.BeanTopiaConfiguration; import org.nuiton.topia.persistence.HibernateAvailableSettings; import org.nuiton.topia.persistence.jdbc.JdbcConfiguration; @@ -36,27 +40,37 @@ public class ObserveTopiaConfiguration extends BeanTopiaConfiguration { private static final long serialVersionUID = 1L; - protected final boolean h2Configuration; + private final boolean h2Configuration; protected final boolean showSql; + private static final Map<String, String> HIBERNATE_GLOBAL_PROPERTIES; + + static { + + Properties p = new Properties(); + try (InputStream stream = ObserveTopiaPersistenceContext.class.getResourceAsStream("/hibernate.properties")) { + try { + p.load(stream); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } catch (IOException e) { + throw new IllegalStateException(e); + } + HIBERNATE_GLOBAL_PROPERTIES = new TreeMap<>(); + for (String s : p.stringPropertyNames()) { + HIBERNATE_GLOBAL_PROPERTIES.put(s, p.getProperty(s)); + } + + } public ObserveTopiaConfiguration(JdbcConfiguration jdbcConfiguration, boolean h2Configuration, boolean showSql) { super(jdbcConfiguration); this.h2Configuration = h2Configuration; this.showSql = showSql; if (showSql) { - hibernateExtraConfiguration.put("hibernate.show_sql", Boolean.TRUE.toString()); + hibernateExtraConfiguration.put(HibernateAvailableSettings.SHOW_SQL, Boolean.TRUE.toString()); } - - hibernateExtraConfiguration.put(HibernateAvailableSettings.CONNECTION_PROVIDER, HikariCPConnectionProvider.class.getName()); - hibernateExtraConfiguration.put("hibernate.hikari.minimumIdle", "2"); - hibernateExtraConfiguration.put("hibernate.hikari.maximumPoolSize", "20"); - hibernateExtraConfiguration.put("hibernate.hikari.autoCommit", "false"); - hibernateExtraConfiguration.put("hibernate.hikari.registerMbeans", "true"); - -// hibernateExtraConfiguration.put(HibernateAvailableSettings.CONNECTION_PROVIDER, "org.hibernate.c3p0.internal.C3P0ConnectionProvider"); -// hibernateExtraConfiguration.put(HibernateAvailableSettings.C3P0_MAX_SIZE, "500"); -// hibernateExtraConfiguration.put(HibernateAvailableSettings.C3P0_MAX_STATEMENTS, "500"); -// hibernateExtraConfiguration.put(HibernateAvailableSettings.C3P0_TIMEOUT, "100"); + hibernateExtraConfiguration.putAll(HIBERNATE_GLOBAL_PROPERTIES); } public boolean isH2Configuration() { ===================================== persistence/src/main/resources/hibernate.properties ===================================== --- /dev/null +++ b/persistence/src/main/resources/hibernate.properties @@ -0,0 +1,29 @@ +### +# #%L +# ObServe :: Persistence +# %% +# Copyright (C) 2008 - 2018 IRD, Code Lutin, Ultreia.io +# %% +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public +# License along with this program. If not, see +# <http://www.gnu.org/licenses/gpl-3.0.html>. +# #L% +### +hibernate.bytecode.provider=bytebuddy +hibernate.use_sql_comments=false +hibernate.format_sql=false +hibernate.connection.provider_class=org.hibernate.hikaricp.internal.HikariCPConnectionProvider +hibernate.hikari.minimumIdle=2 +hibernate.hikari.maximumPoolSize=20 +hibernate.hikari.autoCommit=false +#hibernate.hikari.registerMbeans=true ===================================== services-local/src/main/java/fr/ird/observe/services/local/ObserveJdbcHelper.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/ObserveJdbcHelper.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/ObserveJdbcHelper.java @@ -68,13 +68,20 @@ public class ObserveJdbcHelper extends JdbcHelper { while (observerDataPrivilege.next()) { String security = observerDataPrivilege.getString("PRIVILEGE"); + String grantor = observerDataPrivilege.getString("GRANTOR"); String grantee = observerDataPrivilege.getString("GRANTEE"); // Il se peut que le login soit echappe sous la forme \"login\" + grantor= grantor.replaceAll("\\\\\"", ""); grantee = grantee.replaceAll("\\\\\"", ""); if (log.isDebugEnabled()) { log.debug(String.format("(security %s) - grantee (%s)", security, grantee)); } - if (grantee.equals(jdbcConfiguration.getJdbcConnectionUser())) { + if (grantor.equals(jdbcConfiguration.getJdbcConnectionUser())) { + if (log.isDebugEnabled()) { + log.debug("for " + tableName + " table " + grantor + '/' + security); + } + tablePrivileges.add(security); + } else if (grantee.equals(jdbcConfiguration.getJdbcConnectionUser())) { if (log.isDebugEnabled()) { log.debug("for " + tableName + " table " + grantee + '/' + security); } ===================================== services-local/src/main/java/fr/ird/observe/services/local/ObserveServiceContextLocal.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/ObserveServiceContextLocal.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/ObserveServiceContextLocal.java @@ -88,7 +88,7 @@ public class ObserveServiceContextLocal { return observeServiceInitializer.withDataSourceConnection(); } - Optional<ObserveDataSourceConnectionTopia> getDataSourceConnection() { + public Optional<ObserveDataSourceConnectionTopia> getDataSourceConnection() { //noinspection unchecked return (Optional) observeServiceInitializer.getDataSourceConnection(); } ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/service/DataSourceServiceLocal.java @@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service; * 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>. @@ -26,7 +26,6 @@ import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; -import fr.ird.observe.spi.DbModelHelper; import fr.ird.observe.dto.db.ObserveDbUserDto; import fr.ird.observe.dto.reference.ReferentialDtoReference; import fr.ird.observe.entities.referentiel.ObserveReferentialEntity; @@ -55,13 +54,7 @@ import fr.ird.observe.services.service.DatabaseDestroyNotAuthorizedException; import fr.ird.observe.services.service.DatabaseNotFoundException; import fr.ird.observe.services.service.sql.AddSqlScriptProducerRequest; import fr.ird.observe.services.service.sql.SqlScriptProducerService; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.stream.Collectors; +import fr.ird.observe.spi.DbModelHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.jdbc.JdbcHelper; @@ -69,7 +62,15 @@ import org.nuiton.topia.persistence.metadata.TopiaMetadataEntity; import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; import org.nuiton.topia.persistence.metadata.TopiaMetadataModelVisitor; import org.nuiton.version.Version; +import org.nuiton.version.Versions; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.l; @@ -234,7 +235,7 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS temporaryTopiaApplicationContext.getMigrationService().runSchemaMigration(); SqlScriptProducerService dumpProducerService = serviceContext.newService(temporaryConfiguration, SqlScriptProducerService.class); - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres(dataSourceConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); byte[] dump = dumpProducerService.produceAddSqlScript(request).getSqlCode(); topiaApplicationContext.executeSqlStatements(dump); topiaApplicationContext.getMigrationService().createSchemaIfNotExist(); @@ -283,11 +284,12 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportReferentialDataSourceConfiguration(); + Version dbVersion = Versions.valueOf(topiaApplicationContext.getModelVersion()); AddSqlScriptProducerRequest request; if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) { - request = AddSqlScriptProducerRequest.forH2(); + request = AddSqlScriptProducerRequest.forH2(dbVersion); } else { - request = AddSqlScriptProducerRequest.forPostgres(); + request = AddSqlScriptProducerRequest.forPostgres(dbVersion); } request.addReferential(); @@ -319,12 +321,12 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS ObserveDataSourceConfiguration importDataSourceConfiguration = dataSourceCreateConfiguration.getImportDataDataSourceConfiguration(); - + Version dbVersion = Versions.valueOf(topiaApplicationContext.getModelVersion()); AddSqlScriptProducerRequest request; if (((ObserveDataSourceConfigurationTopiaSupport) dataSourceConfiguration).isH2Database()) { - request = AddSqlScriptProducerRequest.forH2(); + request = AddSqlScriptProducerRequest.forH2(dbVersion); } else { - request = AddSqlScriptProducerRequest.forPostgres(); + request = AddSqlScriptProducerRequest.forPostgres(dbVersion); } if (!referantialImported) { @@ -612,8 +614,8 @@ public class DataSourceServiceLocal extends ObserveServiceLocal implements DataS if (log.isDebugEnabled()) { log.debug("User can write referential : " + writeReferential + ", " + - "read data : " + readData + ", " + - "write data : " + writeData + "."); + "read data : " + readData + ", " + + "write data : " + writeData + "."); } ObserveMigrationConfigurationProvider observeMigrationConfigurationProvider = ObserveMigrationConfigurationProvider.get(); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/service/ObserveServiceLocal.java @@ -166,9 +166,7 @@ import org.nuiton.topia.persistence.TopiaNoResultException; */ public abstract class ObserveServiceLocal implements ObserveService { - /** - * Logger. - */ + /** Logger. */ private static final Log log = LogFactory.getLog(ObserveServiceLocal.class); protected static final DataDtoEntityPersistenceContext<TripSeineDto, TripSeineReference, TripSeine, TripSeineTopiaDao> TRIP_SEINE_SPI = @@ -289,21 +287,6 @@ public abstract class ObserveServiceLocal implements ObserveService { return serviceContext.getTopiaPersistenceContext(); } -// protected <D extends IdDto, E extends ObserveEntity> void deleteEntity(Class<D> dtoType, Class<E> entityType, Iterable<String> ids) { -// ObserveTopiaPersistenceContext persistenceContext = serviceContext.getTopiaPersistenceContext(); -// TopiaDao<E> dao = persistenceContext.getDao(entityType); -// for (String id : ids) { -// E entity = dao.forTopiaIdEquals(id).findUniqueOrNull(); -// if (entity == null) { -// throw new DataNotFoundException(dtoType, id); -// } -// dao.delete(entity); -// } -// -// updateLastUpdateDate(entityType); -// -// } - public <E extends ObserveEntity> void updateLastUpdateDate(Class<E> entityType) { getTopiaPersistenceContext().updateLastUpdateDate(entityType, now()); } @@ -331,35 +314,6 @@ public abstract class ObserveServiceLocal implements ObserveService { } - // protected <E extends ObserveDataEntity, D extends DataDto> Form<D> dataEntityToForm(Class<D> dtoType, E entity) { -// -// D dto = DbModelHelper.fromDataDto(dtoType).toDto(serviceContext.getReferentialLocale(), dtoType, entity); -// return Form.newFormDto(dtoType, dto); -// -// } -// -// -// protected <E extends ObserveDataEntity, D extends DataDto> void copyDataDtoToEntity(D dto, E entity) { -// -// DbModelHelper.fromDataDto(dto).copyToEntity(serviceContext.getReferentialLocale(), dto, entity); -// -// } - -// -// protected <E extends ObserveDataEntity, D extends DataDto> E loadOrCreateEntityFromDataDto(D dto) { -// -// Class<E> entityType = DbModelHelper.fromDataDto(dto).toEntityType(); -// -// E entity; -// if (dto.isPersisted()) { -// entity = loadEntity(dto.get(), dto.getId()); -// } else { -// entity = getTopiaPersistenceContext().newEntity(entityType); -// } -// return entity; -// } - - protected <E extends ObserveEntity, D extends IdDto> void checkLastUpdateDate(E entity, D dto) { if (entity.isPersisted()) { @@ -382,14 +336,6 @@ public abstract class ObserveServiceLocal implements ObserveService { return serviceContext.now(); } - // protected <D extends DataDto, E extends ObserveDataEntity> D loadEntityToDataDto(Class<D> dtoType, String id) { -// -// E entity = loadEntity(dtoType, id); -// DataEntityDtoBinderSupport<D, E> binder = DbModelHelper.fromDataDto(dtoType).toEntityBinder(); -// return binder.toDto(getReferentialLocale(), entity); -// -// } -// public <D extends ReferentialDto, E extends ObserveReferentialEntity> D loadEntityToReferentialDto(ReferentialEntityDtoBinderSupport<D, E> binder, String id) { E entity = loadEntity(binder.getDtoType(), id); @@ -397,29 +343,6 @@ public abstract class ObserveServiceLocal implements ObserveService { } -// protected <D extends DataDto, R extends DataDtoReference<D, R>, E extends ObserveDataEntity> R loadEntityToDataReferenceDto(Class<D> dtoType, String id) { -// -// E entity = loadEntity(dtoType, id); -// -// DataEntityReferenceBinderSupport<D, R, E> dataBinderFromDto = DbModelHelper.fromDataDto(dtoType).toEntityReferenceBinder(); -// return dataBinderFromDto.toReference(getReferentialLocale(), entity); -// -// } - -// protected <E extends ObserveEntity> boolean existsEntity(Class<E> entityType, String id) { -// ObserveTopiaPersistenceContext persistenceContext = serviceContext.getTopiaPersistenceContext(); -// TopiaDao<E> dao = persistenceContext.getDao(entityType); -// return dao.forTopiaIdEquals(id).exists(); -// } - -// protected <D extends DataDto, R extends DataDtoReference<D, R>, E extends ObserveDataEntity> R toReference(Class<R> referenceType, E entity) { -// -// DataEntityReferenceBinderSupport<D, R, E> binder = DbModelHelper.fromDataReference(referenceType).toEntityReferenceBinder(); -// -// return binder.toReference(getReferentialLocale(), entity); -// -// } - protected <D extends DataDto, E extends ObserveDataEntity, R extends DataDtoReference<D, R>> DataDtoReferenceSet<R> toDataReferenceSet(DataEntityReferenceBinderSupport<D, R, E> binder, Collection<E> entities) { ReferentialLocale referentialLocale = getReferentialLocale(); @@ -455,13 +378,13 @@ public abstract class ObserveServiceLocal implements ObserveService { protected DataFileDto newDataFileDto(Blob data, String dataFilename) { DataFileDto dto = new DataFileDto(); try { - // on copie le blob pour supprimer le lien entre la blob venant de la base et la connexion à la base + // copy blob int length = (int) data.length(); byte[] bytes = data.getBytes(1, length); dto.setContent(bytes); } catch (SQLException e) { if (log.isErrorEnabled()) { - log.error("unable to read blod from " + dataFilename, e); + log.error("unable to read blob from " + dataFilename, e); } } dto.setName(dataFilename); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/data/TripManagementServiceLocal.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/service/data/TripManagementServiceLocal.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/service/data/TripManagementServiceLocal.java @@ -44,6 +44,7 @@ import java.util.TreeSet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.util.StringUtil; +import org.nuiton.version.Version; /** * Created on 20/07/16. @@ -76,9 +77,9 @@ public class TripManagementServiceLocal extends ObserveServiceLocal implements T if (log.isInfoEnabled()) { log.info("Start export of trip: " + tripId); } + Version dbVersion = serviceContext.getDataSourceConnection().orElseThrow(IllegalStateException::new).getVersion(); - AddSqlScriptProducerRequest request; - request = (exportRequest.isForPG() ? AddSqlScriptProducerRequest.forPostgres() : AddSqlScriptProducerRequest.forH2()) + AddSqlScriptProducerRequest request = (exportRequest.isForPG() ? AddSqlScriptProducerRequest.forPostgres(dbVersion) : AddSqlScriptProducerRequest.forH2(dbVersion)) .dataIdsToAdd(ImmutableSet.of(tripId)); AddSqlScriptProducerResult producerResult = sqlScriptProducerService.produceAddSqlScript(request); byte[] tripContent = producerResult.getSqlCode(); ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/LonglinePositionSetDtoHelper.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/LonglinePositionSetDtoHelper.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/service/data/longline/LonglinePositionSetDtoHelper.java @@ -10,22 +10,23 @@ package fr.ird.observe.services.local.service.data.longline; * 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.binder.data.longline.BasketEntityReferenceBinder; +import fr.ird.observe.binder.data.longline.BranchlineEntityReferenceBinder; +import fr.ird.observe.binder.data.longline.SectionEntityReferenceBinder; import fr.ird.observe.dto.data.longline.BasketReference; -import fr.ird.observe.dto.data.longline.BasketWithSectionIdReference; import fr.ird.observe.dto.data.longline.BranchlineReference; -import fr.ird.observe.dto.data.longline.BranchlineWithBasketIdReference; import fr.ird.observe.dto.data.longline.LonglinePositionAwareDto; import fr.ird.observe.dto.data.longline.LonglinePositionSetDto; import fr.ird.observe.dto.data.longline.SectionReference; @@ -39,27 +40,30 @@ import fr.ird.observe.entities.longline.SetLongline; */ class LonglinePositionSetDtoHelper { + private static final SectionEntityReferenceBinder SECTION_BINDER = new SectionEntityReferenceBinder(); + private static final BasketEntityReferenceBinder BASKET_BINDER = new BasketEntityReferenceBinder(); + private static final BranchlineEntityReferenceBinder BRANCHLINE_BINDER = new BranchlineEntityReferenceBinder(); + + // constitution des références des position sur la ligne static void loadPositionSet(SetLongline setLongline, LonglinePositionSetDto target) { for (Section section : setLongline.getSection()) { - SectionReference sectionRef = toSectionReference(section); + SectionReference sectionReference = SECTION_BINDER.toReference(null, section); - target.addSections(sectionRef); + target.addSections(sectionReference); for (Basket basket : section.getBasket()) { - BasketWithSectionIdReference basketRef = toBasketReference(basket, section); + BasketReference basketReference = BASKET_BINDER.toReference(basket, section); - target.addBaskets(basketRef); + target.addBaskets(basketReference); for (Branchline branchline : basket.getBranchline()) { - BranchlineWithBasketIdReference branchlineRef = toBranchlineReference(branchline, basket); - - target.addBranchlines(branchlineRef); - + BranchlineReference branchlineReference = BRANCHLINE_BINDER.toReference(branchline, basket); + target.addBranchlines(branchlineReference); } } @@ -74,21 +78,21 @@ class LonglinePositionSetDtoHelper { if (basketRef != null) { - BasketReference basketRefWithSection = positionSetDto.getBaskets().stream() + BasketReference basketReference = positionSetDto.getBaskets().stream() .filter(b -> basketRef.getId().equals(b.getId())) .findFirst() .orElse(null); - positionDto.setBasket(basketRefWithSection); + positionDto.setBasket(basketReference); } - BranchlineReference branchlineRef = positionDto.getBranchline(); + BranchlineReference branchlineReference = positionDto.getBranchline(); - if (branchlineRef != null) { + if (branchlineReference != null) { BranchlineReference branchlineRefWithSection = positionSetDto.getBranchlines().stream() - .filter(b -> branchlineRef.getId().equals(b.getId())) + .filter(b -> branchlineReference.getId().equals(b.getId())) .findFirst() .orElse(null); @@ -97,19 +101,4 @@ class LonglinePositionSetDtoHelper { } } - private static SectionReference toSectionReference(Section section) { - - return new SectionReference(section, section.getSettingIdentifier(), section.getHaulingIdentifier()); - } - - private static BasketWithSectionIdReference toBasketReference(Basket basket, Section section) { - - return new BasketWithSectionIdReference(basket, basket.getSettingIdentifier(), basket.getHaulingIdentifier(), section.getTopiaId()); - } - - private static BranchlineWithBasketIdReference toBranchlineReference(Branchline branchline, Basket basket) { - - return new BranchlineWithBasketIdReference(branchline, branchline.getSettingIdentifier(), branchline.getHaulingIdentifier(), basket.getTopiaId()); - } - } ===================================== services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java ===================================== --- a/services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java +++ b/services-local/src/main/java/fr/ird/observe/services/local/service/referential/ReferentialServiceLocal.java @@ -10,12 +10,12 @@ package fr.ird.observe.services.local.service.referential; * 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>. @@ -63,6 +63,14 @@ import fr.ird.observe.spi.context.ReferentialEntityContext; import fr.ird.observe.spi.context.ReferentialReferenceEntityContext; import fr.ird.observe.spi.map.ImmutableDtoMap; import fr.ird.observe.spi.map.ImmutableSetDtoMap; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaDao; +import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; +import org.nuiton.version.Version; +import org.nuiton.version.Versions; + import java.util.Arrays; import java.util.Collections; import java.util.Date; @@ -71,11 +79,6 @@ import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.persistence.TopiaDao; -import org.nuiton.topia.persistence.TopiaEntity; -import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; /** * Created on 16/08/15. @@ -84,14 +87,13 @@ import org.nuiton.topia.persistence.metadata.TopiaMetadataModel; */ public class ReferentialServiceLocal extends ObserveServiceLocal implements ReferentialService { - private static final Log log = LogFactory.getLog(ReferentialServiceLocal.class); public static final List<String> SPECIES_GROUP_IDS = Arrays.asList( "fr.ird.observe.entities.referentiel.SpeciesGroup#1445863056144#0.9820877553253712", "fr.ird.observe.entities.referentiel.SpeciesGroup#1239832683690#0.24333033683679461", "fr.ird.observe.entities.referentiel.SpeciesGroup#1446014286433#0.6480183366605247", "fr.ird.observe.entities.referentiel.SpeciesGroup#1239832683689#0.7120116158620075" ); - + private static final Log log = LogFactory.getLog(ReferentialServiceLocal.class); @Override public <D extends ReferentialDto, R extends ReferentialDtoReference<D, R>> ReferentialDtoReferenceSet<R> getReferenceSet(Class<R> type, Date lastUpdateDate) { @@ -387,7 +389,8 @@ public class ReferentialServiceLocal extends ObserveServiceLocal implements Refe boolean h2 = serviceContext.getDataSourceConfiguration().orElseThrow(IllegalStateException::new).isH2Database(); - AddSqlScriptProducerRequest addRequest = h2 ? AddSqlScriptProducerRequest.forH2() : AddSqlScriptProducerRequest.forPostgres(); + Version dbVersion = Versions.valueOf(serviceContext.getTopiaApplicationContext().getModelVersion()); + AddSqlScriptProducerRequest addRequest = h2 ? AddSqlScriptProducerRequest.forH2(dbVersion) : AddSqlScriptProducerRequest.forPostgres(dbVersion); for (Class<? extends ReferentialDtoReference> dtoType : missingReferentialIds.referentialReferenceTypes()) { Set<String> ids = missingReferentialIds.get(dtoType); addRequest.referentialIdsToAdd(dtoType, ids); ===================================== services-local/src/test/java/fr/ird/observe/services/local/service/sql/MigrateTestsDatabases.java ===================================== --- a/services-local/src/test/java/fr/ird/observe/services/local/service/sql/MigrateTestsDatabases.java +++ b/services-local/src/test/java/fr/ird/observe/services/local/service/sql/MigrateTestsDatabases.java @@ -91,7 +91,7 @@ public class MigrateTestsDatabases extends ServiceLocalTestSupport { @CopyDatabaseConfiguration @Test public void migrateReferentielDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(ObserveTestConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); dataSourceService.migrateData(localTestMethodResource.getDataSourceConfiguration()); migrate(service.produceAddSqlScript(request)); } @@ -100,7 +100,7 @@ public class MigrateTestsDatabases extends ServiceLocalTestSupport { @CopyDatabaseConfiguration @Test public void migrateDataForTestSeineDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(ObserveTestConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); dataSourceService.migrateData(localTestMethodResource.getDataSourceConfiguration()); migrate(service.produceAddSqlScript(request)); } @@ -109,7 +109,7 @@ public class MigrateTestsDatabases extends ServiceLocalTestSupport { @CopyDatabaseConfiguration @Test public void migrateDataForTestLonglineDb() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(ObserveTestConfiguration.getModelVersion()).addSchema().addReferential().addAllData(); dataSourceService.migrateData(localTestMethodResource.getDataSourceConfiguration()); migrate(service.produceAddSqlScript(request)); } @@ -118,7 +118,7 @@ public class MigrateTestsDatabases extends ServiceLocalTestSupport { @CopyDatabaseConfiguration @Test public void migrateEmptyH2Db() throws IOException, IncompatibleDataSourceCreateConfigurationException, DataSourceCreateWithNoReferentialImportException, BabModelVersionException, DatabaseConnexionNotAuthorizedException, DatabaseNotFoundException { - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2().addSchema(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forH2(ObserveTestConfiguration.getModelVersion()).addSchema(); dataSourceService.migrateData(localTestMethodResource.getDataSourceConfiguration()); migrate(service.produceAddSqlScript(request)); } @@ -127,7 +127,7 @@ public class MigrateTestsDatabases extends ServiceLocalTestSupport { @CopyDatabaseConfiguration @Test public void migrateEmptyPgDb() throws IOException { - AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres().addSchema(); + AddSqlScriptProducerRequest request = AddSqlScriptProducerRequest.forPostgres(ObserveTestConfiguration.getModelVersion()).addSchema(); dataSourceService.migrateData(localTestMethodResource.getDataSourceConfiguration()); migrate(DatabaseName.empty_pg.name(), service.produceAddSqlScript(request)); } ===================================== services-local/src/test/java/fr/ird/observe/services/local/service/sql/SqlScriptProducerServiceLocalTest.java ===================================== --- a/services-local/src/test/java/fr/ird/observe/services/local/service/sql/SqlScriptProducerServiceLocalTest.java +++ b/services-local/src/test/java/fr/ird/observe/services/local/service/sql/SqlScriptProducerServiceLocalTest.java @@ -38,6 +38,7 @@ import org.junit.Before; import org.junit.Test; import org.nuiton.util.StringUtil; import org.nuiton.util.TimeLog; +import org.nuiton.version.Version; /** * Created on 31/12/15. @@ -49,9 +50,11 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { private static final TimeLog timeLog = new TimeLog(SqlScriptProducerServiceLocalTest.class, 10, 1000); protected SqlScriptProducerService service; + private Version dbVersion; @Before public void setUp() throws Exception { + dbVersion = localTestMethodResource.getDbVersion(); service = localTestMethodResource.newService(SqlScriptProducerService.class); } @@ -59,8 +62,8 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { @Test public void testProduceSchema() throws Exception { - produce(AddSqlScriptProducerRequest.forH2().addSchema()); - produce(AddSqlScriptProducerRequest.forPostgres().addSchema()); + produce(AddSqlScriptProducerRequest.forH2(dbVersion).addSchema()); + produce(AddSqlScriptProducerRequest.forPostgres(dbVersion).addSchema()); } @@ -68,7 +71,7 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { @Test public void testProduceReferential() throws Exception { - produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential()); + produce(AddSqlScriptProducerRequest.forPostgres(dbVersion).addSchema().addReferential()); } @@ -76,7 +79,7 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { @Test public void testProduceSomeReferential() throws Exception { - produce(AddSqlScriptProducerRequest.forPostgres().addSchema().referentialIdsToAdd(ProgramReference.class, ImmutableSet.of(ObserveFixtures.PROGRAM_ID))); + produce(AddSqlScriptProducerRequest.forPostgres(dbVersion).addSchema().referentialIdsToAdd(ProgramReference.class, ImmutableSet.of(ObserveFixtures.PROGRAM_ID))); } @@ -85,7 +88,7 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { public void testProduceTripSeine() throws Exception { // produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().addAllData()); - produce(AddSqlScriptProducerRequest.forPostgres().addSchema().addReferential().dataIdsToAdd(ObserveFixtures.TRIP_SEINE_IDS)); + produce(AddSqlScriptProducerRequest.forPostgres(dbVersion).addSchema().addReferential().dataIdsToAdd(ObserveFixtures.TRIP_SEINE_IDS)); } @@ -93,7 +96,7 @@ public class SqlScriptProducerServiceLocalTest extends ServiceLocalTestSupport { @Test public void testProduceTripLongline() throws Exception { - produce(AddSqlScriptProducerRequest.forH2().addSchema().addReferential().addAllData()); + produce(AddSqlScriptProducerRequest.forH2(dbVersion).addSchema().addReferential().addAllData()); // produce(AddSqlScriptProducerRequest.forH2().addSchema().addReferential().dataIdsToAdd(ObserveFixtures.TRIP_LONGLINE_IDS)); } ===================================== services/src/main/java/fr/ird/observe/services/service/sql/AddSqlScriptProducerRequest.java ===================================== --- a/services/src/main/java/fr/ird/observe/services/service/sql/AddSqlScriptProducerRequest.java +++ b/services/src/main/java/fr/ird/observe/services/service/sql/AddSqlScriptProducerRequest.java @@ -31,6 +31,7 @@ import fr.ird.observe.dto.ObserveDto; import fr.ird.observe.dto.reference.ReferentialDtoReference; import java.util.Set; import java.util.stream.Collectors; +import org.nuiton.version.Version; /** * Created on 31/12/15. @@ -40,6 +41,8 @@ import java.util.stream.Collectors; public class AddSqlScriptProducerRequest implements ObserveDto { private final boolean postgres; + private final Version dbVersion; + private boolean addSchema; private boolean addReferential; private boolean addSomeReferential; @@ -47,12 +50,12 @@ public class AddSqlScriptProducerRequest implements ObserveDto { private ImmutableSet<String> dataIds; private final ArrayListMultimap<Class<? extends ReferentialDtoReference>, String> referentialIds = ArrayListMultimap.create(); - public static AddSqlScriptProducerRequest forH2() { - return new AddSqlScriptProducerRequest(false); + public static AddSqlScriptProducerRequest forH2(Version dbVersion) { + return new AddSqlScriptProducerRequest(false, dbVersion); } - public static AddSqlScriptProducerRequest forPostgres() { - return new AddSqlScriptProducerRequest(true); + public static AddSqlScriptProducerRequest forPostgres(Version dbVersion) { + return new AddSqlScriptProducerRequest(true, dbVersion); } public AddSqlScriptProducerRequest addSchema() { @@ -94,8 +97,13 @@ public class AddSqlScriptProducerRequest implements ObserveDto { return addReferential; } - protected AddSqlScriptProducerRequest(boolean postgres) { + public Version getDbVersion() { + return dbVersion; + } + + protected AddSqlScriptProducerRequest(boolean postgres, Version dbVersion) { this.postgres = postgres; + this.dbVersion = dbVersion; } public boolean isAddData() { View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0aac62baf2eed2bb70f9b493c4… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/0aac62baf2eed2bb70f9b493c4… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] 9 commits: fix option type
by Tony CHEMIT 31 Mar '18

31 Mar '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 0819d723 by Tony CHEMIT at 2018-03-30T18:37:36Z fix option type - - - - - 394dce0e by Tony CHEMIT at 2018-03-31T17:07:14Z fix some references API - - - - - b7ab82c3 by Tony CHEMIT at 2018-03-31T17:07:35Z add more log levels in tests - - - - - 798bd698 by Tony CHEMIT at 2018-03-31T17:08:30Z fix i18n typo - - - - - a03e3fd2 by Tony CHEMIT at 2018-03-31T17:09:49Z improve gis triggers (if not migration can&#39;t work since it will trigger the gis computation on each activity changed, and here we modify all activities...) - - - - - afbe1e2e by Tony CHEMIT at 2018-03-31T17:11:19Z improve longline position api (but still could be improved ?) - - - - - 756024b9 by Tony CHEMIT at 2018-03-31T17:12:03Z improve sql request api (requires now db version) - - - - - 74ba1e01 by Tony CHEMIT at 2018-03-31T17:28:29Z optimize dependences + add missing license header - - - - - 0aac62ba by Tony CHEMIT at 2018-03-31T17:38:19Z fix a template - - - - - 30 changed files: - client-configuration/src/main/config/Client.ini - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-1-activity.sql → client/src/main/assembly/dist/obstuna-admin/extra/01_create-postgis-1-activity.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-2-harbour.sql → client/src/main/assembly/dist/obstuna-admin/extra/02_create-postgis-2-harbour.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-3-activity-seine.sql → client/src/main/assembly/dist/obstuna-admin/extra/03_create-postgis-3-activity-seine.sql - client/src/main/assembly/dist/obstuna-admin/extra/create-postgis-4-activity-longine.sql → client/src/main/assembly/dist/obstuna-admin/extra/04_create-postgis-4-activity-longine.sql - client/src/main/assembly/dist/obstuna-admin/extra/function_enhanced_sets_school_types.sql → client/src/main/assembly/dist/obstuna-admin/extra/05_function_enhanced_sets_school_types.sql - client/src/main/ftl/dataSourceConnectionReport_en.ftl - client/src/main/ftl/dataSourceConnectionReport_es.ftl - client/src/main/ftl/dataSourceConnectionReport_fr.ftl - client/src/main/java/fr/ird/observe/client/ui/admin/save/SaveLocalUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/EncounterUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java - client/src/main/resources/i18n/client_en_GB.properties - client/src/main/resources/i18n/client_es_ES.properties - client/src/main/resources/i18n/client_fr_FR.properties - dto/src/main/java/fr/ird/observe/binder/data/longline/BasketDtoReferenceBinder.java - dto/src/main/java/fr/ird/observe/binder/data/longline/BranchlineDtoReferenceBinder.java - − dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdDto.java - dto/src/main/java/fr/ird/observe/dto/data/longline/BasketWithSectionIdReference.java - − dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdDto.java - dto/src/main/java/fr/ird/observe/dto/data/longline/BranchlineWithBasketIdReference.java - dto/src/main/models/Observe.model - persistence/pom.xml - persistence/src/main/java/fr/ird/observe/binder/data/longline/BasketEntityReferenceBinder.java - persistence/src/main/java/fr/ird/observe/binder/data/longline/BranchlineEntityReferenceBinder.java - persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaApplicationContext.java - persistence/src/main/java/fr/ird/observe/persistence/ObserveTopiaConfiguration.java - persistence/src/main/java/fr/ird/observe/persistence/migration/DataSourceMigrationForVersion_7_0_RC_4.java - + persistence/src/main/resources/db/migration/6.1/00_fix_trigger-PG.sql The diff was not included because it is too large. View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/b6ac983e58f1feb565b59b1a9d… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/b6ac983e58f1feb565b59b1a9d… You're receiving this email because of your account on gitlab.com.
1 0
0 0
[Git][ultreiaio/ird-observe][develop] Correction des labels sur les enums avec methods
by Tony CHEMIT 30 Mar '18

30 Mar '18
Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: b6ac983e by Tony CHEMIT at 2018-03-30T14:44:36Z Correction des labels sur les enums avec methods - - - - - 25 changed files: - client/pom.xml - client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/admin/LaunchAdminActionSupport.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/resume/ShowResumeUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java - client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIModel.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/NonTargetCatchReleaseStatusesUI.java - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageStep.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigReferentielUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/storage/tabs/StorageTabUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/util/tripMap/TripMapContentBuilder.java - dto/pom.xml - + dto/src/main/java/fr/ird/observe/dto/I18nEnumHelper.java Changes: ===================================== client/pom.xml ===================================== --- a/client/pom.xml +++ b/client/pom.xml @@ -687,7 +687,6 @@ <goal>parse-java-enumerations</goal> </goals> <configuration> - <generateHelper>true</generateHelper> <enumerationSets> <enumerationSet> <name>label</name> ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/admin/LaunchAdminActionSupport.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/admin/LaunchAdminActionSupport.java +++ b/client/src/main/java/fr/ird/observe/client/ui/actions/main/menu/admin/LaunchAdminActionSupport.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.actions.main.menu.admin; * #L% */ -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.ObserveMainUI; import fr.ird.observe.client.ui.actions.main.menu.MenuActionSupport; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/AdminStep.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.admin; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.constants.DbMode; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.admin.config.ConfigUI; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/AdminTabUIHandler.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.admin; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveRunner; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.db.ObserveSwingDataSource; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/AdminUIHandler.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.admin; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveActionExecutor; import fr.ird.observe.client.ObserveRunner; import fr.ird.observe.client.ui.ObserveKeyStrokes; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/resume/ShowResumeUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/resume/ShowResumeUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/resume/ShowResumeUIHandler.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.admin.resume; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.ui.admin.AdminStep; import fr.ird.observe.client.ui.admin.AdminTabUIHandler; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroConfigUI.jaxx @@ -28,7 +28,7 @@ <import> fr.ird.observe.client.configuration.ClientConfig fr.ird.observe.client.constants.ReferentialSynchronizeMode - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.ui.admin.AdminUIModel fr.ird.observe.client.constants.ValidationModelMode ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/synchronize/referential/ng/ReferentialSynchroModel.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.admin.synchronize.referential.ng; * #L% */ -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.constants.ReferentialSynchronizeMode; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.ui.admin.AdminActionModel; ===================================== client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateConfigUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateConfigUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/admin/validate/ValidateConfigUI.jaxx @@ -26,7 +26,7 @@ <JPanel id="validateConfig"> <import> - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.ui.admin.AdminUIModel fr.ird.observe.client.constants.ValidationModelMode ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/ContentUIInitializer.java @@ -24,7 +24,7 @@ package fr.ird.observe.client.ui.content; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.ObserveKeyStrokes; import fr.ird.observe.client.ui.actions.UIActionSupport; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/FloatingObjectUIModel.java @@ -25,7 +25,7 @@ package fr.ird.observe.client.ui.content.data.seine; import com.google.common.collect.ImmutableSet; import fr.ird.observe.spi.DtoModelHelper; import fr.ird.observe.binder.referential.ReferentialDtoReferenceBinder; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ui.content.ContentUIModel; import fr.ird.observe.dto.data.seine.DcpComputedValue; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/NonTargetCatchReleaseStatusesUI.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/NonTargetCatchReleaseStatusesUI.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/NonTargetCatchReleaseStatusesUI.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.content.data.seine; * #L% */ -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.dto.data.seine.NonTargetCatchReleaseStatus; import java.awt.GridLayout; import java.util.Objects; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/content/data/seine/SetSeineUIHandler.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.content.data.seine; import fr.ird.observe.spi.DtoModelHelper; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.db.ClientDataContext; import fr.ird.observe.client.db.ObserveSwingDataSource; import fr.ird.observe.client.db.constants.DataContextType; ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/ObstunaAdminAction.java @@ -23,7 +23,7 @@ package fr.ird.observe.client.ui.storage; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.constants.DbMode; import fr.ird.observe.client.db.ObserveSwingDataSource; @@ -276,6 +276,9 @@ public enum ObstunaAdminAction { } }; + public String getLabel() { + return I18nEnumHelper.getLabel(this); + } /** Logger */ private static final Log log = LogFactory.getLog(ObstunaAdminAction.class); ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageStep.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageStep.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageStep.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.storage; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import org.nuiton.jaxx.runtime.swing.wizard.WizardStep; /** ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIHandler.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.storage; import com.google.common.base.Preconditions; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveActionExecutor; import fr.ird.observe.client.ObserveRunner; import fr.ird.observe.client.ObserveSwingApplicationContext; ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/StorageUIModel.java @@ -21,7 +21,7 @@ */ package fr.ird.observe.client.ui.storage; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ObserveSwingTechnicalException; import fr.ird.observe.client.configuration.ClientConfig; ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUI.jaxx @@ -26,7 +26,7 @@ <StorageTabUI> <import> - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.ObserveSwingApplicationContext fr.ird.observe.client.configuration.ClientConfig fr.ird.observe.client.ui.util.UIHelper ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ChooseDbModeUIHandler.java @@ -22,7 +22,7 @@ package fr.ird.observe.client.ui.storage.tabs; * #L% */ -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingApplicationContext; import fr.ird.observe.client.ObserveTextGenerator; import fr.ird.observe.client.constants.CreationMode; ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigReferentielUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigReferentielUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigReferentielUI.jaxx @@ -26,7 +26,7 @@ <StorageTabUI> <import> - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.constants.CreationMode fr.ird.observe.client.ui.storage.StorageStep ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/ConfigUI.jaxx @@ -27,7 +27,7 @@ <StorageTabUI> <import> - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.constants.ConnexionStatus fr.ird.observe.client.ui.actions.storage.SaveCurrentRemoteConfigurationUIAction fr.ird.observe.client.ui.actions.storage.SaveCurrentServerConfigurationUIAction ===================================== client/src/main/java/fr/ird/observe/client/ui/storage/tabs/StorageTabUI.jaxx ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/StorageTabUI.jaxx +++ b/client/src/main/java/fr/ird/observe/client/ui/storage/tabs/StorageTabUI.jaxx @@ -28,7 +28,7 @@ implements='org.nuiton.jaxx.runtime.swing.wizard.WizardStepUI&lt;StorageStep, StorageUIModel&gt;'> <import> - fr.ird.observe.client.I18nEnumHelper + fr.ird.observe.dto.I18nEnumHelper fr.ird.observe.client.ui.util.UIHelper fr.ird.observe.client.ui.storage.StorageStep fr.ird.observe.client.ui.storage.StorageUIModel ===================================== client/src/main/java/fr/ird/observe/client/ui/util/tripMap/TripMapContentBuilder.java ===================================== --- a/client/src/main/java/fr/ird/observe/client/ui/util/tripMap/TripMapContentBuilder.java +++ b/client/src/main/java/fr/ird/observe/client/ui/util/tripMap/TripMapContentBuilder.java @@ -30,7 +30,7 @@ import com.vividsolutions.jts.geom.GeometryFactory; import com.vividsolutions.jts.geom.LineString; import com.vividsolutions.jts.geom.Point; import com.vividsolutions.jts.geom.Polygon; -import fr.ird.observe.client.I18nEnumHelper; +import fr.ird.observe.dto.I18nEnumHelper; import fr.ird.observe.client.ObserveSwingTechnicalException; import fr.ird.observe.dto.data.TripMapPoint; import fr.ird.observe.dto.data.TripMapPointType; ===================================== dto/pom.xml ===================================== --- a/dto/pom.xml +++ b/dto/pom.xml @@ -164,7 +164,6 @@ <goal>parse-java-enumerations</goal> </goals> <configuration> - <generateHelper>true</generateHelper> <enumerationSets> <enumerationSet> <name>label</name> ===================================== dto/src/main/java/fr/ird/observe/dto/I18nEnumHelper.java ===================================== --- /dev/null +++ b/dto/src/main/java/fr/ird/observe/dto/I18nEnumHelper.java @@ -0,0 +1,64 @@ +package fr.ird.observe.dto; + +/*- + * #%L + * ObServe :: Dto + * %% + * Copyright (C) 2008 - 2017 IRD, Code Lutin, Ultreia.io + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l; +import static org.nuiton.i18n.I18n.t; + +public class I18nEnumHelper { + + public static <E extends Enum<E>> String getLabel(E e) { + return t(getLabelKey(e)); + } + + public static <E extends Enum<E>> String getLabel(Locale locale, E e) { + return l(locale, getLabelKey(e)); + } + + public static <E extends Enum<E>> String getDescription(E e) { + return t(getDescriptionKey(e)); + } + + public static <E extends Enum<E>> String getDescription(Locale locale, E e) { + return l(locale, getDescriptionKey(e)); + } + + private static <E extends Enum<E>> String getLabelKey(E e) { + return "observe.constant." + getClassSimpleName(e) + "." + e.name(); + } + + private static <E extends Enum<E>> String getDescriptionKey(E e) { + return "observe.constant." + getClassSimpleName(e) + "." + e.name() + ".description"; + } + + private static <E extends Enum<E>> String getClassSimpleName(E e) { + String result = e.getClass().getSimpleName(); + if (result.isEmpty()) { + result = e.getClass().getEnclosingClass().getSimpleName(); + } + return result; + } + +} View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/b6ac983e58f1feb565b59b1a9d4… --- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/commit/b6ac983e58f1feb565b59b1a9d4… You're receiving this email because of your account on gitlab.com.
1 0
0 0
  • ← Newer
  • 1
  • ...
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • ...
  • 720
  • Older →

HyperKitty Powered by HyperKitty version 1.3.12.