r134 - in trunk: tutti-persistence/src/main/xmi tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/spec
Author: tchemit Date: 2012-12-31 19:59:33 +0100 (Mon, 31 Dec 2012) New Revision: 134 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/134 Log: refs #1805: [Onglet Poisson] Assistance ?\195?\160 la saisie des lots de poissons (can save now some splitted batches :)) refs #1806: [Onglet Poisson] Pr?\195?\169filtrage du tableau (add ui, now need to do logic) Added: trunk/tutti-ui-swing/src/main/resources/icons/action-batch-delete.png trunk/tutti-ui-swing/src/main/resources/icons/action-batch-split.png Modified: trunk/tutti-persistence/src/main/xmi/tutti-persistence.zargo trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchTableModel.java 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/macrowaste/MacroWasteBatchTableModel.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/SpeciesBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 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/SpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTableModel.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/util/table/AbstractTuttiTableModel.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 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/accidental/AccidentalBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -73,7 +73,7 @@ } @Override - protected AccidentalBatchRowModel createNewRow() { + public AccidentalBatchRowModel createNewRow() { AccidentalBatchRowModel result = new AccidentalBatchRowModel(); // by default empty row is not valid 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -87,7 +87,7 @@ } @Override - protected BenthosBatchRowModel createNewRow() { + public BenthosBatchRowModel createNewRow() { BenthosBatchRowModel result = new BenthosBatchRowModel(); // by default empty row is not valid Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -76,7 +76,7 @@ } @Override - protected MacroWasteBatchRowModel createNewRow() { + public MacroWasteBatchRowModel createNewRow() { MacroWasteBatchRowModel result = new MacroWasteBatchRowModel(); // by default empty row is not valid 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -80,7 +80,7 @@ } @Override - protected PlanktonBatchRowModel createNewRow() { + public PlanktonBatchRowModel createNewRow() { PlanktonBatchRowModel result = new PlanktonBatchRowModel(); // by default empty row is not valid Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -25,6 +25,7 @@ */ import com.google.common.collect.Sets; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; @@ -41,6 +42,36 @@ private static final long serialVersionUID = 1L; + public static class SampleColumnIdentifier<R> extends ColumnIdentifier<R> { + + private static final long serialVersionUID = 1L; + + public static <R> SampleColumnIdentifier<R> newId(String propertyName, + String weightPropertyName, + String headerI18nKey, + String headerTipI18nKey) { + return new SampleColumnIdentifier<R>(propertyName, + weightPropertyName, + headerI18nKey, + headerTipI18nKey); + } + + private final String weightPropertyName; + + protected SampleColumnIdentifier(String propertyName, + String weightPropertyName, + String headerI18nKey, + String headerTipI18nKey + ) { + super(propertyName, headerI18nKey, headerTipI18nKey); + this.weightPropertyName = weightPropertyName; + } + + public void setWeightValue(R entry, Object value) { + TuttiUIUtil.setProperty(entry, weightPropertyName, value); + } + } + public static final ColumnIdentifier<SpeciesBatchRowModel> SPECIES_BY_CODE = ColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_SPECIES, n_("tutti.table.species.batch.header.speciesByCode"), @@ -51,28 +82,33 @@ n_("tutti.table.species.batch.header.speciesByGenusCode"), n_("tutti.table.species.batch.header.speciesByGenusCode")); - public static final ColumnIdentifier<SpeciesBatchRowModel> SORTED_UNSORTED_CATEGORY = ColumnIdentifier.newId( + public static final ColumnIdentifier<SpeciesBatchRowModel> SORTED_UNSORTED_CATEGORY = SampleColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SORTED_UNSORTED_CATEGORY_WEIGHT, n_("tutti.table.species.batch.header.sortedUnsortedCategory"), n_("tutti.table.species.batch.header.sortedUnsortedCategory")); - public static final ColumnIdentifier<SpeciesBatchRowModel> SIZE_CATEGORY = ColumnIdentifier.newId( + public static final ColumnIdentifier<SpeciesBatchRowModel> SIZE_CATEGORY = SampleColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_SIZE_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SIZE_CATEGORY_WEIGHT, n_("tutti.table.species.batch.header.sizeCategory"), n_("tutti.table.species.batch.header.sizeCategory")); - public static final ColumnIdentifier<SpeciesBatchRowModel> SEX_CATEGORY = ColumnIdentifier.newId( + public static final ColumnIdentifier<SpeciesBatchRowModel> SEX_CATEGORY = SampleColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_SEX_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_SEX_CATEGORY_WEIGHT, n_("tutti.table.species.batch.header.sexCategory"), n_("tutti.table.species.batch.header.sexCategory")); - public static final ColumnIdentifier<SpeciesBatchRowModel> MATURITY_CATEGORY = ColumnIdentifier.newId( + public static final ColumnIdentifier<SpeciesBatchRowModel> MATURITY_CATEGORY = SampleColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_MATURITY_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_MATURITY_CATEGORY_WEIGHT, n_("tutti.table.species.batch.header.maturityCategory"), n_("tutti.table.species.batch.header.maturityCategory")); - public static final ColumnIdentifier<SpeciesBatchRowModel> AGE_CATEGORY = ColumnIdentifier.newId( + public static final ColumnIdentifier<SpeciesBatchRowModel> AGE_CATEGORY = SampleColumnIdentifier.newId( SpeciesBatchRowModel.PROPERTY_AGE_SAMPLE_CATEGORY, + SpeciesBatchRowModel.PROPERTY_AGE_CATEGORY_WEIGHT, n_("tutti.table.species.batch.header.ageCategory"), n_("tutti.table.species.batch.header.ageCategory")); @@ -133,7 +169,7 @@ } @Override - protected SpeciesBatchRowModel createNewRow() { + public SpeciesBatchRowModel createNewRow() { SpeciesBatchRowModel result = new SpeciesBatchRowModel(); // by default empty row is not valid @@ -147,8 +183,13 @@ int columnIndex, ColumnIdentifier<SpeciesBatchRowModel> propertyName, SpeciesBatchRowModel entry) { - super.setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); + if (sampleCols.contains(propertyName)) { + ((SampleColumnIdentifier<SpeciesBatchRowModel>) propertyName).setWeightValue(entry, aValue); + } else { + super.setValueAt(aValue, rowIndex, columnIndex, propertyName, entry); + } + if (propertyName == SPECIES_BY_CODE) { // update also other columns Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2012-12-31 18:59:33 UTC (rev 134) @@ -75,9 +75,56 @@ editable: false; } +#tablePopup { + label: "tutti.title.batchActions"; +} + +#splitBatchMenu { + text: "tutti.action.splitBatch"; + actionIcon: batch-split; +} + +#removeSubBatchMenu { + text: "tutti.action.removeSubBatch"; + actionIcon: batch-delete; +} + #table { selectionMode: {ListSelectionModel.SINGLE_SELECTION}; selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; } + +#createSpeciesBatchButton { + actionIcon: batch-split; + text: "tutti.action.createSpeciesBatch"; +} + +#filterTablePane { + border: {new TitledBorder(null, _("tutti.legend.filterSpeciesBatchMode"))}; +} + +#filterSpeciesBatchAllButton { + text: "tutti.label.filterSpeciesBatchMode.mode.all"; + toolTipText: "tutti.label.filterSpeciesBatchMode.mode.all"; + value: "all"; + selected: {model.isTableViewModeAll()}; + buttonGroup: "filterSpeciesBatchMode"; +} + +#filterSpeciesBatchLeafButton { + text: "tutti.label.filterSpeciesBatchMode.mode.leaf"; + toolTipText: "tutti.label.filterSpeciesBatchMode.mode.leaf"; + value: "leaf"; + selected: {model.isTableViewModeLeaf()}; + buttonGroup: "filterSpeciesBatchMode"; +} + +#filterSpeciesBatchRootButton { + text: "tutti.label.filterSpeciesBatchMode.mode.root"; + toolTipText: "tutti.label.filterSpeciesBatchMode.mode.root"; + value: "root"; + selected: {model.isTableViewModeRoot()}; + buttonGroup: "filterSpeciesBatchMode"; +} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2012-12-31 18:59:33 UTC (rev 134) @@ -87,6 +87,13 @@ <AttachmentEditorUI id='attachmentEditor'/> + <JPopupMenu id='tablePopup' + onPopupMenuWillBecomeVisible='handler.updateTablePopup()'> + <JMenuItem id='splitBatchMenu' + onActionPerformed='handler.splitBatch()'/> + <JMenuItem id='removeSubBatchMenu' + onActionPerformed='handler.removeBatch()'/> + </JPopupMenu> <Table id='form' fill='both' constraints='BorderLayout.NORTH'> <!-- Poids total / Poids total vrac --> @@ -122,10 +129,31 @@ <JTextField id='speciesTotalUnsortedWeightField'/> </cell> </row> + + <!-- Toolbar / Filter --> + <row> + <cell columns="4"> + <JPanel id='tableToolbar' layout='{new BorderLayout()}'> + <JButton id='createSpeciesBatchButton' constraints='BorderLayout.WEST' + onActionPerformed='handler.createSpeciesBatch()'/> + <JPanel id='filterTablePane' constraints='BorderLayout.CENTER'> + <JRadioButton id='filterSpeciesBatchAllButton' + onActionPerformed='model.setTableViewMode(TableViewMode.ALL)'/> + <JRadioButton id='filterSpeciesBatchLeafButton' + onActionPerformed='model.setTableViewMode(TableViewMode.LEAF)'/> + <JRadioButton id='filterSpeciesBatchRootButton' + onActionPerformed='model.setTableViewMode(TableViewMode.ROOT)'/> + </JPanel> + + </JPanel> + </cell> + </row> + </Table> <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER'> - <JXTable id='table' onFocusLost='handler.saveSelectedRowIfRequired(event)'/> + <JXTable id='table' onFocusLost='handler.saveSelectedRowIfRequired(event)' + onMouseClicked='handler.autoSelectRowInTable(event)'/> </JScrollPane> </JPanel> 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2012-12-31 18:59:33 UTC (rev 134) @@ -42,22 +42,33 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.FrequencyCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSampleCategoryRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSampleCategoryUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSampleCategoryUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; 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.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; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.nuiton.util.decorator.Decorator; +import javax.swing.SwingUtilities; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; +import java.awt.Frame; +import java.awt.Point; +import java.awt.event.MouseEvent; import java.io.Serializable; import java.util.List; import java.util.Set; +import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; /** @@ -218,7 +229,6 @@ persistenceService.deleteSpeciesBatch(catchBean.getId()); } } - } @Override @@ -357,6 +367,7 @@ ui.getContextValue(EditCatchesUIModel.class); SpeciesBatchUIModel model = new SpeciesBatchUIModel(catchesUIModel); + model.setTableViewMode(TableViewMode.ALL); ui.setContextValue(model); PersistenceService service = @@ -529,6 +540,162 @@ //-- Public methods --// //------------------------------------------------------------------------// + public void autoSelectRowInTable(MouseEvent e) { + if (SwingUtilities.isRightMouseButton(e) || + e.isPopupTrigger()) { + + // get the coordinates of the mouse click + Point p = e.getPoint(); + + JXTable source = (JXTable) e.getSource(); + + // get the row index at this point + int rowIndex = source.rowAtPoint(p); + + if (log.isInfoEnabled()) { + log.info("At point [" + p + "] found Row " + rowIndex); + } + if (rowIndex != -1) { + + // select new row + source.setRowSelectionInterval(rowIndex, rowIndex); + } + + ui.getTablePopup().show(source, e.getX(), e.getY()); + } + } + + public void updateTablePopup() { + + int rowIndex = getTable().getSelectedRow(); + boolean enableSplit = false; + boolean enableRemove = false; + + if (rowIndex != -1) { + + // there is a selected row + + //TODO If there is some sub-batch, can remove them + //TODO If there is no sub-batch, can split current batch + + SpeciesBatchRowModel row = getTableModel().getEntry(rowIndex); + + if (row.isValid()) { + + // must have at least species filled in row + // otherwise nothing can be done + + enableSplit = true; + } + } + + ui.getSplitBatchMenu().setEnabled(enableSplit); + ui.getRemoveSubBatchMenu().setEnabled(enableRemove); + } + + public void removeBatch() { + //TODO + } + + public void createSpeciesBatch() { + + } + public void splitBatch() { + + JXTable table = getTable(); + + // get selected row + int rowIndex = table.getSelectedRow(); + SpeciesBatchRowModel selectedRow = getTableModel().getEntry(rowIndex); + + if (log.isInfoEnabled()) { + log.info("Open split batch for row [" + rowIndex + "]"); + } + SplitSampleCategoryUI sampleCategoryEditor = ui.getSampleCategoryEditor(); + sampleCategoryEditor.getHandler().editBatch(selectedRow); + + Frame frame = SwingUtil.getParentContainer(ui, Frame.class); + + // open split batch dialog + TuttiUIUtil.openInDialog(sampleCategoryEditor, + frame, + _("tutti.title.splitBatch"), true, null); + + // at close, synch back batches ? + SplitSampleCategoryUIModel splitModel = sampleCategoryEditor.getModel(); + + if (splitModel.isValid()) { + + // create batch rows + + SpeciesBatchTableModel batchTableModel = getTableModel(); + + int insertRow = rowIndex; + + SampleCategoryType selectedCategory = splitModel.getSelectedCategory(); + + // Create rows in batch table model + + List<SpeciesBatchRowModel> newBatchRows = Lists.newArrayList(); + for (SplitSampleCategoryRowModel row : splitModel.getRows()) { + if (row.isValid()) { + + // can keep this row + SpeciesBatchRowModel batchNewRow = batchTableModel.createNewRow(); + batchNewRow.setSpecies(selectedRow.getSpecies()); + batchNewRow.setSpeciesToConfirm(selectedRow.getSpeciesToConfirm()); + if (selectedCategory == SampleCategoryType.sortedUnsorted) { + batchNewRow.setSortedUnsortedCategory((CaracteristicQualitativeValue) row.getCategoryValue()); + batchNewRow.setSortedUnsortedCategoryWeight(row.getWeight()); + } else { + batchNewRow.setSortedUnsortedCategory(selectedRow.getSortedUnsortedCategory()); + batchNewRow.setSortedUnsortedCategoryWeight(selectedRow.getSortedUnsortedCategoryWeight()); + } + if (selectedCategory == SampleCategoryType.size) { + batchNewRow.setSizeCategory((CaracteristicQualitativeValue) row.getCategoryValue()); + batchNewRow.setSizeCategoryWeight(row.getWeight()); + } else { + batchNewRow.setSizeCategory(selectedRow.getSizeCategory()); + batchNewRow.setSizeCategoryWeight(selectedRow.getSizeCategoryWeight()); + } + if (selectedCategory == SampleCategoryType.sex) { + batchNewRow.setSexCategory((CaracteristicQualitativeValue) row.getCategoryValue()); + batchNewRow.setSexCategoryWeight(row.getWeight()); + } else { + batchNewRow.setSexCategory(selectedRow.getSexCategory()); + batchNewRow.setSexCategoryWeight(selectedRow.getSexCategoryWeight()); + } + if (selectedCategory == SampleCategoryType.maturity) { + batchNewRow.setMaturityCategory((CaracteristicQualitativeValue) row.getCategoryValue()); + batchNewRow.setMaturityCategoryWeight(row.getWeight()); + } else { + batchNewRow.setMaturityCategory(selectedRow.getMaturityCategory()); + batchNewRow.setMaturityCategoryWeight(selectedRow.getMaturityCategoryWeight()); + } + if (selectedCategory == SampleCategoryType.age) { + batchNewRow.setAgeCategory((Float) row.getCategoryValue()); + batchNewRow.setAgeCategoryWeight(row.getWeight()); + } else { + batchNewRow.setAgeCategory(selectedRow.getAgeCategory()); + batchNewRow.setAgeCategoryWeight(selectedRow.getAgeCategoryWeight()); + } + batchTableModel.addNewRow(++insertRow, batchNewRow); + boolean rowValid = isRowValid(batchNewRow); + batchNewRow.setValid(rowValid); + saveRow(batchNewRow); + } + } + } + + // reset split ui + sampleCategoryEditor.getHandler().editBatch(null); + + + // reselect this cell + AbstractSelectTableAction.doSelectCell(table, rowIndex, 0); + table.requestFocus(); + } + //------------------------------------------------------------------------// //-- Internal methods --// //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -124,5 +124,20 @@ Object oldValue = getTableViewMode(); this.tableViewMode = tableViewMode; firePropertyChange(PROPERTY_TABLE_VIEW_MODE, oldValue, tableViewMode); + firePropertyChange("tableViewModeAll", null, isTableViewModeAll()); + firePropertyChange("tableViewModeLeaf", null, isTableViewModeLeaf()); + firePropertyChange("tableViewModeRoot", null, isTableViewModeRoot()); } + + public boolean isTableViewModeAll() { + return TableViewMode.ALL.equals(tableViewMode); + } + + public boolean isTableViewModeLeaf() { + return TableViewMode.LEAF.equals(tableViewMode); + } + + public boolean isTableViewModeRoot() { + return TableViewMode.ROOT.equals(tableViewMode); + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -78,7 +78,7 @@ } @Override - protected SpeciesFrequencyRowModel createNewRow() { + public SpeciesFrequencyRowModel createNewRow() { Float defaultStep = null; int rowCount = getRowCount(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryRowModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryRowModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.ui.swing.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SampleCategory; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SampleCategoryType; @@ -73,8 +74,8 @@ category.setCategoryType(categoryType); } - public Float getCategoryValue() { - return category.getCategoryWeight(); + public Serializable getCategoryValue() { + return category.getCategoryValue(); } public void setCategoryValue(Serializable categoryValue) { @@ -83,7 +84,18 @@ firePropertyChange(PROPERTY_CATEGORY_VALUE, oldValue, categoryValue); } + public void setCategoryValue(CaracteristicQualitativeValue categoryValue) { + Object oldValue = getCategoryValue(); + category.setCategoryValue(categoryValue); + firePropertyChange(PROPERTY_CATEGORY_VALUE, oldValue, categoryValue); + } + public void setCategoryValue(Float categoryValue) { + Object oldValue = getCategoryValue(); + category.setCategoryValue(categoryValue); + firePropertyChange(PROPERTY_CATEGORY_VALUE, oldValue, categoryValue); + } + public Float getWeight() { return category.getCategoryWeight(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -41,11 +41,16 @@ private static final long serialVersionUID = 1L; - public static final ColumnIdentifier<SplitSampleCategoryRowModel> CATEGORY_VALUE = ColumnIdentifier.newId( + public static final ColumnIdentifier<SplitSampleCategoryRowModel> EDITABLE_CATEGORY_VALUE = ColumnIdentifier.newId( SplitSampleCategoryRowModel.PROPERTY_CATEGORY_VALUE, n_("tutti.table.species.sampleCategory.header.category"), n_("tutti.table.species.sampleCategory.header.category")); + public static final ColumnIdentifier<SplitSampleCategoryRowModel> READ_ONLY_CATEGORY_VALUE = ColumnIdentifier.newId( + SplitSampleCategoryRowModel.PROPERTY_CATEGORY_VALUE, + n_("tutti.table.species.sampleCategory.header.category"), + n_("tutti.table.species.sampleCategory.header.category")); + public static final ColumnIdentifier<SplitSampleCategoryRowModel> WEIGHT = ColumnIdentifier.newId( SplitSampleCategoryRowModel.PROPERTY_WEIGHT, n_("tutti.table.species.sampleCategory.header.weight"), @@ -53,17 +58,15 @@ private final SplitSampleCategoryUIModel uiModel; - public SplitSampleCategoryTableModel(TableColumnModel columnModel, SplitSampleCategoryUIModel uiModel) { super(columnModel); this.uiModel = uiModel; - setNoneEditableCols(); + setNoneEditableCols(READ_ONLY_CATEGORY_VALUE); } @Override - protected SplitSampleCategoryRowModel createNewRow() { - + public SplitSampleCategoryRowModel createNewRow() { SplitSampleCategoryRowModel result = new SplitSampleCategoryRowModel(); result.setCategoryType(uiModel.getSelectedCategory()); result.setValid(false); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.css 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.css 2012-12-31 18:59:33 UTC (rev 134) @@ -32,7 +32,7 @@ border: {new TitledBorder(null, _("tutti.legend.sampleCategoryConfiguration"))}; } -#categoryLabelLabel { +#categoryLabel { text: "tutti.label.sampleCategoryConfiguration.category"; labelFor: {categoryComboBox}; } @@ -47,6 +47,36 @@ selected: {model.isSample()}; } +#speciesLabel { + text: "tutti.label.sampleCategoryConfiguration.species"; + labelFor: {speciesField}; +} + +#speciesField { + editable: false; + text: {handler.decorateSpecies(model.getSpecies())}; +} + +#batchWeightLabel { + text: "tutti.label.sampleCategoryConfiguration.batchWeight"; + labelFor: {batchWeightField}; +} + +#batchWeightField { + editable: false; + text: {getStringValue(model.getBatchWeight())}; +} + +#sampleWeightLabel { + text: "tutti.label.sampleCategoryConfiguration.sampleWeight"; + labelFor: {sampleWeightField}; +} + +#sampleWeightField { + editable: false; + text: {getStringValue(model.getSampleWeight())}; +} + #closeButton { actionIcon: close; text: "tutti.action.close"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.jaxx 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUI.jaxx 2012-12-31 18:59:33 UTC (rev 134) @@ -69,6 +69,7 @@ uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='category' component='categoryComboBox'/> <field name='sample' component='sampleCheckBox'/> + <field name='sampleWeight' component='sampleWeightField'/> </BeanValidator> <Table id='configurationPanel' fill='both' constraints='BorderLayout.NORTH'> @@ -91,6 +92,43 @@ onItemStateChanged='handler.setBoolean(event, "sample")'/> </cell> </row> + + <row> + <cell columns="2"> + <JSeparator/> + </cell> + </row> + + <!-- Incoming Batch Species --> + <row> + <cell anchor='west'> + <JLabel id='speciesLabel'/> + </cell> + <cell weightx='1.0'> + <JTextField id='speciesField'/> + </cell> + </row> + + <!-- Incoming Batch Total weight --> + <row> + <cell anchor='west'> + <JLabel id='batchWeightLabel'/> + </cell> + <cell weightx='1.0'> + <JTextField id='batchWeightField'/> + </cell> + </row> + + <!-- Sample Total weight --> + <row> + <cell anchor='west'> + <JLabel id='sampleWeightLabel'/> + </cell> + <cell weightx='1.0'> + <JTextField id='sampleWeightField'/> + </cell> + </row> + </Table> <JScrollPane id='tableScrollPane' constraints='BorderLayout.CENTER'> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIHandler.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIHandler.java 2012-12-31 18:59:33 UTC (rev 134) @@ -25,10 +25,9 @@ */ import com.google.common.collect.Lists; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SampleCategory; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SampleCategoryType; @@ -37,11 +36,11 @@ import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import jaxx.runtime.SwingUtil; +import org.apache.commons.lang.ObjectUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; -import org.nuiton.util.decorator.Decorator; import javax.swing.JDialog; import java.beans.PropertyChangeEvent; @@ -74,13 +73,6 @@ */ private final SplitSampleCategoryUI ui; - /** - * Persistence service. - * - * @since 0.3 - */ - protected final PersistenceService persistenceService; - public SplitSampleCategoryUIHandler(SpeciesBatchUI parentUi, SplitSampleCategoryUI ui) { super(parentUi.getHandler().getContext(), @@ -88,7 +80,6 @@ SplitSampleCategoryRowModel.PROPERTY_WEIGHT); this.parentUi = parentUi; this.ui = ui; - this.persistenceService = getContext().getService(PersistenceService.class); } //------------------------------------------------------------------------// @@ -114,7 +105,16 @@ @Override protected void saveSelectedRowIfRequired(TuttiBeanMonitor<SplitSampleCategoryRowModel> rowMonitor, SplitSampleCategoryRowModel row) { - //TODO + if (rowMonitor.wasModified()) { + + if (row.isValid()) { + if (log.isInfoEnabled()) { + log.info("Change row that was modified and valid"); + } + } + + rowMonitor.clearModified(); + } } @Override @@ -128,8 +128,8 @@ if (SplitSampleCategoryRowModel.PROPERTY_WEIGHT.equals(propertyName)) { - // Need to recompute the total weight - computeComputedWeight(row); + // Need to recompute the sample weight + computeSampleWeight(row); } } @@ -167,7 +167,14 @@ @Override public void propertyChange(PropertyChangeEvent evt) { - getModel().setSelectedCategory(null); + SplitSampleCategoryUIModel source = + (SplitSampleCategoryUIModel) evt.getSource(); + + // unselect previous selected category + source.setSelectedCategory(null); + + // fill comboBox with new list + ui.getCategoryComboBox().setData((List<SampleCategoryType>) evt.getNewValue()); } }); @@ -176,11 +183,21 @@ @Override public void propertyChange(PropertyChangeEvent evt) { - SampleCategoryEnum newValue = (SampleCategoryEnum) evt.getNewValue(); + SampleCategoryType newValue = + (SampleCategoryType) evt.getNewValue(); generateTableModel(newValue); } }); + // when sample weight changed, revalidate model + model.addPropertyChangeListener(SplitSampleCategoryUIModel.PROPERTY_SAMPLE_WEIGHT, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + validateModel(); + } + }); + generateTableModel(null); initTable(getTable()); @@ -194,51 +211,72 @@ //-- Public methods --// //------------------------------------------------------------------------// - public void editBatch(SpeciesBatchRowModel row) { + public String decorateSpecies(Species object) { + String result = object == null ? "" : super.decorate(object); + return result; + } + public void editBatch(SpeciesBatchRowModel batch) { + // get possible the last used List<SampleCategoryType> categories = Lists.newArrayList(SampleCategoryType.values()); - //TODO Use the samplingOrder - SampleCategory<?> lastCategory = null; + Float batchWeight = null; - if (row.getSortedUnsortedSampleCategory().isValid()) { - categories.remove(SampleCategoryType.sortedUnsorted); - lastCategory = row.getSortedUnsortedSampleCategory(); - } + if (batch != null) { + //TODO Use the samplingOrder + List<String> samplingOrder = + parentUi.getModel().getSamplingOrder(); - if (row.getSizeSampleCategory().isValid()) { - categories.remove(SampleCategoryType.size); - lastCategory = row.getSizeSampleCategory(); - } + SampleCategory<?> lastCategory = null; - if (row.getSexSampleCategory().isValid()) { - categories.remove(SampleCategoryType.sex); - lastCategory = row.getSexSampleCategory(); - } + if (batch.getSortedUnsortedSampleCategory().isValid()) { + categories.remove(SampleCategoryType.sortedUnsorted); + lastCategory = batch.getSortedUnsortedSampleCategory(); + } - if (row.getMaturitySampleCategory().isValid()) { - categories.remove(SampleCategoryType.maturity); - lastCategory = row.getMaturitySampleCategory(); - } + if (batch.getSizeSampleCategory().isValid()) { + categories.remove(SampleCategoryType.size); + lastCategory = batch.getSizeSampleCategory(); + } - if (row.getAgeSampleCategory().isValid()) { - categories.remove(SampleCategoryType.age); - lastCategory = row.getAgeSampleCategory(); + if (batch.getSexSampleCategory().isValid()) { + categories.remove(SampleCategoryType.sex); + lastCategory = batch.getSexSampleCategory(); + } + + if (batch.getMaturitySampleCategory().isValid()) { + categories.remove(SampleCategoryType.maturity); + lastCategory = batch.getMaturitySampleCategory(); + } + + if (batch.getAgeSampleCategory().isValid()) { + categories.remove(SampleCategoryType.age); + lastCategory = batch.getAgeSampleCategory(); + } + + + if (lastCategory == null) { + + // no category, then must only come from the weight + batchWeight = batch.getWeight(); + + } else { + + // use last category weight + batchWeight = lastCategory.getCategoryWeight(); + } } - Float batchWeight = lastCategory == null ? null : - lastCategory.getCategoryWeight(); - SplitSampleCategoryUIModel model = getModel(); + model.setSampleWeight(null); model.setCategory(categories); - model.setBatchWeight(batchWeight); // keep batch (will be used to push back editing entry) - model.setBatch(row); + model.setBatch(batch); } public void close() { @@ -247,52 +285,62 @@ log.info("Will close UI " + ui); } - SplitSampleCategoryUIModel model = getModel(); + SwingUtil.getParentContainer(ui, JDialog.class).setVisible(false); + } - // transfer rows to editor - List<SplitSampleCategoryRowModel> safeRows = Lists.newArrayList(); - for (SplitSampleCategoryRowModel row : model.getRows()) { - if (row.isValid()) { + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// - // can keep this row - safeRows.add(row); - } - } + protected void computeSampleWeight(SplitSampleCategoryRowModel row) { if (log.isInfoEnabled()) { - log.info("Push back " + safeRows.size() + - " rows to batch " + model.getBatch()); + log.info("Will recompute sample weight from row: " + row); } - //TODO Create rows in batch table model - editBatch(null); - - SwingUtil.getParentContainer(ui, JDialog.class).setVisible(false); + Float result = 0f; + List<SplitSampleCategoryRowModel> rows = getTableModel().getRows(); + for (SplitSampleCategoryRowModel rowModel : rows) { + Float weight = rowModel.getWeight(); + if (weight != null) { + result += weight; + } + } + getModel().setSampleWeight(result); } - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// + protected void validateModel() { - protected void computeComputedWeight(SplitSampleCategoryRowModel row) { + SplitSampleCategoryUIModel model = getModel(); - if (log.isInfoEnabled()) { - log.info("Will recompute computed weight for frequency: " + row); + int rowCount = model.getRowCount(); + + // at least one row + boolean valid = rowCount > 0; + + if (valid && !model.isSample()) { + + // sample Weight = batch weight + valid = ObjectUtils.equals(model.getBatchWeight(), + model.getSampleWeight()); } + + model.setValid(valid); } - protected void generateTableModel(SampleCategoryEnum category) { + protected void generateTableModel(SampleCategoryType category) { + // when generate a new table model, then reset previous rows from model + getModel().setRows(null); + Caracteristic data = null; DefaultTableColumnModelExt columnModel = new DefaultTableColumnModelExt(); + boolean editableCategoryValue = false; if (category != null) { - Decorator<CaracteristicQualitativeValue> caracteristicDecorator = - getDecorator(CaracteristicQualitativeValue.class, null); - switch (category) { case sortedUnsorted: @@ -308,18 +356,22 @@ data = persistenceService.getMaturityCaracteristic(); break; case age: + editableCategoryValue = true; addFloatColumnToModel(columnModel, - SplitSampleCategoryTableModel.CATEGORY_VALUE, + SplitSampleCategoryTableModel.EDITABLE_CATEGORY_VALUE, TuttiUI.DECIMAL1_PATTERN); break; } if (data != null) { - addComboDataColumnToModel(columnModel, - SplitSampleCategoryTableModel.CATEGORY_VALUE, - caracteristicDecorator, - data.getQualitativeValue()); + if (log.isInfoEnabled()) { + log.info("Got " + data.sizeQualitativeValue() + " qualitative data to add"); + } + addColumnToModel(columnModel, + null, + newTableCellRender(CaracteristicQualitativeValue.class), + SplitSampleCategoryTableModel.READ_ONLY_CATEGORY_VALUE); } { // Weight @@ -335,21 +387,42 @@ JXTable table = getTable(); + // remove all listener on tables we could add before + uninstallTableSaveOnRowChangedSelectionListener(); +// uninstallTableKeyListener(); + + if (log.isInfoEnabled()) { + log.info("Install new table model " + tableModel); + } table.setModel(tableModel); table.setColumnModel(columnModel); - //TODO Fix this! -// installTableKeyListener(columnModel, table); + // install table listeners + installTableSaveOnRowChangedSelectionListener(); +// installTableKeyListener(columnModel, table, editableCategoryValue); + // fill datas + + List<SplitSampleCategoryRowModel> rows = Lists.newArrayList(); + if (data != null) { // add a row for each qualitive value for (CaracteristicQualitativeValue qualitativeValue : data.getQualitativeValue()) { + if (log.isInfoEnabled()) { + log.info("Add QV: " + qualitativeValue); + } SplitSampleCategoryRowModel newRow = tableModel.createNewRow(); newRow.setCategoryValue(qualitativeValue); - tableModel.addNewRow(newRow); + rows.add(newRow); } } + + if (log.isInfoEnabled()) { + log.info("Will add " + rows.size() + " rows in table model."); + } + + getModel().setRows(rows); } } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/split/SplitSampleCategoryUIModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -24,6 +24,7 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SampleCategoryType; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; @@ -42,6 +43,8 @@ public static final String PROPERTY_CATEGORY = "category"; + public static final String PROPERTY_SPECIES = "species"; + public static final String PROPERTY_SAMPLE = "sample"; public static final String PROPERTY_SELECTED_CATEGORY = "selectedCategory"; @@ -85,7 +88,6 @@ */ protected Float batchWeight; - /** * Sample weight of split batches. * @@ -102,9 +104,15 @@ } public void setBatch(SpeciesBatchRowModel batch) { + Object oldSpecies = getSpecies(); this.batch = batch; + firePropertyChange(PROPERTY_SPECIES, oldSpecies, getSpecies()); } + public Species getSpecies() { + return batch == null ? null : batch.getSpecies(); + } + public List<SampleCategoryType> getCategory() { return category; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/environment/EnvironmentTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -55,7 +55,7 @@ } @Override - protected EnvironmentRowModel createNewRow() { + public EnvironmentRowModel createNewRow() { EnvironmentRowModel result = new EnvironmentRowModel(); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/gearshooting/GearShootingTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -55,7 +55,7 @@ } @Override - protected GearShootingRowModel createNewRow() { + public GearShootingRowModel createNewRow() { GearShootingRowModel result = new GearShootingRowModel(); return result; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTableModel.java 2012-12-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/fishing/hydrology/HydrologyTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -65,7 +65,7 @@ } @Override - protected HydrologyRowModel createNewRow() { + public HydrologyRowModel createNewRow() { HydrologyRowModel result = new HydrologyRowModel(); return result; } 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolSpeciesTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -81,7 +81,7 @@ } @Override - protected EditProtocolSpeciesRowModel createNewRow() { + public EditProtocolSpeciesRowModel createNewRow() { EditProtocolSpeciesRowModel result = new EditProtocolSpeciesRowModel(); result.setMaturityEnabled(true); result.setSizeEnabled(true); 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableModel.java 2012-12-31 18:59:33 UTC (rev 134) @@ -79,7 +79,7 @@ */ protected Set<ColumnIdentifier<?>> noneEditableCols; - protected abstract R createNewRow(); + public abstract R createNewRow(); protected AbstractTuttiTableModel(TableColumnModel columnModel) { int nbcols = columnModel.getColumnCount(); 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-31 12:31:24 UTC (rev 133) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-12-31 18:59:33 UTC (rev 134) @@ -8,6 +8,7 @@ tutti.action.close=Fermer tutti.action.configuration=Configuration tutti.action.configuration.tip=Configurer Tutti +tutti.action.createSpeciesBatch=Créer un lot pour une espèce tutti.action.edit=Editer tutti.action.exit=Quitter tutti.action.exit.tip=Quitter l'application @@ -23,12 +24,14 @@ tutti.action.reload.application=Recharger l'application tutti.action.reload.home=Reload home screen tutti.action.reload.ui=Recharger l'interface graphique +tutti.action.removeSubBatch=Supprimer les lots tutti.action.reset.fishingOperationValidState=Réinitialiser tutti.action.save=Enregistrer tutti.action.selectCampaign=Campagne tutti.action.selectCampaign.tip=Sélectionner la campagne à utiliser tutti.action.site=Site tutti.action.site.tip=Accéder au site du projet Tutti +tutti.action.splitBatch=Catégoriser un lot tutti.application.config=Configuration de l'application Tutti tutti.application.name=Tutti tutti.config.category.applications=Application @@ -77,6 +80,9 @@ tutti.label.cruise.program=Série tutti.label.cruise.surveyPart=Série partielle tutti.label.cruise.year=Année +tutti.label.filterSpeciesBatchMode.mode.all=Tout voir +tutti.label.filterSpeciesBatchMode.mode.leaf=Voir les feuilles +tutti.label.filterSpeciesBatchMode.mode.root=Voir les parents tutti.label.fishingOperation.date=Date tutti.label.fishingOperation.distanceChalutee=Distance chalutée tutti.label.fishingOperation.duree=Durée @@ -116,7 +122,11 @@ tutti.label.program.name=Nom tutti.label.program.zone=Zone tutti.label.protocol=Protocol de saisie +tutti.label.sampleCategoryConfiguration.batchWeight=Poids total à catégoriser +tutti.label.sampleCategoryConfiguration.category=Catégorie tutti.label.sampleCategoryConfiguration.sample=Echantillon ? +tutti.label.sampleCategoryConfiguration.sampleWeight=Poids total catégorisé +tutti.label.sampleCategoryConfiguration.species=Espèce tutti.label.tab.accidentel=Captures accidentelles tutti.label.tab.benthos=Benthos tutti.label.tab.catches=Captures @@ -138,6 +148,7 @@ tutti.legend.catch.macroWaste=Macro déchets tutti.legend.catch.species=Espèces tutti.legend.catch.total=Capture +tutti.legend.filterSpeciesBatchMode=Filtrer les lots tutti.legend.frequencyConfiguration=Configuration tutti.legend.sampleCategoryConfiguration=Configuration tutti.menu.actions=Actions @@ -223,6 +234,7 @@ tutti.table.species.sampleCategory.header.weight=Poids tutti.timeeditor.H=H tutti.title.about=À propos de Tutti +tutti.title.batchActions=Actions possibles tutti.title.create.cruise=Créer une nouvelle campagne tutti.title.create.program=Créer une nouvelle série de campagne tutti.title.create.protocol=Créer un nouveau protocol de saisie @@ -239,6 +251,7 @@ tutti.title.selectedCruise=Campagne %s tutti.title.selectedProgram=Série de campagne %s tutti.title.selectedProtocol=Protocol %s +tutti.title.splitBatch=Catégoriser un lot tutti.to.be.done=< A FAIRE > tutti.tooltip.attachment.none=Pas de pièce-jointes tutti.tooltip.comment.none=Pas de commentaire Added: trunk/tutti-ui-swing/src/main/resources/icons/action-batch-delete.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-batch-delete.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/tutti-ui-swing/src/main/resources/icons/action-batch-split.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-batch-split.png ___________________________________________________________________ Added: svn:mime-type + image/png
participants (1)
-
tchemit@users.forge.codelutin.com