This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 57153a37bd7c7f0b07b456f0b87dad5e46edff53 Author: Tony CHEMIT <chemit@codelutin.com> Date: Sat Mar 12 07:47:20 2016 +0100 Suppression des observations individuelles sur un lot ou un trait (See #8114) --- .../FishingOperationPersistenceServiceImpl.java | 4 +- ...dividualObservationBatchPersistenceService.java | 11 ++- ...dualObservationBatchPersistenceServiceImpl.java | 94 +++++++++++++++++----- .../service/util/BatchPersistenceHelper.java | 47 +++++++---- .../service/util/SamplePersistenceHelper.java | 37 ++++----- .../GenericformatImportPersistenceHelper.java | 2 +- 6 files changed, 130 insertions(+), 65 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java index b8da9fd..1f87630 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java @@ -516,9 +516,7 @@ public class FishingOperationPersistenceServiceImpl extends AbstractPersistenceS throw new DataRetrievalFailureException("Could not retrieve fishing operation with id=" + fishingOperationId); } - attachmentPersistenceService.deleteAllAttachment( - ObjectTypeCode.OPERATION, - fishingOperationId); + attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.OPERATION, fishingOperationId); getCurrentSession().flush(); // delete catch batch 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 743a7de..9498897 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 @@ -48,6 +48,13 @@ public interface IndividualObservationBatchPersistenceService extends TuttiPersi Collection<IndividualObservationBatch> createIndividualObservationBatches(Collection<IndividualObservationBatch> individualObservations); @Transactional(readOnly = false) - List<IndividualObservationBatch> saveBatchIndividualObservation(Integer batchId, - List<IndividualObservationBatch> individualObservation); + List<IndividualObservationBatch> saveBatchIndividualObservation(Integer batchId, List<IndividualObservationBatch> individualObservation); + + @Transactional(readOnly = false) + void deleteAllIndividualObservationsForFishingOperation(Integer fishingOperationId); + + @Transactional(readOnly = false) + void deleteAllIndividualObservationsForBatch(Integer speciesBatchId); + + } 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 88294c5..7a34ffd 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 @@ -43,6 +43,7 @@ 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; @@ -113,14 +114,16 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe List<Integer> allFishingOperationIds = fishingOperationPersistenceService.getAllFishingOperationIds(cruiseId); allFishingOperationIds.forEach(fishingOperationId -> { - Iterator<Object[]> list = queryList( - "allFishingOperationSamplesWithBatch", - "fishingOperationId", IntegerType.INSTANCE, fishingOperationId + Iterator<Object[]> list = queryList("allFishingOperationSamplesWithBatch", + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId ); + FishingOperation fishingOperation = fishingOperationPersistenceService.getFishingOperation(fishingOperationId); + while (list.hasNext()) { IndividualObservationBatch individualObservationBatch = toBean(weightMeasuredCaracteristic, pmfmIdCaracteristic, list.next()); + individualObservationBatch.setFishingOperation(fishingOperation); result.add(individualObservationBatch); } @@ -138,14 +141,16 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe Caracteristic pmfmIdCaracteristic = caracteristicService.getPmfmIdCaracteristic(); List<IndividualObservationBatch> result = new ArrayList<>(); - Iterator<Object[]> list = queryList( - "allFishingOperationSamplesWithBatch", - "fishingOperationId", IntegerType.INSTANCE, fishingOperationId + Iterator<Object[]> list = queryList("allFishingOperationSamplesWithBatch", + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId ); + FishingOperation fishingOperation = fishingOperationPersistenceService.getFishingOperation(fishingOperationId); + while (list.hasNext()) { IndividualObservationBatch individualObservationBatch = toBean(weightMeasuredCaracteristic, pmfmIdCaracteristic, list.next()); + individualObservationBatch.setFishingOperation(fishingOperation); result.add(individualObservationBatch); } @@ -160,9 +165,8 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe Caracteristic weightMeasuredCaracteristic = caracteristicService.getWeightMeasuredCaracteristic(); Caracteristic pmfmIdCaracteristic = caracteristicService.getPmfmIdCaracteristic(); - Iterator<Object[]> list = queryList( - "allFishingOperationSamplesForBatch", - "batchId", IntegerType.INSTANCE, batchId + Iterator<Object[]> list = queryList("allFishingOperationSamplesForBatch", + "batchId", IntegerType.INSTANCE, batchId ); List<IndividualObservationBatch> result = Lists.newArrayList(); @@ -222,6 +226,37 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe } + @Override + public void deleteAllIndividualObservationsForFishingOperation(Integer fishingOperationId) { + + Set<Integer> individualObservationIds = getAllIndividualObservationBatchIds(fishingOperationId); + + if (log.isInfoEnabled()) { + log.info(String.format("[Fishing Operation: %d] Delete %d individual observations.", fishingOperationId, individualObservationIds.size())); + } + + individualObservationIds.forEach(samplePersistenceHelper::deleteSample); + + } + + @Override + public void deleteAllIndividualObservationsForBatch(Integer speciesBatchId) { + + Set<Integer> allSpeciesBatchIds = batchHelper.getBatchIds(speciesBatchId); + + for (Integer aSpeciesBatchId : allSpeciesBatchIds) { + + Set<Integer> individualObservationIds = getAllIndividualObservationBatchIdsForBatch(aSpeciesBatchId); + + if (log.isInfoEnabled()) { + log.info(String.format("[Species batch: %d] Delete %d individual observations.", aSpeciesBatchId, individualObservationIds.size())); + } + individualObservationIds.forEach(samplePersistenceHelper::deleteSample); + + } + + } + // ------------------------------------------------------------------------// // -- Internal methods --// // ------------------------------------------------------------------------// @@ -264,12 +299,10 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe target.setCreationDate(fishingOperation.getFishingStartDateTime()); // Recorder Departement - target.setRecorderDepartment(load(DepartmentImpl.class, - DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue())); + target.setRecorderDepartment(load(DepartmentImpl.class, DepartmentId.UNKNOWN_RECORDER_DEPARTMENT.getValue())); // Recorder Person - target.setRecorderPerson(load(PersonImpl.class, - PersonId.UNKNOWN_RECORDER_PERSON.getValue())); + target.setRecorderPerson(load(PersonImpl.class, PersonId.UNKNOWN_RECORDER_PERSON.getValue())); // Program Program program = fishingOperation.getFishingTrip().getProgram(); @@ -305,11 +338,9 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe if (source.getLengthStepCaracteristic() != null) { Caracteristic caracteristic = caracteristicService.getPmfmIdCaracteristic(); - caracteristics.put(caracteristic, - source.getLengthStepCaracteristic().getId()); + caracteristics.put(caracteristic, source.getLengthStepCaracteristic().getId()); - caracteristics.put(source.getLengthStepCaracteristic(), - source.getSize()); + caracteristics.put(source.getLengthStepCaracteristic(), source.getSize()); } samplePersistenceHelper.setSampleMeasurements(target, caracteristics); @@ -375,13 +406,32 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe } } - protected Set<Integer> getAllIndividualObservationBatchIdssForBatch(Integer batchId) { + protected Set<Integer> getAllIndividualObservationBatchIdsForBatch(Integer batchId) { Preconditions.checkNotNull(batchId); - Iterator<Integer> list = queryListTyped( - "allFishingOperationSampleIdsForBatch", - "batchId", IntegerType.INSTANCE, batchId + Iterator<Integer> list = queryListTyped("allFishingOperationSampleIdsForBatch", + "batchId", IntegerType.INSTANCE, batchId + ); + + Set<Integer> result = new LinkedHashSet<>(); + + while (list.hasNext()) { + + Integer id = list.next(); + result.add(id); + + } + return result; + + } + + protected Set<Integer> getAllIndividualObservationBatchIds(Integer fishingOperationId) { + + Preconditions.checkNotNull(fishingOperationId); + + Iterator<Integer> list = queryListTyped("allFishingOperationSampleIds", + "fishingOperationId", IntegerType.INSTANCE, fishingOperationId ); Set<Integer> result = new LinkedHashSet<>(); @@ -418,7 +468,7 @@ public class IndividualObservationBatchPersistenceServiceImpl extends AbstractPe } // Remember child ids, to remove unchanged item (see at bottom in this method) - Set<Integer> notUpdatedChildIds = getAllIndividualObservationBatchIdssForBatch(speciesBatchId); + Set<Integer> notUpdatedChildIds = getAllIndividualObservationBatchIdsForBatch(speciesBatchId); for (IndividualObservationBatch source : notNullObservations) { 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 4848065..ce8b4c4 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,21 +183,25 @@ public class BatchPersistenceHelper extends AbstractPersistenceService { accidentalBatchService.deleteAccidentalBatchForFishingOperation(fishingOperationId); getCurrentSession().flush(); + // delete all samples + individualObservationBatchPersistenceService.deleteAllIndividualObservationsForFishingOperation(fishingOperationId); + getCurrentSession().flush(); + // SynchronizationStatus on fishingTrip FishingOperation fishingOperation = fishingOperationDao.load(fishingOperationId); synchronizationStatusHelper.setDirty(fishingOperation.getFishingTrip()); // get all catch batch children ids (to delete attachments) - List<Integer> ids = catchBatchDao.getAllChildrenIds(catchBatchId); + Set<Integer> ids = getBatchIds(catchBatchId); + ids.remove(catchBatchId); catchBatchDao.remove(catchBatchId); attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.CATCH_BATCH, catchBatchId); getCurrentSession().flush(); - attachmentPersistenceService.deleteAllAttachment( - ObjectTypeCode.BATCH, - ids.toArray(new Integer[ids.size()])); + attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.BATCH, ids); + } public <D extends TuttiEntity> D createSortingBatch(D bean, CatchBatch catchBatch, SortingBatch batch) { @@ -208,24 +212,33 @@ public class BatchPersistenceHelper extends AbstractPersistenceService { return bean; } - public void removeWithChildren(Integer batchId) { - List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); + public Set<Integer> getBatchIds(Integer batchId) { + Set<Integer> ids = Sets.newHashSet(catchBatchDao.getAllChildrenIds(batchId)); ids.add(batchId); + return ids; + } + + public void removeWithChildren(Integer batchId) { + + individualObservationBatchPersistenceService.deleteAllIndividualObservationsForBatch(batchId); + + Set<Integer> ids = getBatchIds(batchId); + catchBatchDao.removeWithChildren(batchId); - attachmentPersistenceService.deleteAllAttachment( - ObjectTypeCode.BATCH, - ids.toArray(new Integer[ids.size()])); + attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.BATCH, ids); + } public void removeWithChildren(Integer batchId, CatchBatch parentCatchBatch) { - List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); - ids.add(batchId); + + individualObservationBatchPersistenceService.deleteAllIndividualObservationsForBatch(batchId); + + Set<Integer> ids = getBatchIds(batchId); + catchBatchDao.removeWithChildren(batchId, parentCatchBatch); - attachmentPersistenceService.deleteAllAttachment( - ObjectTypeCode.BATCH, - ids.toArray(new Integer[ids.size()])); + attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.BATCH, ids); } public void updateSortingBatch(List<SortingBatch> sortingBatchs, CatchBatch parentCatchBatch) { @@ -617,8 +630,8 @@ public class BatchPersistenceHelper extends AbstractPersistenceService { // If parent and root need to be set if (target.getId() == null - || target.getRootBatch() == null - || (target.getParentBatch() != null && !target.getParentBatch().getId().equals(parentBatch.getId()))) { + || target.getRootBatch() == null + || (target.getParentBatch() != null && !target.getParentBatch().getId().equals(parentBatch.getId()))) { target.setParentBatch(parentBatch); target.setRootBatch(parentBatch.getRootBatch()); @@ -955,7 +968,7 @@ public class BatchPersistenceHelper extends AbstractPersistenceService { Pmfm pmfm = sm.getPmfm(); result = sortingBatch.getIndividualCount() != null && - !sampleCategoryModel.containsCategoryId(pmfm.getId()); + !sampleCategoryModel.containsCategoryId(pmfm.getId()); } return result; } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java index ad08eac..89152cf 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java @@ -36,6 +36,8 @@ import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativ import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; import fr.ifremer.tutti.persistence.service.referential.CaracteristicPersistenceService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.hibernate.type.IntegerType; import org.springframework.dao.DataRetrievalFailureException; import org.springframework.stereotype.Component; @@ -54,6 +56,9 @@ import java.util.Set; @Component("samplePersistenceHelper") public class SamplePersistenceHelper extends AbstractPersistenceService { + /** Logger. */ + private static final Log log = LogFactory.getLog(SamplePersistenceHelper.class); + @Resource(name = "caracteristicPersistenceService") private CaracteristicPersistenceService caracteristicService; @@ -88,14 +93,16 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { public Sample load(Integer id) { Sample sample = sampleDao.load(id); if (sample == null) { - throw new DataRetrievalFailureException( - "Could not retrieve sample id=" + id); + throw new DataRetrievalFailureException("Could not retrieve sample id=" + id); } return sample; } public void deleteSample(Integer sampleId) { + if (log.isDebugEnabled()) { + log.debug("Delete sample: " + sampleId); + } Sample sample = load(sampleId); // Synchronization Status @@ -106,8 +113,7 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { attachmentPersistenceService.deleteAllAttachment(ObjectTypeCode.SAMPLE, sampleId); } - public void setSampleMeasurements(Sample target, - CaracteristicMap caracteristics) { + public void setSampleMeasurements(Sample target, CaracteristicMap caracteristics) { Set<SampleMeasurement> notChangedSampleMeasurements = Sets.newHashSet(); if (target.getSampleMeasurements() != null) { @@ -115,24 +121,18 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { } for (Caracteristic caracteristic : caracteristics.keySet()) { - SampleMeasurement vum = setSampleMeasurement( - target, - caracteristic, - caracteristics.get(caracteristic)); + SampleMeasurement vum = setSampleMeasurement(target, caracteristic, caracteristics.get(caracteristic)); notChangedSampleMeasurements.remove(vum); } - if (target.getSampleMeasurements() != null && - notChangedSampleMeasurements.size() > 0) { + if (target.getSampleMeasurements() != null && notChangedSampleMeasurements.size() > 0) { target.getSampleMeasurements().removeAll(notChangedSampleMeasurements); } } - public void fillSampleMeasurements(CaracteristicMap result, - Integer sampleId) { - Iterator<Object[]> list = queryList( - "sampleMeasurements", - "sampleId", IntegerType.INSTANCE, sampleId); + public void fillSampleMeasurements(CaracteristicMap result, Integer sampleId) { + Iterator<Object[]> list = queryList("sampleMeasurements", + "sampleId", IntegerType.INSTANCE, sampleId); while (list.hasNext()) { int colIndex = 0; Object[] source = list.next(); @@ -149,8 +149,7 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { value = numericalValue; break; case QUALITATIVE: - value = CaracteristicQualitativeValues.getQualitativeValue(caracteristic, - qualitativeValueId); + value = CaracteristicQualitativeValues.getQualitativeValue(caracteristic, qualitativeValueId); break; case TEXT: value = alphanumericalValue; @@ -160,9 +159,7 @@ public class SamplePersistenceHelper extends AbstractPersistenceService { } } - protected SampleMeasurement setSampleMeasurement(Sample sample, - Caracteristic caracteristic, - Serializable value) { + protected SampleMeasurement setSampleMeasurement(Sample sample, Caracteristic caracteristic, Serializable value) { Integer pmfmId = caracteristic.getIdAsInt(); 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 1c98eca..26feeef 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 @@ -149,7 +149,7 @@ public class GenericformatImportPersistenceHelper { if (withCatchBatch) { catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); } else { - catchBatch= null; + catchBatch = null; } return catchBatch; } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.