branch develop updated (c83e687 -> 1bd69d9)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from c83e687 fixes #8373: [OBSERVATION INDIVIDUELLE] autoenregistrer ou forcer l'enregistrement (bouton enregistrer et rester..) tous les 10 lignes pour se préminir des pertes d'info auto-enregistrer est trop long, et donc derangerait l'utilisateur. A la place le bouton devient rouge s'il y a une modification new 1bd69d9 fixes #8048: [OBSERVATIONS INDIVIDUELLES] Navigation efficace pour accéder au trait précédent/suivant de la même espèce The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 1bd69d9a0d107dd8603f5ad3dfb6f2af1f3ebe64 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Sat Jul 30 16:22:05 2016 +0200 fixes #8048: [OBSERVATIONS INDIVIDUELLES] Navigation efficace pour accéder au trait précédent/suivant de la même espèce Summary of changes: .../tutti/persistence/TuttiPersistenceImpl.java | 10 ++ .../persistence/TuttiPersistenceNoDbImpl.java | 10 ++ .../service/CatchBatchPersistenceService.java | 19 +++ .../service/CatchBatchPersistenceServiceImpl.java | 59 +++++++ .../ifremer/tutti/service/PersistenceService.java | 10 ++ .../operation/FishingOperationsUIHandler.java | 4 + .../species/EditSpeciesBatchPanelUIHandler.java | 25 +++ .../species/frequency/SpeciesFrequencyUI.jaxx | 6 + .../species/frequency/SpeciesFrequencyUI.jcss | 10 ++ .../frequency/SpeciesFrequencyUIHandler.java | 8 + .../species/frequency/SpeciesFrequencyUIModel.java | 34 ++++ .../SearchSpeciesInPrevOrNextCatchesAction.java | 183 +++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 9 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 9 + 14 files changed, 396 insertions(+) create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/SearchSpeciesInPrevOrNextCatchesAction.java -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 1bd69d9a0d107dd8603f5ad3dfb6f2af1f3ebe64 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Sat Jul 30 16:22:05 2016 +0200 fixes #8048: [OBSERVATIONS INDIVIDUELLES] Navigation efficace pour accéder au trait précédent/suivant de la même espèce --- .../tutti/persistence/TuttiPersistenceImpl.java | 10 ++ .../persistence/TuttiPersistenceNoDbImpl.java | 10 ++ .../service/CatchBatchPersistenceService.java | 19 +++ .../service/CatchBatchPersistenceServiceImpl.java | 59 +++++++ .../ifremer/tutti/service/PersistenceService.java | 10 ++ .../operation/FishingOperationsUIHandler.java | 4 + .../species/EditSpeciesBatchPanelUIHandler.java | 25 +++ .../species/frequency/SpeciesFrequencyUI.jaxx | 6 + .../species/frequency/SpeciesFrequencyUI.jcss | 10 ++ .../frequency/SpeciesFrequencyUIHandler.java | 8 + .../species/frequency/SpeciesFrequencyUIModel.java | 34 ++++ .../SearchSpeciesInPrevOrNextCatchesAction.java | 183 +++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 9 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 9 + 14 files changed, 396 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 6c49c25..85f4970 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -1166,6 +1166,16 @@ public class TuttiPersistenceImpl implements TuttiPersistence { getCatchBatchService().recomputeCatchBatchSampleRatios(fishingOperationId); } + @Override + public Map getPrevOperationNameAndBatchId(int operationId, int taxonId) { + return getCatchBatchService().getPrevOperationNameAndBatchId(operationId, taxonId); + } + + @Override + public Map getNextOperationNameAndBatchId(int operationId, int taxonId) { + return getCatchBatchService().getNextOperationNameAndBatchId(operationId, taxonId); + } + //------------------------------------------------------------------------// //-- Species Batch methods --// //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index eb4ef9b..e6d06c0 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -690,6 +690,16 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { throw notImplemented(); } + @Override + public Map getPrevOperationNameAndBatchId(int operationId, int taxonId) { + throw notImplemented(); + } + + @Override + public Map getNextOperationNameAndBatchId(int operationId, int taxonId) { + throw notImplemented(); + } + //------------------------------------------------------------------------// //-- Species batch methods --// //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java index 58330a0..8c9f630 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceService.java @@ -24,6 +24,7 @@ package fr.ifremer.tutti.persistence.service; import fr.ifremer.tutti.persistence.TuttiPersistenceServiceImplementor; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import java.util.Map; import org.springframework.transaction.annotation.Transactional; @Transactional(readOnly = true) @@ -86,4 +87,22 @@ public interface CatchBatchPersistenceService extends TuttiPersistenceServiceImp */ @Transactional(readOnly = false) void recomputeCatchBatchSampleRatios(Integer fishingOperationId); + + /** + * Search batch with same taxon in previous operation in same fishing trip + * + * @param operationId + * @param taxonId + * @return map with key: operationName and batchId + */ + Map getPrevOperationNameAndBatchId(int operationId, int taxonId); + + /** + * Search batch with same taxon in previous operation in same fishing trip + * + * @param operationId + * @param taxonId + * @return map with key: operationName and batchId + */ + Map getNextOperationNameAndBatchId(int operationId, int taxonId); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java index d7bbdc9..6ec2740 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java @@ -53,10 +53,12 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.util.Collection; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import org.hibernate.Query; @Service("batchPersistenceService") public class CatchBatchPersistenceServiceImpl @@ -684,4 +686,61 @@ public class CatchBatchPersistenceServiceImpl } + //------------------------------------------------------------------------// + //-- Other methods --// + //------------------------------------------------------------------------// + + @Override + public Map getPrevOperationNameAndBatchId(int operationId, int taxonId) { + // TODO poussin 20160729 put hql in query file (xml) and use getNamedQuery instead of createQuery + String sql = "SELECT o.id as operationId, b.id as batchId" + + " FROM OPERATION o JOIN batch b ON o.catch_batch_fk=b.root_batch_fk" + + " WHERE o.is_fishing_operation = 1" + + " AND o.fishing_trip_fk = (SELECT fishing_trip_fk FROM operation WHERE id = :operationId)" + + " AND o.fishing_end_date_time < (select fishing_end_date_time from operation where id = :operationId)" + + " AND b.reference_taxon_fk = :taxonId" + + " ORDER BY o.fishing_start_date_time DESC, b.id;"; + + Query q = getCurrentSession().createSQLQuery(sql); + q.setInteger("operationId", operationId); + q.setInteger("taxonId", taxonId); + q.setMaxResults(1); + + Object[] select = (Object[])q.uniqueResult(); + Map result = null; + if (select != null && select.length == 2) { + result = new HashMap(); + result.put("operationId", select[0]); + result.put("batchId", select[1]); + } + + return result; + } + + @Override + public Map getNextOperationNameAndBatchId(int operationId, int taxonId) { + // TODO poussin 20160729 put hql in query file (xml) and use getNamedQuery instead of createQuery + String sql = "SELECT o.id as operationId, b.id as batchId" + + " FROM OPERATION o JOIN batch b ON o.catch_batch_fk=b.root_batch_fk" + + " WHERE o.is_fishing_operation = 1" + + " AND o.fishing_trip_fk = (SELECT fishing_trip_fk FROM operation WHERE id = :operationId)" + + " AND o.fishing_end_date_time > (select fishing_end_date_time from operation where id = :operationId)" + + " AND b.reference_taxon_fk = :taxonId" + + " ORDER BY o.fishing_start_date_time ASC, b.id;"; + + Query q = getCurrentSession().createSQLQuery(sql); + q.setInteger("operationId", operationId); + q.setInteger("taxonId", taxonId); + q.setMaxResults(1); + + Object[] select = (Object[])q.uniqueResult(); + Map result = null; + if (select != null && select.length == 2) { + result = new HashMap(); + result.put("operationId", select[0]); + result.put("batchId", select[1]); + } + + return result; + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index fdce407..6e96104 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -1480,6 +1480,16 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer driver.recomputeCatchBatchSampleRatios(fishingOperationId); } + @Override + public Map getPrevOperationNameAndBatchId(int operationId, int taxonId) { + return driver.getPrevOperationNameAndBatchId(operationId, taxonId); + } + + @Override + public Map getNextOperationNameAndBatchId(int operationId, int taxonId) { + return driver.getNextOperationNameAndBatchId(operationId, taxonId); + } + //------------------------------------------------------------------------// //-- Species Batch methods --// //------------------------------------------------------------------------// diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java index 75fc450..3a3e393 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUIHandler.java @@ -223,6 +223,10 @@ public class FishingOperationsUIHandler extends AbstractTuttiTabContainerUIHandl }); } + public EditFishingOperationAction getEditFishingOperationAction() { + return editFishingOperationAction; + } + @Override protected JComponent getComponentToFocus() { return null; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/EditSpeciesBatchPanelUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/EditSpeciesBatchPanelUIHandler.java index 61beab2..6dbf14b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/EditSpeciesBatchPanelUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/EditSpeciesBatchPanelUIHandler.java @@ -29,7 +29,9 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesB import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import java.util.Map; import jaxx.runtime.swing.CardLayout2Ext; import jaxx.runtime.validator.swing.SwingValidator; import org.jdesktop.swingx.JXTable; @@ -37,6 +39,8 @@ import org.jdesktop.swingx.JXTable; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.table.TableColumn; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -48,6 +52,9 @@ import static org.nuiton.i18n.I18n.t; */ public class EditSpeciesBatchPanelUIHandler extends AbstractTuttiUIHandler<EditSpeciesBatchPanelUIModel, EditSpeciesBatchPanelUI> { + /** Logger. */ + private static final Log log = LogFactory.getLog(EditSpeciesBatchPanelUIHandler.class); + protected SpeciesOrBenthosBatchUISupport speciesOrBenthosBatchUISupport; @Override @@ -116,6 +123,24 @@ public class EditSpeciesBatchPanelUIHandler extends AbstractTuttiUIHandler<EditS false); frequencyEditor.getHandler().editBatch(editor, frequenciesTitle); + SpeciesFrequencyUIModel model = frequencyEditor.getModel(); + try { + int fishingOperationId = model.getFishingOperation().getIdAsInt(); + int taxonId = model.getBatch().getSpecies().getReferenceTaxonId(); + + Map map = getPersistenceService().getPrevOperationNameAndBatchId( + fishingOperationId, taxonId); + model.setCanGoPrevBatch(map != null); + + map = getPersistenceService().getNextOperationNameAndBatchId( + fishingOperationId, taxonId); + model.setCanGoNextBatch(map != null); + } catch (Exception eee) { + log.warn("Can't check navigation between batch", eee); + model.setCanGoPrevBatch(false); + model.setCanGoNextBatch(false); + } + // open frequency editor ui.switchToEditFrequency(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx index 7c37a53..2189d3f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jaxx @@ -36,6 +36,7 @@ fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.SaveAndStaySpeciesFrequencyAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.SaveAndCloseSpeciesFrequencyAction fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.SaveAndContinueSpeciesFrequencyAction + fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.SearchSpeciesInPrevOrNextCatchesAction; fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.util.TuttiUIUtil fr.ifremer.tutti.ui.swing.util.WideDataBeanFilterableComboBox @@ -103,9 +104,14 @@ public boolean leaveIfConfirmed() { return handler.leaveIfConfirmed(); } <SaveAndCloseSpeciesFrequencyAction id="saveAndCloseAction" constructorParams="this"/> <SaveAndContinueSpeciesFrequencyAction id="saveAndContinueAction" constructorParams="this"/> + <SearchSpeciesInPrevOrNextCatchesAction id="searchSpeciesInPrevCatchesAction" constructorParams="this, true"/> + <SearchSpeciesInPrevOrNextCatchesAction id="searchSpeciesInNextCatchesAction" constructorParams="this, false"/> + <JToolBar id='speciesFrequencyTabToolBar'> <JMenuBar id='menu'> <JMenu id='menuAction'> + <JMenuItem id='searchSpeciesInPrevCatchesButton'/> + <JMenuItem id='searchSpeciesInNextCatchesButton'/> <JMenu id='menuImportMultiPost'> <JMenuItem id='importMultiPostFullButton'/> <JMenuItem id='importMultiPostOnlyFrequenciesButton'/> diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss index 6392378..2532078 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUI.jcss @@ -81,6 +81,16 @@ ComputableDataEditor { i18nMnemonic: "tutti.toolbar.menuExportMultiPost.action.mnemonic"; } +#searchSpeciesInPrevCatchesButton { + action: {searchSpeciesInPrevCatchesAction}; + enabled: {getModel().isCanGoPrevBatch()}; +} + +#searchSpeciesInNextCatchesButton { + action: {searchSpeciesInNextCatchesAction}; + enabled: {getModel().isCanGoNextBatch()}; +} + #importMultiPostFullButton { actionIcon: import; text: "tutti.editSpeciesFrequencies.action.importMultiPostFull"; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 74fc75c..f0925f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -95,6 +95,7 @@ import javax.swing.table.TableColumnModel; import java.awt.Color; import java.awt.Component; import java.awt.Font; +import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -106,6 +107,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; +import javax.swing.KeyStroke; import static org.nuiton.i18n.I18n.t; @@ -419,6 +421,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci @Override public void afterInit(SpeciesFrequencyUI ui) { + // add short cut to menu item + getUI().getSearchSpeciesInPrevCatchesButton().setAccelerator( + KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK)); + getUI().getSearchSpeciesInNextCatchesButton().setAccelerator( + KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK)); + applySpeciesFrequencyRafaleAction = new ApplySpeciesFrequencyRafaleAction(ui); initUI(ui); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 42b8325..cc6a9ed 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -104,6 +104,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_CAN_EDIT_LENGTH_STEP = "canEditLengthStep"; + public static final String PROPERTY_CAN_GO_PREV_BATCH = "canGoPrevBatch"; + + public static final String PROPERTY_CAN_GO_NEXT_BATCH = "canGoNextBatch"; + public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_ALL = "copyIndividualObservationAll"; @@ -264,6 +268,16 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa private CopyIndividualObservationMode copyIndividualObservationMode; /** + * computed when species change, used to enable or disable menu + */ + private boolean canGoPrevBatch = true; + + /** + * computed when species change, used to enable or disable menu + */ + private boolean canGoNextBatch = true; + + /** * Is the model is loading? */ private boolean initBatchEdition; @@ -688,6 +702,26 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa return CopyIndividualObservationMode.SIZE == copyIndividualObservationMode; } + public boolean isCanGoPrevBatch() { + return canGoPrevBatch; + } + + public void setCanGoPrevBatch(boolean canGoPrevBatch) { + boolean old = this.canGoPrevBatch; + this.canGoPrevBatch = canGoPrevBatch; + firePropertyChange(PROPERTY_CAN_GO_PREV_BATCH, old, canGoPrevBatch); + } + + public boolean isCanGoNextBatch() { + return canGoNextBatch; + } + + public void setCanGoNextBatch(boolean canGoNextBatch) { + boolean old = this.canGoNextBatch; + this.canGoNextBatch = canGoNextBatch; + firePropertyChange(PROPERTY_CAN_GO_NEXT_BATCH, old, canGoNextBatch); + } + public Set<SpeciesFrequencyRowModel> getEmptyRows() { return emptyRows; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/SearchSpeciesInPrevOrNextCatchesAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/SearchSpeciesInPrevOrNextCatchesAction.java new file mode 100644 index 0000000..bdc5111 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/SearchSpeciesInPrevOrNextCatchesAction.java @@ -0,0 +1,183 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions; + +/* + * #%L + * Tutti :: UI + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2015 Ifremer + * %% + * 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.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI; +import fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.fishing.actions.EditFishingOperationAction; +import java.awt.event.ActionEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.swing.JOptionPane; +import jaxx.runtime.SwingUtil; +import org.jdesktop.swingx.JXTable; + +import static org.nuiton.i18n.I18n.t; + +/** + * Created on 28/07/2016 + * + * @author Benjamin POUSSIN - poussin@codelutin.com + * @since 4.6 + */ +public class SearchSpeciesInPrevOrNextCatchesAction extends SaveSupportAction { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SearchSpeciesInPrevOrNextCatchesAction.class); + + protected boolean prev; + protected Map operationIdAndBatchId; + protected SpeciesFrequencyUIHandler handler; + + + public SearchSpeciesInPrevOrNextCatchesAction(SpeciesFrequencyUI ui, boolean prev) { + super(ui); + this.prev = prev; + handler = ui.getHandler(); + + if (prev) { + putValue(NAME, t("tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches")); + putValue(SHORT_DESCRIPTION, t("tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.tip")); + putValue(MNEMONIC_KEY, (int) SwingUtil.getFirstCharAt(t("tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.mnemonic"), 'Z')); +// putValue(SMALL_ICON, SwingUtil.createActionIcon("checkSave")); + } else { + putValue(NAME, t("tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches")); + putValue(SHORT_DESCRIPTION, t("tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.tip")); + putValue(MNEMONIC_KEY, (int) SwingUtil.getFirstCharAt(t("tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.mnemonic"), 'Z')); +// putValue(SMALL_ICON, SwingUtil.createActionIcon("checkSave")); + } + + } + + @Override + public void actionPerformed(ActionEvent e) { + + operationIdAndBatchId = search(); + if (operationIdAndBatchId != null) { + if (checkSave()) { + move(); + } + } else { + JOptionPane.showOptionDialog(handler.getTopestUI(), + t("tutti.informCantFindBatchWithSpecies.message"), + t("tutti.informCantFindBatchWithSpecies.title"), + JOptionPane.OK_OPTION, + JOptionPane.INFORMATION_MESSAGE, + null, + new String[]{t("tutti.option.ok")}, + t("tutti.option.ok")); + } + } + + protected Map search() { + Map result; + // FIXME poussin rechercher dans un trait precedent s'il y a la meme espece + // si oui faire l'action, sinon dire qu'on a rien trouve. + SpeciesFrequencyUIModel model = handler.getModel(); + int fishingOperationId = model.getFishingOperation().getIdAsInt(); + int taxonId = model.getBatch().getSpecies().getReferenceTaxonId(); + + log.debug(String.format("looking for fishingOperationId: %s, taxonId: %s", fishingOperationId, taxonId)); + if (prev) { + result = + handler.getPersistenceService().getPrevOperationNameAndBatchId( + fishingOperationId, taxonId); + } else { + result = + handler.getPersistenceService().getNextOperationNameAndBatchId( + fishingOperationId, taxonId); + } + + log.debug(String.format("search result: %s", result)); + return result; + } + + protected boolean checkSave() { + boolean doAction = true; + if (handler.getModel().isModify()) { + + // Ask confirmation to quit screen + doAction = handler.askCancelEditBeforeLeaving(); + } + return doAction; + } + + public void move() { + + EditSpeciesBatchPanelUI oldBatchUI = handler.getUI().getParentContainer(EditSpeciesBatchPanelUI.class); + SpeciesOrBenthosBatchUISupport sbbs = oldBatchUI.getModel().getSpeciesOrBenthosBatchUISupport(); + + FishingOperationsUI foUI = handler.getUI().getParentContainer(FishingOperationsUI.class); + FishingOperationsUIModel foModel = foUI.getModel(); + List<FishingOperation> list = foModel.getFishingOperation(); + Optional<FishingOperation> op = list.stream().filter((FishingOperation o) -> { + return Objects.equals(o.getIdAsInt(), operationIdAndBatchId.get("operationId")); + }).findFirst(); + + // reposition screen on batch table, must be done after load + EditFishingOperationAction changeAction = foUI.getHandler().getEditFishingOperationAction(); + changeAction.addPropertyChangeListener(changeAction.PROPERTY_DONE, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + changeAction.removePropertyChangeListener(changeAction.PROPERTY_DONE, this); + + // go to batch table + foUI.getTabPane().setSelectedIndex(1); + EditCatchesUI catchUI = foUI.getCatchesTabContent(); + EditSpeciesBatchPanelUI batchUI = catchUI.getEditSpeciesBatchPanelUI(sbbs); + // select table row + SpeciesBatchUI speciesUI = batchUI.getEditBatchesUI(); + JXTable table = speciesUI.getTable(); + String batchId = String.valueOf(operationIdAndBatchId.get("batchId")); + for (int i = 0, max = table.getRowCount(); i < max; i++) { + Object value = table.getValueAt(i, 1); + if (Objects.equals(value, batchId)) { + table.setRowSelectionInterval(i, i); + break; + } + } + } + }); + + log.debug(String.format("switch to operation: %s", op)); + foModel.setSelectedFishingOperation(op.get()); + + } +} \ No newline at end of file diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index be6ad99..6b3bded 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -1587,6 +1587,12 @@ tutti.editSpeciesFrequencies.action.saveAndContinue.tip= tutti.editSpeciesFrequencies.action.saveAndStay= tutti.editSpeciesFrequencies.action.saveAndStay.mnemonic= tutti.editSpeciesFrequencies.action.saveAndStay.tip= +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches= +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.mnemonic= +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.tip= +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches= +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.mnemonic= +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.tip= tutti.editSpeciesFrequencies.addMeasure= tutti.editSpeciesFrequencies.askBeforeSave.help= tutti.editSpeciesFrequencies.askBeforeSave.message= @@ -2034,6 +2040,8 @@ tutti.importPupitri.melagWeight.title= tutti.importPupitri.title= tutti.importPupitri.trunkFile.extension= tutti.importPupitri.trunkFile.extension.description= +tutti.informCantFindBatchWithSpecies.message= +tutti.informCantFindBatchWithSpecies.title= tutti.io.error.copyFile= tutti.label.tab.accidental= tutti.label.tab.benthos= @@ -2318,6 +2326,7 @@ tutti.option.continue= tutti.option.edit= tutti.option.import= tutti.option.notSaveCatch= +tutti.option.ok= tutti.option.quit= tutti.option.resetCatch= tutti.option.saveAndQuit= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 806ef8f..78d15de 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -1478,6 +1478,12 @@ tutti.editSpeciesFrequencies.action.saveAndContinue.tip=Enregistrer les mensurat tutti.editSpeciesFrequencies.action.saveAndStay=Enregistrer et Rester tutti.editSpeciesFrequencies.action.saveAndStay.mnemonic=S tutti.editSpeciesFrequencies.action.saveAndStay.tip=Enregistrer les mensurations et rester sur cet écran +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches=Rechercher cette espèce -> +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.mnemonic=P +tutti.editSpeciesFrequencies.action.searchSpeciesInNextCatches.tip=Rechercher cette espèce dans un trait suivant +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches=<- Rechercher cette espèce +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.mnemonic=N +tutti.editSpeciesFrequencies.action.searchSpeciesInPrevCatches.tip=Rechercher cette espèce dans un trait précédent tutti.editSpeciesFrequencies.addMeasure=Ajout d'un individu de taille <strong>%1$s</strong>%3$s (classe de taille <strong>%2$s</strong>%3$s) tutti.editSpeciesFrequencies.askBeforeSave.help=Que voulez-vous faire?<ul><li><strong>Non</strong> pour rester sur cet écran</li><li><strong>Oui</strong> pour enregisrer les mensurations avec poids</li></ul> tutti.editSpeciesFrequencies.askBeforeSave.message=La saisie comporte des classes de taille avec et sans poids associés.<br/><strong>Seules les classes de taille avec poids seront dans ce cas sauvegardées.</strong> @@ -1896,6 +1902,8 @@ tutti.importPupitri.melagWeight.title=Melag détecté tutti.importPupitri.title=Import Pupitri tutti.importPupitri.trunkFile.extension=tnk tutti.importPupitri.trunkFile.extension.description=Fichier du trémie (.tnk) +tutti.informCantFindBatchWithSpecies.message=Impossible de trouver cette espèce +tutti.informCantFindBatchWithSpecies.title=Impossible de trouver cette espèce tutti.io.error.copyFile=Impossible de copier le fichier tutti.label.tab.accidental=Captures accidentelles tutti.label.tab.benthos=Benthos @@ -2145,6 +2153,7 @@ tutti.option.continue=Continuer tutti.option.edit=Éditer tutti.option.import=Importer tutti.option.notSaveCatch=Ne pas enregistrer les modifications +tutti.option.ok=Ok tutti.option.quit=Quitter tutti.option.resetCatch=Annuler les modifications tutti.option.saveAndQuit=Enregistrer et quitter -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm