Tony CHEMIT pushed to branch develop at ultreiaio / ird-observe Commits: 95bc43d1 by Tony Chemit at 2022-05-20T09:30:29+02:00 En anglais, afficher les unités sur Set / Characteristics - Closes #2377 - - - - - cba01c10 by Tony Chemit at 2022-05-20T09:35:45+02:00 En anglais, afficher les unités dans les libellés sur les écrans global composition - Closes #2372 - - - - - 6165b746 by Tony Chemit at 2022-05-20T09:38:41+02:00 En anglais, afficher les unités sur LL / Logbook / Activity (+ libellé) - Closes #2375 - - - - - 1a5d6170 by Tony Chemit at 2022-05-20T09:58:17+02:00 Erreur sur form LL Logbook / sample SpeciesDto.getMinLength() et InvalidAuthenticationTokenException - Closes #2369 - - - - - 60da6ae2 by Tony Chemit at 2022-05-20T12:11:54+02:00 Clic sur 'Save' avant clic sur 'Insert' - Closes #2379 - - - - - 2d0fdf9a by Tony Chemit at 2022-05-20T15:37:34+02:00 Sur certains forms à double bouton 'Save' le bouton 'Save' en base est disponible alors que le tableau n'est pas encore enregistrer, ce qui fait planter - Closes #2376 - - - - - 24 changed files: - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/ContentUIActionSupport.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/open/ContentOpen.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/ContentEditUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUIHandler.java - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUI.jcss - client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUITableModel.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUI.jaxx - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUI.jcss - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUIHandler.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUI.jaxx - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUI.jcss - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIHandler.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUI.jaxx - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUI.jcss - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUIHandler.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetGlobalCompositionUIHandler.java - client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetGlobalCompositionUIHandler.java - core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleDto.java - core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/AbstractSpeciesFieldDtoValidator.java - core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/SpeciesLengthFieldDtoValidator.java - core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/SpeciesWeightFieldDtoValidator.java - core/services/i18n/src/main/i18n/translations/services_en_GB.properties - core/services/i18n/src/main/i18n/translations/services_es_ES.properties - model/src/main/models/Observe/dto/class/references.properties Changes: ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/ContentUIActionSupport.java ===================================== @@ -93,6 +93,10 @@ public abstract class ContentUIActionSupport<U extends ContentUI> extends JCompo } super.defaultInit(inputMap, actionMap); } + @Override + public void updateEditorTexts() { + super.updateEditorTexts(); + } public void doAction() { doActionPerformed(null, ui); ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/actions/open/ContentOpen.java ===================================== @@ -67,7 +67,9 @@ import javax.swing.AbstractButton; import javax.swing.Action; import javax.swing.ActionMap; import javax.swing.InputMap; +import javax.swing.JButton; import javax.swing.JComponent; +import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; @@ -78,6 +80,8 @@ import javax.swing.MenuElement; import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import javax.swing.event.TableModelEvent; +import java.awt.event.InputEvent; import java.beans.PropertyChangeListener; import java.util.LinkedHashMap; import java.util.List; @@ -115,7 +119,7 @@ public class ContentOpen<U extends ContentUI> { protected JTabbedPaneValidator tabbedPaneValidator; protected JTabbedPaneValidator subTabbedPaneValidator; private ArrayListMultimap<String, JComponent> focusComponents; - private final ArrayListMultimap<ContentTableUI<?, ?, ?>, JComponent> configureActions; + private final ArrayListMultimap<ContentUI, JComponent> configureActions; private List<JTable> tables; private ActionMap newActionMap; private InputMap newInputMap; @@ -472,6 +476,18 @@ public class ContentOpen<U extends ContentUI> { ui.getModel().getStates().setModified(ui.getModel().getStates().isCreatingMode()); } + public void addConfigureActions(ContentUI subUi, boolean move) { + MenuElement[] subElements = subUi.getConfigurePopup().getSubElements(); + for (MenuElement subElement : subElements) { + JComponent subElement1 = (JComponent) subElement; + if (move && subElement1 instanceof AbstractButton) { + ConfigureMenuAction<?> action = (ConfigureMenuAction<?>) ((AbstractButton) subElement1).getAction(); + action.moveTo(ui.getToggleConfigure()); + } + configureActions.put(subUi, subElement1); + } + } + public final <D extends DataDto, C extends ContainerChildDto, SubUi extends ContentTableUI<D, C, SubUi>> void initTabUI(SubUi subUi, JPanel subUiPane, int tabIndex, Consumer<D> dataConsumer) { subUiMap.put(subUi, subUiPane); subUiPane.remove(subUi); @@ -493,24 +509,29 @@ public class ContentOpen<U extends ContentUI> { if (subElements.length > 0) { subUi.putClientProperty(ContentUIHandler.CLIENT_PROPERTY_TAB_INDEX, tabIndex); } - subElements = subUi.getConfigurePopup().getSubElements(); - for (MenuElement subElement : subElements) { - JComponent subElement1 = (JComponent) subElement; - if (subElement1 instanceof AbstractButton) { - ConfigureMenuAction<?> action = (ConfigureMenuAction<?>) ((AbstractButton) subElement1).getAction(); - action.moveTo(ui.getToggleConfigure()); - } - configureActions.put(subUi, subElement1); - } + addConfigureActions(subUi, true); model.getStates().getTableModel().addTableModelListener(e -> { if (ui.getModel().getStates().isReadingMode()) { return; } + if (subUi.getModel().getStates().getTableModel().isCreate()) + if (e.getType() == TableModelEvent.DELETE || e.getType() == TableModelEvent.INSERT) { + return; + } + if (ui.getModel().getStates().isResetEdit()) { + return; + } dataConsumer.accept(subUi.getModel().getStates().getBeanToSave()); }); } } + + public void registerInnerAction(JButton button, InputMap inputMap, ActionMap actionMap) { + ContentUIActionSupport<?> action = (ContentUIActionSupport<?>) button.getAction(); + action.register(inputMap, actionMap); + } + public final void startEditTabUIModel() { ContentUIModelStates states = ui.getModel().getStates(); for (ContentTableUI<?, ?, ?> tableUI : subUiMap.keySet()) { @@ -676,9 +697,23 @@ public class ContentOpen<U extends ContentUI> { } } - public void updateConfigurePopup(ContentTableUI<?, ?, ?> subUi) { + public void prefixAction(JMenuItem button, String prefix) { + ContentUIActionSupport<?> action = (ContentUIActionSupport<?>) button.getAction(); + KeyStroke accelerator = action.getKeyStroke(); + action.setKeyStroke(KeyStroke.getKeyStroke(accelerator.getKeyCode(), InputEvent.SHIFT_DOWN_MASK)); + action.setText(prefix + action.getText()); + if (action.getTooltipText() != null) { + action.setTooltipText(prefix + action.getTooltipText()); + } + action.updateEditorTexts(); + button.setAccelerator(action.getKeyStroke()); + } + + public void updateConfigurePopup(ContentUI subUi, boolean reset) { JPopupMenu popup = ui.getConfigurePopup(); - popup.removeAll(); + if (reset) { + popup.removeAll(); + } InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); ActionMap actionMap = ui.getActionMap(); if (subUi != null) { @@ -690,7 +725,9 @@ public class ContentOpen<U extends ContentUI> { action.defaultInit(inputMap, actionMap); } } - subUi.getSelectToolbar().setVisible(subUi.getTableModel().getRowCount() > 1); + if (subUi instanceof ContentTableUI<?, ?, ?>) { + ((ContentTableUI<?, ?, ?>) subUi).getSelectToolbar().setVisible(((ContentTableUI<?, ?, ?>) subUi).getTableModel().getRowCount() > 1); + } } ui.getHandler().fixToggleMenuVisibility(); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/edit/ContentEditUIHandler.java ===================================== @@ -53,7 +53,7 @@ public abstract class ContentEditUIHandler<D extends EditableDto, U extends Cont } @Override - protected final ContentOpenWithValidator<U> createContentOpen(U ui) { + protected ContentOpenWithValidator<U> createContentOpen(U ui) { ContentEditUIOpenExecutor<D, U> executor = new ContentEditUIOpenExecutor<>(); return new ContentOpenWithValidator<>(ui, executor, executor); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/open/ContentOpenableUIHandler.java ===================================== @@ -82,7 +82,7 @@ public abstract class ContentOpenableUIHandler<D extends OpenableDto, U extends } @Override - protected final ContentOpenWithValidator<U> createContentOpen(U ui) { + protected ContentOpenWithValidator<U> createContentOpen(U ui) { ContentOpenableUIOpenExecutor<D, U> executor = new ContentOpenableUIOpenExecutor<>(); return new ContentOpenWithValidator<>(ui, executor, executor); } ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUI.jcss ===================================== @@ -95,7 +95,7 @@ #save { visible:{states.isEnabled()}; - enabled:{states.isValid() && (states.isModified() || states.isCreatingMode() || tableModel.isCreate())}; + enabled:{states.isValid() && !states.isCanSaveRow() && states.isModified()}; } #showTechnicalInformations { ===================================== client/datasource/editor/api/src/main/java/fr/ird/observe/client/datasource/editor/api/content/data/table/ContentTableUITableModel.java ===================================== @@ -342,7 +342,9 @@ public abstract class ContentTableUITableModel<D extends DataDto, C extends Cont updateBeanList(false); + this.create= true; fireTableRowsInserted(row, row); + this.create=false; updateEmpty(); // on est en mode creation ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUI.jaxx ===================================== @@ -152,4 +152,5 @@ <Object id="delegateContentUI" initializer="mainTabbedPane"/> <LandingPartUIModelStates id='landingPartStates' initializer="landingPartUI.getModel().getStates()"/> <JButton id='selectTransshipment'/> + <JButton id='save'/> </fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUI> ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUI.jcss ===================================== @@ -28,10 +28,10 @@ landingPartUIModel:{landingPartUI.getModel()}; } -/*#mainTabbedPane { - _focusComponent:{newComponentArray(dataSource,landingPartUI.getSpecies())}; -}*/ - #landingPartUI { _tab:{"landingPartTab"}; } + +#save { + enabled:{states.isValid() && !landingPartStates.isCanSaveRow() && (states.isModified() || states.isCreatingMode())}; +} ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/landing/LandingUIHandler.java ===================================== @@ -23,9 +23,17 @@ package fr.ird.observe.client.datasource.editor.ll.data.landing; */ import fr.ird.observe.client.datasource.editor.api.content.ContentUIInitializer; +import fr.ird.observe.client.datasource.editor.api.content.actions.open.ContentOpenWithValidator; +import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUIOpenExecutor; +import fr.ird.observe.client.util.init.DefaultUIInitializerResult; import fr.ird.observe.dto.data.ll.landing.LandingDto; +import fr.ird.observe.dto.data.ll.landing.LandingPartDto; import fr.ird.observe.dto.referential.ll.landing.DataSourceReference; +import fr.ird.observe.spi.decoration.ObserveI18nDecoratorHelper; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; import java.beans.PropertyChangeListener; /** @@ -44,21 +52,46 @@ class LandingUIHandler extends GeneratedLandingUIHandler { @Override protected void onBeforeInit(LandingUI ui, ContentUIInitializer<LandingUI> initializer) { - LandingPartUIModel partUIModel = LandingPartUIModel.create(ui); - initializer.registerDependencies(partUIModel); + initializer.registerDependencies(LandingPartUIModel.create(ui)); } @Override - public void onInit(LandingUI ui) { - super.onInit(ui); - getContentOpen().initTabUI(ui.getLandingPartUI(), ui.getLandingPartPanel(), 1, d -> ui.getModel().getStates().getBean().setLandingPart(d.getLandingPart())); - ui.getHarbour().getToolbarRight().add(ui.getSelectTransshipment()); + protected ContentOpenWithValidator<LandingUI> createContentOpen(LandingUI ui) { + ContentOpenableUIOpenExecutor<LandingDto, LandingUI> executor = new ContentOpenableUIOpenExecutor<>(); + return new ContentOpenWithValidator<>(ui, executor, executor) { + @Override + public DefaultUIInitializerResult init(ContentUIInitializer<LandingUI> initializer) { + DefaultUIInitializerResult result = super.init(initializer); + String type = ObserveI18nDecoratorHelper.getType(LandingPartDto.class) + " - "; + InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = ui.getActionMap(); + + prefixAction(ui.getLandingPartUI().getDeleteEntry(), type); + prefixAction(ui.getLandingPartUI().getShowTechnicalInformations(), type); + registerInnerAction(ui.getLandingPartUI().getResetEntry(), inputMap, actionMap); + registerInnerAction(ui.getLandingPartUI().getSaveEntry(), inputMap, actionMap); + registerInnerAction(ui.getLandingPartUI().getSaveAndNewEntry(), inputMap, actionMap); + + addConfigureActions(ui, false); + initTabUI(ui.getLandingPartUI(), ui.getLandingPartPanel(), 1, d -> ui.getModel().getStates().getBean().setLandingPart(d.getLandingPart())); + ui.getHarbour().getToolbarRight().add(ui.getSelectTransshipment()); + return result; + } + }; } + @Override public void onMainTabChanged(int previousIndex, int selectedIndex) { super.onMainTabChanged(previousIndex, selectedIndex); - ui.getLandingPartUI().getSelectToolbar().setVisible(selectedIndex == 1 && ui.getLandingPartUI().getTableModel().getRowCount() > 1); + LandingPartUI subUi = ui.getLandingPartUI(); + boolean partTab = selectedIndex == 1; + subUi.getSelectToolbar().setVisible(partTab && subUi.getTableModel().getRowCount() > 1); + getContentOpen().updateConfigurePopup(ui, true); + if (partTab) { + ui.getConfigurePopup().addSeparator(); + getContentOpen().updateConfigurePopup(subUi, false); + } } @Override ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUI.jaxx ===================================== @@ -64,4 +64,5 @@ <SamplePartUIModelStates id='samplePartStates' initializer="samplePartUI.getModel().getStates()"/> <JMenuItem id='move' styleClass="ifOpen"/> + <JButton id='save'/> </fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUI> ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUI.jcss ===================================== @@ -29,3 +29,7 @@ #move { enabled:{states.isEditable() && !states.isModified()}; } + +#save { + enabled:{states.isValid() && !samplePartStates.isCanSaveRow() && (states.isModified() || states.isCreatingMode())}; +} \ No newline at end of file ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/ActivitySampleUIHandler.java ===================================== @@ -24,11 +24,20 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook; import fr.ird.observe.client.datasource.editor.api.content.ContentUIInitializer; import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction; +import fr.ird.observe.client.datasource.editor.api.content.actions.open.ContentOpenWithValidator; +import fr.ird.observe.client.datasource.editor.api.content.data.edit.ContentEditUIOpenExecutor; import fr.ird.observe.client.datasource.editor.api.content.data.table.ContentTableUIHandler; import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.SampleUIHelper; +import fr.ird.observe.client.util.init.DefaultUIInitializerResult; +import fr.ird.observe.dto.data.ll.logbook.ActivitySampleDto; +import fr.ird.observe.dto.data.ll.logbook.SamplePartDto; +import fr.ird.observe.spi.decoration.ObserveI18nDecoratorHelper; import io.ultreia.java4all.i18n.I18n; import javax.swing.AbstractButton; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; import javax.swing.SwingUtilities; import java.util.Objects; @@ -56,6 +65,38 @@ public class ActivitySampleUIHandler extends GeneratedActivitySampleUIHandler { ui.getSamplePartUI().getSelectToolbar().setVisible(true); } + @Override + protected ContentOpenWithValidator<ActivitySampleUI> createContentOpen(ActivitySampleUI ui) { + ContentEditUIOpenExecutor<ActivitySampleDto, ActivitySampleUI> executor = new ContentEditUIOpenExecutor<>(); + + return new ContentOpenWithValidator<>(ui, executor, executor) { + + @Override + public DefaultUIInitializerResult init(ContentUIInitializer<ActivitySampleUI> initializer) { + DefaultUIInitializerResult result = super.init(initializer); + String type = ObserveI18nDecoratorHelper.getType(SamplePartDto.class) + " - "; + InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = ui.getActionMap(); + + SamplePartUI subUi = ui.getSamplePartUI(); + prefixAction(subUi.getDeleteEntry(), type); + prefixAction(subUi.getShowTechnicalInformations(), type); + registerInnerAction(subUi.getResetEntry(), inputMap, actionMap); + registerInnerAction(subUi.getSaveEntry(), inputMap, actionMap); + registerInnerAction(subUi.getSaveAndNewEntry(), inputMap, actionMap); + + addConfigureActions(ui, false); + initTabUI(subUi, ui.getSamplePartPanel(), 1, d -> ui.getModel().getStates().getBean().setSamplePart(d.getSamplePart())); + + getContentOpen().updateConfigurePopup(ui, true); + ui.getConfigurePopup().addSeparator(); + getContentOpen().updateConfigurePopup(subUi, false); + + return result; + } + }; + } + @Override public void onEndOpenUI() { super.onEndOpenUI(); @@ -65,7 +106,6 @@ public class ActivitySampleUIHandler extends GeneratedActivitySampleUIHandler { SwingUtilities.invokeLater(() -> { AbstractButton editor = (AbstractButton) ui.getSamplePartUI().getClientProperty(ContentTableUIHandler.CLIENT_PROPERTY_CREATE_ACTION); Objects.requireNonNull(editor).doClick(); - SwingUtilities.invokeLater(() -> { ui.getSamplePartUI().getSpecies().requestFocusInWindow(); }); ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUI.jaxx ===================================== @@ -89,4 +89,5 @@ <Object id="delegateContentUI" initializer="mainTabbedPane"/> <SamplePartUIModelStates id='samplePartStates' initializer="samplePartUI.getModel().getStates()"/> + <JButton id='save'/> </fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUI> ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUI.jcss ===================================== @@ -37,3 +37,7 @@ #samplePartUI { _tab:{"samplePartTab"}; } + +#save { + enabled:{states.isValid() && !samplePartStates.isCanSaveRow() && (states.isModified() || states.isCreatingMode())}; +} \ No newline at end of file ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SampleUIHandler.java ===================================== @@ -22,11 +22,19 @@ package fr.ird.observe.client.datasource.editor.ll.data.logbook; * #L% */ -import fr.ird.observe.client.datasource.editor.api.content.ContentMode; import fr.ird.observe.client.datasource.editor.api.content.ContentUIInitializer; import fr.ird.observe.client.datasource.editor.api.content.actions.move.MoveAction; +import fr.ird.observe.client.datasource.editor.api.content.actions.open.ContentOpenWithValidator; +import fr.ird.observe.client.datasource.editor.api.content.data.open.ContentOpenableUIOpenExecutor; import fr.ird.observe.client.datasource.editor.ll.data.logbook.sample.SampleUIHelper; +import fr.ird.observe.client.util.init.DefaultUIInitializerResult; import fr.ird.observe.dto.data.ll.logbook.SampleDto; +import fr.ird.observe.dto.data.ll.logbook.SamplePartDto; +import fr.ird.observe.spi.decoration.ObserveI18nDecoratorHelper; + +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.JComponent; /** * Created on 12/5/14. @@ -37,29 +45,43 @@ import fr.ird.observe.dto.data.ll.logbook.SampleDto; class SampleUIHandler extends GeneratedSampleUIHandler { @Override protected void onBeforeInit(SampleUI ui, ContentUIInitializer<SampleUI> initializer) { - SamplePartUIModel partUIModel = SamplePartUIModel.create(ui); - initializer.registerDependencies(partUIModel); + initializer.registerDependencies(SamplePartUIModel.create(ui)); } @Override - public void onInit(SampleUI ui) { - super.onInit(ui); - getContentOpen().initTabUI(ui.getSamplePartUI(), ui.getSamplePartPanel(), 1, d -> ui.getModel().getStates().getBean().setSamplePart(d.getSamplePart())); + protected ContentOpenWithValidator<SampleUI> createContentOpen(SampleUI ui) { + ContentOpenableUIOpenExecutor<SampleDto, SampleUI> executor = new ContentOpenableUIOpenExecutor<>(); + return new ContentOpenWithValidator<>(ui, executor, executor) { + @Override + public DefaultUIInitializerResult init(ContentUIInitializer<SampleUI> initializer) { + DefaultUIInitializerResult result = super.init(initializer); + String type = ObserveI18nDecoratorHelper.getType(SamplePartDto.class) + " - "; + InputMap inputMap = ui.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + ActionMap actionMap = ui.getActionMap(); + + prefixAction(ui.getSamplePartUI().getDeleteEntry(), type); + prefixAction(ui.getSamplePartUI().getShowTechnicalInformations(), type); + registerInnerAction(ui.getSamplePartUI().getResetEntry(), inputMap, actionMap); + registerInnerAction(ui.getSamplePartUI().getSaveEntry(), inputMap, actionMap); + registerInnerAction(ui.getSamplePartUI().getSaveAndNewEntry(), inputMap, actionMap); + + addConfigureActions(ui, false); + initTabUI(ui.getSamplePartUI(), ui.getSamplePartPanel(), 1, d -> ui.getModel().getStates().getBean().setSamplePart(d.getSamplePart())); + return result; + } + }; } @Override public void onMainTabChanged(int previousIndex, int selectedIndex) { super.onMainTabChanged(previousIndex, selectedIndex); - ui.getSamplePartUI().getSelectToolbar().setVisible(selectedIndex == 1 && ui.getSamplePartUI().getTableModel().getRowCount() > 1); - } - - @Override - public void onModeChanged(ContentMode newMode) { - boolean showParts = newMode != ContentMode.CREATE; - getUi().getSamplePartTab().setEnabled(showParts); - if (!showParts && ui.getMainTabbedPane().getSelectedIndex() > 1) { - // go back to first tab - ui.getMainTabbedPane().setSelectedIndex(0); + SamplePartUI subUi = ui.getSamplePartUI(); + boolean partTab = selectedIndex == 1; + subUi.getSelectToolbar().setVisible(partTab && subUi.getTableModel().getRowCount() > 1); + getContentOpen().updateConfigurePopup(ui, true); + if (partTab) { + ui.getConfigurePopup().addSeparator(); + getContentOpen().updateConfigurePopup(subUi, false); } } ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/logbook/SetGlobalCompositionUIHandler.java ===================================== @@ -75,7 +75,7 @@ class SetGlobalCompositionUIHandler extends GeneratedSetGlobalCompositionUIHandl subUi = ui.getBaitsCompositionUI(); break; } - getContentOpen().updateConfigurePopup(subUi); + getContentOpen().updateConfigurePopup(subUi, true); } @Override ===================================== client/datasource/editor/ll/src/main/java/fr/ird/observe/client/datasource/editor/ll/data/observation/SetGlobalCompositionUIHandler.java ===================================== @@ -75,7 +75,7 @@ class SetGlobalCompositionUIHandler extends GeneratedSetGlobalCompositionUIHandl subUi = ui.getBaitsCompositionUI(); break; } - getContentOpen().updateConfigurePopup(subUi); + getContentOpen().updateConfigurePopup(subUi, true); } ===================================== core/api/dto/src/main/java/fr/ird/observe/dto/data/ll/logbook/SampleDto.java ===================================== @@ -25,18 +25,10 @@ package fr.ird.observe.dto.data.ll.logbook; import fr.ird.observe.spi.decoration.I18nDecoratorHelper; import io.ultreia.java4all.bean.spi.GenerateJavaBeanDefinition; -import java.util.List; - @GenerateJavaBeanDefinition public class SampleDto extends GeneratedSampleDto { public String getCoordinateStr() { return I18nDecoratorHelper.decorateCoordinate(getLatitude(), getLongitude()); } - - @Override - public void setSamplePart(List<SamplePartDto> samplePart) { - this.samplePart = samplePart; - firePropertyChange(PROPERTY_SAMPLE_PART, samplePart); - } } ===================================== core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/AbstractSpeciesFieldDtoValidator.java ===================================== @@ -24,7 +24,6 @@ package fr.ird.observe.spi.validation.validators; import com.opensymphony.xwork2.validator.ValidationException; import com.opensymphony.xwork2.validator.validators.FieldValidatorSupport; -import fr.ird.observe.dto.referential.common.SpeciesDto; import fr.ird.observe.dto.referential.common.SpeciesReference; import io.ultreia.java4all.lang.Numbers; import org.nuiton.jaxx.validator.ValidatorUtil; @@ -98,7 +97,7 @@ public abstract class AbstractSpeciesFieldDtoValidator extends FieldValidatorSup /** * Bound found from species * - * @see SpeciesDto + * @see SpeciesReference */ private Bound bound; /** @@ -106,9 +105,9 @@ public abstract class AbstractSpeciesFieldDtoValidator extends FieldValidatorSup */ private Bound computedBound; - protected abstract Float getBoundMin(SpeciesDto species); + protected abstract Float getBoundMin(SpeciesReference species); - protected abstract Float getBoundMax(SpeciesDto species); + protected abstract Float getBoundMax(SpeciesReference species); @Override public void validate(Object object) throws ValidationException { @@ -155,9 +154,7 @@ public abstract class AbstractSpeciesFieldDtoValidator extends FieldValidatorSup log.debug(String.format("Species to validate : %s", speciesRef)); - SpeciesDto speciesDto = (SpeciesDto) stack.findValue("getSpecies(\"" + speciesRef.getId() + "\")"); - - bound = getBound(speciesDto); + bound = getBound(speciesRef); log.debug(String.format("Species Bound to validate : %s", bound)); @@ -255,7 +252,7 @@ public abstract class AbstractSpeciesFieldDtoValidator extends FieldValidatorSup return answer; } - private Bound getBound(SpeciesDto species) { + private Bound getBound(SpeciesReference species) { Float min = getBoundMin(species); Float max = getBoundMax(species); ===================================== core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/SpeciesLengthFieldDtoValidator.java ===================================== @@ -22,7 +22,7 @@ package fr.ird.observe.spi.validation.validators; * #L% */ -import fr.ird.observe.dto.referential.common.SpeciesDto; +import fr.ird.observe.dto.referential.common.SpeciesReference; /** * Validateurs sur la taille d'une species. @@ -33,12 +33,12 @@ import fr.ird.observe.dto.referential.common.SpeciesDto; public class SpeciesLengthFieldDtoValidator extends AbstractSpeciesFieldDtoValidator { @Override - protected Float getBoundMin(SpeciesDto species) { + protected Float getBoundMin(SpeciesReference species) { return species.getMinLength(); } @Override - protected Float getBoundMax(SpeciesDto species) { + protected Float getBoundMax(SpeciesReference species) { return species.getMaxLength(); } ===================================== core/api/dto/src/main/java/fr/ird/observe/spi/validation/validators/SpeciesWeightFieldDtoValidator.java ===================================== @@ -22,7 +22,7 @@ package fr.ird.observe.spi.validation.validators; * #L% */ -import fr.ird.observe.dto.referential.common.SpeciesDto; +import fr.ird.observe.dto.referential.common.SpeciesReference; /** * Validateur sur le weight d'une species. @@ -33,12 +33,12 @@ import fr.ird.observe.dto.referential.common.SpeciesDto; public class SpeciesWeightFieldDtoValidator extends AbstractSpeciesFieldDtoValidator { @Override - protected Float getBoundMin(SpeciesDto species) { + protected Float getBoundMin(SpeciesReference species) { return species.getMinWeight(); } @Override - protected Float getBoundMax(SpeciesDto species) { + protected Float getBoundMax(SpeciesReference species) { return species.getMaxWeight(); } ===================================== core/services/i18n/src/main/i18n/translations/services_en_GB.properties ===================================== @@ -78,8 +78,8 @@ observe.Common.countDepredated=Count depredated observe.Common.countDepredated.short=Count depredated observe.Common.country=Country observe.Common.createDate=Create date -observe.Common.currentDirection=Current direction -observe.Common.currentSpeed=Current speed +observe.Common.currentDirection=Current direction (°) +observe.Common.currentSpeed=Current speed (kts) observe.Common.dataQuality=Data quality observe.Common.departureHarbour=Departure port observe.Common.deploymentEnd=Deployment end @@ -150,7 +150,7 @@ observe.Common.haulingStartTimeStamp=Start timestamp observe.Common.homeId=Home id observe.Common.homeId.short=Home id observe.Common.hookLost=Hook lost -observe.Common.hookOffset=Offset +observe.Common.hookOffset=Offset (°) observe.Common.hookOffset.short=Offset observe.Common.hookPosition=Hook position observe.Common.hookSize=Size @@ -339,7 +339,7 @@ observe.Common.survey=Survey observe.Common.swivelWeight=swivel weight (kg) observe.Common.tagNumber=Tag number observe.Common.technicalInformation=Technical information of type %1$s -observe.Common.timeBetweenHooks=time between hooks +observe.Common.timeBetweenHooks=Time between hooks (s) observe.Common.timeSinceContact=Time since contact observe.Common.timeStamp=Timestamp observe.Common.timer=Timer @@ -396,8 +396,8 @@ observe.Common.well=Well observe.Common.well.short=Well observe.Common.whenArriving=When arriving observe.Common.whenLeaving=When leaving -observe.Common.wind=Wind -observe.Common.windDirection=Wind direction +observe.Common.wind=Wind - Sea appearance +observe.Common.windDirection=Wind direction (°) observe.business.module.common=Common observe.business.module.common.package.common=Common observe.business.module.common.short=Common @@ -619,7 +619,7 @@ observe.data.ll.logbook.BaitsComposition.type=Baits composition observe.data.ll.logbook.BranchlinesComposition.action.create=Create a new branchline observe.data.ll.logbook.BranchlinesComposition.action.save=Insert this branchline observe.data.ll.logbook.BranchlinesComposition.action.save.tip=Insert this branchline -observe.data.ll.logbook.BranchlinesComposition.length=Length +observe.data.ll.logbook.BranchlinesComposition.length=Length (m) observe.data.ll.logbook.BranchlinesComposition.length.short=Length observe.data.ll.logbook.BranchlinesComposition.type=Branchlines composition observe.data.ll.logbook.Catch.action.create=New catch @@ -639,7 +639,7 @@ observe.data.ll.logbook.Catch.type=Catch observe.data.ll.logbook.FloatlinesComposition.action.create=Create a new floatline observe.data.ll.logbook.FloatlinesComposition.action.save=Insert this floatline observe.data.ll.logbook.FloatlinesComposition.action.save.tip=Insert this floatline -observe.data.ll.logbook.FloatlinesComposition.length=Length +observe.data.ll.logbook.FloatlinesComposition.length=Length (m) observe.data.ll.logbook.FloatlinesComposition.length.short=Length observe.data.ll.logbook.FloatlinesComposition.type=Floatlines composition observe.data.ll.logbook.HooksComposition.action.create=Create a new hook ===================================== core/services/i18n/src/main/i18n/translations/services_es_ES.properties ===================================== @@ -150,8 +150,8 @@ observe.Common.haulingStartTimeStamp=Timestamp del inicio observe.Common.homeId=Identificador observe.Common.homeId.short=Id observe.Common.hookLost=Anzuelo erdido -observe.Common.hookOffset=Offset -observe.Common.hookOffset.short=Offset (°) +observe.Common.hookOffset=Offset (°) +observe.Common.hookOffset.short=Offset observe.Common.hookPosition=Posición del gancho observe.Common.hookSize=Tamaño observe.Common.hookSize.short=Tamaño @@ -619,8 +619,8 @@ observe.data.ll.logbook.BaitsComposition.type=BaitsComposition observe.data.ll.logbook.BranchlinesComposition.action.create=Crear una nueva arponcillo observe.data.ll.logbook.BranchlinesComposition.action.save=Insertar este arponcillo observe.data.ll.logbook.BranchlinesComposition.action.save.tip=Insertar este arponcillo -observe.data.ll.logbook.BranchlinesComposition.length=Longitud (m) -observe.data.ll.logbook.BranchlinesComposition.length.short=Longitud (m) +observe.data.ll.logbook.BranchlinesComposition.length=Talla (m) +observe.data.ll.logbook.BranchlinesComposition.length.short=Talla (m) observe.data.ll.logbook.BranchlinesComposition.type=BranchlinesComposition observe.data.ll.logbook.Catch.action.create=Nueva captura observe.data.ll.logbook.Catch.action.save=Insertar esta captura @@ -639,7 +639,7 @@ observe.data.ll.logbook.Catch.type=Captura observe.data.ll.logbook.FloatlinesComposition.action.create=Crear una nueva orinque observe.data.ll.logbook.FloatlinesComposition.action.save=Insertar este orinque observe.data.ll.logbook.FloatlinesComposition.action.save.tip=Insertar este orinque -observe.data.ll.logbook.FloatlinesComposition.length=Longitud (m) +observe.data.ll.logbook.FloatlinesComposition.length=Talla (m) observe.data.ll.logbook.FloatlinesComposition.length.short=Longitud (m) observe.data.ll.logbook.FloatlinesComposition.type=FloatlinesComposition observe.data.ll.logbook.HooksComposition.action.create=Crear una nueva anzuelo ===================================== model/src/main/models/Observe/dto/class/references.properties ===================================== @@ -94,7 +94,7 @@ referential.common.LengthWeightParameter=uri,oceanLabel,sexLabel,species,startDa referential.common.Ocean=code,label,uri,northEastAllowed,southEastAllowed,southWestAllowed,northWestAllowed referential.common.Person=firstName,lastName,uri,captain,observer,dataEntryOperator,dataSource,psSampler referential.common.ShipOwner=code,label,uri,startDate,endDate -referential.common.Species=code,label,uri,faoCode,scientificLabel,sizeMeasureTypeId,weightMeasureTypeId,speciesGroupId,wormsId,faoCode,minWeight,maxWeight +referential.common.Species=code,label,uri,faoCode,scientificLabel,sizeMeasureTypeId,weightMeasureTypeId,speciesGroupId,wormsId,faoCode,minWeight,maxWeight,minLength,maxLength referential.common.Vessel=code,label,uri,wellRegex,vesselType,fleetCountry,flagCountry,vesselSizeCategory,shipOwner,startDate,endDate referential.common.VesselSizeCategory=code,uri,gaugeLabel,capacityLabel referential.common.Wind=code,label,uri,minSpeed,maxSpeed,minSwellHeight,maxSwellHeight View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/d2f84834a01509a5a5016c137... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/-/compare/d2f84834a01509a5a5016c137... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT (@tchemit)