branch feature/5954 updated (301c1d4 -> 3fb5735)
This is an automated email from the git hooks/post-receive script. New change to branch feature/5954 in repository tutti. See http://git.codelutin.com/tutti.git from 301c1d4 import new 3fb5735 empecher de saisir plusieurs fois la même colonne dans les caracteristiques 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 3fb5735fa0a0353d6f738cdc372b99d198b4f0d5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Dec 10 09:22:20 2014 +0100 empecher de saisir plusieurs fois la même colonne dans les caracteristiques Summary of changes: .../tutti/ui/swing/action/SaveProtocolAction.java | 5 +- .../fishing/AbstractCaracteristicTabUIHandler.java | 1 + .../content/protocol/EditProtocolUIHandler.java | 70 +++++++++++++++++++++- .../content/protocol/EditProtocolUIModel.java | 50 +++++++++++++++- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 16 ++--- 5 files changed, 128 insertions(+), 14 deletions(-) -- 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 feature/5954 in repository tutti. See http://git.codelutin.com/tutti.git commit 3fb5735fa0a0353d6f738cdc372b99d198b4f0d5 Author: Kevin Morin <morin@codelutin.com> Date: Wed Dec 10 09:22:20 2014 +0100 empecher de saisir plusieurs fois la même colonne dans les caracteristiques --- .../tutti/ui/swing/action/SaveProtocolAction.java | 5 +- .../fishing/AbstractCaracteristicTabUIHandler.java | 1 + .../content/protocol/EditProtocolUIHandler.java | 70 +++++++++++++++++++++- .../content/protocol/EditProtocolUIModel.java | 50 +++++++++++++++- .../resources/i18n/tutti-ui-swing_fr_FR.properties | 16 ++--- 5 files changed, 128 insertions(+), 14 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java index be1ba1a..c0a14f6 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveProtocolAction.java @@ -81,7 +81,7 @@ public class SaveProtocolAction extends AbstractTuttiAction<EditProtocolUIModel, Collection<EditProtocolCaracteristicsRowModel> protocolCaracteristicMappingRows = getUI().getModel().getCaracteristicMappingRows(); List<CaracteristicMappingRow> caracteristicMappingRows = new ArrayList<CaracteristicMappingRow>(); for (EditProtocolCaracteristicsRowModel row : protocolCaracteristicMappingRows) { - if (row.getPsfm() != null && row.getType() != null) { + if (row.isValid()) { caracteristicMappingRows.add(row.toEntity()); } } @@ -90,7 +90,8 @@ public class SaveProtocolAction extends AbstractTuttiAction<EditProtocolUIModel, List<EditProtocolOperationFieldsRowModel> protocolOperationFieldMappingRows = getUI().getModel().getOperationFieldMappingRows(); List<OperationFieldMappingRow> operationFieldMappingRows = new ArrayList<OperationFieldMappingRow>(); for (EditProtocolOperationFieldsRowModel row : protocolOperationFieldMappingRows) { - if (StringUtils.isNotBlank(row.getField()) && StringUtils.isNotBlank(row.getImportColumn())) { + if (StringUtils.isNotBlank(row.getField()) && StringUtils.isNotBlank(row.getImportColumn()) + && row.isValid()) { operationFieldMappingRows.add(row.toEntity()); } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIHandler.java index c8a8317..a4cab77 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/AbstractCaracteristicTabUIHandler.java @@ -213,6 +213,7 @@ public abstract class AbstractCaracteristicTabUIHandler for (Caracteristic caracteristic : caracteristicMap.keySet()) { thisCaracteristicMap.put(caracteristic, caracteristicMap.get(caracteristic)); } + getModel().setModify(true); updateRows(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java index c64847b..8203e24 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java @@ -812,10 +812,26 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI @Override public void propertyChange(PropertyChangeEvent evt) { EditProtocolCaracteristicsRowModel row = (EditProtocolCaracteristicsRowModel) evt.getSource(); - row.setValid(row.getType() != null); + EditProtocolUIModel model = getModel(); + + if (EditProtocolCaracteristicsRowModel.PROPERTY_IMPORT_COLUMN.equals(evt.getPropertyName())) { + String oldValue = (String) evt.getOldValue(); + if (oldValue != null) { + model.decNumberOfRows(oldValue); + } + String newValue = (String) evt.getNewValue(); + if (newValue != null) { + model.incNumberOfRows(newValue); + } + + recomputeRowsValidState(); + + } else { + row.setValid(isCaracteristicsRowValid(row)); + } if (row.isValid()) { - getModel().setModify(true); + model.setModify(true); } } }); @@ -982,6 +998,28 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI protected EditProtocolOperationFieldsRowModel createOperationFieldRow(String property, String column) { EditProtocolOperationFieldsRowModel newRow = new EditProtocolOperationFieldsRowModel(); + newRow.addPropertyChangeListener(new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + EditProtocolOperationFieldsRowModel row = (EditProtocolOperationFieldsRowModel) evt.getSource(); + EditProtocolUIModel model = getModel(); + + //update number of rows by column + if (EditProtocolOperationFieldsRowModel.PROPERTY_IMPORT_COLUMN.equals(evt.getPropertyName())) { + String oldValue = (String) evt.getOldValue(); + if (oldValue != null) { + model.decNumberOfRows(oldValue); + } + String newValue = (String) evt.getNewValue(); + if (newValue != null) { + model.incNumberOfRows(newValue); + } + + recomputeRowsValidState(); + } + } + }); + newRow.setValid(true); newRow.setField(property); newRow.setImportColumn(column); newRow.setValid(true); @@ -994,6 +1032,34 @@ public class EditProtocolUIHandler extends AbstractTuttiUIHandler<EditProtocolUI return newRow; } + protected void recomputeRowsValidState() { + EditProtocolUIModel model = getModel(); + + for (EditProtocolCaracteristicsRowModel row : model.getCaracteristicMappingRows()) { + row.setValid(isCaracteristicsRowValid(row)); + } + + for (EditProtocolOperationFieldsRowModel row : model.getOperationFieldMappingRows()) { + row.setValid(isOperationFieldsRowValid(row)); + } + + getCaracteristicsMappingTable().repaint(); + getOperationFieldsMappingTable().repaint(); + } + + protected boolean isOperationFieldsRowValid(EditProtocolOperationFieldsRowModel row) { + EditProtocolUIModel model = getModel(); + String importColumn = row.getImportColumn(); + return importColumn == null || model.numberOfRows(importColumn) < 2; + } + + protected boolean isCaracteristicsRowValid(EditProtocolCaracteristicsRowModel row) { + EditProtocolUIModel model = getModel(); + String importColumn = row.getImportColumn(); + return row.getType() != null && + (importColumn == null || model.numberOfRows(importColumn) < 2); + } + protected void populateImportColumnTableEditors() { Collection<String> importColumns = getModel().getImportColumns(); ArrayList<String> dataToList = new ArrayList<String>(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java index ef50154..0ef2903 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIModel.java @@ -23,6 +23,7 @@ package fr.ifremer.tutti.ui.swing.content.protocol; */ import com.google.common.base.Function; +import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; @@ -35,9 +36,11 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.apache.commons.lang3.mutable.MutableInt; import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -127,9 +130,18 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, protected Map<String, Caracteristic> allCaracteristic; - protected Map<Caracteristic, EditProtocolCaracteristicsRowModel> caracteristicMappingRows; + protected Map<Caracteristic, EditProtocolCaracteristicsRowModel> caracteristicMappingRows = + new HashMap<Caracteristic, EditProtocolCaracteristicsRowModel>(); - protected List<EditProtocolOperationFieldsRowModel> operationFieldMappingRows; + protected List<EditProtocolOperationFieldsRowModel> operationFieldMappingRows = + new ArrayList<EditProtocolOperationFieldsRowModel>(); + + /** + * Number of rows for each column + * + * @since 3.10 + */ + protected Map<String, MutableInt> numberOfRowsByColumn = new HashMap<String, MutableInt>(); protected List<EditProtocolSpeciesRowModel> speciesRow; @@ -794,4 +806,38 @@ public class EditProtocolUIModel extends AbstractTuttiBeanUIModel<TuttiProtocol, public OperationFieldMappingRow getOperationFieldMapping(int index) { return editObject.getOperationFieldMapping(index); } + + public int numberOfRows(String column) { + int result = 0; + MutableInt mutableInt = numberOfRowsByColumn.get(column); + if (mutableInt != null) { + result = mutableInt.intValue(); + } + return result; + } + + public void resetNumbersOfRows() { + numberOfRowsByColumn = new HashMap<String, MutableInt>(); + } + + public int incNumberOfRows(String column) { + MutableInt mutableInt = numberOfRowsByColumn.get(column); + if (mutableInt == null) { + mutableInt = new MutableInt(1); + numberOfRowsByColumn.put(column, mutableInt); + } else { + mutableInt.increment(); + } + return mutableInt.intValue(); + + } + + public int decNumberOfRows(String column) { + MutableInt mutableInt = numberOfRowsByColumn.get(column); + Preconditions.checkNotNull(mutableInt); + Preconditions.checkArgument(mutableInt.intValue() > 0); + mutableInt.decrement(); + return mutableInt.intValue(); + } + } 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 974710f..a7b8c80 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 @@ -674,16 +674,16 @@ tutti.editFishingOperation.action.attachments.tip=Pièces-jointes de l'opératio tutti.editFishingOperation.action.cancelEditFishingOperation=Annuler tutti.editFishingOperation.action.cancelEditFishingOperation.mnemonic=A tutti.editFishingOperation.action.cancelEditFishingOperation.tip=Annuler la création du trait -tutti.editFishingOperation.action.chooseColumnsFile.import=Choisir le fichier de colonnes +tutti.editFishingOperation.action.chooseColumnsFile.import=Choisir le fichier de paramètres tutti.editFishingOperation.action.deleteFishingOperation.message=Vous êtes sur le point de supprimer l'opération de pêche <strong>%s</strong> tutti.editFishingOperation.action.deleteFishingOperation.tip=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.deleteFishingOperation.title=Supprimer l'opération de pêche sélectionnée tutti.editFishingOperation.action.editFishingOperation.tip=Éditer l'opération de pêche tutti.editFishingOperation.action.importColumns.operationNotFound=Le trait n'a pas été trouvé dans le fichier importé tutti.editFishingOperation.action.importColumns.success=Les données du fichier ont été importées dans le trait -tutti.editFishingOperation.action.importFromColumnFile=Import du fichier de colonnes +tutti.editFishingOperation.action.importFromColumnFile=Import du fichier de paramètre tutti.editFishingOperation.action.importFromColumnFile.mnemonic=c -tutti.editFishingOperation.action.importFromColumnFile.tip=Import du fichier de colonnes +tutti.editFishingOperation.action.importFromColumnFile.tip=Import du fichier de paramètres tutti.editFishingOperation.action.resetEditFishingOperation=Réinitialiser tutti.editFishingOperation.action.resetEditFishingOperation.mnemonic=R tutti.editFishingOperation.action.resetEditFishingOperation.tip=Réinitialiser l'édition du trait @@ -693,7 +693,7 @@ tutti.editFishingOperation.action.resetFishingOperationValidState.tip=Réinitial tutti.editFishingOperation.action.saveEditFishingOperation.mnemonic=E tutti.editFishingOperation.action.saveEditFishingOperation.tip=Enregistrer le trait tutti.editFishingOperation.action.saveFishingOperation=Enregistrer -tutti.editFishingOperation.action.title.choose.importColumnsFile=Importer par fichier de colonnes +tutti.editFishingOperation.action.title.choose.importColumnsFile=Importer le fichier de paramètres tutti.editFishingOperation.askCancelEditBeforeLeaving.cancelEditFishingOperation=Le trait modifié n'est pas valide et ne peut pas être enregistré tutti.editFishingOperation.askSaveBeforeLeaving.createFishingOperation=Le trait n'a pas été créé tutti.editFishingOperation.askSaveBeforeLeaving.saveFishingOperation=Des modifications sur le trait n'ont pas été enregistrées @@ -875,7 +875,7 @@ tutti.editProtocol.action.addCaracteristicMapping.mnemonic=j tutti.editProtocol.action.addCaracteristicMapping.tip=Ajouter aux caractéristiques du trait tutti.editProtocol.action.addSpeciesProtocol.mnemonic=j tutti.editProtocol.action.addSpeciesProtocol.tip=Ajouter une espèce au protocole -tutti.editProtocol.action.chooseColumnsFile.import=Choisir le fichier contenant les colonnes +tutti.editProtocol.action.chooseColumnsFile.import=Choisir le fichier de paramètres tutti.editProtocol.action.chooseProtocolBenthosFile=Choisir le fichier des benthos tutti.editProtocol.action.chooseProtocolCaracteristicFile=Choisir le fichier des caractéristiques tutti.editProtocol.action.chooseProtocolSpeciesFile=Choisir le fichier des espèces @@ -905,9 +905,9 @@ tutti.editProtocol.action.importProtocolBenthos.tip=Importer les benthos dans le tutti.editProtocol.action.importProtocolCaracteristic=Importer les caractéristiques tutti.editProtocol.action.importProtocolCaracteristic.mnemonic=i tutti.editProtocol.action.importProtocolCaracteristic.tip=Importer les caractéristiques dans le protocole -tutti.editProtocol.action.importProtocolColumns=Importer les colonnes d'import +tutti.editProtocol.action.importProtocolColumns=Importer le fichier de paramètres tutti.editProtocol.action.importProtocolColumns.mnemonic=c -tutti.editProtocol.action.importProtocolColumns.tip=Importer les colonnes d'import +tutti.editProtocol.action.importProtocolColumns.tip=Importer le fichier de paramètres tutti.editProtocol.action.importProtocolSpecies=Importer les espèces tutti.editProtocol.action.importProtocolSpecies.mnemonic=é tutti.editProtocol.action.importProtocolSpecies.speciesInBenthos=Les espèces suivantes n'ont pas été importées car elles sont déjà présentes dans le benthos \:<ul>%s</ul> @@ -932,7 +932,7 @@ tutti.editProtocol.action.selectOtherBenthos.tip=Sélectionner une autre espèce tutti.editProtocol.action.selectOtherSpecies=... tutti.editProtocol.action.selectOtherSpecies.mnemonic=. tutti.editProtocol.action.selectOtherSpecies.tip=Sélectionner une autre espèce (dans les synonymes) -tutti.editProtocol.action.title.choose.importColumnsFile=Importer les colonnes d'import +tutti.editProtocol.action.title.choose.importColumnsFile=Importer le fichier de paramètres tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveProtocol=Le protocole n'est pas valide et ne peut pas être enregistré tutti.editProtocol.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel=La catégorisation n'est pas valide et ne peut pas être enregistré tutti.editProtocol.askSaveBeforeLeaving.saveProtocol=Des modifications sur le protocole n'ont pas été enregistrées -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm