branch feature/8023_suite created (now 7b9d5b3)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8023_suite in repository tutti. See http://git.codelutin.com/tutti.git at 7b9d5b3 - ajout de la persistence (manque les pj) - conversion des lignes du modele en entités (et inversement) - correction de l'unité des poids copié du tableau des observations quand les unités sont différentes refs #8023 This branch includes the following new commits: new cfc9425 on reset le mode de copie à l'ouverture de l'écran, sinon on ne voit pas les mensurations si le mode était en copie sur le batch précédent (refs #8023) new 7b9d5b3 - ajout de la persistence (manque les pj) - conversion des lignes du modele en entités (et inversement) - correction de l'unité des poids copié du tableau des observations quand les unités sont différentes refs #8023 The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 7b9d5b331fcb6e85d3f2b7194adb108ef3f2bff8 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 2 19:34:56 2016 +0100 - ajout de la persistence (manque les pj) - conversion des lignes du modele en entités (et inversement) - correction de l'unité des poids copié du tableau des observations quand les unités sont différentes refs #8023 commit cfc9425d823876cf87d5884ae865d5028432f68c Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 2 15:12:41 2016 +0100 on reset le mode de copie à l'ouverture de l'écran, sinon on ne voit pas les mensurations si le mode était en copie sur le batch précédent (refs #8023) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8023_suite in repository tutti. See http://git.codelutin.com/tutti.git commit cfc9425d823876cf87d5884ae865d5028432f68c Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 2 15:12:41 2016 +0100 on reset le mode de copie à l'ouverture de l'écran, sinon on ne voit pas les mensurations si le mode était en copie sur le batch précédent (refs #8023) --- .../frequency/SpeciesFrequencyUIHandler.java | 3 ++- .../species/frequency/SpeciesFrequencyUIModel.java | 24 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index a353385..b0b32e2 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -520,7 +520,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci JOptionPane.QUESTION_MESSAGE); if (i == JOptionPane.CANCEL_OPTION) { - ui.getCopyNothingButton().setSelected(true); throw new PropertyVetoException("The user does not want to erase his data.", evt); } } @@ -796,6 +795,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Collections.sort(rows); model.setLengthStepCaracteristic(lengthStepCaracteristic); + model.setRows(null); + model.setCopyIndividualObservationMode(CopyIndividualObservationMode.NOTHING); model.setRows(rows); IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index e093548..2527646 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -108,6 +108,12 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE = "copyIndividualObservationMode"; + public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_ALL = "copyIndividualObservationAll"; + + public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_NOTHING = "copyIndividualObservationNothing"; + + public static final String PROPERTY_COPY_INDIVIDUAL_OBSERVATION_SIZE = "copyIndividualObservationSize"; + public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS = "individualObservationRows"; public static final String PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR = "individualObservationRowsInError"; @@ -613,6 +619,15 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa this.copyIndividualObservationMode = copyIndividualObservationMode; try { + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_ALL, + oldValue == CopyIndividualObservationMode.ALL, + copyIndividualObservationMode == CopyIndividualObservationMode.ALL); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_NOTHING, + oldValue == CopyIndividualObservationMode.NOTHING, + copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_SIZE, + oldValue == CopyIndividualObservationMode.SIZE, + copyIndividualObservationMode == CopyIndividualObservationMode.SIZE); fireVetoableChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_MODE, oldValue, copyIndividualObservationMode); @@ -621,6 +636,15 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa log.error("error in setting copyIndividualObservationMode", e); } this.copyIndividualObservationMode = oldValue; + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_ALL, + copyIndividualObservationMode == CopyIndividualObservationMode.ALL, + oldValue == CopyIndividualObservationMode.ALL); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_NOTHING, + copyIndividualObservationMode == CopyIndividualObservationMode.NOTHING, + oldValue == CopyIndividualObservationMode.NOTHING); + firePropertyChange(PROPERTY_COPY_INDIVIDUAL_OBSERVATION_SIZE, + copyIndividualObservationMode == CopyIndividualObservationMode.SIZE, + oldValue == CopyIndividualObservationMode.SIZE); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/8023_suite in repository tutti. See http://git.codelutin.com/tutti.git commit 7b9d5b331fcb6e85d3f2b7194adb108ef3f2bff8 Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 2 19:34:56 2016 +0100 - ajout de la persistence (manque les pj) - conversion des lignes du modele en entités (et inversement) - correction de l'unité des poids copié du tableau des observations quand les unités sont différentes refs #8023 --- .../tutti/persistence/TuttiPersistenceImpl.java | 21 +- .../persistence/TuttiPersistenceNoDbImpl.java | 18 +- ...dividualObservationBatchPersistenceService.java | 12 +- ...dualObservationBatchPersistenceServiceImpl.java | 161 ++++++++------ .../service/util/BatchPersistenceHelper.java | 5 - .../service/util/SynchronizationStatusHelper.java | 2 +- .../tutti/persistence/test/DatabaseFixtures.java | 16 -- .../CatchBatchPersistenceServiceWriteTest.java | 2 - ...ishingOperationPersistenceServiceWriteTest.java | 1 - ...bservationBatchPersistenceServiceWriteTest.java | 237 ++++++++++----------- .../ifremer/tutti/service/PersistenceService.java | 19 +- .../catches/multipost/MultiPostImportService.java | 7 +- .../GenericformatImportPersistenceHelper.java | 9 - .../ImportIndividualObservationAction.java | 8 +- .../IndividualObservationBatchRowModel.java | 82 +++++-- .../IndividualObservationBatchTableModel.java | 8 +- .../catches/species/SpeciesBatchRowModel.java | 31 ++- .../catches/species/SpeciesBatchUIHandler.java | 32 ++- .../frequency/SpeciesFrequencyCellComponent.java | 21 ++ .../frequency/SpeciesFrequencyUIHandler.java | 67 +++++- 20 files changed, 435 insertions(+), 324 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java index 3e26f97..a9bb2aa 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceImpl.java @@ -1344,24 +1344,9 @@ public class TuttiPersistenceImpl implements TuttiPersistence { return getIndividualObservationBatchService().getAllIndividualObservationBatchsForCruise(cruiseId); } - @Override - public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean) { - return getIndividualObservationBatchService().createIndividualObservationBatch(bean); - } - - @Override - public IndividualObservationBatch saveIndividualObservationBatch(IndividualObservationBatch bean) { - return getIndividualObservationBatchService().saveIndividualObservationBatch(bean); - } - - @Override - public void deleteIndividualObservationBatch(Integer id) { - getIndividualObservationBatchService().deleteIndividualObservationBatch(id); - } - - @Override - public void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId) { - getIndividualObservationBatchService().deleteIndividualObservationBatchForFishingOperation(fishingOperationId); + public List<IndividualObservationBatch> saveBatchIndividualObservation(Integer batchId, + List<IndividualObservationBatch> individualObservation) { + return getIndividualObservationBatchService().saveBatchIndividualObservation(batchId, individualObservation); } //------------------------------------------------------------------------// diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java index 8f94867..df63cf7 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/TuttiPersistenceNoDbImpl.java @@ -893,17 +893,8 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean) { - throw notImplemented(); - } - - @Override - public IndividualObservationBatch saveIndividualObservationBatch(IndividualObservationBatch bean) { - throw notImplemented(); - } - - @Override - public void deleteIndividualObservationBatch(Integer id) { + public List<IndividualObservationBatch> saveBatchIndividualObservation(Integer speciesBatchId, + List<IndividualObservationBatch> individualObservation) { throw notImplemented(); } @@ -936,11 +927,6 @@ public class TuttiPersistenceNoDbImpl implements TuttiPersistence { } @Override - public void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId) { - throw notImplemented(); - } - - @Override public List<String> getAllProtocolId() { throw notImplemented(); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceService.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceService.java index 4923b3b..fc70a62 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceService.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceService.java @@ -44,14 +44,6 @@ public interface IndividualObservationBatchPersistenceService extends TuttiPersi List<IndividualObservationBatch> getAllIndividualObservationBatchsForCruise(Integer cruiseId); @Transactional(readOnly = false) - IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean); - - @Transactional(readOnly = false) - IndividualObservationBatch saveIndividualObservationBatch(IndividualObservationBatch bean); - - @Transactional(readOnly = false) - void deleteIndividualObservationBatch(Integer id); - - @Transactional(readOnly = false) - void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId); + List<IndividualObservationBatch> saveBatchIndividualObservation(Integer speciesBatchId, + List<IndividualObservationBatch> individualObservation); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java index d16fcaa..9f00f99 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java @@ -30,6 +30,8 @@ import fr.ifremer.adagio.core.dao.administration.user.DepartmentImpl; import fr.ifremer.adagio.core.dao.administration.user.PersonId; import fr.ifremer.adagio.core.dao.administration.user.PersonImpl; import fr.ifremer.adagio.core.dao.data.batch.Batch; +import fr.ifremer.adagio.core.dao.data.batch.CatchBatch; +import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; import fr.ifremer.adagio.core.dao.data.operation.FishingOperationImpl; import fr.ifremer.adagio.core.dao.data.sample.Sample; import fr.ifremer.adagio.core.dao.referential.QualityFlagCode; @@ -40,7 +42,6 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.MatrixImpl; import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -54,6 +55,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.type.IntegerType; +import org.springframework.dao.DataIntegrityViolationException; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -62,6 +64,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; /** * @author Tony Chemit - chemit@codelutin.com @@ -212,93 +215,110 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe } - @Override - public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean) { - Preconditions.checkNotNull(bean); - Preconditions.checkState(TuttiEntities.isNew(bean)); -// Preconditions.checkNotNull(bean.getSpecies()); - - FishingOperation fishingOperation = bean.getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - Preconditions.checkState(!TuttiEntities.isNew(fishingOperation)); - - // Get catch Batch - Batch catchBatch = getBatch(fishingOperation.getIdAsInt()); - return createIndividualObservationBatch(bean, catchBatch); - } + public List<IndividualObservationBatch> saveBatchIndividualObservation(Integer speciesBatchId, + List<IndividualObservationBatch> individualObservation) { + + Preconditions.checkNotNull(speciesBatchId); + Preconditions.checkNotNull(individualObservation); + + List<IndividualObservationBatch> notNullObservations = Lists.newArrayList(); + + // Check that all observations have the same length PMFM (before doing any db call) + // and remove null observations + String pmfmId = null; + for (IndividualObservationBatch source : individualObservation) { + + if (source.getLengthStepCaracteristic() != null) { + if (pmfmId == null) { + pmfmId = source.getLengthStepCaracteristic().getId(); + } else if (!pmfmId.equals(source.getLengthStepCaracteristic().getId())) { + throw new DataIntegrityViolationException("Batch frequencies under one SpeciesBatch must have all the same lengthStepCaracteristic"); + } + notNullObservations.add(source); + } + } - @Override - public IndividualObservationBatch saveIndividualObservationBatch(IndividualObservationBatch bean) { - Preconditions.checkNotNull(bean); - Preconditions.checkState(!TuttiEntities.isNew(bean)); - Preconditions.checkNotNull(bean.getSpecies()); + CatchBatch catchBatch = batchHelper.getRootCatchBatchByBatchId(speciesBatchId); - FishingOperation fishingOperation = bean.getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - Preconditions.checkState(!TuttiEntities.isNew(fishingOperation)); + if (catchBatch == null) { + return notNullObservations; + } - // Get catch Batch - Batch catchBatch = getBatch(fishingOperation.getIdAsInt()); + // Synchronization status + synchronizationStatusHelper.setDirty(catchBatch); - Sample sample = samplePersistenceHelper.load(bean.getIdAsInt()); + // Retrieve parent + SortingBatch parentBatch = batchHelper.getSortingBatchById(catchBatch, speciesBatchId); - beanToEntity(bean, sample, catchBatch); - samplePersistenceHelper.update(sample); - synchronizationStatusHelper.setDirty(bean); - return bean; - } + // Remember child ids, to remove unchanged item (see at bottom in this method) + List<Integer> notUpdatedChildIds = Lists.newArrayList(); + List<IndividualObservationBatch> allBatchSamples = getAllIndividualObservationBatchsForBatch(parentBatch.getId()); + notUpdatedChildIds.addAll(allBatchSamples.stream().map(IndividualObservationBatch::getIdAsInt).collect(Collectors.toList())); - @Override - public void deleteIndividualObservationBatch(Integer batchId) { - Preconditions.checkNotNull(batchId); + for (IndividualObservationBatch source : notNullObservations) { + + Sample target; + if (source.getId() == null) { + + // Not existing batch + target = Sample.Factory.newInstance(); + + // Fill the sample from the source + beanToEntity(source, target, parentBatch); + + // Create the targeted sample, then update the source id + samplePersistenceHelper.create(target); + source.setId(String.valueOf(target.getId())); + + synchronizationStatusHelper.setDirty(source); + + if (log.isDebugEnabled()) { + log.debug("Create frequency sortingBatch(" + source.getRankOrder() + "): " + target.getId()); + } + + } else { - if (log.isDebugEnabled()) { - log.debug("Will delete individual observation batch: " + batchId); + // Existing batch + target = samplePersistenceHelper.load(source.getIdAsInt()); + + // Fill the sorting batch from the source + beanToEntity(source, target, parentBatch); + samplePersistenceHelper.update(target); + + synchronizationStatusHelper.setDirty(source); + + // Remove id from id to remove + notUpdatedChildIds.remove(target.getId()); + + if (log.isDebugEnabled()) { + log.debug("Update frequency sortingBatch(" + source.getRankOrder() + "): " + target.getId()); + } + } } - samplePersistenceHelper.deleteSample(batchId); - } - @Override - public void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId) { - Preconditions.checkNotNull(fishingOperationId); + if (CollectionUtils.isNotEmpty(notUpdatedChildIds)) { - List<IndividualObservationBatch> batches = getAllIndividualObservationBatchsForFishingOperation(fishingOperationId); + // Remove obsolete frequencies + for (Integer observationId : notUpdatedChildIds) { - if (CollectionUtils.isNotEmpty(batches)) { - for (IndividualObservationBatch batch : batches) { - deleteIndividualObservationBatch(batch.getIdAsInt()); + if (log.isDebugEnabled()) { + log.debug("Remove obsolete sample : " + observationId); + } + samplePersistenceHelper.deleteSample(observationId); } } + + return Collections.unmodifiableList(notNullObservations); } // ------------------------------------------------------------------------// // -- Internal methods --// // ------------------------------------------------------------------------// - protected IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean, Batch catchBatch) { - - Preconditions.checkNotNull(bean); - Preconditions.checkState(TuttiEntities.isNew(bean)); - Preconditions.checkNotNull(bean.getSpecies()); - - FishingOperation fishingOperation = bean.getFishingOperation(); - Preconditions.checkNotNull(fishingOperation); - Preconditions.checkState(!TuttiEntities.isNew(fishingOperation)); - - //TODO Optimize this (in the method we load each time the fishing operation...) - Sample sample = Sample.Factory.newInstance(); - beanToEntity(bean, sample, catchBatch); - samplePersistenceHelper.create(sample); - bean.setId(String.valueOf(sample.getId())); - synchronizationStatusHelper.setDirty(bean); - return bean; - - } - protected void beanToEntity(IndividualObservationBatch source, Sample target, - Batch vracSpeciesBatch) { + Batch batch) { if (TuttiEntities.isNew(source)) { @@ -306,13 +326,12 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe fr.ifremer.adagio.core.dao.data.operation.FishingOperation fishingOperation; fishingOperation = load(FishingOperationImpl.class, source.getFishingOperation().getIdAsInt()); - fishingOperation.getSamples().add(target); // Inverse link - // Link to parent operation - target.setFishingOperation(fishingOperation); + // Link to parent batch + target.setBatch(batch); // Label - String label = fishingOperation.getId() + "_" + source.getSpecies().getReferenceTaxonId(); + String label = batch.getId() + "_" + source.getSpecies().getReferenceTaxonId(); target.setLabel(label); // Matrix (product / batch) @@ -350,7 +369,7 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe target.setId(source.getIdAsInt()); // Always attach to given vracSpecies batch - target.setBatch(vracSpeciesBatch); + target.setBatch(batch); // Comment target.setComments(source.getComment()); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java index eb6e755..4848065 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java @@ -183,11 +183,6 @@ public class BatchPersistenceHelper extends AbstractPersistenceService { accidentalBatchService.deleteAccidentalBatchForFishingOperation(fishingOperationId); getCurrentSession().flush(); - // delete individual observation batchs - individualObservationBatchPersistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); - - getCurrentSession().flush(); - // SynchronizationStatus on fishingTrip FishingOperation fishingOperation = fishingOperationDao.load(fishingOperationId); synchronizationStatusHelper.setDirty(fishingOperation.getFishingTrip()); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java index 13ca6f8..4a8584e 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java @@ -129,7 +129,7 @@ public class SynchronizationStatusHelper extends AbstractPersistenceService { Batch batch = sample.getBatch(); if (batch != null && batch instanceof CatchBatch) { setDirty((CatchBatch) batch); - } else { + } else if (sample.getFishingOperation() != null) { setDirty(sample.getFishingOperation().getFishingTrip()); } } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java index 27314c9..9f801da 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/test/DatabaseFixtures.java @@ -32,8 +32,6 @@ import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Cruises; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.FishingOperations; -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.CaracteristicType; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -428,18 +426,4 @@ public class DatabaseFixtures { return accidentalBatchService.createAccidentalBatch(minimalAccidentalBatch); } - public IndividualObservationBatch createMinimalIndividualObservationBatch(FishingOperation fishingOperation) { - - setUp(); - - IndividualObservationBatch minimalAccidentalBatch = IndividualObservationBatchs.newIndividualObservationBatch(); - minimalAccidentalBatch.setFishingOperation(fishingOperation); - minimalAccidentalBatch.setSpecies(speciesService.getSpeciesByReferenceTaxonId(refSpeciesTaxonId())); - minimalAccidentalBatch.setCaracteristics(new CaracteristicMap()); - minimalAccidentalBatch.setLengthStepCaracteristic(caracteristicService.getCaracteristic(refNumericalPmfmId())); - minimalAccidentalBatch.setSize(10.0f); - minimalAccidentalBatch.setWeight(5.f); - - return individualObservationBatchService.createIndividualObservationBatch(minimalAccidentalBatch); - } } diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceWriteTest.java index a078fd0..91474b2 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceWriteTest.java @@ -171,8 +171,6 @@ public class CatchBatchPersistenceServiceWriteTest { catchBatch.setCatchTotalRejectedWeight(15f); service.saveCatchBatch(catchBatch); - dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); - Integer fishingOperationId = fishingOperation.getIdAsInt(); Assert.assertNotNull(service.getCatchBatchFromFishingOperation(fishingOperationId)); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceWriteTest.java index 929907d..b96a6fe 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceWriteTest.java @@ -395,7 +395,6 @@ public class FishingOperationPersistenceServiceWriteTest { dbResource.getFixtures().createMinimalCatchBatch(fishingOperation); dbResource.getFixtures().createMinimalAccidentalBatch(fishingOperation); - dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); Integer fishingOperationId = fishingOperation.getIdAsInt(); Assert.assertFalse(CollectionUtils.isEmpty(service.getAllFishingOperation(cruise.getIdAsInt()))); diff --git a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceWriteTest.java b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceWriteTest.java index c7d243d..0c3bec8 100644 --- a/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceWriteTest.java +++ b/tutti-persistence/src/test/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceWriteTest.java @@ -22,21 +22,14 @@ package fr.ifremer.tutti.persistence.service; * #L% */ -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.service.referential.CaracteristicPersistenceService; import fr.ifremer.tutti.persistence.test.DatabaseResource; -import org.apache.commons.collections4.CollectionUtils; import org.junit.Assert; import org.junit.Before; import org.junit.ClassRule; -import org.junit.Test; - -import java.util.List; /** * To test {@link IndividualObservationBatchPersistenceService} for write @@ -66,121 +59,121 @@ public class IndividualObservationBatchPersistenceServiceWriteTest { } - @Test - public void createIndividualObservationBatch(/*IndividualObservationBatch bean*/) { - - // ----------------------------------------------------------------------------- - // 1. Create with only mandatory properties - // ----------------------------------------------------------------------------- - - IndividualObservationBatch createdIndividualObservationBatch = dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); - - Assert.assertNotNull(createdIndividualObservationBatch); - Assert.assertNotNull(createdIndividualObservationBatch.getId()); - - // reload it - List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); - Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); - IndividualObservationBatch reloadedIndividualObservationBatch = allIndividualObservationBatch.get(0); - reloadedIndividualObservationBatch.setFishingOperation(fishingOperation); - assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, reloadedIndividualObservationBatch); - - // ----------------------------------------------------------------------------- - // 2. Create a full with all properties - // ----------------------------------------------------------------------------- - - createdIndividualObservationBatch.setId((String) null); - - CaracteristicMap caracteristicMap = new CaracteristicMap(); - createdIndividualObservationBatch.setCaracteristics(caracteristicMap); - - // add a qualitative caracteristic - Caracteristic maturityCaracteristic = caracteristicService.getMaturityCaracteristic(); - caracteristicMap.put(maturityCaracteristic, maturityCaracteristic.getQualitativeValue(0)); - - // add a numeric caracteristic - Caracteristic ageCaracteristic = caracteristicService.getAgeCaracteristic(); - caracteristicMap.put(ageCaracteristic, 10.f); - - // add a string caracteristic - Caracteristic stringCaracteristic = caracteristicService.getCaracteristic(dbResource.getFixtures().refAlphanumericPmfmId()); - caracteristicMap.put(stringCaracteristic, "Un texte!"); - - createdIndividualObservationBatch.setComment("IndividualObservationBatch-full"); -// fullIndividualObservationBatch.setSamplingCode("SamplingCode"); -// fullIndividualObservationBatch.setCalcifiedPieceSamplingCode("CalcifiedPieceSamplingCode"); - - createdIndividualObservationBatch.setLengthStepCaracteristic(caracteristicService.getCaracteristic(dbResource.getFixtures().refNumericalPmfmId())); - createdIndividualObservationBatch.setSize(10.0f); - createdIndividualObservationBatch.setWeight(5.f); - - IndividualObservationBatch createdIndividualObservationBatch2 = - service.createIndividualObservationBatch(createdIndividualObservationBatch); - - assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, createdIndividualObservationBatch2); - - Assert.assertNotNull(createdIndividualObservationBatch2); - Assert.assertNotNull(createdIndividualObservationBatch2.getId()); - assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, createdIndividualObservationBatch2); - - // reload it - allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); - Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); - Assert.assertEquals(2, allIndividualObservationBatch.size()); - IndividualObservationBatch reloadedIndividualObservationBatch2 = TuttiEntities.splitById(allIndividualObservationBatch).get(createdIndividualObservationBatch2.getId()); - reloadedIndividualObservationBatch2.setFishingOperation(fishingOperation); - assertEqualsIndividualObservationBatch(createdIndividualObservationBatch2, reloadedIndividualObservationBatch2); - - // ----------------------------------------------------------------------------- - // 2. Modify some properties and save - // ----------------------------------------------------------------------------- - reloadedIndividualObservationBatch2.setSize(15f); - reloadedIndividualObservationBatch2.setWeight(35f); - createdIndividualObservationBatch.setComment("IndividualObservationBatch-modified"); -// fullIndividualObservationBatch.setSamplingCode("SamplingCode"); -// fullIndividualObservationBatch.setCalcifiedPieceSamplingCode("CalcifiedPieceSamplingCode"); - reloadedIndividualObservationBatch2.getCaracteristics().clear(); - - IndividualObservationBatch savedIndividualObservationBatch = service.saveIndividualObservationBatch(reloadedIndividualObservationBatch2); - assertEqualsIndividualObservationBatch(reloadedIndividualObservationBatch2, savedIndividualObservationBatch); - - allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); - Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); - IndividualObservationBatch reloadedIndividualObservationBatch3 = TuttiEntities.splitById(allIndividualObservationBatch).get(createdIndividualObservationBatch2.getId()); - reloadedIndividualObservationBatch3.setFishingOperation(fishingOperation); - assertEqualsIndividualObservationBatch(savedIndividualObservationBatch, reloadedIndividualObservationBatch3); - } - - @Test - public void deleteIndividualObservationBatch(/*String id*/) { - - IndividualObservationBatch createdIndividualObservationBatch = - dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); - - List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); - Assert.assertFalse(CollectionUtils.isEmpty(allIndividualObservationBatch)); - - service.deleteIndividualObservationBatch(createdIndividualObservationBatch.getIdAsInt() ); - - List<IndividualObservationBatch> allIndividualObservationBatch2 = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); - Assert.assertTrue(CollectionUtils.isEmpty(allIndividualObservationBatch2)); - } - - @Test - public void deleteIndividualObservationBatchForFishingOperation(/*String fishingOperationId*/) { - - dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); - - dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); - - List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); - Assert.assertFalse(CollectionUtils.isEmpty(allIndividualObservationBatch)); - - service.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getIdAsInt() ); - - List<IndividualObservationBatch> allIndividualObservationBatch2 = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); - Assert.assertTrue(CollectionUtils.isEmpty(allIndividualObservationBatch2)); - } +// @Test +// public void createIndividualObservationBatch(/*IndividualObservationBatch bean*/) { +// +// // ----------------------------------------------------------------------------- +// // 1. Create with only mandatory properties +// // ----------------------------------------------------------------------------- +// +// IndividualObservationBatch createdIndividualObservationBatch = dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); +// +// Assert.assertNotNull(createdIndividualObservationBatch); +// Assert.assertNotNull(createdIndividualObservationBatch.getId()); +// +// // reload it +// List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); +// Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); +// IndividualObservationBatch reloadedIndividualObservationBatch = allIndividualObservationBatch.get(0); +// reloadedIndividualObservationBatch.setFishingOperation(fishingOperation); +// assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, reloadedIndividualObservationBatch); +// +// // ----------------------------------------------------------------------------- +// // 2. Create a full with all properties +// // ----------------------------------------------------------------------------- +// +// createdIndividualObservationBatch.setId((String) null); +// +// CaracteristicMap caracteristicMap = new CaracteristicMap(); +// createdIndividualObservationBatch.setCaracteristics(caracteristicMap); +// +// // add a qualitative caracteristic +// Caracteristic maturityCaracteristic = caracteristicService.getMaturityCaracteristic(); +// caracteristicMap.put(maturityCaracteristic, maturityCaracteristic.getQualitativeValue(0)); +// +// // add a numeric caracteristic +// Caracteristic ageCaracteristic = caracteristicService.getAgeCaracteristic(); +// caracteristicMap.put(ageCaracteristic, 10.f); +// +// // add a string caracteristic +// Caracteristic stringCaracteristic = caracteristicService.getCaracteristic(dbResource.getFixtures().refAlphanumericPmfmId()); +// caracteristicMap.put(stringCaracteristic, "Un texte!"); +// +// createdIndividualObservationBatch.setComment("IndividualObservationBatch-full"); +//// fullIndividualObservationBatch.setSamplingCode("SamplingCode"); +//// fullIndividualObservationBatch.setCalcifiedPieceSamplingCode("CalcifiedPieceSamplingCode"); +// +// createdIndividualObservationBatch.setLengthStepCaracteristic(caracteristicService.getCaracteristic(dbResource.getFixtures().refNumericalPmfmId())); +// createdIndividualObservationBatch.setSize(10.0f); +// createdIndividualObservationBatch.setWeight(5.f); +// +// IndividualObservationBatch createdIndividualObservationBatch2 = +// service.createIndividualObservationBatch(createdIndividualObservationBatch); +// +// assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, createdIndividualObservationBatch2); +// +// Assert.assertNotNull(createdIndividualObservationBatch2); +// Assert.assertNotNull(createdIndividualObservationBatch2.getId()); +// assertEqualsIndividualObservationBatch(createdIndividualObservationBatch, createdIndividualObservationBatch2); +// +// // reload it +// allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); +// Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); +// Assert.assertEquals(2, allIndividualObservationBatch.size()); +// IndividualObservationBatch reloadedIndividualObservationBatch2 = TuttiEntities.splitById(allIndividualObservationBatch).get(createdIndividualObservationBatch2.getId()); +// reloadedIndividualObservationBatch2.setFishingOperation(fishingOperation); +// assertEqualsIndividualObservationBatch(createdIndividualObservationBatch2, reloadedIndividualObservationBatch2); +// +// // ----------------------------------------------------------------------------- +// // 2. Modify some properties and save +// // ----------------------------------------------------------------------------- +// reloadedIndividualObservationBatch2.setSize(15f); +// reloadedIndividualObservationBatch2.setWeight(35f); +// createdIndividualObservationBatch.setComment("IndividualObservationBatch-modified"); +//// fullIndividualObservationBatch.setSamplingCode("SamplingCode"); +//// fullIndividualObservationBatch.setCalcifiedPieceSamplingCode("CalcifiedPieceSamplingCode"); +// reloadedIndividualObservationBatch2.getCaracteristics().clear(); +// +// IndividualObservationBatch savedIndividualObservationBatch = service.saveIndividualObservationBatch(reloadedIndividualObservationBatch2); +// assertEqualsIndividualObservationBatch(reloadedIndividualObservationBatch2, savedIndividualObservationBatch); +// +// allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); +// Assert.assertTrue(CollectionUtils.isNotEmpty(allIndividualObservationBatch)); +// IndividualObservationBatch reloadedIndividualObservationBatch3 = TuttiEntities.splitById(allIndividualObservationBatch).get(createdIndividualObservationBatch2.getId()); +// reloadedIndividualObservationBatch3.setFishingOperation(fishingOperation); +// assertEqualsIndividualObservationBatch(savedIndividualObservationBatch, reloadedIndividualObservationBatch3); +// } + +// @Test +// public void deleteIndividualObservationBatch(/*String id*/) { +// +// IndividualObservationBatch createdIndividualObservationBatch = +// dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); +// +// List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); +// Assert.assertFalse(CollectionUtils.isEmpty(allIndividualObservationBatch)); +// +// service.deleteIndividualObservationBatch(createdIndividualObservationBatch.getIdAsInt() ); +// +// List<IndividualObservationBatch> allIndividualObservationBatch2 = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); +// Assert.assertTrue(CollectionUtils.isEmpty(allIndividualObservationBatch2)); +// } +// +// @Test +// public void deleteIndividualObservationBatchForFishingOperation(/*String fishingOperationId*/) { +// +// dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); +// +// dbResource.getFixtures().createMinimalIndividualObservationBatch(fishingOperation); +// +// List<IndividualObservationBatch> allIndividualObservationBatch = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt() ); +// Assert.assertFalse(CollectionUtils.isEmpty(allIndividualObservationBatch)); +// +// service.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getIdAsInt() ); +// +// List<IndividualObservationBatch> allIndividualObservationBatch2 = service.getAllIndividualObservationBatchsForFishingOperation(fishingOperation.getIdAsInt()); +// Assert.assertTrue(CollectionUtils.isEmpty(allIndividualObservationBatch2)); +// } protected void assertEqualsIndividualObservationBatch(IndividualObservationBatch expected, IndividualObservationBatch actual) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java index b118732..e7e4223 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java @@ -1522,22 +1522,9 @@ public class PersistenceService extends AbstractTuttiService implements TuttiPer } @Override - public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch bean) { - return driver.createIndividualObservationBatch(bean); + public List<IndividualObservationBatch> saveBatchIndividualObservation(Integer speciesBatchId, + List<IndividualObservationBatch> individualObservation) { + return driver.saveBatchIndividualObservation(speciesBatchId, individualObservation); } - @Override - public IndividualObservationBatch saveIndividualObservationBatch(IndividualObservationBatch bean) { - return driver.saveIndividualObservationBatch(bean); - } - - @Override - public void deleteIndividualObservationBatch(Integer id) { - driver.deleteIndividualObservationBatch(id); - } - - @Override - public void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId) { - driver.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java index 6c4d0fc..17995a1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MultiPostImportService.java @@ -1008,9 +1008,10 @@ public class MultiPostImportService extends AbstractTuttiService implements Mult // Persist batches - for (IndividualObservationBatch batch : batches.values()) { - persistenceService.createIndividualObservationBatch(batch); - } + //FIXME +// for (IndividualObservationBatch batch : batches.values()) { +// persistenceService.createIndividualObservationBatch(batch); +// } // Import attachments diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java index bca46bb..1c98eca 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java @@ -34,7 +34,6 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; @@ -221,14 +220,6 @@ public class GenericformatImportPersistenceHelper { persistenceService.deleteAccidentalBatchForFishingOperation(fishingOperationId); } - public IndividualObservationBatch createIndividualObservationBatch(IndividualObservationBatch individualObservationBatch) { - return persistenceService.createIndividualObservationBatch(individualObservationBatch); - } - - public void deleteIndividualObservationBatchForFishingOperation(Integer fishingOperationId) { - persistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); - } - public void setSampleCategoryModel(SampleCategoryModel sampleCategoryModel) { persistenceService.setSampleCategoryModel(sampleCategoryModel); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java index 5206b12..fca8915 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java @@ -153,7 +153,8 @@ public class ImportIndividualObservationAction extends ImportActionSupport { private void deleteIndividualObservationBatches(GenericFormatImportOperationContext fishingOperationContext) { FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - persistenceHelper.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getIdAsInt()); + //FIXME +// persistenceHelper.deleteIndividualObservationBatchForFishingOperation(fishingOperation.getIdAsInt()); } @@ -167,8 +168,9 @@ public class ImportIndividualObservationAction extends ImportActionSupport { // Id was only here to get attachments individualObservationBatch.setId((String) null); - IndividualObservationBatch createdIndividualObservationBatch = persistenceHelper.createIndividualObservationBatch(individualObservationBatch); - persistenceHelper.persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); + //FIXME +// IndividualObservationBatch createdIndividualObservationBatch = persistenceHelper.createIndividualObservationBatch(individualObservationBatch); +// persistenceHelper.persistAttachments(createdIndividualObservationBatch.getIdAsInt(), attachmentRows); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java index a681389..8a3de05 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java @@ -29,6 +29,7 @@ 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.IndividualObservationBatchs; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.type.WeightUnit; @@ -41,6 +42,7 @@ import org.nuiton.util.beans.BinderFactory; import java.io.Serializable; import java.util.Collection; import java.util.List; +import java.util.Map; /** * @author Kevin Morin - kmorin@codelutin.com @@ -90,29 +92,24 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel BinderFactory.newBinder(IndividualObservationBatchRowModel.class, IndividualObservationBatch.class); - public IndividualObservationBatchRowModel(WeightUnit weightUnit) { + public IndividualObservationBatchRowModel(WeightUnit weightUnit, + Collection<Caracteristic> defaultCaracteristicsSet) { super(fromBeanBinder, toBeanBinder); this.weightUnit = weightUnit; if (getCaracteristics() == null) { setCaracteristics(new CaracteristicMap()); } + for (Caracteristic caracteristic : defaultCaracteristicsSet) { + defaultCaracteristics.put(caracteristic, null); + } } public IndividualObservationBatchRowModel(WeightUnit weightUnit, - IndividualObservationBatch entity, - Collection<Caracteristic> defaultCaracteristicsSet) { - this(weightUnit); + Collection<Caracteristic> defaultCaracteristicsSet, + IndividualObservationBatch entity) { + this(weightUnit, defaultCaracteristicsSet); fromEntity(entity); - - // move default caracteristics from caracteristic map - CaracteristicMap caracteristics = getCaracteristics(); - for (Caracteristic caracteristic : defaultCaracteristicsSet) { - if (caracteristics.containsKey(caracteristic)) { - Serializable value = caracteristics.remove(caracteristic); - defaultCaracteristics.put(caracteristic, value); - } - } } //------------------------------------------------------------------------// @@ -139,9 +136,32 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel // convert weight setWeight(weightUnit.fromEntity(getWeight())); - if (getCaracteristics() == null) { + CaracteristicMap caracteristics = getCaracteristics(); + if (caracteristics == null) { setCaracteristics(new CaracteristicMap()); + + } else { + // move default caracteristics from caracteristic map + for (Caracteristic caracteristic : getDefaultCaracteristics().keySet()) { + if (caracteristics.containsKey(caracteristic)) { + Serializable value = caracteristics.remove(caracteristic); + defaultCaracteristics.put(caracteristic, value); + } + } + } + } + + public static List<IndividualObservationBatchRowModel> fromEntity(WeightUnit weightUnit, + Collection<Caracteristic> defaultCaracteristicsSet, + List<IndividualObservationBatch> entities) { + List<IndividualObservationBatchRowModel> result = Lists.newArrayList(); + for (IndividualObservationBatch entity : entities) { + + IndividualObservationBatchRowModel row = + new IndividualObservationBatchRowModel(weightUnit, defaultCaracteristicsSet, entity); + result.add(row); } + return result; } @Override @@ -150,6 +170,40 @@ public class IndividualObservationBatchRowModel extends AbstractTuttiBeanUIModel // convert weight result.setWeight(weightUnit.toEntity(getWeight())); + + CaracteristicMap caracteristics = new CaracteristicMap(); + result.setCaracteristics(caracteristics); + + // push back not null extra caracteristics + for (Map.Entry<Caracteristic, Serializable> entry : getCaracteristics().entrySet()) { + Serializable value = entry.getValue(); + if (value != null) { + caracteristics.put(entry.getKey(), value); + } + } + + // push back not null default caracteristics + for (Map.Entry<Caracteristic, Serializable> entry : getDefaultCaracteristics().entrySet()) { + Serializable value = entry.getValue(); + if (value != null) { + caracteristics.put(entry.getKey(), value); + } + } + + return result; + } + + public static List<IndividualObservationBatch> toEntity(List<IndividualObservationBatchRowModel> rows, + SpeciesBatch batch) { + List<IndividualObservationBatch> result = Lists.newArrayList(); + for (IndividualObservationBatchRowModel row : rows) { + + IndividualObservationBatch entity = row.toEntity(); + entity.setBatchId(batch.getIdAsInt()); + entity.setFishingOperation(batch.getFishingOperation()); + entity.setSpecies(batch.getSpecies()); + result.add(entity); + } return result; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index 2235ae5..0826e25 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -29,6 +29,8 @@ import org.jdesktop.swingx.table.TableColumnModelExt; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.ColumnIdentifier; +import java.util.Collection; + import static org.nuiton.i18n.I18n.n; /** @@ -76,14 +78,18 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab */ protected final WeightUnit weightUnit; + protected final Collection<Caracteristic> defaultCaracteristicsSet; + protected Species species; protected Caracteristic lengthstepCaracteristic; public IndividualObservationBatchTableModel(WeightUnit weightUnit, + Collection<Caracteristic> defaultCaracteristicsSet, TableColumnModelExt columnModel) { super(columnModel, true, false); this.weightUnit = weightUnit; + this.defaultCaracteristicsSet = defaultCaracteristicsSet; setNoneEditableCols(RANK); } @@ -105,7 +111,7 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab @Override public IndividualObservationBatchRowModel createNewRow() { IndividualObservationBatchRowModel result = - new IndividualObservationBatchRowModel(weightUnit); + new IndividualObservationBatchRowModel(weightUnit, defaultCaracteristicsSet); // by default empty row is not valid result.setValid(false); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java index 00f01ba..e5df709 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchRowModel.java @@ -27,15 +27,18 @@ import com.google.common.collect.Lists; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; 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.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.content.operation.catches.SampleCategoryAble; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.attachment.AttachmentModelAware; @@ -76,6 +79,8 @@ public class SpeciesBatchRowModel extends AbstractTuttiBeanUIModel<SpeciesBatch, public static final String PROPERTY_FREQUENCY = "frequency"; + public static final String PROPERTY_INDIVIDUAL_OBSERVATION = "individualObservation"; + public static final String PROPERTY_COMPUTED_NUMBER = "computedOrNotNumber"; public static final String PROPERTY_COMPUTED_WEIGHT = "computedOrNotWeight"; @@ -131,6 +136,13 @@ public class SpeciesBatchRowModel extends AbstractTuttiBeanUIModel<SpeciesBatch, protected List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); /** + * List of individual observations observed for this batch. + * + * @since 4.5 + */ + protected List<IndividualObservationBatchRowModel> individualObservation = Lists.newArrayList(); + + /** * List of child batches (can be null or empty if batch is a leaf). * * @see #isBatchLeaf() @@ -184,9 +196,12 @@ public class SpeciesBatchRowModel extends AbstractTuttiBeanUIModel<SpeciesBatch, } public SpeciesBatchRowModel(WeightUnit weightUnit, + WeightUnit observationWeightUnit, SampleCategoryModel sampleCategoryModel, SpeciesBatch aBatch, - List<SpeciesBatchFrequency> frequencies) { + List<SpeciesBatchFrequency> frequencies, + List<IndividualObservationBatch> individualObservations, + List<Caracteristic> defautObservationCaracteristic) { this(weightUnit, sampleCategoryModel); fromEntity(aBatch); @@ -195,6 +210,10 @@ public class SpeciesBatchRowModel extends AbstractTuttiBeanUIModel<SpeciesBatch, SpeciesFrequencyRowModel.fromEntity(weightUnit, frequencies); frequency.addAll(frequencyRows); Collections.sort(frequency); + + List<IndividualObservationBatchRowModel> obsRows = + IndividualObservationBatchRowModel.fromEntity(observationWeightUnit, defautObservationCaracteristic, individualObservations); + individualObservation.addAll(obsRows); } //------------------------------------------------------------------------// @@ -625,6 +644,16 @@ public class SpeciesBatchRowModel extends AbstractTuttiBeanUIModel<SpeciesBatch, firePropertyChange(PROPERTY_FREQUENCY, null, frequency); } + public List<IndividualObservationBatchRowModel> getIndividualObservation() { + return individualObservation; + } + + public void setIndividualObservation(List<IndividualObservationBatchRowModel> individualObservation) { + this.individualObservation = individualObservation; + // force to propagate observation changes + firePropertyChange(PROPERTY_INDIVIDUAL_OBSERVATION, null, individualObservation); + } + public ComputableData<Integer> getComputedOrNotNumber() { return computedOrNotNumber; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java index df890b7..5e5204b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java @@ -30,6 +30,7 @@ import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; 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.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; @@ -49,6 +50,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecorator import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesBatchDecoratorComparator; import fr.ifremer.tutti.ui.swing.content.operation.catches.SpeciesSortMode; import fr.ifremer.tutti.ui.swing.content.operation.catches.TableViewMode; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.create.CreateSpeciesBatchUIModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; @@ -1124,12 +1126,16 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec Integer id = aBatch.getIdAsInt(); List<SpeciesBatchFrequency> frequencies = getPersistenceService().getAllSpeciesBatchFrequency(id); + List<IndividualObservationBatch> individualObservations = getPersistenceService().getAllIndividualObservationBatchsForBatch(id); SpeciesBatchRowModel newRow = new SpeciesBatchRowModel(weightUnit, + getConfig().getIndividualObservationWeightUnit(), sampleCategoryModel, aBatch, - frequencies); + frequencies, + individualObservations, + getDataContext().getDefaultIndividualObservationCaracteristics()); List<Attachment> attachments = getPersistenceService().getAllAttachments(newRow.getObjectType(), @@ -1167,8 +1173,7 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec // create batch childs rows - List<SpeciesBatchRowModel> batchChilds = Lists. - newArrayListWithCapacity(aBatch.sizeChildBatchs()); + List<SpeciesBatchRowModel> batchChilds = Lists.newArrayListWithCapacity(aBatch.sizeChildBatchs()); Float childrenWeights = 0f; for (SpeciesBatch childBatch : aBatch.getChildBatchs()) { @@ -1293,10 +1298,27 @@ public class SpeciesBatchUIHandler extends AbstractTuttiBatchTableUIHandler<Spec frequency = getPersistenceService().saveSpeciesBatchFrequency(catchBean.getIdAsInt(), frequency); // push it back to row model - frequencyRows = SpeciesFrequencyRowModel.fromEntity(weightUnit, - frequency); + frequencyRows = SpeciesFrequencyRowModel.fromEntity(weightUnit, frequency); row.setFrequency(frequencyRows); + List<IndividualObservationBatchRowModel> obsRows = row.getIndividualObservation(); + + List<IndividualObservationBatch> obs = + IndividualObservationBatchRowModel.toEntity( + obsRows, + catchBean); + + if (log.isDebugEnabled()) { + log.debug("Will save " + obs.size() + " observations."); + } + obs = getPersistenceService().saveBatchIndividualObservation(catchBean.getIdAsInt(), obs); + + // push it back to row model + obsRows = IndividualObservationBatchRowModel.fromEntity(getConfig().getIndividualObservationWeightUnit(), + getDataContext().getDefaultIndividualObservationCaracteristics(), + obs); + row.setIndividualObservation(obsRows); + } protected void loadBatchRow(SpeciesBatchRowModel parentRow, diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java index 04472f8..504a284 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyCellComponent.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchUI; @@ -230,6 +231,7 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { // at close, synch back frequencies List<SpeciesFrequencyRowModel> frequency = Lists.newArrayList(); + List<IndividualObservationBatchRowModel> individualObservation = Lists.newArrayList(); if (frequencyModel.isSimpleCountingMode()) { editRow.setNumber(frequencyModel.getSimpleCount()); @@ -252,6 +254,21 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { " frequency to batch " + frequencyModel.getBatch()); } + for (IndividualObservationBatchRowModel row : frequencyModel.getIndividualObservationRows()) { + // the row is valid even if there is no data (just for the highlighter) + // but we save it only if there is data +// if (row.isValid() +// && !(row.getNumber() == null && row.getWeight() == null)) { + + // can keep this row + individualObservation.add(row); +// } + } + if (log.isDebugEnabled()) { + log.debug("Push back " + individualObservation.size() + + " observations to batch " + frequencyModel.getBatch()); + } + // push back to batch editRow.setNumber(null); } @@ -259,6 +276,10 @@ public class SpeciesFrequencyCellComponent extends DefaultTableCellRenderer { // set the weigth editRow.setWeight(frequencyModel.getTotalWeight()); + // DO THIS BEFORE SETTING THE FREQUENCIES AS THE FREAQUENCIES MODIFICATIONS TRIGGERS THE SAVE + // set individual observations to the incoming batch + editRow.setIndividualObservation(individualObservation); + // set frequencies to the incoming batch editRow.setFrequency(frequency); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index b0b32e2..e7d877d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -71,6 +71,7 @@ import fr.ifremer.tutti.util.Weights; import jaxx.runtime.swing.editor.bean.BeanFilterableComboBox; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -450,6 +451,10 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci TableColumnExt column = (TableColumnExt) getUI().getTable().getColumn(SpeciesFrequencyTableModel.LENGTH_STEP); column.setHeaderValue(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); column.setToolTipText(getLabelWithUnit(t("tutti.editSpeciesFrequencies.table.header.lengthStep"), unit)); + + column = (TableColumnExt) getUI().getObsTable().getColumn(IndividualObservationBatchTableModel.SIZE); + column.setHeaderValue(getLabelWithUnit(t("tutti.editIndividualObservationBatch.table.header.size"), unit)); + column.setToolTipText(getLabelWithUnit(t("tutti.editIndividualObservationBatch.table.header.size"), unit)); }); // when configuration mode change, let's focus the best component (see http://forge.codelutin.com/issues/4035) @@ -472,10 +477,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci getTableModel().fireTableDataChanged(); }); - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS, evt -> { - getObsTableModel().setRows((List<IndividualObservationBatchRowModel>) evt.getNewValue()); - }); - model.addPropertyChangeListener(SpeciesFrequencyUIModel.PROPERTY_INDIVIDUAL_OBSERVATION_ROWS_IN_ERROR, evt -> { Set<IndividualObservationBatchRowModel> obsRowsInError = (Set<IndividualObservationBatchRowModel>) evt.getNewValue(); @@ -641,6 +642,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Float lengthStep; List<SpeciesFrequencyRowModel> rows = Lists.newArrayList(); + List<IndividualObservationBatchRowModel> obsRows = Lists.newArrayList(); if (speciesBatch != null) { @@ -713,6 +715,32 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } } + List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); + + // try to load existing frequency + + if (CollectionUtils.isNotEmpty(individualObservations)) { + + IndividualObservationBatchTableModel tableModel = getObsTableModel(); + tableModel.setRows(new ArrayList<>()); + + for (IndividualObservationBatchRowModel rowModel : individualObservations) { + + IndividualObservationBatchRowModel newRow = tableModel.createNewRow(); + newRow.setId(rowModel.getId()); + newRow.setLengthStepCaracteristic(rowModel.getLengthStepCaracteristic()); + newRow.setSize(rowModel.getSize()); + newRow.setWeight(rowModel.getWeight()); + newRow.setBatchId(rowModel.getBatchId()); + newRow.setCaracteristics(rowModel.getCaracteristics()); + newRow.setDefaultCaracteristics(rowModel.getDefaultCaracteristics()); + newRow.setComment(rowModel.getComment()); + newRow.addAllAttachment(rowModel.getAttachment()); + newRow.setValid(true); + obsRows.add(newRow); + } + } + SpeciesBatchRowModel previousSiblingRow = frequencyEditor.getPreviousSiblingRow(); if (lengthStepCaracteristic == null && previousSiblingRow != null) { @@ -795,16 +823,17 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci Collections.sort(rows); model.setLengthStepCaracteristic(lengthStepCaracteristic); - model.setRows(null); model.setCopyIndividualObservationMode(CopyIndividualObservationMode.NOTHING); model.setRows(rows); IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); obsTableModel.setSpecies(speciesBatch.getSpecies()); - ArrayList<IndividualObservationBatchRowModel> individualObservationRows = new ArrayList<>(); - model.setIndividualObservationRows(individualObservationRows); - obsTableModel.addNewRow(); + model.setIndividualObservationRows(obsRows); + obsTableModel.setRows(obsRows); + if (obsRows.isEmpty()) { + obsTableModel.addNewRow(); + } model.recomputeIndividualObservationRowsValidateState(); // keep batch (will be used to push back editing entry) @@ -855,6 +884,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci lengthStep = getModel().getLengthStep(lengthStep); SpeciesFrequencyRowModel row = getRowForLengthstep(lengthStep); + // conversion de poids + weight = weightUnit.fromEntity(getConfig().getIndividualObservationWeightUnit().toEntity(weight)); row.addToWeight(weight); if (Weights.isNullOrZero(row.getWeight())) { @@ -1170,6 +1201,7 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci CommentCellEditor.newEditor(ui), CommentCellRenderer.newRender(), IndividualObservationBatchTableModel.COMMENT); + } { // File column @@ -1183,12 +1215,24 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci // create obsTable model IndividualObservationBatchTableModel tableModel = new IndividualObservationBatchTableModel(individualObservationWeightUnit, + defaultCaracteristic, columnModel); obsTable.setModel(tableModel); obsTable.setColumnModel(columnModel); initTable(obsTable); + Color cellWithValueColor = getConfig().getColorCellWithValue(); + + Highlighter commentHighlighter = TuttiUIUtil.newBackgroundColorHighlighter( + new HighlightPredicate.AndHighlightPredicate( + new HighlightPredicate.IdentifierHighlightPredicate(IndividualObservationBatchTableModel.COMMENT), + // for not null value + (renderer, adapter) -> { + String value = (String) adapter.getValue(); + return StringUtils.isNotBlank(value); + }), cellWithValueColor); + obsTable.addHighlighter(commentHighlighter); installTableKeyListener(columnModel, obsTable); @@ -1373,8 +1417,11 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci model.getRowCache().put(size, row); } row.incNumber(); - if (copyMode == CopyIndividualObservationMode.ALL && obsRow.getWeight() != null) { - row.addToWeight(obsRow.getWeight()); + Float weight = obsRow.getWeight(); + if (copyMode == CopyIndividualObservationMode.ALL && weight != null) { + // conversion de poids + weight = weightUnit.fromEntity(getConfig().getIndividualObservationWeightUnit().toEntity(weight)); + row.addToWeight(weight); } } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm