r1293 - in trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches: individualobservation individualobservation/create species
Author: tchemit Date: 2013-10-14 18:35:28 +0200 (Mon, 14 Oct 2013) New Revision: 1293 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1293 Log: fixes #3503: [CAPTURE] recopie d'une esp?\195?\168ce vers les donn?\195?\169es individelles si le lot esp?\195?\168ce poss?\195?\168de plusieurs individus il ne faut pas pouvoir saisir de poids et de taille 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/RemoveAllIndividualObservationBatchAction.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/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 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-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-10-14 16:35:28 UTC (rev 1293) @@ -560,16 +560,20 @@ int nbRow = TuttiEntities.getValueOrComputedValue(frequency.getNumber(), 0); - float weight = TuttiEntities.getValueOrComputedValue(frequency.getWeight(), 0f); - if (nbRow > 0) { - weight /= nbRow; + Float weight = null; + if (nbRow == 1) { + + // apply also weight found + weight = frequency.getWeight(); + + if (weight != null) { + // convert weight units + weight = speciesWeightUnit.toEntity(weight); + weight = weightUnit.fromEntity(weight); + } } - // convert weight units - weight = speciesWeightUnit.toEntity(weight); - weight = weightUnit.fromEntity(weight); - for (int i = 0; i < nbRow; i++) { IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); newRow.setSpecies(species); Modified: 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 2013-10-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/RemoveAllIndividualObservationBatchAction.java 2013-10-14 16:35:28 UTC (rev 1293) @@ -110,8 +110,6 @@ Preconditions.checkNotNull(rowIndexToRemove); Preconditions.checkNotNull(species); - JXTable table = handler.getTable(); - IndividualObservationBatchTableModel tableModel = handler.getTableModel(); for (Integer rowIndex : rowIndexToRemove) { 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-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-10-14 16:35:28 UTC (rev 1293) @@ -51,7 +51,7 @@ #individualObservationCreateFromBatch { text: "tutti.createIndividualObservationBatch.field.createFromBatch"; - selected: {model.isSpeciesFromBatch() && model.isCreateFromBatch()}; + selected: {model.isCreateFromBatch()}; enabled: {model.isSpeciesFromBatch()}; toolTipText: "tutti.createIndividualObservationBatch.field.createFromBatch.tip"; _help: {"tutti.createIndividualObservationBatch.field.createFromBatch.help"}; @@ -120,17 +120,6 @@ _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/CreateIndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-10-14 16:35:28 UTC (rev 1293) @@ -23,6 +23,7 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; @@ -36,7 +37,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; -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.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.Cancelable; import fr.ifremer.tutti.ui.swing.util.TuttiUI; @@ -115,13 +116,14 @@ Lists.newArrayList(lengthStepCaracteristics), null); + final Set<JComponent> editorComponents = Sets.newHashSet(); + + editorComponents.add(ui.getIndividualObservationWeightField()); + editorComponents.add(ui.getIndividualObservationSizeField()); + editorComponents.add(ui.getIndividualObservationLengthStepCaracteristicComboBox()); + if (getDataContext().isProtocolFilled()) { -// // get loaded protocol -// TuttiProtocol protocol = getDataContext().getProtocol(); -// Preconditions.checkNotNull(protocol, -// "Could not find protocol in ui context"); - final Map<Integer, SpeciesProtocol> speciesProtocolMap = getContext().getPersistenceService().toSpeciesProtocolMap(); @@ -243,6 +245,8 @@ initTextField(textField); break; } + + editorComponents.add(editor); JLabel jLabel = new JLabel(); jLabel.setText(caracteristicDecorator.toString(caracteristic)); jLabel.setToolTipText(caracteristicTipDecorator.toString(caracteristic)); @@ -256,6 +260,59 @@ } } + getModel().addPropertyChangeListener(IndividualObservationBatch.PROPERTY_SPECIES, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource(); + + Species species = (Species) evt.getNewValue(); + + if (species == null || + !source.isSpeciesFromBatch()) { + + // reset create from batch flag + source.setCreateFromBatch(false); + } + + // compute editors enable property + boolean enabled = species != null && + (!source.isCreateFromBatch() || + !source.isSpeciesFromBatch() || + source.isSpeciesFromBatchWithOneCount()); + if (log.isInfoEnabled()) { + log.info("can edit? " + enabled + " (species changed: " + species + ")"); + } + for (JComponent editorComponent : editorComponents) { + editorComponent.setEnabled(enabled); + } + } + }); + + getModel().addPropertyChangeListener(CreateIndividualObservationBatchUIModel.PROPERTY_CREATE_FROM_BATCH, + new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + + CreateIndividualObservationBatchUIModel source = (CreateIndividualObservationBatchUIModel) evt.getSource(); + + Boolean newValue = (Boolean) evt.getNewValue(); + newValue = newValue != null && newValue; + + // compute editors enable property + boolean enabled = !newValue || + !source.isSpeciesFromBatch() || + source.isSpeciesFromBatchWithOneCount(); + if (log.isInfoEnabled()) { + log.info("can edit? " + enabled + " (createFromBatch changed: " + newValue + ")"); + } + for (JComponent editorComponent : editorComponents) { + editorComponent.setEnabled(enabled); + } + } + }); + listenValidatorValid(getValidator(), getModel()); } @@ -316,27 +373,22 @@ List<Species> speciesListWithSurveyCode = getDataContext().getReferentSpeciesWithSurveyCode(); - List<Species> batchesSpeciesList = Lists.newArrayList(); + Map<Species, Integer> batchesSpeciesList; List<Species> speciesList; EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); - List<SpeciesBatchRowModel> speciesRows = - parent.getSpeciesTabContent().getModel().getRows(); - boolean withSpeciesBatch = CollectionUtils.isNotEmpty(speciesRows); + SpeciesBatchUIModel speciesBatchUIModel = parent.getSpeciesTabContent().getModel(); + + boolean withSpeciesBatch = + CollectionUtils.isNotEmpty(speciesBatchUIModel.getRows()); if (withSpeciesBatch) { // use species from species batch - Set<Species> speciesSet = Sets.newHashSet(); - for (SpeciesBatchRowModel row : speciesRows) { - if (row.isBatchRoot()) { - Species species = row.getSpecies(); - speciesSet.add(species); - } - } + batchesSpeciesList = speciesBatchUIModel.getSpeciesCount(); - batchesSpeciesList.addAll(speciesSet); + Set<Species> speciesSet = Sets.newHashSet(batchesSpeciesList.keySet()); // plus readd the species filled here (individualObservations) List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); @@ -353,6 +405,8 @@ } } else { + batchesSpeciesList = Maps.newHashMap(); + if (getDataContext().isProtocolFilled()) { // using protocol species 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-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-10-14 16:35:28 UTC (rev 1293) @@ -23,18 +23,20 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; 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.collections.MapUtils; import org.apache.commons.lang3.ObjectUtils; import org.jdesktop.beans.AbstractSerializableBean; import java.io.Serializable; import java.util.List; +import java.util.Map; /** * @author kmorin <kmorin@codelutin.com> @@ -50,6 +52,8 @@ public static final String PROPERTY_SPECIES_FROM_BATCH = "speciesFromBatch"; + public static final String PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT = "speciesFromBatchWihtOneCount"; + public static final String PROPERTY_CREATE_FROM_BATCH = "createFromBatch"; public static final String PROPERTY_CARACTERISTICS = "caracteristics"; @@ -62,11 +66,11 @@ protected List<Species> availableSpecies; /** - * All species used in batches. + * All species used in batches with their count. * * @since 2.7 */ - protected List<Species> batchSpecies; + protected Map<Species, Integer> batchSpecies; /** * Does we want to create rows from batch? @@ -108,41 +112,44 @@ return editObject.getSpecies(); } - public void setSpecies(Species individualObservationSpecies) { + public void setSpecies(Species species) { Object oldValue = getSpecies(); - editObject.setSpecies(individualObservationSpecies); - firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, individualObservationSpecies); - firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch()); + Object oldSpeciesFromBatch = isSpeciesFromBatch(); + Object oldSpeciesFromBatchWithOneCount = isSpeciesFromBatchWithOneCount(); + editObject.setSpecies(species); + firePropertyChange(IndividualObservationBatch.PROPERTY_SPECIES, oldValue, species); + firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, oldSpeciesFromBatch, isSpeciesFromBatch()); + firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, oldSpeciesFromBatchWithOneCount, isSpeciesFromBatchWithOneCount()); } public Float getWeight() { return editObject.getWeight(); } - public void setWeight(Float individualObservationWeight) { + public void setWeight(Float weight) { Object oldValue = getWeight(); - editObject.setWeight(individualObservationWeight); - firePropertyChange(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, individualObservationWeight); + editObject.setWeight(weight); + firePropertyChange(IndividualObservationBatch.PROPERTY_WEIGHT, oldValue, weight); } public Float getSize() { return editObject.getSize(); } - public void setSize(Float individualObservationSize) { + public void setSize(Float size) { Object oldValue = getSize(); - editObject.setSize(individualObservationSize); - firePropertyChange(IndividualObservationBatch.PROPERTY_SIZE, oldValue, individualObservationSize); + editObject.setSize(size); + firePropertyChange(IndividualObservationBatch.PROPERTY_SIZE, oldValue, size); } public Caracteristic getLengthStepCaracteristic() { return editObject.getLengthStepCaracteristic(); } - public void setLengthStepCaracteristic(Caracteristic individualObservationLengthStepCaracteristic) { + public void setLengthStepCaracteristic(Caracteristic lengthStepCaracteristic) { Object oldValue = getLengthStepCaracteristic(); - editObject.setLengthStepCaracteristic(individualObservationLengthStepCaracteristic); - firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, individualObservationLengthStepCaracteristic); + editObject.setLengthStepCaracteristic(lengthStepCaracteristic); + firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, lengthStepCaracteristic); } public CaracteristicMap getCaracteristics() { @@ -165,20 +172,25 @@ firePropertyChange(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies); } - public List<Species> getBatchSpecies() { + public Map<Species, Integer> getBatchSpecies() { return batchSpecies; } public boolean isSpeciesFromBatch() { - return CollectionUtils.isNotEmpty(batchSpecies) && + return MapUtils.isNotEmpty(batchSpecies) && getSpecies() != null && - batchSpecies.contains(getSpecies()); + batchSpecies.containsKey(getSpecies()); } - public void setBatchSpecies(List<Species> batchSpecies) { + public boolean isSpeciesFromBatchWithOneCount() { + return isSpeciesFromBatch() && batchSpecies.get(getSpecies()) == 1; + } + + public void setBatchSpecies(Map<Species, Integer> batchSpecies) { this.batchSpecies = batchSpecies; firePropertyChange(PROPERTY_BATCH_SPECIES, null, batchSpecies); firePropertyChange(PROPERTY_SPECIES_FROM_BATCH, null, isSpeciesFromBatch()); + firePropertyChange(PROPERTY_SPECIES_FROM_BATCH_WITH_ONE_COUNT, null, isSpeciesFromBatchWithOneCount()); setCreateFromBatch(isCreateFromBatch()); } @@ -199,7 +211,7 @@ public void reset() { setAvailableSpecies(Lists.<Species>newArrayList()); - setBatchSpecies(Lists.<Species>newArrayList()); + setBatchSpecies(Maps.<Species, Integer>newHashMap()); 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-14 16:04:35 UTC (rev 1292) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-10-14 16:35:28 UTC (rev 1293) @@ -25,17 +25,21 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.util.TabContentModel; import fr.ifremer.tutti.ui.swing.util.TuttiComputedOrNotData; import org.apache.commons.collections.CollectionUtils; import java.util.List; +import java.util.Map; import static org.nuiton.i18n.I18n.n_; @@ -406,4 +410,36 @@ } } } + + public Map<Species, Integer> getSpeciesCount() { + Map<Species, Integer> result = Maps.newHashMap(); + for (SpeciesBatchRowModel row : getRows()) { + if (row.isBatchLeaf()) { + + Species species = row.getSpecies(); + Integer count = + TuttiEntities.getValueOrComputedValue(result.get(species), + 0); + + List<SpeciesFrequencyRowModel> frequencies = row.getFrequency(); + if (CollectionUtils.isEmpty(frequencies)) { + + // + Integer number = row.getNumber(); + if (number != null) { + count += number; + } + } else { + for (SpeciesFrequencyRowModel frequency : frequencies) { + Integer number = frequency.getNumber(); + if (number != null) { + count += number; + } + } + } + result.put(species, count); + } + } + return result; + } }
participants (1)
-
tchemit@users.forge.codelutin.com