This is an automated email from the git hooks/post-receive script. New commit to branch feature/8086 in repository tutti. See http://git.codelutin.com/tutti.git commit 56e53dea572a6da4bf4f75b7ecf8eeb9850f8b97 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 9 16:10:53 2016 +0100 ajout de la colonne de maturité dynamiquement si elle est présente pour l'espèce (fixes #8086) --- .../IndividualObservationBatchRowModel.java | 12 ++ .../IndividualObservationBatchTableModel.java | 32 ++++ .../frequency/SpeciesFrequencyUIHandler.java | 178 +++++++++++++++------ 3 files changed, 172 insertions(+), 50 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java index 7d298f6..2efea20 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java @@ -380,4 +380,16 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel && getComment() == null && (getAttachment() == null || getAttachment().isEmpty()); } + + public void copyIndividualObservationBatchRowModel(IndividualObservationBatchRowModel source) { + setId(source.getId()); + setLengthStepCaracteristic(source.getLengthStepCaracteristic()); + setSize(source.getSize()); + setWeight(source.getWeight()); + setBatchId(source.getBatchId()); + setCaracteristics(source.getCaracteristics()); + setDefaultCaracteristics(source.getDefaultCaracteristics()); + setComment(source.getComment()); + addAllAttachment(source.getAttachment()); + } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index cfce2d3..91f784e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -27,10 +27,15 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; +import org.jdesktop.swingx.table.TableColumnExt; import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.TableColumnModelEvent; +import javax.swing.event.TableColumnModelListener; import java.io.Serializable; import java.util.Collection; @@ -94,6 +99,32 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab this.weightUnit = weightUnit; this.defaultCaracteristicsMap = CaracteristicMap.fromCollection(defaultCaracteristicsSet); + columnModel.addColumnModelListener(new TableColumnModelListener() { + + @Override + public void columnAdded(TableColumnModelEvent e) { + TableColumnModelExt columnModel = (TableColumnModelExt) e.getSource(); + TableColumnExt column = columnModel.getColumnExt(e.getToIndex()); + identifiers.add((ColumnIdentifier<IndividualObservationBatchRowModel>) column.getIdentifier()); + } + + @Override + public void columnRemoved(TableColumnModelEvent e) { + TableColumnModelExt columnModel = (TableColumnModelExt) e.getSource(); + TableColumnExt column = columnModel.getColumnExt(e.getFromIndex()); + identifiers.remove(column); + } + + @Override + public void columnMoved(TableColumnModelEvent e) {} + + @Override + public void columnMarginChanged(ChangeEvent e) {} + + @Override + public void columnSelectionChanged(ListSelectionEvent e) {} + }); + setNoneEditableCols(RANK); } @@ -171,4 +202,5 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab return result; } + } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index e05f770..9316275 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -82,6 +82,7 @@ import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.decorator.Highlighter; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnExt; +import org.jdesktop.swingx.table.TableColumnModelExt; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; @@ -110,6 +111,7 @@ import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -139,6 +141,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci private Map<String, Caracteristic> lengthStepCaracteristics; + private Map<String, Caracteristic> maturityCaracteristics; + private JFreeChart frequenciesChart; private JFreeChart averageWeightsChart; @@ -165,6 +169,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci protected PropertyChangeListener obsChangedListener; + protected Optional<CaracteristicColumnIdentifier> maturityColumnId = Optional.empty(); + public SpeciesFrequencyUIHandler() { super(SpeciesFrequencyRowModel.PROPERTY_LENGTH_STEP, @@ -401,10 +407,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci initUI(this.ui); - List<Caracteristic> lengthStepCaracterics = + List<Caracteristic> lengthStepCaracteristics = Lists.newArrayList(getDataContext().getLengthStepCaracteristics()); - lengthStepCaracteristics = TuttiEntities.splitById(lengthStepCaracterics); + this.lengthStepCaracteristics = TuttiEntities.splitById(lengthStepCaracteristics); + + List<Caracteristic> maturityCaracteristics = + Lists.newArrayList(getDataContext().getMaturityCaracteristics()); + + this.maturityCaracteristics = TuttiEntities.splitById(maturityCaracteristics); SpeciesFrequencyUIModel model = getModel(); @@ -412,7 +423,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci final Caracteristic modelCaracteristic = model.getLengthStepCaracteristic(); initBeanFilterableComboBox(this.ui.getLengthStepCaracteristicComboBox(), - lengthStepCaracterics, + lengthStepCaracteristics, modelCaracteristic); // get step from the pmfm @@ -651,6 +662,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci public void editBatch(FrequencyCellEditor editor, String title) { + // on enlève la colonne spécifique à l'espèce précédente + if (maturityColumnId.isPresent()) { + TableColumnExt maturityColumn = ui.getObsTable().getColumnExt(maturityColumnId.get()); + ui.getObsTable().removeColumn(maturityColumn); + maturityColumnId = Optional.empty(); + } + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; @@ -683,8 +701,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.setTotalWeight(speciesBatch.getWeight()); - // set rtps + Optional<String> speciesMaturityPmfmId = Optional.empty(); + // set rtps TuttiProtocol protocol = getDataContext().getProtocol(); if (protocol != null) { @@ -713,6 +732,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci rtp = speciesProtocol.getRtpUndefined(); } model.setRtp(rtp); + + speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); } } @@ -754,6 +775,13 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci if (CollectionUtils.isNotEmpty(individualObservations)) { + Optional<Caracteristic> maturityCaracteristic = + speciesMaturityPmfmId.map(pmfmId -> maturityCaracteristics.get(pmfmId)); + + if (maturityCaracteristic.isPresent()) { + addMaturityCaracteristicColumnToModel(maturityCaracteristic.get()); + } + IndividualObservationBatchTableModel tableModel = getObsTableModel(); tableModel.setRows(new ArrayList<>()); @@ -761,18 +789,19 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci for (IndividualObservationBatchRowModel rowModel : individualObservations) { IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.setId(rowModel.getId()); + newRow.copyIndividualObservationBatchRowModel(rowModel); newRow.setRankOrder(rankOrder++); - newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic()); - newRow.setSize(rowModel.getSize()); - newRow.setWeight(rowModel.getWeight()); - newRow.setBatchId(rowModel.getBatchId()); - newRow.setCaracteristics(rowModel.getCaracteristics()); - newRow.setDefaultCaracteristics(rowModel.getDefaultCaracteristics()); - newRow.setComment(rowModel.getComment()); - newRow.addAllAttachment(rowModel.getAttachment()); newRow.addPropertyChangeListener(obsChangedListener); newRow.setValid(true); + + if (maturityCaracteristic.isPresent()) { + + + Caracteristic caracteristicKey = maturityCaracteristic.get(); + Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); + newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); + } + obsRows.add(newRow); } } @@ -1151,8 +1180,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTable.setColumnControlVisible(true); // create obsTable column model - DefaultTableColumnModelExt columnModel = - new DefaultTableColumnModelExt(); + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); Decorator<Caracteristic> caracteristicDecorator = getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); Decorator<Caracteristic> caracteristicTipDecorator = @@ -1192,41 +1220,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci List<Caracteristic> defaultCaracteristic = getModel().getDefaultCaracteristic(); for (Caracteristic caracteristic : defaultCaracteristic) { - String header = caracteristicDecorator.toString(caracteristic); - String headerTip = caracteristicTipDecorator.toString(caracteristic); - - CaracteristicColumnIdentifier id = CaracteristicColumnIdentifier.newCaracteristicId( - caracteristic, - IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, - header, - headerTip - ); - - switch (caracteristic.getCaracteristicType()) { - - case NUMBER: - - addFloatColumnToModel(columnModel, - id, - TuttiUI.DECIMAL3_PATTERN, - obsTable); - - break; - case QUALITATIVE: - List<CaracteristicQualitativeValue> values = - caracteristic.getQualitativeValue(); - addComboDataColumnToModel( - columnModel, - id, - caracteristicQualitativeDecorator, - values); - break; - case TEXT: - - addColumnToModel(columnModel, id); - - break; - } + addCaracteristicColumnToModel(obsTable, + columnModel, + caracteristicDecorator, + caracteristicTipDecorator, + caracteristicQualitativeDecorator, + caracteristic); } { // Other caracteristics column @@ -1322,6 +1321,85 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci }); } + protected void addMaturityCaracteristicColumnToModel(Caracteristic caracteristic) { + + Decorator<Caracteristic> caracteristicDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY_WITH_UNIT); + Decorator<Caracteristic> caracteristicTipDecorator = + getDecorator(Caracteristic.class, DecoratorService.CARACTERISTIC_WITH_UNIT); + + Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = + getDecorator(CaracteristicQualitativeValue.class, null); + + // remove the row sorter while we add the new column + ui.getObsTable().setRowSorter(null); + ui.getObsTable().setAutoCreateRowSorter(false); + + TableColumnModelExt columnModel = (TableColumnModelExt) ui.getObsTable().getColumnModel(); + + maturityColumnId = Optional.of(addCaracteristicColumnToModel(ui.getObsTable(), + columnModel, + caracteristicDecorator, + caracteristicTipDecorator, + caracteristicQualitativeDecorator, + caracteristic)); + + int otherCaracteristicsIndex = columnModel.getColumnExt(IndividualObservationBatchTableModel.OTHER_CARACTERISTICS).getModelIndex(); + ui.getObsTable().moveColumn(columnModel.getColumnCount() - 1, otherCaracteristicsIndex); + + // reset the row sorter + ui.getObsTable().setAutoCreateRowSorter(true); + } + + protected CaracteristicColumnIdentifier addCaracteristicColumnToModel(JXTable table, + TableColumnModelExt columnModel, + Decorator<Caracteristic> caracteristicDecorator, + Decorator<Caracteristic> caracteristicTipDecorator, + Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator, + Caracteristic caracteristic) { + + String header = caracteristicDecorator.toString(caracteristic); + String headerTip = caracteristicTipDecorator.toString(caracteristic); + + CaracteristicColumnIdentifier id = CaracteristicColumnIdentifier.newCaracteristicId( + caracteristic, + IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, + header, + headerTip + ); + + if (columnModel.getColumnExt(id) == null) { + + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: + + addFloatColumnToModel(columnModel, + id, + TuttiUI.DECIMAL3_PATTERN, + table); + + break; + case QUALITATIVE: + List<CaracteristicQualitativeValue> values = + caracteristic.getQualitativeValue(); + addComboDataColumnToModel( + columnModel, + id, + caracteristicQualitativeDecorator, + values); + break; + case TEXT: + + addColumnToModel(columnModel, id); + + break; + } + } + + return id; + } + protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.