This is an automated email from the git hooks/post-receive script. New commit to branch feature/7275 in repository tutti. See http://git.codelutin.com/tutti.git commit 918790e1fbf85d36d2f10ff7b99a84fd366e9977 Author: Kevin Morin <morin@codelutin.com> Date: Mon Dec 21 11:51:21 2015 +0100 améliorer la lisibilité du n° de lot dans le tableau espèces, benthos etc, en ajoutant un espace : 123 456 (et pas 123456) (fixes #7275) --- .../fr/ifremer/tutti/service/DecoratorService.java | 40 ++++++++++++++------- .../tutti/service/DecoratorServiceTest.java | 9 +++++ .../catches/AbstractTuttiBatchTableUIHandler.java | 42 +++++++++++++++++++--- .../accidental/AccidentalBatchUIHandler.java | 2 +- .../catches/benthos/BenthosBatchUIHandler.java | 28 +++------------ .../IndividualObservationBatchUIHandler.java | 2 +- .../marinelitter/MarineLitterBatchUIHandler.java | 2 +- .../catches/species/SpeciesBatchUIHandler.java | 28 +++------------ 8 files changed, 88 insertions(+), 65 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java index 1c3f83f..ada5cbc 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/DecoratorService.java @@ -24,26 +24,18 @@ package fr.ifremer.tutti.service; import com.google.common.collect.Sets; import fr.ifremer.tutti.LabelAware; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.Cruise; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.data.*; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicType; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.entities.referential.*; import org.apache.commons.lang3.StringUtils; import org.nuiton.decorator.Decorator; import org.nuiton.decorator.DecoratorProvider; import java.io.File; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import static org.nuiton.i18n.I18n.n; import static org.nuiton.i18n.I18n.t; @@ -74,6 +66,8 @@ public class DecoratorService extends AbstractTuttiService { public static final String FILE_NAME_COMPATIBLE = "fileNameCompatible"; + public static final String SPACE_EVERY_3_DIGIT = "spaceEvery3Digit"; + public static final String SEPARATOR = "#"; /** Delegate decorator provider. */ @@ -143,6 +137,28 @@ public class DecoratorService extends AbstractTuttiService { return bean == null ? "" : String.valueOf(bean); } }); + registerDecorator(SPACE_EVERY_3_DIGIT, new Decorator<String>(String.class) { + + DecimalFormatSymbols symbols = new DecimalFormatSymbols(); + DecimalFormat df = new DecimalFormat("###,###", symbols); + + { + symbols.setGroupingSeparator(' '); + } + + + @Override + public String toString(Object bean) { + String s = (String) bean; + try { + int i = Integer.parseInt(s); + return df.format(i); + + } catch (NumberFormatException e) { + return ""; + } + } + }); registerDecorator(new VesselDecorator()); registerDecorator(new ProgramDecorator()); registerTuttiDecorator(Program.class, ONLY_NAME, "${name}$s", SEPARATOR, " - "); diff --git a/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java b/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java index d9c2988..b92d402 100644 --- a/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java +++ b/tutti-service/src/test/java/fr/ifremer/tutti/service/DecoratorServiceTest.java @@ -110,6 +110,7 @@ public class DecoratorServiceTest extends AbstractServiceTest { assertDecoratorByTypeFound(Vessel.class); assertDecoratorByTypeFound(Program.class); assertDecoratorByTypeFound(Float.class); + assertDecoratorByTypeFound(DecoratorService.SPACE_EVERY_3_DIGIT, String.class); assertDecoratorByTypeFound(Species.class); assertDecoratorByTypeFound(DecoratorService.FROM_PROTOCOL, Species.class); @@ -231,6 +232,14 @@ public class DecoratorServiceTest extends AbstractServiceTest { } + @Test + public void testDecorateId() { + String id = "123456"; + Decorator<String> idDecorator = assertDecoratorByTypeFound(DecoratorService.SPACE_EVERY_3_DIGIT, String.class); + String decoratedId = idDecorator.toString(id); + Assert.assertEquals("123 456", decoratedId); + } + protected <O> Decorator<O> assertDecoratorByTypeFound(Class<O> type) { return assertDecoratorByTypeFound(null, type); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java index 86f4693..f232c56 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/AbstractTuttiBatchTableUIHandler.java @@ -23,12 +23,11 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches; */ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; -import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.jdesktop.swingx.JXTable; @@ -37,10 +36,15 @@ import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.sort.TableSortController; import org.jdesktop.swingx.table.TableColumnModelExt; +import org.nuiton.decorator.Decorator; +import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import javax.swing.*; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumnModel; import javax.swing.table.TableModel; -import java.awt.Color; -import java.awt.Component; +import java.awt.*; import java.util.Collection; /** @@ -147,4 +151,34 @@ public abstract class AbstractTuttiBatchTableUIHandler<R extends AbstractTuttiBe ), cellWithValueColor); table.addHighlighter(attachmentHighlighter); } + + protected void addIdColumnToModel(TableColumnModel model, + ColumnIdentifier<R> identifier, + JTable table) { + + final TableCellRenderer defaultRenderer = table.getDefaultRenderer(Number.class); + final Decorator<String> idDecorator = getDecorator(String.class, DecoratorService.SPACE_EVERY_3_DIGIT); + + TableCellRenderer idTableCellRenderer = new TableCellRenderer() { + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { + + String text = null; + if (value != null) { + text = idDecorator.toString(value); + } + + Component result = defaultRenderer.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); + if (result instanceof JLabel) { + JLabel jLabel = (JLabel) result; + jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); + + } + return result; + } + }; + + addColumnToModel(model, null, idTableCellRenderer, identifier); + + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java index c8e8d60..218695c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java @@ -253,7 +253,7 @@ public class AccidentalBatchUIHandler { // Id column - addIntegerColumnToModel(columnModel, AccidentalBatchTableModel.ID, TuttiUI.INT_10_DIGITS_PATTERN, table); + addIdColumnToModel(columnModel, AccidentalBatchTableModel.ID, table); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java index 96ba18a..2b20bb8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java @@ -27,35 +27,19 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.BatchContainer; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.SampleCategory; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.persistence.entities.data.*; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractTuttiBatchTableUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SampleCategoryColumnIdentifier; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SampleCategoryComponent; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecorator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecoratorComparator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesSortMode; -import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.*; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.create.CreateBenthosBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency.BenthosFrequencyCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.frequency.BenthosFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.split.SplitBenthosBatchRowModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; @@ -80,14 +64,12 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import org.nuiton.validator.NuitonValidatorResult; -import javax.swing.JComponent; -import javax.swing.RowFilter; +import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; -import java.awt.Color; -import java.awt.Component; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; @@ -703,7 +685,7 @@ public class BenthosBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Bent { // Id column - addIntegerColumnToModel(columnModel, BenthosBatchTableModel.ID, TuttiUI.INT_10_DIGITS_PATTERN, table); + addIdColumnToModel(columnModel, BenthosBatchTableModel.ID, table); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java index 330eec6..9d6831a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java @@ -290,7 +290,7 @@ public class IndividualObservationBatchUIHandler { // Id column - addIntegerColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, TuttiUI.INT_10_DIGITS_PATTERN, table); + addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, table); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java index 9cc4d87..67fd028 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/MarineLitterBatchUIHandler.java @@ -236,7 +236,7 @@ public class MarineLitterBatchUIHandler extends AbstractTuttiBatchTableUIHandler { // Id column - addIntegerColumnToModel(columnModel, MarineLitterBatchTableModel.ID, TuttiUI.INT_10_DIGITS_PATTERN, table); + addIdColumnToModel(columnModel, MarineLitterBatchTableModel.ID, table); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java index 392fd99..43cb3f0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java @@ -27,34 +27,18 @@ import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueId; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.BatchContainer; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.SampleCategory; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.*; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValues; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.ValidationService; import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractTuttiBatchTableUIHandler; -import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SampleCategoryColumnIdentifier; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SampleCategoryComponent; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesAbleBatchRowHelper; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecorator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecoratorComparator; -import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesSortMode; -import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.*; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.create.CreateSpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; -import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; @@ -80,14 +64,12 @@ import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import org.nuiton.validator.NuitonValidatorResult; -import javax.swing.JComponent; -import javax.swing.RowFilter; +import javax.swing.*; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; -import java.awt.Color; -import java.awt.Component; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Serializable; @@ -706,7 +688,7 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec { // Id column - addIntegerColumnToModel(columnModel, SpeciesBatchTableModel.ID, TuttiUI.INT_10_DIGITS_PATTERN, table); + addIdColumnToModel(columnModel, SpeciesBatchTableModel.ID, table); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.