This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 1e5ea6f4417f96d732d47cb8d4e59cd3960bb293 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 28 15:24:52 2015 +0100 fixes #6557: [CONFIG] Erreur lors de la sauvegarde de la configuration des catégorisations fixes #6570: Ajout d'une colonne code dans l'écran de configuration des catégorisations --- .../entities/data/SampleCategoryModelEntry.java | 18 ------ .../action/SaveSampleCategoryModelAction.java | 9 ++- .../category/EditSampleCategoryModelRowModel.java | 18 ++++-- .../EditSampleCategoryModelTableModel.java | 8 ++- .../category/EditSampleCategoryModelUIHandler.java | 73 +++++++++++++++++++--- .../category/EditSampleCategoryModelUIModel.java | 12 ++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 3 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 7 ++- 8 files changed, 107 insertions(+), 41 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java index 946a08f..6dd198b 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/data/SampleCategoryModelEntry.java @@ -75,24 +75,6 @@ public class SampleCategoryModelEntry implements Comparable<SampleCategoryModelE this.label = label; } - /*public String getCanonicalLabel() { - if (canonicalLabel == null) { - - canonicalLabel = ""; - - if (StringUtils.isNotEmpty(label)) { - for (int i = 0; i < label.length(); i++) { - char a = label.charAt(i); - if (!Character.isLetterOrDigit(a)) { - a = '_'; - } - canonicalLabel += a; - } - } - } - return canonicalLabel; - }*/ - public Caracteristic getCaracteristic() { return caracteristic; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveSampleCategoryModelAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveSampleCategoryModelAction.java index 00f25a4..68d3dcb 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveSampleCategoryModelAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/SaveSampleCategoryModelAction.java @@ -29,6 +29,8 @@ import fr.ifremer.tutti.ui.swing.content.category.EditSampleCategoryModelUIModel import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import static org.nuiton.i18n.I18n.t; + /** * To save the sample category model. * @@ -49,7 +51,7 @@ public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampl public void doAction() throws Exception { EditSampleCategoryModelUIModel model = getModel(); - SampleCategoryModel bean = model.toBean(); + SampleCategoryModel bean = model.toEntity(); if (log.isInfoEnabled()) { log.info("Will save sampleCategoryModel: " + bean); @@ -63,4 +65,9 @@ public class SaveSampleCategoryModelAction extends AbstractTuttiAction<EditSampl model.setModify(false); } + + @Override + public void postSuccessAction() { + sendMessage(t("tutti.editSampleCategoryModel.saved")); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java index 09bbc87..7a90aac 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelRowModel.java @@ -29,15 +29,15 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; /** - * TODO - * - * @author tchemit <chemit@codelutin.com> + * @author Tony Chemit - chemit@codelutin.com * @since TODO */ public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<SampleCategoryModelEntry, EditSampleCategoryModelRowModel> { private static final long serialVersionUID = 1L; + public static final String PROPERTY_CODE = "code"; + public static final String PROPERTY_LABEL = "label"; public static final String PROPERTY_CARACTERISTIC = "caracteristic"; @@ -58,7 +58,7 @@ public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<Sa public EditSampleCategoryModelRowModel(SampleCategoryModelEntry entry) { this(); - fromBean(entry); + fromEntity(entry); } //------------------------------------------------------------------------// @@ -74,6 +74,16 @@ public class EditSampleCategoryModelRowModel extends AbstractTuttiBeanUIModel<Sa //-- SampleCategoryModelEntry delegate --// //------------------------------------------------------------------------// + public String getCode() { + return editObject.getCode(); + } + + public void setCode(String code) { + String oldValue = getCode(); + editObject.setCode(code); + firePropertyChange(PROPERTY_CODE, oldValue, code); + } + public String getLabel() { return editObject.getLabel(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java index 7d2709b..2aa748f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelTableModel.java @@ -44,6 +44,11 @@ public class EditSampleCategoryModelTableModel extends AbstractApplicationTableM n("tutti.editSampleCategoryModel.table.header.caracteristic"), n("tutti.editSampleCategoryModel.table.header.caracteristic.tip")); + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> CODE = ColumnIdentifier.newId( + EditSampleCategoryModelRowModel.PROPERTY_CODE, + n("tutti.editSampleCategoryModel.table.header.code"), + n("tutti.editSampleCategoryModel.table.header.code.tip")); + public static final ColumnIdentifier<EditSampleCategoryModelRowModel> LABEL = ColumnIdentifier.newId( EditSampleCategoryModelRowModel.PROPERTY_LABEL, n("tutti.editSampleCategoryModel.table.header.label"), @@ -57,8 +62,7 @@ public class EditSampleCategoryModelTableModel extends AbstractApplicationTableM @Override public EditSampleCategoryModelRowModel createNewRow() { - EditSampleCategoryModelRowModel result = - new EditSampleCategoryModelRowModel(); + EditSampleCategoryModelRowModel result = new EditSampleCategoryModelRowModel(); // by default empty row is not valid result.setValid(false); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java index 8cb6464..503a623 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIHandler.java @@ -24,8 +24,7 @@ package fr.ifremer.tutti.ui.swing.content.category; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; -import org.nuiton.jaxx.application.swing.util.Cancelable; -import org.nuiton.jaxx.application.swing.util.CloseableUI; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; @@ -38,12 +37,15 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import org.nuiton.jaxx.application.swing.util.Cancelable; +import org.nuiton.jaxx.application.swing.util.CloseableUI; import javax.swing.JComponent; import javax.swing.SwingUtilities; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -61,7 +63,8 @@ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandle public EditSampleCategoryModelUIHandler() { super(EditSampleCategoryModelRowModel.PROPERTY_CARACTERISTIC, - EditSampleCategoryModelRowModel.PROPERTY_LABEL); + EditSampleCategoryModelRowModel.PROPERTY_LABEL, + EditSampleCategoryModelRowModel.PROPERTY_CODE); } //------------------------------------------------------------------------// @@ -159,8 +162,42 @@ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandle @Override protected boolean isRowValid(EditSampleCategoryModelRowModel row) { - boolean result = StringUtils.isNotBlank(row.getLabel()); + boolean result = StringUtils.isNotBlank(row.getLabel()) && + StringUtils.isNotBlank(row.getCode()) && + getCode(row.getCode()).equals(row.getCode()); + + if (result) { + + // check code is alphanumerique + String code = row.getCode(); + result = code.equals(getCode(code)); + } + if (result) { + + // check unicity of codes and labels + List<EditSampleCategoryModelRowModel> rows = getModel().getRows(); + Set<String> labels = Sets.newHashSet(); + + Set<String> codes = Sets.newHashSet(); + + for (EditSampleCategoryModelRowModel aRow : rows) { + result = labels.add(aRow.getLabel()); + if (!result) { + if (log.isWarnEnabled()) { + log.warn("Duplicated label: " + aRow.getLabel()); + } + break; + } + result = codes.add(aRow.getCode()); + if (!result) { + if (log.isWarnEnabled()) { + log.warn("Duplicated code: " + aRow.getCode()); + } + break; + } + } + } return result; } @@ -238,9 +275,7 @@ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandle EditSampleCategoryModelUIModel model = getModel(); - initBeanFilterableComboBox(ui.getAvailableCaracteristicsComboBox(), - model.getCaracteristicList(), - null); + initBeanFilterableComboBox(ui.getAvailableCaracteristicsComboBox(), model.getCaracteristicList(), null); model.addPropertyChangeListener(EditSampleCategoryModelUIModel.PROPERTY_CARACTERISTIC_LIST, new PropertyChangeListener() { @Override @@ -271,6 +306,14 @@ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandle } + { // Code column + + addColumnToModel(columnModel, + null, + null, + EditSampleCategoryModelTableModel.CODE); + } + { // Label column addColumnToModel(columnModel, @@ -359,4 +402,20 @@ public class EditSampleCategoryModelUIHandler extends AbstractTuttiTableUIHandle model.setMoveUpEntryEnabled(enableMoveUpEntry); model.setMoveDownEntryEnabled(enableMoveDownEntry); } + + public static String getCode(String label) { + String canonicalLabel = ""; + + if (StringUtils.isNotEmpty(label)) { + for (int i = 0; i < label.length(); i++) { + char a = label.charAt(i); + if (!Character.isLetterOrDigit(a)) { + a = '_'; + } + canonicalLabel += a; + } + } + + return canonicalLabel; + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java index 0cf0672..f3b40a1 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/category/EditSampleCategoryModelUIModel.java @@ -69,8 +69,7 @@ public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<Sa private boolean moveDownEntryEnabled; - public EditSampleCategoryModelUIModel(List<SampleCategoryModelEntry> category, - List<Caracteristic> caracteristicList) { + public EditSampleCategoryModelUIModel(List<SampleCategoryModelEntry> category, List<Caracteristic> caracteristicList) { super(SampleCategoryModel.class, fromBeanBinder, toBeanBinder); @@ -89,8 +88,7 @@ public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<Sa continue; } EditSampleCategoryModelRowModel row = new EditSampleCategoryModelRowModel(); - row.setCaracteristic(sampleCategoryModelEntry.getCaracteristic()); - row.setLabel(sampleCategoryModelEntry.getLabel()); + row.fromEntity(sampleCategoryModelEntry); row.setValid(true); rows.add(row); } @@ -102,11 +100,11 @@ public class EditSampleCategoryModelUIModel extends AbstractTuttiTableUIModel<Sa List<SampleCategoryModelEntry> entries = Lists.newArrayList(firstCategory); int order = 1; for (EditSampleCategoryModelRowModel row : getRows()) { - SampleCategoryModelEntry entry = new SampleCategoryModelEntry(); - entry.setCategoryId(row.getCategoryId()); - entry.setLabel(row.getLabel()); + + SampleCategoryModelEntry entry = row.toEntity(); entry.setOrder(order++); entries.add(entry); + } return new SampleCategoryModel(entries); } 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 bcd9360..cdbc4f4 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 @@ -1066,8 +1066,11 @@ tutti.editSampleCategoryModel.passwordDialog.error.message= tutti.editSampleCategoryModel.passwordDialog.error.title= tutti.editSampleCategoryModel.passwordDialog.message= tutti.editSampleCategoryModel.passwordDialog.title= +tutti.editSampleCategoryModel.saved= tutti.editSampleCategoryModel.table.header.caracteristic= tutti.editSampleCategoryModel.table.header.caracteristic.tip= +tutti.editSampleCategoryModel.table.header.code= +tutti.editSampleCategoryModel.table.header.code.tip= tutti.editSampleCategoryModel.table.header.label= tutti.editSampleCategoryModel.table.header.label.tip= tutti.editSampleCategoryModel.title= 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 8e8875f..3cad4bd 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 @@ -967,9 +967,9 @@ 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 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.askCancelEditBeforeLeaving.cancelSaveSampleCategoryModel=Les catégorisations ne sont pas valides et ne peut pas être enregistrées tutti.editProtocol.askSaveBeforeLeaving.saveProtocol=Des modifications sur le protocole n'ont pas été enregistrées -tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel=Des modifications sur la catégorisation n'ont pas été enregistrées +tutti.editProtocol.askSaveBeforeLeaving.saveSampleCategoryModel=Des modifications sur les catégorisations n'ont pas été enregistrées tutti.editProtocol.field.benthos.tip=Benthos tutti.editProtocol.field.caracteristicMapping.tip=Caractéristiques tutti.editProtocol.field.comment=Commentaire @@ -1036,8 +1036,11 @@ tutti.editSampleCategoryModel.passwordDialog.error.message=Le mot de passe que v tutti.editSampleCategoryModel.passwordDialog.error.title=Mot de passe incorrect tutti.editSampleCategoryModel.passwordDialog.message=Vous souhaitez entrer dans une partie sensible de l'application tutti.editSampleCategoryModel.passwordDialog.title=Zone sensible +tutti.editSampleCategoryModel.saved=Les catégorisations ont été enregistrées tutti.editSampleCategoryModel.table.header.caracteristic=Caractéristique tutti.editSampleCategoryModel.table.header.caracteristic.tip=Caractéristique de la catégorie +tutti.editSampleCategoryModel.table.header.code=Code +tutti.editSampleCategoryModel.table.header.code.tip=Code de la catégorie (sera utilisée dans les exports) tutti.editSampleCategoryModel.table.header.label=Label tutti.editSampleCategoryModel.table.header.label.tip=Label de la catégorie (sera utilisée dans les entêtes de tableau) tutti.editSampleCategoryModel.title=Configurer les catégorisations -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.