branch feature/8086 created (now 56e53de)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8086 in repository tutti. See http://git.codelutin.com/tutti.git at 56e53de ajout de la colonne de maturité dynamiquement si elle est présente pour l'espèce (fixes #8086) This branch includes the following new commits: new 60a9018 ajout des caracteristiques de maturité dans le datacontext (refs #8086) new 56e53de ajout de la colonne de maturité dynamiquement si elle est présente pour l'espèce (fixes #8086) The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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) commit 60a9018425e47b9666157631d91fd0bda8c63666 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 9 16:09:57 2016 +0100 ajout des caracteristiques de maturité dans le datacontext (refs #8086) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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 60a9018425e47b9666157631d91fd0bda8c63666 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 9 16:09:57 2016 +0100 ajout des caracteristiques de maturité dans le datacontext (refs #8086) --- .../ifremer/tutti/service/PersistenceService.java | 29 ++++++++++++++++++++++ .../fr/ifremer/tutti/service/TuttiDataContext.java | 15 +++++++++++ 2 files changed, 44 insertions(+) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index 0c43d42..b100d18 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -534,6 +534,35 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer return result; } + public List<Caracteristic> getMaturityCaracteristics(List<Caracteristic> caracteristics) { + + // get loaded protocol + TuttiProtocol protocol = getProtocol(); + + List<Caracteristic> result; + if (protocol != null) { + + result = Lists.newArrayListWithCapacity( + protocol.sizeMaturityPmfmId()); + + Map<String, Caracteristic> allCaractericsById = + TuttiEntities.splitById(caracteristics); + + if (!protocol.isMaturityPmfmIdEmpty()) { + for (String id : protocol.getMaturityPmfmId()) { + result.add(allCaractericsById.get(id)); + } + } + } else { + // no default caracteristics to use + result = Lists.newArrayList(); + } + + + result = Collections.unmodifiableList(result); + return result; + } + /** * Return the speciesProtocol corresponding to the species of the given protocol. * diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java index b496b89..67ff958 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java @@ -134,6 +134,8 @@ public class TuttiDataContext extends AbstractBean implements Closeable { protected List<Caracteristic> lengthStepCaracteristics; + protected List<Caracteristic> maturityCaracteristics; + protected List<CaracteristicQualitativeValue> genderValues; protected List<CaracteristicQualitativeValue> deadOrAliveValues; @@ -579,6 +581,18 @@ public class TuttiDataContext extends AbstractBean implements Closeable { return lengthStepCaracteristics; } + public List<Caracteristic> getMaturityCaracteristics() { + checkOpened(); + if (maturityCaracteristics == null) { + + if (log.isInfoEnabled()) { + log.info("Loading maturityCaracteristics"); + } + maturityCaracteristics = service.getMaturityCaracteristics(getCaracteristics()); + } + return maturityCaracteristics; + } + /** * Get the best possible first sample category for the given benthos. * @@ -868,6 +882,7 @@ public class TuttiDataContext extends AbstractBean implements Closeable { service.setProtocol(null); } lengthStepCaracteristics = null; + maturityCaracteristics = null; defaultIndividualObservationCaracteristics = null; // survey code must be refresh resetSpecies(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm