r36 - in trunk/tutti-ui-swing: . src src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency src/main/java/fr/ifremer/tutti/ui/swing/util/table src/main/resources/icons src/test src/test/java src/test/java/fr src/test/java/fr/ifremer src/test/java/fr/ifremer/tutti src/test/java/fr/ifremer/tutti/ui src/test/java/fr/ifremer/tutti/ui/swing src/test/java/fr/ifremer/tutti/ui/swing/content src/test/java/fr/ifremer/tu
Author: tchemit Date: 2012-12-08 12:10:51 +0100 (Sat, 08 Dec 2012) New Revision: 36 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/36 Log: - Always order species frequencies - Simplify table api (remove some not usefull generics) - continue species frequencies screen Added: trunk/tutti-ui-swing/src/main/resources/icons/action-generate-lengthSteps.png trunk/tutti-ui-swing/src/test/ trunk/tutti-ui-swing/src/test/java/ trunk/tutti-ui-swing/src/test/java/fr/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModelTest.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java Modified: trunk/tutti-ui-swing/pom.xml trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/pom.xml 2012-12-08 11:10:51 UTC (rev 36) @@ -293,6 +293,11 @@ <scope>runtime</scope> </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + </dependency> + </dependencies> <profiles> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java 2012-12-08 11:10:51 UTC (rev 36) @@ -28,6 +28,7 @@ import fr.ifremer.tutti.ui.swing.content.catches.species.frequency.SpeciesFrequencyUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -92,7 +93,7 @@ protected SpeciesBatchTableModel tableModel; - protected SpeciesBatchColumnIdentifier columnIdentifier; + protected ColumnIdentifier<SpeciesBatchRowModel> columnIdentifier; protected SpeciesBatchRowModel editRow; @@ -192,7 +193,7 @@ Preconditions.checkNotNull(editRow, "No editRow found in editor."); Object result; - if (columnIdentifier == SpeciesBatchColumnIdentifier.computedNumber) { + if (columnIdentifier == SpeciesBatchTableModel.COMPUTED_NUMBER) { result = editRow.getComputedNumber(); } else { result = editRow.getComputedWeight(); Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java 2012-12-08 11:10:51 UTC (rev 36) @@ -1,132 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.catches.species; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 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.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; - -import static org.nuiton.i18n.I18n.n_; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public enum SpeciesBatchColumnIdentifier implements ColumnIdentifier<SpeciesBatchRowModel> { - - speciesToConfirm( - n_("tutti.table.species.batch.header.toConfirm"), - n_("tutti.table.species.batch.header.toConfirm")), - speciesByCode( - "species", - n_("tutti.table.species.batch.header.speciesByCode"), - n_("tutti.table.species.batch.header.speciesByCode")), - speciesByGenusCode( - "species", - n_("tutti.table.species.batch.header.speciesByGenusCode"), - n_("tutti.table.species.batch.header.speciesByGenusCode")), - vracHorsVrac( - n_("tutti.table.species.batch.header.vracHorsVrac"), - n_("tutti.table.species.batch.header.vracHorsVrac")), - weightCategory( - n_("tutti.table.species.batch.header.weightCategory"), - n_("tutti.table.species.batch.header.weightCategory")), - sex( - n_("tutti.table.species.batch.header.sex"), - n_("tutti.table.species.batch.header.sex")), - maturity( - n_("tutti.table.species.batch.header.maturity"), - n_("tutti.table.species.batch.header.maturity")), - age( - n_("tutti.table.species.batch.header.age"), - n_("tutti.table.species.batch.header.age")), - weight( - n_("tutti.table.species.batch.header.weight"), - n_("tutti.table.species.batch.header.weight")), - computedWeight( - n_("tutti.table.species.batch.header.computedWeight"), - n_("tutti.table.species.batch.header.computedWeight")), - computedNumber( - n_("tutti.table.species.batch.header.computedNumber"), - n_("tutti.table.species.batch.header.computedNumber")), - sampleWeight( - n_("tutti.table.species.batch.header.sampleWeight"), - n_("tutti.table.species.batch.header.sampleWeight")), - elevationRatio( - n_("tutti.table.species.batch.header.elevationRate"), - n_("tutti.table.species.batch.header.elevationRate")), - comment( - n_("tutti.table.species.batch.header.comment"), - n_("tutti.table.species.batch.header.comment")), - file( - null, - n_("tutti.table.species.batch.header.file"), - n_("tutti.table.species.batch.header.file")); - - private final String propertyName; - - private final String headerI18nKey; - - private final String headerTipI18nKey; - - SpeciesBatchColumnIdentifier(String headerI18nKey, String headerTipI18nKey) { - this("", headerI18nKey, headerTipI18nKey); - } - - SpeciesBatchColumnIdentifier(String propertyName, String headerI18nKey, String headerTipI18nKey) { - this.propertyName = "".equals(propertyName) ? name() : propertyName; - this.headerI18nKey = headerI18nKey; - this.headerTipI18nKey = headerTipI18nKey; - } - - @Override - public String getPropertyName() { - return propertyName; - } - - @Override - public String getHeaderI18nKey() { - return headerI18nKey; - } - - @Override - public String getHeaderTipI18nKey() { - return headerTipI18nKey; - } - - @Override - public Object getValue(SpeciesBatchRowModel entry) { - Object result = null; - if (propertyName != null && entry != null) { - result = TuttiUIUtil.getProperty(entry, propertyName); - } - return result; - } - - @Override - public void setValue(SpeciesBatchRowModel entry, Object value) { - if (propertyName != null) - TuttiUIUtil.setProperty(entry, propertyName, value); - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchRowModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchRowModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -37,6 +37,7 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.util.Collections; import java.util.List; /** @@ -195,6 +196,7 @@ List<SpeciesFrequencyRowModel> frequencyRows = SpeciesFrequencyRowModel.fromBeans(frequencies); frequency.addAll(frequencyRows); + Collections.sort(frequency); updateTotalFromFrequencies(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTableModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTableModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -26,34 +26,113 @@ import com.google.common.collect.Sets; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import javax.swing.table.TableColumnModel; import java.util.Set; +import static org.nuiton.i18n.I18n.n_; + /** * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class SpeciesBatchTableModel extends AbstractTuttiTableModel<SpeciesBatchRowModel, SpeciesBatchColumnIdentifier> { +public class SpeciesBatchTableModel extends AbstractTuttiTableModel<SpeciesBatchRowModel> { private static final long serialVersionUID = 1L; - protected final Set<SpeciesBatchColumnIdentifier> noneEditableColIfNoSpecies = Sets.newHashSet( - SpeciesBatchColumnIdentifier.computedNumber, - SpeciesBatchColumnIdentifier.computedWeight - ); + public static final ColumnIdentifier<SpeciesBatchRowModel> SPECIES_TO_CONFIRM = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_SPECIES_TO_CONFIRM, + n_("tutti.table.species.batch.header.toConfirm"), + n_("tutti.table.species.batch.header.toConfirm")); + public static final ColumnIdentifier<SpeciesBatchRowModel> SPECIES_BY_CODE = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_SPECIES, + n_("tutti.table.species.batch.header.speciesByCode"), + n_("tutti.table.species.batch.header.speciesByCode")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> SPECIES_BY_GENUS_CODE = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_SPECIES, + n_("tutti.table.species.batch.header.speciesByGenusCode"), + n_("tutti.table.species.batch.header.speciesByGenusCode")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> VRAC_HORS_VRAC = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_VRAC_HORS_VRAC, + n_("tutti.table.species.batch.header.vracHorsVrac"), + n_("tutti.table.species.batch.header.vracHorsVrac")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> WEIGHT_CATEGORY = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_WEIGHT_CATEGORY, + n_("tutti.table.species.batch.header.weightCategory"), + n_("tutti.table.species.batch.header.weightCategory")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> SEX = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_SEX, + n_("tutti.table.species.batch.header.sex"), + n_("tutti.table.species.batch.header.sex")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> MATURITY = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_MATURITY, + n_("tutti.table.species.batch.header.maturity"), + n_("tutti.table.species.batch.header.maturity")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> AGE = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_AGE, + n_("tutti.table.species.batch.header.age"), + n_("tutti.table.species.batch.header.age")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> WEIGHT = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_WEIGHT, + n_("tutti.table.species.batch.header.weight"), + n_("tutti.table.species.batch.header.weight")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> COMPUTED_WEIGHT = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_COMPUTED_WEIGHT, + n_("tutti.table.species.batch.header.computedWeight"), + n_("tutti.table.species.batch.header.computedWeight")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> COMPUTED_NUMBER = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_COMPUTED_NUMBER, + n_("tutti.table.species.batch.header.computedNumber"), + n_("tutti.table.species.batch.header.computedNumber")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> SAMPLE_WEIGHT = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_SAMPLE_WEIGHT, + n_("tutti.table.species.batch.header.sampleWeight"), + n_("tutti.table.species.batch.header.sampleWeight")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> ELEVATION_RATIO = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_ELEVATION_RATIO, + n_("tutti.table.species.batch.header.elevationRate"), + n_("tutti.table.species.batch.header.elevationRate")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> COMMENT = ColumnIdentifier.newId( + SpeciesBatchRowModel.PROPERTY_COMMENT, + n_("tutti.table.species.batch.header.comment"), + n_("tutti.table.species.batch.header.comment")); + + public static final ColumnIdentifier<SpeciesBatchRowModel> FILE = ColumnIdentifier.newId( + null, + n_("tutti.table.species.batch.header.file"), + n_("tutti.table.species.batch.header.file")); + + + protected final Set<ColumnIdentifier<SpeciesBatchRowModel>> noneEditableColIfNoSpecies; + public SpeciesBatchTableModel(TableColumnModel columnModel) { super(columnModel); // TODO This will be dynamic by the protocol... setNoneEditableCols( - SpeciesBatchColumnIdentifier.age, - SpeciesBatchColumnIdentifier.maturity, - SpeciesBatchColumnIdentifier.sampleWeight, - SpeciesBatchColumnIdentifier.elevationRatio, - SpeciesBatchColumnIdentifier.file + AGE, + MATURITY, + SAMPLE_WEIGHT, + ELEVATION_RATIO, + FILE ); + noneEditableColIfNoSpecies = Sets.newHashSet(); + noneEditableColIfNoSpecies.add(COMPUTED_NUMBER); + noneEditableColIfNoSpecies.add(COMPUTED_WEIGHT); } @Override @@ -65,43 +144,43 @@ public void setValueAt(Object aValue, int rowIndex, int columnIndex, - SpeciesBatchColumnIdentifier propertyName, + ColumnIdentifier<SpeciesBatchRowModel> propertyName, SpeciesBatchRowModel entry) { super.setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); - if (propertyName == SpeciesBatchColumnIdentifier.speciesByCode) { + if (propertyName == SPECIES_BY_CODE) { // update also other columns fireTableCellUpdated(rowIndex, - SpeciesBatchColumnIdentifier.speciesByGenusCode, - SpeciesBatchColumnIdentifier.computedNumber, - SpeciesBatchColumnIdentifier.computedWeight); + SPECIES_BY_GENUS_CODE, + COMPUTED_NUMBER, + COMPUTED_WEIGHT); - } else if (propertyName == SpeciesBatchColumnIdentifier.speciesByGenusCode) { + } else if (propertyName == SPECIES_BY_GENUS_CODE) { // update also other columns fireTableCellUpdated(rowIndex, - SpeciesBatchColumnIdentifier.speciesByCode, - SpeciesBatchColumnIdentifier.computedNumber, - SpeciesBatchColumnIdentifier.computedWeight); - } else if (propertyName == SpeciesBatchColumnIdentifier.computedNumber) { + SPECIES_BY_CODE, + COMPUTED_NUMBER, + COMPUTED_WEIGHT); + } else if (propertyName == COMPUTED_NUMBER) { // update also other columns fireTableCellUpdated(rowIndex, - SpeciesBatchColumnIdentifier.computedWeight); + COMPUTED_WEIGHT); - } else if (propertyName == SpeciesBatchColumnIdentifier.computedWeight) { + } else if (propertyName == COMPUTED_WEIGHT) { // update also other columns fireTableCellUpdated(rowIndex, - SpeciesBatchColumnIdentifier.computedNumber); + COMPUTED_NUMBER); } } @Override protected boolean isCellEditable(int rowIndex, int columnIndex, - SpeciesBatchColumnIdentifier propertyName) { + ColumnIdentifier<SpeciesBatchRowModel> propertyName) { boolean result = super.isCellEditable(rowIndex, columnIndex, Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java 2012-12-08 11:10:51 UTC (rev 36) @@ -57,7 +57,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class SpeciesTabUIHandler extends AbstractTuttiTableUIHandler<SpeciesBatchRowModel, SpeciesBatchColumnIdentifier, SpeciesBatchTableModel, SpeciesTabUIModel> { +public class SpeciesTabUIHandler extends AbstractTuttiTableUIHandler<SpeciesBatchRowModel, SpeciesTabUIModel> { /** Logger. */ private static final Log log = LogFactory.getLog(SpeciesTabUIHandler.class); @@ -101,6 +101,11 @@ } @Override + protected SpeciesBatchTableModel getTableModel() { + return (SpeciesBatchTableModel) getTable().getModel(); + } + + @Override protected SpeciesTabUIModel getModel() { return ui.getModel(); } @@ -122,7 +127,7 @@ JXTable table = getTable(); // create table column model - TableColumnModel columnModel = createTableColumnModel(table); + TableColumnModel columnModel = createTableColumnModel(); // create table model SpeciesBatchTableModel tableModel = @@ -134,7 +139,8 @@ table.getTableHeader().setReorderingAllowed(false); - table.addHighlighter(TuttiUIUtil.newBackgroundColorHighlighter(HighlightPredicate.READ_ONLY, Color.LIGHT_GRAY)); + table.addHighlighter(TuttiUIUtil.newBackgroundColorHighlighter( + HighlightPredicate.READ_ONLY, Color.LIGHT_GRAY)); // when model datas change let's propagate it table model listenRowsFromModel(); @@ -254,7 +260,7 @@ } @Override - protected TableColumnModel createTableColumnModel(JXTable table) { + protected TableColumnModel createTableColumnModel() { DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); @@ -262,8 +268,8 @@ { // Species to confirm addBooleanColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.speciesToConfirm, - table); + SpeciesBatchTableModel.SPECIES_TO_CONFIRM, + getTable()); } List<Species> allSpecies = persistenceService.getAllSpecies(); @@ -274,7 +280,7 @@ Species.class, DecoratorService.SPECIES_BY_CODE); addComboDataColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.speciesByCode, + SpeciesBatchTableModel.SPECIES_BY_CODE, decorator, allSpecies); } @@ -284,7 +290,7 @@ Species.class, DecoratorService.SPECIES_BY_GENUS); addComboDataColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.speciesByGenusCode, + SpeciesBatchTableModel.SPECIES_BY_GENUS_CODE, decorator, allSpecies); } @@ -292,7 +298,7 @@ { // Vrac / Hors vrac addComboEnumColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.vracHorsVrac, + SpeciesBatchTableModel.VRAC_HORS_VRAC, VracHorsVracEnum.values()); } @@ -306,7 +312,7 @@ persistenceService.getAllWeightCategory(); addComboDataColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.weightCategory, + SpeciesBatchTableModel.WEIGHT_CATEGORY, decorator, data); } @@ -318,28 +324,28 @@ List<Sex> data = persistenceService.getAllSex(); addComboDataColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.sex, + SpeciesBatchTableModel.SEX, decorator, data); } { // Maturity addFloatColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.maturity, + SpeciesBatchTableModel.MATURITY, TuttiUI.DECIMAL3_PATTERN); } { // Age addFloatColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.age, + SpeciesBatchTableModel.AGE, TuttiUI.DECIMAL3_PATTERN); } { // Poids observé addFloatColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.weight, + SpeciesBatchTableModel.WEIGHT, TuttiUI.DECIMAL3_PATTERN); } @@ -348,7 +354,7 @@ addColumnToModel(columnModel, FrequencyCellComponent.newEditor(ui.getFrequencyUI()), FrequencyCellComponent.newRender(), - SpeciesBatchColumnIdentifier.computedWeight); + SpeciesBatchTableModel.COMPUTED_WEIGHT); } { // Nombre calculé @@ -356,31 +362,31 @@ addColumnToModel(columnModel, FrequencyCellComponent.newEditor(ui.getFrequencyUI()), FrequencyCellComponent.newRender(), - SpeciesBatchColumnIdentifier.computedNumber); + SpeciesBatchTableModel.COMPUTED_NUMBER); } { // Poids d'échantillon addColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.sampleWeight); + SpeciesBatchTableModel.SAMPLE_WEIGHT); } { // Fraction d'élévation addColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.elevationRatio); + SpeciesBatchTableModel.ELEVATION_RATIO); } { // Commentaire addColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.comment); + SpeciesBatchTableModel.COMMENT); } { // Pièces-jointes addColumnToModel(columnModel, - SpeciesBatchColumnIdentifier.file); + SpeciesBatchTableModel.FILE); } return columnModel; } Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java 2012-12-08 11:10:51 UTC (rev 36) @@ -1,95 +0,0 @@ -package fr.ifremer.tutti.ui.swing.content.catches.species.frequency; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 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.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; - -import static org.nuiton.i18n.I18n.n_; - -/** - * @author tchemit <chemit@codelutin.com> - * @since 0.2 - */ -public enum SpeciesFrequencyColumnIdentifier implements ColumnIdentifier<SpeciesFrequencyRowModel> { - - lengthStep( - n_("tutti.table.species.frequency.header.lengthStep"), - n_("tutti.table.species.frequency.header.lengthStep")), - number( - n_("tutti.table.species.frequency.header.number"), - n_("tutti.table.species.frequency.header.number")), - weight( - n_("tutti.table.species.frequency.header.weight"), - n_("tutti.table.species.frequency.header.weight")), - computedWeight( - n_("tutti.table.species.frequency.header.computedWeight"), - n_("tutti.table.species.frequency.header.computedWeight")); - - private final String propertyName; - - private final String headerI18nKey; - - private final String headerTipI18nKey; - - SpeciesFrequencyColumnIdentifier(String headerI18nKey, String headerTipI18nKey) { - this("", headerI18nKey, headerTipI18nKey); - } - - SpeciesFrequencyColumnIdentifier(String propertyName, String headerI18nKey, String headerTipI18nKey) { - this.propertyName = "".equals(propertyName) ? name() : propertyName; - this.headerI18nKey = headerI18nKey; - this.headerTipI18nKey = headerTipI18nKey; - } - - @Override - public String getPropertyName() { - return propertyName; - } - - @Override - public String getHeaderI18nKey() { - return headerI18nKey; - } - - @Override - public String getHeaderTipI18nKey() { - return headerTipI18nKey; - } - - @Override - public Object getValue(SpeciesFrequencyRowModel entry) { - Object result = null; - if (entry != null) { - result = TuttiUIUtil.getProperty(entry, propertyName); - } - return result; - } - - @Override - public void setValue(SpeciesFrequencyRowModel entry, Object value) { - TuttiUIUtil.setProperty(entry, propertyName, value); - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -25,6 +25,7 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; @@ -39,7 +40,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBatchFrequency, SpeciesFrequencyRowModel> { +public class SpeciesFrequencyRowModel extends AbstractTuttiBeanUIModel<SpeciesBatchFrequency, SpeciesFrequencyRowModel> implements Comparable<SpeciesFrequencyRowModel> { private static final long serialVersionUID = 1L; @@ -87,6 +88,8 @@ BinderFactory.newBinder(SpeciesFrequencyRowModel.class, SpeciesBatchFrequency.class); + private static final Ordering<Float> ordering = Ordering.natural().nullsFirst(); + public static List<SpeciesFrequencyRowModel> fromBeans(List<SpeciesBatchFrequency> frequency) { List<SpeciesFrequencyRowModel> result = Lists.newArrayList(); for (SpeciesBatchFrequency b : frequency) { @@ -157,4 +160,10 @@ public boolean isValid() { return lengthStep != null && number != null; } + + @Override + public int compareTo(SpeciesFrequencyRowModel o) { + int result = ordering.compare(lengthStep, o.lengthStep); + return result; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -27,30 +27,54 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Maps; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import javax.swing.table.TableColumnModel; import java.util.List; import java.util.Map; +import static org.nuiton.i18n.I18n.n_; + /** * Model of the species frequency table. * * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class SpeciesFrequencyTableModel extends AbstractTuttiTableModel<SpeciesFrequencyRowModel, SpeciesFrequencyColumnIdentifier> { +public class SpeciesFrequencyTableModel extends AbstractTuttiTableModel<SpeciesFrequencyRowModel> { private static final long serialVersionUID = 1L; + public static final ColumnIdentifier<SpeciesFrequencyRowModel> LENGTH_STEP = ColumnIdentifier.newId( + SpeciesFrequencyRowModel.PROPERTY_LENGTH_STEP, + n_("tutti.table.species.frequency.header.lengthStep"), + n_("tutti.table.species.frequency.header.lengthStep")); + + public static final ColumnIdentifier<SpeciesFrequencyRowModel> NUMBER = ColumnIdentifier.newId( + SpeciesFrequencyRowModel.PROPERTY_NUMBER, + n_("tutti.table.species.frequency.header.number"), + n_("tutti.table.species.frequency.header.number")); + + public static final ColumnIdentifier<SpeciesFrequencyRowModel> WEIGHT = ColumnIdentifier.newId( + SpeciesFrequencyRowModel.PROPERTY_WEIGHT, + n_("tutti.table.species.frequency.header.weight"), + n_("tutti.table.species.frequency.header.weight")); + + public static final ColumnIdentifier<SpeciesFrequencyRowModel> COMPUTED_WEIGHT = ColumnIdentifier.newId( + SpeciesFrequencyRowModel.PROPERTY_COMPUTED_WEIGHT, + n_("tutti.table.species.frequency.header.computedWeight"), + n_("tutti.table.species.frequency.header.computedWeight")); + private final SpeciesFrequencyUIModel uiModel; private final Map<Float, SpeciesFrequencyRowModel> rowCache; - public SpeciesFrequencyTableModel(TableColumnModel columnModel, SpeciesFrequencyUIModel uiModel) { + public SpeciesFrequencyTableModel(TableColumnModel columnModel, + SpeciesFrequencyUIModel uiModel) { super(columnModel); this.uiModel = uiModel; this.rowCache = Maps.newTreeMap(); - setNoneEditableCols(SpeciesFrequencyColumnIdentifier.computedWeight); + setNoneEditableCols(COMPUTED_WEIGHT); } @Override @@ -76,7 +100,7 @@ public void setValueAt(Object aValue, int rowIndex, int columnIndex, - SpeciesFrequencyColumnIdentifier propertyName, + ColumnIdentifier<SpeciesFrequencyRowModel> propertyName, SpeciesFrequencyRowModel entry) { super.setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); // TODO Rebuild the computedWeight if possible... Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java 2012-12-08 11:10:51 UTC (rev 36) @@ -51,7 +51,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyColumnIdentifier, SpeciesFrequencyTableModel, SpeciesFrequencyUIModel> { +public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<SpeciesFrequencyRowModel, SpeciesFrequencyUIModel> { /** Logger. */ private static final Log log = @@ -85,7 +85,7 @@ JXTable table = getTable(); // create table column model - TableColumnModel columnModel = createTableColumnModel(table); + TableColumnModel columnModel = createTableColumnModel(); SpeciesFrequencyUIModel model = getModel(); @@ -141,18 +141,7 @@ @Override protected void saveRow(SpeciesFrequencyRowModel row) { - // No persistence save from this screen - Float lengthStep = row.getLengthStep(); - if (log.isInfoEnabled()) { - log.info("Add row " + lengthStep + " to cache"); - } - - if (lengthStep != null) { - - // add it to cache - - } } @Override @@ -161,6 +150,11 @@ } @Override + protected SpeciesFrequencyTableModel getTableModel() { + return (SpeciesFrequencyTableModel) getTable().getModel(); + } + + @Override protected SpeciesFrequencyUIModel getModel() { return ui.getModel(); } @@ -197,18 +191,23 @@ log.info("Will apply rafale step: " + step); } SpeciesFrequencyUIModel model = getModel(); - Map<Float, SpeciesFrequencyRowModel> rowsByStep = getTableModel().getRowCache(); + SpeciesFrequencyTableModel tableModel = getTableModel(); + Map<Float, SpeciesFrequencyRowModel> rowsByStep = tableModel.getRowCache(); + float aroundLengthStep = model.getLengthStep(step); SpeciesFrequencyRowModel row = rowsByStep.get(aroundLengthStep); + int rowIndex; + if (row != null) { // increments current row Integer number = row.getNumber(); row.setNumber((number == null ? 0 : number) + 1); - getTableModel().updateRow(row); + rowIndex = tableModel.updateRow(row); + } else { // create a new row @@ -222,10 +221,12 @@ Collections.sort(steps); - int indexRow = steps.indexOf(aroundLengthStep); + rowIndex = steps.indexOf(aroundLengthStep); - getTableModel().addNewRow(indexRow, row); + tableModel.addNewRow(rowIndex, row); } + + getTable().scrollRowToVisible(rowIndex); } public void editBatch(SpeciesBatchRowModel row) { @@ -286,35 +287,35 @@ } @Override - protected TableColumnModel createTableColumnModel(JXTable table) { + protected TableColumnModel createTableColumnModel() { DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); { // LengthStep addFloatColumnToModel(columnModel, - SpeciesFrequencyColumnIdentifier.lengthStep, + SpeciesFrequencyTableModel.LENGTH_STEP, TuttiUI.DECIMAL1_PATTERN); } { // Number addIntegerColumnToModel(columnModel, - SpeciesFrequencyColumnIdentifier.number, + SpeciesFrequencyTableModel.NUMBER, TuttiUI.INT_6_DIGITS_PATTERN); } { // weight addFloatColumnToModel(columnModel, - SpeciesFrequencyColumnIdentifier.weight, + SpeciesFrequencyTableModel.WEIGHT, TuttiUI.DECIMAL3_PATTERN); } { // computedWeight addFloatColumnToModel(columnModel, - SpeciesFrequencyColumnIdentifier.computedWeight, + SpeciesFrequencyTableModel.COMPUTED_WEIGHT, TuttiUI.DECIMAL3_PATTERN); } return columnModel; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -39,12 +39,11 @@ import java.util.Set; /** - * TODO - * + * @param <R> type of a row. * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public abstract class AbstractTuttiTableModel<R extends Serializable, C extends ColumnIdentifier<R>> extends AbstractTableModel { +public abstract class AbstractTuttiTableModel<R extends Serializable> extends AbstractTableModel { private static final long serialVersionUID = 1L; @@ -64,7 +63,7 @@ * * @since 0.2 */ - protected final List<C> columnIdentifiers; + protected final List<ColumnIdentifier<R>> columnIdentifiers; /** * Data in the model. @@ -78,7 +77,7 @@ * * @since 0.2 */ - protected Set<C> noneEditableCols; + protected Set<ColumnIdentifier<?>> noneEditableCols; protected abstract R createNewRow(); @@ -89,7 +88,7 @@ for (int i = 0; i < nbcols; i++) { TableColumn column = columnModel.getColumn(i); columns[i] = column; - columnIdentifiers.add((C) column.getIdentifier()); + columnIdentifiers.add((ColumnIdentifier<R>) column.getIdentifier()); } } @@ -133,7 +132,7 @@ fireTableRowsInserted(rowIndex, rowIndex); } - public void updateRow(R row) { + public int updateRow(R row) { Preconditions.checkNotNull(row, "Row can not be null."); List<R> data = getRows(); @@ -142,6 +141,7 @@ int rowIndex = data.indexOf(row); fireTableRowsUpdated(rowIndex, rowIndex); + return rowIndex; } protected void onRowsChanged(List<R> data) { @@ -152,9 +152,9 @@ // by default do nothing } - public final C getPropertyName(int columnIndex) { + public final ColumnIdentifier<R> getPropertyName(int columnIndex) { TableColumn column = getColumn(columnIndex); - return (C) column.getIdentifier(); + return (ColumnIdentifier<R>) column.getIdentifier(); } public final R getEntry(int rowIndex) { @@ -164,7 +164,7 @@ return result; } - public final void setNoneEditableCols(C... noneEditableCols) { + public final void setNoneEditableCols(ColumnIdentifier<?>... noneEditableCols) { this.noneEditableCols = Sets.newHashSet(noneEditableCols); } @@ -181,7 +181,7 @@ @Override public final Object getValueAt(int rowIndex, int columnIndex) { R entry = getEntry(rowIndex); - C propertyName = getPropertyName(columnIndex); + ColumnIdentifier<R> propertyName = getPropertyName(columnIndex); Object result = getValueAt(rowIndex, columnIndex, propertyName, entry); return result; } @@ -189,20 +189,20 @@ @Override public final void setValueAt(Object aValue, int rowIndex, int columnIndex) { R entry = getEntry(rowIndex); - C propertyName = getPropertyName(columnIndex); + ColumnIdentifier<R> propertyName = getPropertyName(columnIndex); setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); } @Override public final boolean isCellEditable(int rowIndex, int columnIndex) { - C identifier = getPropertyName(columnIndex); + ColumnIdentifier<R> identifier = getPropertyName(columnIndex); boolean result = isCellEditable(rowIndex, columnIndex, identifier); return result; } protected Object getValueAt(int rowIndex, int columnIndex, - C propertyName, + ColumnIdentifier<R> propertyName, R entry) { Object result = propertyName.getValue(entry); return result; @@ -211,21 +211,21 @@ protected void setValueAt(Object aValue, int rowIndex, int columnIndex, - C propertyName, + ColumnIdentifier<R> propertyName, R entry) { propertyName.setValue(entry, aValue); } protected boolean isCellEditable(int rowIndex, int columnIndex, - C propertyName) { + ColumnIdentifier<R> propertyName) { boolean result = !noneEditableCols.contains(propertyName); return result; } protected final void fireTableCellUpdated(int rowIndex, - C... identifiers) { - for (C identifier : identifiers) { + ColumnIdentifier... identifiers) { + for (ColumnIdentifier<?> identifier : identifiers) { int columnIndex = getColumnIndex(identifier); fireTableCellUpdated(rowIndex, columnIndex); } @@ -236,7 +236,7 @@ return columns[columnIndex]; } - protected final int getColumnIndex(C property) { + protected final int getColumnIndex(ColumnIdentifier<?> property) { int result = columnIdentifiers.indexOf(property); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2012-12-08 11:10:51 UTC (rev 36) @@ -66,10 +66,12 @@ import static org.nuiton.i18n.I18n._; /** + * @param <R> type of a row + * @param <M> type of the ui model * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIModel, C extends ColumnIdentifier<R>, T extends AbstractTuttiTableModel<R, C>, M extends AbstractTuttiTableUIModel<?, R, M>> extends AbstractTuttiUIHandler<M> { +public abstract class AbstractTuttiTableUIHandler<R extends AbstractTuttiBeanUIModel, M extends AbstractTuttiTableUIModel<?, R, M>> extends AbstractTuttiUIHandler<M> { /** Logger. */ private static final Log log = @@ -88,9 +90,10 @@ rowMonitor = new BeanMonitor(properties); } - protected KeyListener installTableKeyListener(TableColumnModel columnModel, JTable table) { + protected KeyListener installTableKeyListener(TableColumnModel columnModel, + JTable table) { - T model = getTableModel(); + AbstractTuttiTableModel<R> model = getTableModel(); final MoveToNextEditableCellAction nextCellAction = MoveToNextEditableCellAction.newAction(model, table); final MoveToPreviousEditableCellAction previousCellAction = @@ -142,7 +145,7 @@ protected void addColumnToModel(TableColumnModel model, TableCellEditor editor, TableCellRenderer renderer, - ColumnIdentifier identifier) { + ColumnIdentifier<R> identifier) { TableColumn col = new TableColumnExt(model.getColumnCount()); col.setCellEditor(editor); @@ -155,13 +158,13 @@ } protected void addColumnToModel(TableColumnModel model, - ColumnIdentifier identifier) { + ColumnIdentifier<R> identifier) { addColumnToModel(model, null, null, identifier); } protected void addFloatColumnToModel(TableColumnModel model, - ColumnIdentifier identifier, + ColumnIdentifier<R> identifier, String numberPattern) { NumberCellEditor<Float> editor = @@ -175,7 +178,7 @@ } protected void addIntegerColumnToModel(TableColumnModel model, - ColumnIdentifier identifier, + ColumnIdentifier<R> identifier, String numberPattern) { NumberCellEditor<Integer> editor = @@ -189,7 +192,7 @@ protected void addBooleanColumnToModel(TableColumnModel model, - ColumnIdentifier identifier, + ColumnIdentifier<R> identifier, JTable table) { addColumnToModel(model, @@ -199,7 +202,7 @@ } protected <B> void addComboDataColumnToModel(TableColumnModel model, - ColumnIdentifier identifier, + ColumnIdentifier<R> identifier, Decorator<B> decorator, List<B> data) { JComboBox comboBox = new JComboBox(); comboBox.setRenderer(newListCellRender(decorator)); @@ -216,7 +219,7 @@ } protected <B extends Enum<B>> void addComboEnumColumnToModel(TableColumnModel model, - ColumnIdentifier identifier, + ColumnIdentifier<R> identifier, B[] data) { EnumEditor<B> comboBox = EnumEditor.newEditor(data); @@ -314,13 +317,11 @@ protected abstract void saveRow(R row); - protected abstract TableColumnModel createTableColumnModel(JXTable table); + protected abstract TableColumnModel createTableColumnModel(); protected abstract JTable getTable(); - protected T getTableModel() { - return (T) getTable().getModel(); - } + protected abstract AbstractTuttiTableModel<R> getTableModel(); protected void listenModifcationOnFirstRow() { List<R> rows = getTableModel().getRows(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIModel.java 2012-12-08 11:10:51 UTC (rev 36) @@ -31,6 +31,9 @@ import java.util.List; /** + * @param <E> type of incoming bean to edit + * @param <R> type of the row of the table model + * @param <B> type of this model * @author tchemit <chemit@codelutin.com> * @since 0.2 */ Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java 2012-12-08 10:50:28 UTC (rev 35) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/ColumnIdentifier.java 2012-12-08 11:10:51 UTC (rev 36) @@ -24,21 +24,64 @@ * #L% */ +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; + import java.io.Serializable; /** * @author tchemit <chemit@codelutin.com> * @since 0.2 */ -public interface ColumnIdentifier<R> extends Serializable { +public class ColumnIdentifier<R> implements Serializable { - String getPropertyName(); + private static final long serialVersionUID = 1L; - String getHeaderI18nKey(); + private final String propertyName; - String getHeaderTipI18nKey(); + private final String headerI18nKey; - void setValue(R entry, Object value); + private final String headerTipI18nKey; - Object getValue(R entry); + public static <R> ColumnIdentifier<R> newId(String propertyName, + String headerI18nKey, + String headerTipI18nKey) { + return new ColumnIdentifier<R>(propertyName, + headerI18nKey, + headerTipI18nKey); + } + + ColumnIdentifier(String propertyName, + String headerI18nKey, + String headerTipI18nKey) { + this.propertyName = propertyName; + this.headerI18nKey = headerI18nKey; + this.headerTipI18nKey = headerTipI18nKey; + } + + public String getPropertyName() { + return propertyName; + } + + public String getHeaderI18nKey() { + return headerI18nKey; + } + + public String getHeaderTipI18nKey() { + return headerTipI18nKey; + } + + public Object getValue(R entry) { + Object result = null; + if (propertyName != null && entry != null) { + result = TuttiUIUtil.getProperty(entry, propertyName); + } + return result; + } + + public void setValue(R entry, Object value) { + if (propertyName != null) { + TuttiUIUtil.setProperty(entry, propertyName, value); + } + } + } Added: trunk/tutti-ui-swing/src/main/resources/icons/action-generate-lengthSteps.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-generate-lengthSteps.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL Added: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModelTest.java =================================================================== --- trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModelTest.java (rev 0) +++ trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModelTest.java 2012-12-08 11:10:51 UTC (rev 36) @@ -0,0 +1,66 @@ +package fr.ifremer.tutti.ui.swing.content.catches.species.frequency; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 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 org.junit.Assert; +import org.junit.Test; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 0.2 + */ +public class SpeciesFrequencyRowModelTest { + + @Test + public void compareTo() throws Exception { + + SpeciesFrequencyRowModel s0 = new SpeciesFrequencyRowModel(); + SpeciesFrequencyRowModel s1 = new SpeciesFrequencyRowModel(); + + // s0=null, s1=null + Assert.assertTrue(s0.compareTo(s1) == 0); + + // s0=1, s1=null + s0.setLengthStep(1f); + Assert.assertTrue(s0.compareTo(s1) > 0); + + // s0=null, s1=1 + s0.setLengthStep(null); + s1.setLengthStep(1f); + Assert.assertTrue(s0.compareTo(s1) < 0); + + // s0=2, s1=1 + s0.setLengthStep(2f); + Assert.assertTrue(s0.compareTo(s1) > 0); + + // s0=2, s1=2 + s1.setLengthStep(2f); + Assert.assertTrue(s0.compareTo(s1) == 0); + + // s0=2, s1=3 + s1.setLengthStep(3f); + Assert.assertTrue(s0.compareTo(s1) < 0); + } +} Property changes on: trunk/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyRowModelTest.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native
participants (1)
-
tchemit@users.forge.codelutin.com