branch feature/ecran_obs_individuelles updated (3a3bdac -> 5de9cd8)
This is an automated email from the git hooks/post-receive script. New change to branch feature/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git from 3a3bdac - use jaxx 2.29-SNAPSHOT - correction du mode de config à l'ouverture de l'écran - ajout de useRTP dans le modele refs #6926 new 5de9cd8 ajout du model de colonnes de la table des observations (refs #6926) The 1 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 5de9cd8cd41b964068b0c33d41847029da21e3d4 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:25:37 2016 +0100 ajout du model de colonnes de la table des observations (refs #6926) Summary of changes: .../frequency/SpeciesFrequencyUIHandler.java | 386 ++++++++++++++++----- .../species/frequency/SpeciesFrequencyUIModel.java | 22 +- 2 files changed, 319 insertions(+), 89 deletions(-) -- 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/ecran_obs_individuelles in repository tutti. See http://git.codelutin.com/tutti.git commit 5de9cd8cd41b964068b0c33d41847029da21e3d4 Author: Kevin Morin <morin@codelutin.com> Date: Mon Feb 22 14:25:37 2016 +0100 ajout du model de colonnes de la table des observations (refs #6926) --- .../frequency/SpeciesFrequencyUIHandler.java | 386 ++++++++++++++++----- .../species/frequency/SpeciesFrequencyUIModel.java | 22 +- 2 files changed, 319 insertions(+), 89 deletions(-) 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 8175a8b..05715ba 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 @@ -23,20 +23,26 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; */ import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderEvent; import fr.ifremer.tutti.ichtyometer.feed.event.FeedReaderListener; import fr.ifremer.tutti.ichtyometer.feed.record.FeedReaderMeasureRecord; import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.entities.referential.TaxonCache; import fr.ifremer.tutti.persistence.entities.referential.TaxonCaches; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfigurationMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent.FrequencyCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.ApplySpeciesFrequencyRafaleAction; @@ -45,7 +51,13 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiNumberTickUnitSource; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellEditor; +import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentCellRenderer; +import fr.ifremer.tutti.ui.swing.util.caracteristics.CaracteristicMapCellComponent; +import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; +import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; @@ -61,14 +73,22 @@ import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberTickUnitSource; import org.jfree.chart.axis.ValueAxis; +import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationBusinessException; +import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; import javax.swing.JComponent; +import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JSplitPane; +import javax.swing.JTable; import javax.swing.JTextField; +import javax.swing.SwingConstants; import javax.swing.SwingUtilities; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumnModel; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.beans.PropertyChangeEvent; @@ -77,6 +97,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -222,7 +243,12 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci this.weightUnit = getConfig().getSpeciesWeightUnit(); SampleCategoryModel sampleCategoryModel = getDataContext().getSampleCategoryModel(); - SpeciesFrequencyUIModel model = new SpeciesFrequencyUIModel(weightUnit, sampleCategoryModel); + + // get the default caracteristics + List<Caracteristic> defaultCaracteristic = + getDataContext().getDefaultIndividualObservationCaracteristics(); + + SpeciesFrequencyUIModel model = new SpeciesFrequencyUIModel(weightUnit, sampleCategoryModel, defaultCaracteristic); this.ui.setContextValue(model); @@ -368,99 +394,16 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // init histogram - chart = ChartFactory.createXYBarChart(null, - t("tutti.editSpeciesFrequencies.table.header.lengthStep"), - false, - t("tutti.editSpeciesFrequencies.table.header.number"), - model.dataset); - chart.clearSubtitles(); - - ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); - rangeAxis.setAutoRange(true); - rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); - - ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); - domainAxis.setAutoRange(true); - domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); - domainAxis.setMinorTickMarksVisible(true); - - chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); - - final ChartPanel chartPanel = new ChartPanel(chart); - chartPanel.setDomainZoomable(false); - chartPanel.setMouseZoomable(false); - chartPanel.setPopupMenu(null); - - JPanel histogramPanel = ui.getHistogramPanel(); - histogramPanel.add(chartPanel, BorderLayout.CENTER); + initHistogram(ui, model); // init data table - JXTable table = getTable(); - - // create table column model - DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); - - { // LengthStep - - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.LENGTH_STEP, - TuttiUI.DECIMAL1_PATTERN, - table); - } - - { // Number - - addIntegerColumnToModel(columnModel, - SpeciesFrequencyTableModel.NUMBER, - TuttiUI.INT_6_DIGITS_PATTERN, - table); - } - - { // Weight - - addFloatColumnToModel(columnModel, - SpeciesFrequencyTableModel.WEIGHT, - weightUnit, - table); - } - - // create table model - SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); - - table.setModel(tableModel); - table.setColumnModel(columnModel); - - initTable(table); - - installTableKeyListener(columnModel, table); + initDataTable(model); // init log table - JXTable logTable = ui.getLogsTable(); - - // create log table column model - DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); - - { // Date - addColumnToModel(logColumnModel, - SpeciesFrequencyLogCellComponent.newEditor(ui), - SpeciesFrequencyLogCellComponent.newRender(), - SpeciesFrequencyLogsTableModel.LABEL); - } - - // create log table model - SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); - logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + initLogTable(ui); - logTable.setModel(logTableModel); - logTable.setColumnModel(logColumnModel); - - // by default do not authorize to change column orders - logTable.getTableHeader().setReorderingAllowed(false); - Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( - HighlightPredicate.ODD, - getConfig().getColorAlternateRow()); - logTable.addHighlighter(evenHighlighter); + initObsTable(); listenValidatorValid(ui.getValidator(), model); @@ -652,6 +595,273 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci //-- Internal methods --// //------------------------------------------------------------------------// + + protected void initDataTable(SpeciesFrequencyUIModel model) { + JXTable table = getTable(); + + // create table column model + DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + + { // LengthStep + + addFloatColumnToModel(columnModel, + SpeciesFrequencyTableModel.LENGTH_STEP, + TuttiUI.DECIMAL1_PATTERN, + table); + } + + { // Number + + addIntegerColumnToModel(columnModel, + SpeciesFrequencyTableModel.NUMBER, + TuttiUI.INT_6_DIGITS_PATTERN, + table); + } + + { // Weight + + addFloatColumnToModel(columnModel, + SpeciesFrequencyTableModel.WEIGHT, + weightUnit, + table); + } + + // create table model + SpeciesFrequencyTableModel tableModel = new SpeciesFrequencyTableModel(weightUnit, columnModel, model); + + table.setModel(tableModel); + table.setColumnModel(columnModel); + + initTable(table); + + installTableKeyListener(columnModel, table); + } + + protected void initHistogram(SpeciesFrequencyUI ui, SpeciesFrequencyUIModel model) { + chart = ChartFactory.createXYBarChart(null, + t("tutti.editSpeciesFrequencies.table.header.lengthStep"), + false, + t("tutti.editSpeciesFrequencies.table.header.number"), + model.dataset); + chart.clearSubtitles(); + + ValueAxis rangeAxis = chart.getXYPlot().getRangeAxis(); + rangeAxis.setAutoRange(true); + rangeAxis.setStandardTickUnits(new NumberTickUnitSource(true)); + + ValueAxis domainAxis = chart.getXYPlot().getDomainAxis(); + domainAxis.setAutoRange(true); + domainAxis.setStandardTickUnits(new TuttiNumberTickUnitSource(true)); + domainAxis.setMinorTickMarksVisible(true); + + chart.getXYPlot().getRenderer().setSeriesPaint(0, getConfig().getColorComputedWeights()); + + final ChartPanel chartPanel = new ChartPanel(chart); + chartPanel.setDomainZoomable(false); + chartPanel.setMouseZoomable(false); + chartPanel.setPopupMenu(null); + + JPanel histogramPanel = ui.getHistogramPanel(); + histogramPanel.add(chartPanel, BorderLayout.CENTER); + } + + protected void initLogTable(SpeciesFrequencyUI ui) { + JXTable logTable = ui.getLogsTable(); + + // create log table column model + DefaultTableColumnModelExt logColumnModel = new DefaultTableColumnModelExt(); + + { // Date + addColumnToModel(logColumnModel, + SpeciesFrequencyLogCellComponent.newEditor(ui), + SpeciesFrequencyLogCellComponent.newRender(), + SpeciesFrequencyLogsTableModel.LABEL); + } + + // create log table model + SpeciesFrequencyLogsTableModel logTableModel = new SpeciesFrequencyLogsTableModel(logColumnModel); + logTableModel.setRows(new ArrayList<SpeciesFrequencyLogRowModel>()); + + logTable.setModel(logTableModel); + logTable.setColumnModel(logColumnModel); + + // by default do not authorize to change column orders + logTable.getTableHeader().setReorderingAllowed(false); + Highlighter evenHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + HighlightPredicate.ODD, + getConfig().getColorAlternateRow()); + logTable.addHighlighter(evenHighlighter); + } + + protected void initObsTable() { + + JXTable obsTable = ui.getObsTable(); + + // can show / hide some columns in model + obsTable.setColumnControlVisible(true); + + // create obsTable column model + DefaultTableColumnModelExt columnModel = + new DefaultTableColumnModelExt(); + 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); + +// { +// // Id column +// +// addIdColumnToModel(columnModel, IndividualObservationBatchTableModel.ID, obsTable); +// +// } + + { // Species column + + Decorator<Species> speciesDecorator = getDecorator( + Species.class, DecoratorService.FROM_PROTOCOL); + addComboDataColumnToModel(columnModel, + IndividualObservationBatchTableModel.SPECIES, + speciesDecorator, getDataContext().getReferentSpeciesWithSurveyCode()); + } + + { // Weight column + + addFloatColumnToModel(columnModel, + IndividualObservationBatchTableModel.WEIGHT, + weightUnit, + obsTable); + } + + { // Size column + + addFloatColumnToModel(columnModel, + IndividualObservationBatchTableModel.SIZE, + TuttiUI.DECIMAL3_PATTERN, + obsTable); + } + + { // Length step caracteristic column + + addComboDataColumnToModel(columnModel, + IndividualObservationBatchTableModel.LENGTH_STEP_CARACTERISTIC, + getDecorator(Caracteristic.class, null), + getDataContext().getLengthStepCaracteristics()); + + } + + 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; + } + } + + { // Other caracteristics column + + Set<Caracteristic> caracteristicsToSkip = Collections.unmodifiableSet( + Sets.newHashSet(getModel().getDefaultCaracteristic())); + + addColumnToModel(columnModel, + CaracteristicMapCellComponent.newEditor(ui, caracteristicsToSkip), + CaracteristicMapCellComponent.newRender(getContext()), + IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); + + } + + { // Comment column + + addColumnToModel(columnModel, + CommentCellEditor.newEditor(ui), + CommentCellRenderer.newRender(), + IndividualObservationBatchTableModel.COMMENT); + } + + { // File column + + addColumnToModel(columnModel, + AttachmentCellEditor.newEditor(ui), + AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), + IndividualObservationBatchTableModel.ATTACHMENT); + } + + // create obsTable model + IndividualObservationBatchTableModel tableModel = + new IndividualObservationBatchTableModel(weightUnit, + columnModel); + + obsTable.setModel(tableModel); + obsTable.setColumnModel(columnModel); + +// initBatchTable(obsTable, columnModel, tableModel); + } + +// protected void addIdColumnToModel(TableColumnModel model, +// ColumnIdentifier identifier, +// JTable table) { +// +// final TableCellRenderer defaultRenderer = table.getDefaultRenderer(Number.class); +// final Decorator<String> idDecorator = getDecorator(String.class, DecoratorService.SPACE_EVERY_3_DIGIT); +// +// TableCellRenderer idTableCellRenderer = new TableCellRenderer() { +// @Override +// public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { +// +// String text = null; +// if (value != null) { +// text = idDecorator.toString(value); +// } +// +// Component result = defaultRenderer.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); +// if (result instanceof JLabel) { +// JLabel jLabel = (JLabel) result; +// jLabel.setHorizontalTextPosition(SwingConstants.RIGHT); +// +// } +// return result; +// } +// }; +// +// addColumnToModel(model, null, idTableCellRenderer, identifier); +// +// } + protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 1fc9987..064340d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -22,6 +22,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; * #L% */ +import com.google.common.collect.Lists; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -37,6 +38,7 @@ import org.apache.commons.logging.LogFactory; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; +import java.util.List; import java.util.Map; import java.util.Set; @@ -217,7 +219,17 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa */ protected final XYSeriesCollection dataset; - public SpeciesFrequencyUIModel(WeightUnit weightUnit, SampleCategoryModel sampleCategoryModel) { + /** + * Default caracteristics coming from protocol. + * + * @since 4.5 + */ + protected final List<Caracteristic> defaultCaracteristic; + + + public SpeciesFrequencyUIModel(WeightUnit weightUnit, + SampleCategoryModel sampleCategoryModel, + List<Caracteristic> defaultCaracteristic) { super(SpeciesBatchRowModel.class, null, null); this.weightUnit = weightUnit; this.sampleCategoryModel = sampleCategoryModel; @@ -229,6 +241,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa dataset = new XYSeriesCollection(series); dataset.setIntervalPositionFactor(0); dataset.setIntervalWidth(0); + + this.defaultCaracteristic = defaultCaracteristic == null ? + Lists.<Caracteristic>newArrayList() : + Lists.newArrayList(defaultCaracteristic); } public void reloadRows() { @@ -655,4 +671,8 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public void setDataSetIntervalWidth(float step) { dataset.setIntervalWidth(step); } + + public List<Caracteristic> getDefaultCaracteristic() { + return defaultCaracteristic; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm