r1271 - in trunk: tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service tutti-ui-swing/src/main/filtered-resources tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create tutti-ui-swing/src/ma
Author: tchemit Date: 2013-10-03 14:05:44 +0200 (Thu, 03 Oct 2013) New Revision: 1271 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1271 Log: fixes #3319: [DONNEES INDIVIDUELLES] pouvoir copier les mensurations depuis la page ESPECES Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.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/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel-error-validation.xml trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -135,8 +135,8 @@ Preconditions.checkNotNull(bean); Preconditions.checkState(TuttiEntities.isNew(bean)); Preconditions.checkNotNull(bean.getSpecies()); - Preconditions.checkNotNull(bean.getSize()); - Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); +// Preconditions.checkNotNull(bean.getSize()); +// Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); FishingOperation fishingOperation = bean.getFishingOperation(); Preconditions.checkNotNull(fishingOperation); @@ -157,8 +157,8 @@ Preconditions.checkNotNull(bean); Preconditions.checkState(!TuttiEntities.isNew(bean)); Preconditions.checkNotNull(bean.getSpecies()); - Preconditions.checkNotNull(bean.getSize()); - Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); +// Preconditions.checkNotNull(bean.getSize()); +// Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); FishingOperation fishingOperation = bean.getFishingOperation(); Preconditions.checkNotNull(fishingOperation); Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-10-03 12:05:44 UTC (rev 1271) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Wed Oct 02 19:41:03 CEST 2013 +#Thu Oct 03 13:39:06 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -27,6 +27,7 @@ tutti.createIndividualObservationBatch.action.cancel.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.saveAndClose.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.saveAndContinue.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.createIndividualObservationBatch.field.createFromBatch.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSize.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesFields @@ -190,6 +191,7 @@ tutti.editIndividualObservationBatch.action.createBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.exportMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.importMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.editIndividualObservationBatch.action.removeAllBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.removeBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.help=editFishingOperation.html\#captureObservationsIndividuelles tutti.editMarineLitterBatch.action.createBatch.help=editFishingOperation.html\#captureMacroDechetsActions Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-10-03 12:05:44 UTC (rev 1271) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Wed Oct 02 19:41:03 CEST 2013 +#Thu Oct 03 13:39:06 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -27,6 +27,7 @@ tutti.createIndividualObservationBatch.action.cancel.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.saveAndClose.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.saveAndContinue.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.createIndividualObservationBatch.field.createFromBatch.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSize.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesFields @@ -190,6 +191,7 @@ tutti.editIndividualObservationBatch.action.createBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.exportMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.importMultiPost.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.editIndividualObservationBatch.action.removeAllBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.action.removeBatch.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.editIndividualObservationBatch.help=editFishingOperation.html\#captureObservationsIndividuelles tutti.editMarineLitterBatch.action.createBatch.help=editFishingOperation.html\#captureMacroDechetsActions Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -279,6 +279,10 @@ return serviceConfig.getAccidentalCatchWeightUnit(); } + public int getMaxIndividualObservationRowsToCreate() { + return applicationConfig.getOptionAsInt(TuttiApplicationConfigOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE.getKey()); + } + public KeyStroke getShortCut(String actionName) { KeyStroke result = applicationConfig.getOptionAsKeyStroke( "tutti.ui." + actionName); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -222,6 +222,12 @@ // "ifremer" by default "ef399a6e6ec62c6e142440241a5b98f8", String.class + ), + MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE( + "tutti.ui.max.individualObservationRowsToCreate", + n_("tutti.config.option.ui.individualObservationRowsToCreate.description"), + "10", + Integer.class ); /** Configuration key. */ Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -129,7 +129,8 @@ CALLBACK_APPLICATION) .addOption(TuttiServiceConfigOption.CSV_SEPARATOR) .addOption(TuttiApplicationConfigOption.UI_CONFIG_FILE) - .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE); + .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE) + .addOption(TuttiApplicationConfigOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE); if (context.isDbLoaded()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.css 2013-10-03 12:05:44 UTC (rev 1271) @@ -77,4 +77,14 @@ _tuttiAction: {RemoveIndividualObservationBatchAction.class}; enabled: {model.isRemoveBatchEnabled()}; _help: {"tutti.editIndividualObservationBatch.action.removeBatch.help"}; +} + +#removeAllIndividualObservationBatchMenu { + actionIcon: batch-delete; + text: "tutti.editIndividualObservationBatch.action.removeAllBatch"; + toolTipText: "tutti.editIndividualObservationBatch.action.removeAllBatch.tip"; + i18nMnemonic: "tutti.editIndividualObservationBatch.action.removeAllBatch.mnemonic"; + _tuttiAction: {RemoveAllIndividualObservationBatchAction.class}; + enabled: {model.isRemoveBatchEnabled()}; + _help: {"tutti.editIndividualObservationBatch.action.removeAllBatch.help"}; } \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUI.jaxx 2013-10-03 12:05:44 UTC (rev 1271) @@ -73,6 +73,7 @@ <JPopupMenu id='tablePopup'> <JMenuItem id='removeIndividualObservationBatchMenu'/> + <JMenuItem id='removeAllIndividualObservationBatchMenu'/> </JPopupMenu> <JPanel id='tableToolbar' Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -29,21 +29,25 @@ import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategory; 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.service.DecoratorService; import fr.ifremer.tutti.service.ValidationService; +import fr.ifremer.tutti.service.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchTableUIHandler; 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.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.create.CreateIndividualObservationBatchUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUI; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; -import fr.ifremer.tutti.service.WeightUnit; 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; @@ -68,6 +72,7 @@ import org.nuiton.validator.NuitonValidatorResult; import javax.swing.JComponent; +import javax.swing.JOptionPane; import java.awt.Color; import java.awt.Component; import java.io.Serializable; @@ -77,6 +82,8 @@ import java.util.Map; import java.util.Set; +import static org.nuiton.i18n.I18n._; + /** * @author kmorin <kmorin@codelutin.com> * @since 1.4 @@ -97,6 +104,8 @@ */ protected final WeightUnit weightUnit; + public final Integer PMFM_ID_SORTED_UNSORTED; + public IndividualObservationBatchUIHandler(TuttiUI<?, ?> parentUi, IndividualObservationBatchUI ui) { super(parentUi, ui, IndividualObservationBatchRowModel.PROPERTY_SPECIES, @@ -105,12 +114,13 @@ IndividualObservationBatchRowModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS, IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, -// IndividualObservationBatchRowModel.PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, -// IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE, IndividualObservationBatchRowModel.PROPERTY_COMMENT, IndividualObservationBatchRowModel.PROPERTY_ATTACHMENT); weightUnit = getConfig().getIndividualObservationWeightUnit(); + + PMFM_ID_SORTED_UNSORTED = + persistenceService.getSortedUnsortedCaracteristic().getIdAsInt(); } //------------------------------------------------------------------------// @@ -132,7 +142,7 @@ if (log.isDebugEnabled()) { log.debug("Get individualObservation batch for fishingOperation: " + - bean.getId()); + bean.getId()); } rows = Lists.newArrayList(); @@ -152,32 +162,24 @@ } } - IndividualObservationBatchRowModel entry = loadBatch(aBatch); + IndividualObservationBatchRowModel entry = + new IndividualObservationBatchRowModel( + weightUnit, + aBatch, + getModel().getDefaultCaracteristic()); + + List<Attachment> attachments = + persistenceService.getAllAttachments(entry.getObjectType(), + entry.getObjectId()); + + entry.addAllAttachment(attachments); rows.add(entry); } } } model.setRows(rows); - recomputeBatchActionEnable(); } - protected IndividualObservationBatchRowModel loadBatch(IndividualObservationBatch aBatch) { - - IndividualObservationBatchRowModel newRow = - new IndividualObservationBatchRowModel( - weightUnit, - aBatch, - getModel().getDefaultCaracteristic()); - - List<Attachment> attachments = - persistenceService.getAllAttachments(newRow.getObjectType(), - newRow.getObjectId()); - - newRow.addAllAttachment(attachments); - - return newRow; - } - //------------------------------------------------------------------------// //-- AbstractTuttiTableUIHandler methods --// //------------------------------------------------------------------------// @@ -210,8 +212,8 @@ saveSelectedRowIfNeeded(); - // when row valid state has changed, recompute action enabled states - recomputeBatchActionEnable(); +// // when row valid state has changed, recompute action enabled states +// recomputeBatchActionEnable(); } @Override @@ -221,8 +223,8 @@ if (row != null && row.isValid() && rowMonitor.wasModified()) { // monitored bean was modified, save it - if (log.isInfoEnabled()) { - log.info("Row " + row + " was modified, will save it"); + if (log.isDebugEnabled()) { + log.debug("Row " + row + " was modified, will save it"); } rowMonitor.setBean(null); @@ -234,29 +236,29 @@ } } - @Override - protected void onRowValidStateChanged(int rowIndex, - IndividualObservationBatchRowModel row, - Boolean oldValue, - Boolean newValue) { - super.onRowValidStateChanged(rowIndex, row, oldValue, newValue); +// @Override +// protected void onRowValidStateChanged(int rowIndex, +// IndividualObservationBatchRowModel row, +// Boolean oldValue, +// Boolean newValue) { +// super.onRowValidStateChanged(rowIndex, row, oldValue, newValue); +// +// // when row valid state has changed, recompute action enabled states +// recomputeBatchActionEnable(); +// } - // when row valid state has changed, recompute action enabled states - recomputeBatchActionEnable(); - } +// @Override +// protected void onAfterSelectedRowChanged(int oldRowIndex, +// IndividualObservationBatchRowModel oldRow, +// int newRowIndex, +// IndividualObservationBatchRowModel newRow) { +// super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); +// +// // when selected row has changed, recompute action enabled states +// recomputeBatchActionEnable(); +// } @Override - protected void onAfterSelectedRowChanged(int oldRowIndex, - IndividualObservationBatchRowModel oldRow, - int newRowIndex, - IndividualObservationBatchRowModel newRow) { - super.onAfterSelectedRowChanged(oldRowIndex, oldRow, newRowIndex, newRow); - - // when selected row has changed, recompute action enabled states - recomputeBatchActionEnable(); - } - - @Override protected void addHighlighters(JXTable table) { super.addHighlighters(table); @@ -432,18 +434,6 @@ } -// { // Calcified piece sampling code column -// -// addColumnToModel(columnModel, -// IndividualObservationBatchTableModel.CALCIFIED_PIECE_SAMPLING_CODE); -// } -// -// { // Sampling code column -// -// addColumnToModel(columnModel, -// IndividualObservationBatchTableModel.SAMPLING_CODE); -// } - { // Comment column addColumnToModel(columnModel, @@ -469,10 +459,24 @@ table.setColumnModel(columnModel); initBatchTable(table, columnModel, tableModel); - recomputeBatchActionEnable(); } @Override + protected void beforeOpenPopup(int rowIndex, int columnIndex) { + super.beforeOpenPopup(rowIndex, columnIndex); + + boolean enableRemove = false; + + if (rowIndex != -1) { + + // there is a selected row + enableRemove = true; + } + IndividualObservationBatchUIModel model = getModel(); + model.setRemoveBatchEnabled(enableRemove); + } + + @Override protected JComponent getComponentToFocus() { return getUI().getTable(); } @@ -520,45 +524,201 @@ IndividualObservationBatchTableModel tableModel = getTableModel(); - IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); - newRow.setSpecies(model.getSpecies()); - newRow.setWeight(model.getWeight()); - newRow.setSize(model.getSize()); - newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); - newRow.getDefaultCaracteristics().putAll(model.getCaracteristics()); + if (model.isCreateFromBatch()) { + EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); - recomputeRowValidState(newRow); + SpeciesBatchUIModel speciesBatchUIModel = parent.getSpeciesTabContent().getModel(); - saveRow(newRow); + // get species rows to use (all leafs for the given species) + Species species = model.getSpecies(); + List<SpeciesBatchRowModel> leafs = + speciesBatchUIModel.getLeafs(species); - tableModel.addNewRow(newRow); - AbstractSelectTableAction.doSelectCell(getTable(), - tableModel.getRowCount() - 1, - 0); - } + List<IndividualObservationBatchRowModel> rowsToCreate = Lists.newArrayList(); - recomputeBatchActionEnable(); - } + CaracteristicMap defaultCaracteristics = new CaracteristicMap(); + defaultCaracteristics.putAll(model.getCaracteristics()); - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// + for (SpeciesBatchRowModel leaf : leafs) { - protected void recomputeBatchActionEnable() { + CaracteristicMap batchCaracteristics = new CaracteristicMap(); - int rowIndex = getTable().getSelectedRow(); + for (SampleCategory<?> sampleCategory : leaf) { + if (PMFM_ID_SORTED_UNSORTED.equals(sampleCategory.getCategoryId())) { + // do not use vrac / hors vrac caracteristic ? + continue; + } + if (sampleCategory.getCategoryValue() == null) { + // not using this category + continue; + } + if (defaultCaracteristics.containsKey(sampleCategory.getCategoryDef().getCaracteristic())) { - boolean enableRemove = false; + // use default caracteristics + defaultCaracteristics.put(sampleCategory.getCategoryDef().getCaracteristic(), + sampleCategory.getCategoryValue()); + } else { - if (rowIndex != -1) { + // use other caracteristics + batchCaracteristics.put(sampleCategory.getCategoryDef().getCaracteristic(), + sampleCategory.getCategoryValue()); + } - // there is a selected row - enableRemove = true; + } + + List<SpeciesFrequencyRowModel> frequencies = leaf.getFrequency(); + + if (CollectionUtils.isEmpty(frequencies)) { + + // no frequency, create a simple row + + int nbRow = TuttiEntities.getValueOrComputedValue(leaf.getNumber(), 0); + + for (int i = 0; i < nbRow; i++) { + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(species); + newRow.getCaracteristics().putAll(batchCaracteristics); + + //FIXME Keep this ? + newRow.getDefaultCaracteristics().putAll(defaultCaracteristics); + //FIXME Keep this? + newRow.setWeight(model.getWeight()); + //FIXME Keep this? + newRow.setSize(model.getSize()); + //FIXME Keep this? + newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); + + rowsToCreate.add(newRow); + + + } + + } else { + + for (SpeciesFrequencyRowModel frequency : frequencies) { + + // create a row for each frequency + + int nbRow = TuttiEntities.getValueOrComputedValue(frequency.getNumber(), 0); + + float weight = TuttiEntities.getValueOrComputedValue(frequency.getWeight(), 0f); + if (nbRow > 0) { + weight /= nbRow; + } + for (int i = 0; i < nbRow; i++) { + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(species); + newRow.setWeight(weight); + newRow.setSize(frequency.getLengthStep()); + newRow.setLengthStepCaracteristic(frequency.getLengthStepCaracteristic()); + + newRow.getCaracteristics().putAll(batchCaracteristics); + //FIXME Keep this ? + newRow.getDefaultCaracteristics().putAll(defaultCaracteristics); + + rowsToCreate.add(newRow); + } + } + } + } + + + int nbRowsToCreate = rowsToCreate.size(); + + boolean create; + + int maxIndividualObservationRowsToCreate = + getConfig().getMaxIndividualObservationRowsToCreate(); + + StringBuilder sb = new StringBuilder("<table>"); + + sb.append("<tr>"); + sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationSpecies")).append("</th>"); + sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationWeight")).append("</th>"); + sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationSize")).append("</th>"); + sb.append("<th>").append(_("tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic")).append("</th>"); + sb.append("</tr>"); + + String speciesStr = decorate(species); + + for (IndividualObservationBatchRowModel rowModel : rowsToCreate) { + sb.append("<tr>"); + sb.append("<td>").append(speciesStr).append("</td>"); + sb.append("<td>").append(rowModel.getWeight()).append("</td>"); + sb.append("<td>").append(rowModel.getSize()).append("</td>"); + sb.append("<td>").append(decorate(rowModel.getLengthStepCaracteristic(), DecoratorService.CARACTERISTIC_WITH_UNIT)).append("</td>"); + sb.append("</tr>"); + } + sb.append("</table>"); + + if (maxIndividualObservationRowsToCreate < nbRowsToCreate) { + + // ask confirmation + + String htmlMessage = String.format( + CONFIRMATION_FORMAT, + _("tutti.createIndividualObservationBatch.confirm.message", speciesStr, nbRowsToCreate, sb.toString()), + _("tutti.createIndividualObservationBatch.confirm.help")); + int response = JOptionPane.showConfirmDialog( + getTopestUI(), + htmlMessage, + _("tutti.createIndividualObservationBatch.confirm.title"), + JOptionPane.OK_CANCEL_OPTION, + JOptionPane.WARNING_MESSAGE); + + + create = response == JOptionPane.OK_OPTION; + } else { + + create = true; + } + + if (create) { + + if (log.isInfoEnabled()) { + log.info("Will create " + rowsToCreate.size() + " individual observation batches"); + } + + for (IndividualObservationBatchRowModel newRow : rowsToCreate) { + + recomputeRowValidState(newRow); + + saveRow(newRow); + + tableModel.addNewRow(newRow); + } + + AbstractSelectTableAction.doSelectCell(getTable(), + tableModel.getRowCount() - 1, + 0); + } + + } else { + + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.setSpecies(model.getSpecies()); + newRow.setWeight(model.getWeight()); + newRow.setSize(model.getSize()); + newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); + newRow.getDefaultCaracteristics().putAll(model.getCaracteristics()); + + recomputeRowValidState(newRow); + + saveRow(newRow); + + tableModel.addNewRow(newRow); + AbstractSelectTableAction.doSelectCell(getTable(), + tableModel.getRowCount() - 1, + 0); + } } - IndividualObservationBatchUIModel model = getModel(); - model.setRemoveBatchEnabled(enableRemove); + } + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + protected void saveRow(IndividualObservationBatchRowModel row) { IndividualObservationBatch entityToSave = row.toEntity(); @@ -585,10 +745,6 @@ FishingOperation fishingOperation = getModel().getFishingOperation(); entityToSave.setFishingOperation(fishingOperation); - if (log.isInfoEnabled()) { - log.info("Selected fishingOperation: " + fishingOperation.getId()); - } - if (TuttiEntities.isNew(entityToSave)) { entityToSave = persistenceService.createIndividualObservationBatch(entityToSave); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -69,9 +69,8 @@ } public void setRemoveBatchEnabled(boolean removeBatchEnabled) { - Object oldValue = isRemoveBatchEnabled(); this.removeBatchEnabled = removeBatchEnabled; - firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, oldValue, removeBatchEnabled); + firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, null, removeBatchEnabled); } public List<Caracteristic> getDefaultCaracteristic() { Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -0,0 +1,165 @@ +package fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.TuttiPersistence; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; +import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.JXTable; + +import javax.swing.JOptionPane; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * Created on 10/3/13. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 2.7 + */ +public class RemoveAllIndividualObservationBatchAction + extends AbstractTuttiAction<IndividualObservationBatchUIModel, IndividualObservationBatchUI, IndividualObservationBatchUIHandler> { + + private static final Log log = + LogFactory.getLog(RemoveAllIndividualObservationBatchAction.class); + + public RemoveAllIndividualObservationBatchAction(IndividualObservationBatchUIHandler handler) { + super(handler, false); + } + + protected Species species; + + protected List<Integer> rowIndexToRemove; + + @Override + public boolean prepareAction() throws Exception { + boolean result = super.prepareAction(); + + rowIndexToRemove = null; + species = null; + + int rowIndex = -1; + + if (result) { + JXTable table = handler.getTable(); + + rowIndex = table.getSelectedRow(); + + Preconditions.checkState(rowIndex != -1, + "Cant remove batch if none is selected"); + } + + if (result) { + + IndividualObservationBatchTableModel tableModel = handler.getTableModel(); + + IndividualObservationBatchRowModel entry = tableModel.getEntry(rowIndex); + + species = entry.getSpecies(); + + rowIndexToRemove = Lists.newArrayList(); + + for (IndividualObservationBatchRowModel rowModel : tableModel.getRows()) { + if (species.equals(rowModel.getSpecies())) { + rowIndexToRemove.add(0, tableModel.getRowIndex(rowModel)); + } + } + + int answer = JOptionPane.showConfirmDialog(getContext().getActionUI(), + _("tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.message", rowIndexToRemove.size(), decorate(species)), + _("tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.title"), + JOptionPane.YES_NO_OPTION); + result = answer == JOptionPane.YES_OPTION; + } + + return result; + } + + @Override + public void doAction() throws Exception { + + Preconditions.checkNotNull(rowIndexToRemove); + Preconditions.checkNotNull(species); + + JXTable table = handler.getTable(); + + IndividualObservationBatchTableModel tableModel = handler.getTableModel(); + + for (Integer rowIndex : rowIndexToRemove) { + IndividualObservationBatchRowModel selectedBatch = tableModel.getEntry(rowIndex); + + boolean persisted = !TuttiEntities.isNew(selectedBatch); + + if (persisted) { + + // remove it from db + + String id = selectedBatch.getId(); + + if (log.isInfoEnabled()) { + log.info("Remove individual observation with id: " + id); + } + + TuttiPersistence persistenceService = + getContext().getPersistenceService(); + + persistenceService.deleteIndividualObservationBatch(id); + } + } + + } + + @Override + public void postSuccessAction() { + super.postSuccessAction(); + + JXTable table = handler.getTable(); + + IndividualObservationBatchTableModel tableModel = handler.getTableModel(); + + for (Integer rowIndex : rowIndexToRemove) { + tableModel.removeRow(rowIndex); + } + + if (!tableModel.getRows().isEmpty()) { + + // select first row + AbstractSelectTableAction.doSelectCell(table, 0, 0); + } + + if (table.isEditing()) { + + // but no edit it + table.getCellEditor().stopCellEditing(); + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveIndividualObservationBatchAction.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -88,7 +88,7 @@ String id = selectedBatch.getId(); if (log.isInfoEnabled()) { - log.info("Remove marineLitter with id: " + id); + log.info("Remove individual observation with id: " + id); } TuttiPersistence persistenceService = Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-10-03 12:05:44 UTC (rev 1271) @@ -49,6 +49,14 @@ data: {model.getAvailableSpecies()}; } +#individualObservationCreateFromBatch { + text: "tutti.createIndividualObservationBatch.field.createFromBatch"; + selected: {model.isSpeciesFromBatch() && model.isCreateFromBatch()}; + enabled: {model.isSpeciesFromBatch()}; + toolTipText: "tutti.createIndividualObservationBatch.field.createFromBatch.tip"; + _help: {"tutti.createIndividualObservationBatch.field.createFromBatch.help"}; +} + #individualObservationWeightLabel { text: "tutti.createIndividualObservationBatch.field.individualObservationWeight"; toolTipText: "tutti.createIndividualObservationBatch.field.individualObservationWeight.tip"; @@ -112,6 +120,17 @@ _help: {"tutti.createIndividualObservationBatch.action.saveAndClose.help"}; } +/* +#saveFromBatchAndCloseButton { + actionIcon: save; + text: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose"; + toolTipText: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.tip"; + i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.mnemonic"; + enabled: {model.isValid() && model.isSpeciesFromBatch()}; + _help: {"tutti.createIndividualObservationBatch.action.saveFromBatchAndClose.help"}; +} +*/ + #cancelButton { actionIcon: cancel; text: "tutti.createIndividualObservationBatch.action.cancel"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx 2013-10-03 12:05:44 UTC (rev 1271) @@ -88,6 +88,14 @@ </cell> </row> + <!-- Create from batch ? --> + <row> + <cell anchor='west' columns="3"> + <JCheckBox id='individualObservationCreateFromBatch' + onItemStateChanged='handler.setBoolean(event, "createFromBatch")'/> + </cell> + </row> + <!-- IndividualObservation weight --> <row> <cell anchor='west'> @@ -129,6 +137,7 @@ <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> <JButton id='saveAndContinueButton' onActionPerformed='handler.saveAndContinue()'/> + <!--<JButton id='saveFromBatchAndCloseButton' onActionPerformed='handler.saveFromBatchAndClose()'/>--> <JButton id='saveAndCloseButton' onActionPerformed='handler.saveAndClose()'/> </JPanel> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -316,13 +316,16 @@ List<Species> speciesListWithSurveyCode = getDataContext().getReferentSpeciesWithSurveyCode(); + List<Species> batchesSpeciesList = Lists.newArrayList(); + List<Species> speciesList; EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); List<SpeciesBatchRowModel> speciesRows = parent.getSpeciesTabContent().getModel().getRows(); - if (CollectionUtils.isNotEmpty(speciesRows)) { + boolean withSpeciesBatch = CollectionUtils.isNotEmpty(speciesRows); + if (withSpeciesBatch) { // use species from species batch Set<Species> speciesSet = Sets.newHashSet(); @@ -333,6 +336,8 @@ } } + batchesSpeciesList.addAll(speciesSet); + // plus readd the species filled here (individualObservations) List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); @@ -379,6 +384,8 @@ } } } + + model.setBatchSpecies(batchesSpeciesList); model.setAvailableSpecies(speciesList); // set last species filled here Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -29,9 +29,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.jdesktop.beans.AbstractSerializableBean; import java.io.Serializable; @@ -45,10 +44,14 @@ private static final long serialVersionUID = 1L; - private static final Log log = LogFactory.getLog(CreateIndividualObservationBatchUIModel.class); - public static final String PROPERTY_AVAILABLE_SPECIES = "availableSpecies"; + public static final String PROPERTY_BATCH_SPECIES = "batchSpecies"; + + public static final String PROPERTY_SPECIES_FROM_BATCH = "speciesFromBatch"; + + public static final String PROPERTY_CREATE_FROM_BATCH = "createFromBatch"; + public static final String PROPERTY_CARACTERISTICS = "caracteristics"; /** @@ -59,6 +62,20 @@ protected List<Species> availableSpecies; /** + * All species used in batches. + * + * @since 2.7 + */ + protected List<Species> batchSpecies; + + /** + * Does we want to create rows from batch? + * + * @since 2.7 + */ + protected boolean createFromBatch; + + /** * Delegate edit object. * * @since 1.3 @@ -95,6 +112,7 @@ Object oldValue = getSpecies(); editObject.setSpecies(individualObservationSpecies); firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, individualObservationSpecies); + firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch()); } public Float getWeight() { @@ -139,21 +157,41 @@ } public List<Species> getAvailableSpecies() { - if (log.isDebugEnabled()) { - log.debug("getAvailableSpecies " + availableSpecies); - } return availableSpecies; } public void setAvailableSpecies(List<Species> availableSpecies) { - - if (log.isDebugEnabled()) { - log.debug("setAvailableSpecies " + availableSpecies); - } this.availableSpecies = availableSpecies; firePropertyChange(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies); } + public List<Species> getBatchSpecies() { + return batchSpecies; + } + + public boolean isSpeciesFromBatch() { + return CollectionUtils.isNotEmpty(batchSpecies) && + getSpecies() != null && + batchSpecies.contains(getSpecies()); + } + + public void setBatchSpecies(List<Species> batchSpecies) { + this.batchSpecies = batchSpecies; + firePropertyChange(PROPERTY_BATCH_SPECIES, null, batchSpecies); + firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch()); + setCreateFromBatch(isCreateFromBatch()); + } + + public boolean isCreateFromBatch() { + return createFromBatch; + } + + public void setCreateFromBatch(boolean createFromBatch) { + Object oldValue = isCreateFromBatch(); + this.createFromBatch = createFromBatch; + firePropertyChange(PROPERTY_CREATE_FROM_BATCH, oldValue, createFromBatch); + } + @Override protected IndividualObservationBatch newEntity() { return IndividualObservationBatchs.newIndividualObservationBatch(); @@ -161,6 +199,7 @@ public void reset() { setAvailableSpecies(Lists.<Species>newArrayList()); + setBatchSpecies(Lists.<Species>newArrayList()); setSpecies(null); setWeight(null); setSize(null); 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 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-10-03 12:05:44 UTC (rev 1271) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.collect.Lists; import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -34,6 +35,8 @@ import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import org.apache.commons.collections.CollectionUtils; +import java.util.List; + import static org.nuiton.i18n.I18n.n_; /** @@ -379,4 +382,28 @@ public String getIcon() { return null; } + + public List<SpeciesBatchRowModel> getLeafs(Species species) { + List<SpeciesBatchRowModel> result = Lists.newArrayList(); + for (SpeciesBatchRowModel rowModel : getRows()) { + if (rowModel.isBatchRoot()) { + getLeafs(species, rowModel, result); + } + } + return result; + } + + public void getLeafs(Species species, SpeciesBatchRowModel rowModel, List<SpeciesBatchRowModel> used) { + + if (rowModel.isBatchLeaf()) { + + if (species.equals(rowModel.getSpecies())) { + used.add(rowModel); + } + } else { + for (SpeciesBatchRowModel child : rowModel.getChildBatch()) { + getLeafs(species, child, used); + } + } + } } Modified: trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel-error-validation.xml =================================================================== --- trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel-error-validation.xml 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel-error-validation.xml 2013-10-03 12:05:44 UTC (rev 1271) @@ -35,27 +35,49 @@ </field> <field name="weight"> - <field-validator type="required" short-circuit="true"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ weight != null || createFromBatch ]]></param> <message> tutti.validator.error.createIndividualObservationBatch.weight.required </message> </field-validator> + + <!--field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.createIndividualObservationBatch.weight.required + </message> + </field-validator--> </field> <field name="size"> - <field-validator type="required" short-circuit="true"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ size != null || createFromBatch ]]></param> <message> tutti.validator.error.createIndividualObservationBatch.size.required </message> </field-validator> + <!--field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.createIndividualObservationBatch.size.required + </message> + </field-validator--> </field> <field name="lengthStepCaracteristic"> - <field-validator type="required" short-circuit="true"> + <field-validator type="fieldexpression" short-circuit="true"> + <param name="expression"> + <![CDATA[ lengthStepCaracteristic != null || createFromBatch ]]></param> <message> tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required </message> </field-validator> + <!--field-validator type="required" short-circuit="true"> + <message> + tutti.validator.error.createIndividualObservationBatch.lengthStepCaracteristic.required + </message> + </field-validator--> </field> </validators> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-10-03 12:05:44 UTC (rev 1271) @@ -125,6 +125,7 @@ tutti.config.option.ui.config.file.description= tutti.config.option.ui.coordinateEditorType.description= tutti.config.option.ui.dateFormat.description= +tutti.config.option.ui.individualObservationRowsToCreate.description= tutti.config.option.ui.shortcut.closePopup.description= tutti.config.option.ui.showNumberEditorButton.description= tutti.config.option.ui.weight.unit.accidentalCatch.description= @@ -204,6 +205,11 @@ tutti.createIndividualObservationBatch.action.saveAndContinue= tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic= tutti.createIndividualObservationBatch.action.saveAndContinue.tip= +tutti.createIndividualObservationBatch.confirm.help= +tutti.createIndividualObservationBatch.confirm.message= +tutti.createIndividualObservationBatch.confirm.title= +tutti.createIndividualObservationBatch.field.createFromBatch= +tutti.createIndividualObservationBatch.field.createFromBatch.tip= tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic= tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.tip= tutti.createIndividualObservationBatch.field.individualObservationSize= @@ -212,6 +218,8 @@ tutti.createIndividualObservationBatch.field.individualObservationSpecies.tip= tutti.createIndividualObservationBatch.field.individualObservationWeight= tutti.createIndividualObservationBatch.field.individualObservationWeight.tip= +tutti.createIndividualObservationBatch.help= +tutti.createIndividualObservationBatch.message= tutti.createIndividualObservationBatch.title= tutti.createMarineLitterBatch.action.cancel= tutti.createMarineLitterBatch.action.cancel.mnemonic= @@ -731,6 +739,11 @@ tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title= tutti.editIndividualObservationBatch.action.importMultiPost.success= tutti.editIndividualObservationBatch.action.importMultiPost.tip= +tutti.editIndividualObservationBatch.action.removeAllBatch= +tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.message= +tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.title= +tutti.editIndividualObservationBatch.action.removeAllBatch.mnemonic= +tutti.editIndividualObservationBatch.action.removeAllBatch.tip= tutti.editIndividualObservationBatch.action.removeBatch= tutti.editIndividualObservationBatch.action.removeBatch.confirm.message= tutti.editIndividualObservationBatch.action.removeBatch.confirm.title= 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 2013-10-03 09:07:04 UTC (rev 1270) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-10-03 12:05:44 UTC (rev 1271) @@ -126,6 +126,7 @@ tutti.config.option.ui.config.file.description=Chemin du fichier de configuration des interfaces graphiques tutti.config.option.ui.coordinateEditorType.description=Type de l'éditeur de coordonnées tutti.config.option.ui.dateFormat.description=Format de dates +tutti.config.option.ui.individualObservationRowsToCreate.description=Nombre maximum de données individuelles à créer sans demande de confirmation tutti.config.option.ui.shortcut.closePopup.description=Fermer une popup tutti.config.option.ui.showNumberEditorButton.description=Afficher le pavé numérique de saisie tutti.config.option.ui.weight.unit.accidentalCatch.description=Unité de poids à utiliser dans la saisies des captures accidentelles @@ -205,6 +206,11 @@ tutti.createIndividualObservationBatch.action.saveAndContinue=Créer et Continuer tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic=C tutti.createIndividualObservationBatch.action.saveAndContinue.tip=Créer et saisir une nouvelle observation indidivuelle +tutti.createIndividualObservationBatch.confirm.help=Que voulez-vous faire?<ul><li><strong>Annuler</strong> pour rester sur cet écran et annuler la création</li><li><strong>Ok</strong> pour confirmer la création des données individuellesd</li></ul> +tutti.createIndividualObservationBatch.confirm.message=Vous avez demandé la création des données individuelles pour l'espèce %s depuis les captures saisies.<br/>%s données vont être créées \: %s +tutti.createIndividualObservationBatch.confirm.title=Confirmer la création des données individuelles +tutti.createIndividualObservationBatch.field.createFromBatch=Créer les données depuis les captures +tutti.createIndividualObservationBatch.field.createFromBatch.tip=Utiliser les données saisies dans les captures pour créer les données individuelles tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic=Classe de taille tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.tip=Classe de taille tutti.createIndividualObservationBatch.field.individualObservationSize=Taille @@ -731,6 +737,11 @@ tutti.editIndividualObservationBatch.action.importMultiPost.sourceFile.title=Importer des lots d'observations individuelles tutti.editIndividualObservationBatch.action.importMultiPost.success=Des lots d'observations individuelles ont été importés depuis le fichier %s tutti.editIndividualObservationBatch.action.importMultiPost.tip=Importer des observations créées sur un poste satellite +tutti.editIndividualObservationBatch.action.removeAllBatch=Supprimer l'espèce +tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.message=<html>Vous êtes sur le point de supprimer toutes les observations individuelles (%s entrées) pour l'espèce %s.<hr/>Êtes-vous sur de vouloir les supprimer ?</html> +tutti.editIndividualObservationBatch.action.removeAllBatch.confirm.title=Suppression des observations individuelles d'une espèce +tutti.editIndividualObservationBatch.action.removeAllBatch.mnemonic=E +tutti.editIndividualObservationBatch.action.removeAllBatch.tip=Supprimer toutes les lignes de l'espèce sélectionnée tutti.editIndividualObservationBatch.action.removeBatch=Supprimer la ligne sélectionnée tutti.editIndividualObservationBatch.action.removeBatch.confirm.message=<html>Vous êtes sur le point de supprimer une observation individuelle.<hr/>Êtes-vous sur de vouloir la supprimer ?</html> tutti.editIndividualObservationBatch.action.removeBatch.confirm.title=Suppression d'une observation individuelle
participants (1)
-
tchemit@users.forge.codelutin.com