Author: tchemit Date: 2012-12-28 10:17:49 +0100 (Fri, 28 Dec 2012) New Revision: 118 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/118 Log: refs #1810: [PROTOCOLE] Ecran de saisie (add sampleCategoryOrder) refs #1805: [Onglet Poisson] Assistance ?\195?\160 la saisie des lots de poissons (add isRowValid) fix other batch table NPE Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties =================================================================== --- trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-persistence/src/main/xmi/tutti-persistence.properties 2012-12-28 09:17:49 UTC (rev 118) @@ -40,5 +40,6 @@ fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.environmentPmfmId.stereotype=ordered fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.hydrologyPmfmId.stereotype=ordered fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.species.stereotype=ordered +fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol.attribute.sampleCategoryOrder.stereotype=ordered fr.ifremer.tutti.persistence.entities.referential.Caracteristic.attribute.qualitativeValue.stereotype=ordered Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo =================================================================== (Binary files differ) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2012-12-28 09:17:49 UTC (rev 118) @@ -84,6 +84,7 @@ public BenthosBatchTableModel(TableColumnModel columnModel) { super(columnModel); + setNoneEditableCols(); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchTableModel.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchTableModel.java 2012-12-28 09:17:49 UTC (rev 118) @@ -76,6 +76,7 @@ public PlanktonBatchTableModel(TableColumnModel columnModel) { super(columnModel); + setNoneEditableCols(); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SampleCategory.java 2012-12-28 09:17:49 UTC (rev 118) @@ -65,4 +65,8 @@ public void setCategoryWeight(Float categoryWeight) { this.categoryWeight = categoryWeight; } + + public boolean isValid() { + return categoryValue != null && categoryWeight != null; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java 2012-12-28 09:17:49 UTC (rev 118) @@ -456,7 +456,21 @@ return ageSampleCategory; } - // public int getRowCount() { -// return frequency == null ? 0 : frequency.size(); -// } + public boolean isRowValid() { + boolean result = species != null; + if (result) { + result = weight != null; + + if (!result) { + + // No weight filled, so at least one sample category must be valid + result = sortedUnsortedSampleCategory.isValid() || + sizeSampleCategory.isValid() || + sexSampleCategory.isValid() || + maturitySampleCategory.isValid() || + ageSampleCategory.isValid(); + } + } + return result; + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2012-12-28 09:17:49 UTC (rev 118) @@ -45,6 +45,7 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.editor.AttachmentCellComponent; import fr.ifremer.tutti.ui.swing.util.editor.LongTextCellComponent; +import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -53,6 +54,7 @@ import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; +import java.io.Serializable; import java.util.List; import java.util.Set; @@ -138,8 +140,9 @@ protected void onModelRowsChanged(List<SpeciesBatchRowModel> rows) { super.onModelRowsChanged(rows); + // compute row valid for (SpeciesBatchRowModel row : rows) { - boolean rowValid = row.getSpecies() != null; + boolean rowValid = row.isRowValid(); row.setValid(rowValid); } // build the new sampling tree from the new rows to edit @@ -186,86 +189,42 @@ { // SortedUnsortedCategory column - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(caracteristicDecorator), - SampleCategoryComponent.newRender(defaultRenderer, caracteristicDecorator), - SpeciesBatchTableModel.SORTED_UNSORTED_CATEGORY); - -// Caracteristic data = -// persistenceService.getSortedUnsortedCaracteristic(); -// -// addComboDataColumnToModel(columnModel, -// SpeciesBatchTableModel.SORTED_UNSORTED_CATEGORY, -// caracteristicDecorator, -// data.getQualitativeValue()); + addSampleCategoryColumnToModel(columnModel, + SpeciesBatchTableModel.SORTED_UNSORTED_CATEGORY, + caracteristicDecorator, + defaultRenderer); } { // SizeCategory column - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(caracteristicDecorator), - SampleCategoryComponent.newRender(defaultRenderer, caracteristicDecorator), - SpeciesBatchTableModel.SIZE_CATEGORY); - -// Caracteristic data = -// persistenceService.getSizeCategoryCaracteristic(); -// -// addComboDataColumnToModel(columnModel, -// SpeciesBatchTableModel.SIZE_CATEGORY, -// caracteristicDecorator, -// data.getQualitativeValue()); + addSampleCategoryColumnToModel(columnModel, + SpeciesBatchTableModel.SIZE_CATEGORY, + caracteristicDecorator, + defaultRenderer); } { // SexCategory column - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(caracteristicDecorator), - SampleCategoryComponent.newRender(defaultRenderer, caracteristicDecorator), - SpeciesBatchTableModel.SEX_CATEGORY); - -// Caracteristic data = persistenceService.getSexCaracteristic(); -// -// addComboDataColumnToModel(columnModel, -// SpeciesBatchTableModel.SEX_CATEGORY, -// caracteristicDecorator, -// data.getQualitativeValue()); + addSampleCategoryColumnToModel(columnModel, + SpeciesBatchTableModel.SEX_CATEGORY, + caracteristicDecorator, + defaultRenderer); } { // MaturityCategory column - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(caracteristicDecorator), - SampleCategoryComponent.newRender(defaultRenderer, caracteristicDecorator), - SpeciesBatchTableModel.MATURITY_CATEGORY); - -// Caracteristic data = -// persistenceService.getMaturityCaracteristic(); -// -// -// addComboDataColumnToModel(columnModel, -// SpeciesBatchTableModel.MATURITY_CATEGORY, -// caracteristicDecorator, -// data.getQualitativeValue()); + addSampleCategoryColumnToModel(columnModel, + SpeciesBatchTableModel.MATURITY_CATEGORY, + caracteristicDecorator, + defaultRenderer); } { // AgeCategory column - Decorator<Float> floatDecorator = new Decorator<Float>(Float.class) { - private static final long serialVersionUID = 1L; - - @Override - public String toString(Object bean) { - return String.valueOf(bean); - } - }; - addColumnToModel(columnModel, - SampleCategoryComponent.newEditor(floatDecorator), - SampleCategoryComponent.newRender(defaultRenderer, floatDecorator), - SpeciesBatchTableModel.AGE_CATEGORY); - -// addFloatColumnToModel(columnModel, -// SpeciesBatchTableModel.AGE_CATEGORY, -// TuttiUI.DECIMAL3_PATTERN); + addSampleCategoryColumnToModel(columnModel, + SpeciesBatchTableModel.AGE_CATEGORY, + getDecorator(Float.class, null), + defaultRenderer); } { // Weight column @@ -333,13 +292,20 @@ recomputeTotalHorsVrac(); } - if (SpeciesBatchRowModel.PROPERTY_SPECIES.equals(propertyName)) { + if (SAMPLING_PROPERTIES.contains(propertyName)) { // species has changed, recompute valid property - boolean rowValid = newValue != null; + boolean rowValid = row.isRowValid(); row.setValid(rowValid); } + if (SpeciesBatchRowModel.PROPERTY_WEIGHT.equals(propertyName)) { + + // weight has changed, recompute valid property + boolean rowValid = row.isRowValid(); + row.setValid(rowValid); + } + // SpeciesBatchUIModel model = getModel(); // // SpeciesBatchTreeModel samplingTreeModel = model.getSamplingTreeModel(); @@ -715,4 +681,14 @@ //TODO Should we also set the total vrac weight ? // getModel().setTotalVracWeight(totalVrac); } + + protected <C extends Serializable> void addSampleCategoryColumnToModel(TableColumnModel columnModel, + ColumnIdentifier<SpeciesBatchRowModel> columnIdentifier, + Decorator<C> decorator, + TableCellRenderer defaultRenderer) { + addColumnToModel(columnModel, + SampleCategoryComponent.newEditor(decorator), + SampleCategoryComponent.newRender(defaultRenderer, decorator), + columnIdentifier); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesRowModel.java 2012-12-28 09:17:49 UTC (rev 118) @@ -1,5 +1,29 @@ package fr.ifremer.tutti.ui.swing.content.protocol; +/* + * #%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.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2012-12-28 09:17:49 UTC (rev 118) @@ -1,6 +1,29 @@ package fr.ifremer.tutti.ui.swing.content.protocol; -import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +/* + * #%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.table.AbstractTuttiTableModel; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; import javax.swing.table.TableColumnModel; @@ -43,7 +66,9 @@ EditProtocolSpeciesRowModel.PROPERTY_SIZE_FRENQUENCY_PMFM, n_("tutti.table.protocol.species.header.sizeFrequency"), n_("tutti.table.protocol.species.header.sizeFrequency")); - + + private static final long serialVersionUID = 1L; + public EditProtocolSpeciesTableModel(TableColumnModel columnModel) { super(columnModel); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2012-12-28 09:17:49 UTC (rev 118) @@ -275,7 +275,8 @@ }); JXTable table = ui.getSpeciesTable(); - TableColumnModel columnModel = createTableColumnModel(null); + TableColumnModel columnModel = createTableColumnModel( + table.getDefaultRenderer(Object.class)); EditProtocolSpeciesTableModel tableModel = new EditProtocolSpeciesTableModel(columnModel); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java 2012-12-28 09:17:49 UTC (rev 118) @@ -1,6 +1,30 @@ package fr.ifremer.tutti.ui.swing.util; +/* + * #%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.persistence.entities.referential.Caracteristic; /** Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/HydrologicCaracteristicUtil.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-12-28 08:53:06 UTC (rev 117) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-12-28 09:17:49 UTC (rev 118) @@ -180,7 +180,6 @@ tutti.table.plankton.batch.header.speciesByGenusCode=Espèce tutti.table.plankton.batch.header.toConfirm=A Confirmer tutti.table.plankton.batch.header.weight=Poids -tutti.table.species.batch.header.ageCategory=Age tutti.table.protocol.species.header.maturity=Maturité tutti.table.protocol.species.header.sex=Sexe tutti.table.protocol.species.header.sizeCategory=Catégorie Taille @@ -188,6 +187,7 @@ tutti.table.protocol.species.header.sortedUnsorted=Vrac / Hors Vrac tutti.table.protocol.species.header.speciesId=Espèce tutti.table.species.batch.header.age=Age +tutti.table.species.batch.header.ageCategory=Age tutti.table.species.batch.header.comment=Commentaire tutti.table.species.batch.header.computedNumber=Nombre calculé tutti.table.species.batch.header.computedWeight=Poids calculé