Author: tchemit Date: 2014-04-23 10:11:03 +0200 (Wed, 23 Apr 2014) New Revision: 1723 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1723 Log: introduce util package Added: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchTreeHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/MeasurementPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/VesselPersonFeaturesPersistenceHelper.java Removed: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MeasurementPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SamplePersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SynchronizationStatusHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/VesselPersonFeaturesPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchTreeHelper.java Modified: trunk/pom.xml trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MarineLitterBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/pom.xml 2014-04-23 08:11:03 UTC (rev 1723) @@ -138,7 +138,7 @@ <!-- libraries version --> <nuitonI18nVersion>3.0</nuitonI18nVersion> <nuitonValidatorVersion>3.0-rc-1</nuitonValidatorVersion> - <eugenePluginVersion>2.7.4</eugenePluginVersion> + <eugenePluginVersion>2.9-SNAPSHOT</eugenePluginVersion> <!--<hibernateVersion>3.6.10.Final</hibernateVersion>--> <jaxxVersion>2.8.4</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AccidentalBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -43,6 +43,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.persistence.service.util.SamplePersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/BenthosBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -46,8 +46,9 @@ import fr.ifremer.tutti.persistence.entities.data.BenthosBatchs; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.service.batch.BatchPersistenceHelper; -import fr.ifremer.tutti.persistence.service.batch.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.dao.DataIntegrityViolationException; @@ -207,30 +208,6 @@ @Override public void deleteBenthosSubBatch(String id) { batchHelper.deleteSpeciesSubBatch(id); - -// Preconditions.checkNotNull(id); -// -// Integer benthosBatchId = Integer.valueOf(id); -// -// CatchBatch catchBatch = batchHelper.getRootCatchBatchByBatchId(benthosBatchId); -// SortingBatch sortingBatch = batchHelper.getSortingBatchById(catchBatch, benthosBatchId); -// -// // get his children -// Collection<Batch> childBatchs = sortingBatch.getChildBatchs(); -// -// if (CollectionUtils.isNotEmpty(childBatchs)) { -// -// for (Batch childBatch : childBatchs) { -// -// // delete this child and all his children -// Integer childBatchId = childBatch.getId(); -// -// if (log.isDebugEnabled()) { -// log.debug("Delete child [" + childBatchId + "] of species batch: " + id); -// } -// batchHelper.removeWithChildren(childBatchId); -// } -// } } @Override Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CatchBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -35,8 +35,10 @@ import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.CatchBatchBean; -import fr.ifremer.tutti.persistence.service.batch.BatchPersistenceHelper; -import fr.ifremer.tutti.persistence.service.batch.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.FlushMode; Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -53,7 +53,6 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmDao; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueDao; -import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; import fr.ifremer.tutti.persistence.dao.GearPhysicalFeaturesDaoTutti; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -69,6 +68,9 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; +import fr.ifremer.tutti.persistence.service.util.VesselPersonFeaturesPersistenceHelper; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -765,83 +767,4 @@ fishingTrip.getVesselPersonFeatures().clear(); fishingTrip.getVesselPersonFeatures().addAll(vesselPersonFeaturesMap.values()); } - -// public SurveyMeasurement getSurveyMeasurement(FishingTrip fishingTrip, -// Integer pmfmId) { -// SurveyMeasurement result = null; -// -// for (SurveyMeasurement vum : fishingTrip.getSurveyMeasurements()) { -// if (pmfmId.equals(vum.getPmfm().getId())) { -// result = vum; -// break; -// } -// } -// -// return result; -// } -// -// protected SurveyMeasurement createSurveyMeasurement(FishingTrip fishingTrip, -// Integer pmfmId, -// Float numericalValue, -// String alphanumericalValue, -// Integer qualitativevalueId) { -// -// SurveyMeasurement result = SurveyMeasurement.Factory.newInstance(); -// result.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); -// result.setDepartment(fishingTrip.getRecorderDepartment()); -// Pmfm pmfm = load(PmfmImpl.class, pmfmId); -// result.setPmfm(pmfm); -// result.setFishingTrip(fishingTrip); -// -// if (alphanumericalValue != null) { -// result.setAlphanumericalValue(alphanumericalValue); -// } else if (numericalValue != null) { -// result.setNumericalValue(numericalValue); -// } else if (qualitativevalueId != null) { -// result.setQualitativeValue(load(QualitativeValueImpl.class, qualitativevalueId)); -// } -// -// // add it to fishingTrip -// if (fishingTrip.getSurveyMeasurements() == null) { -// -// //create new set of measurements -// fishingTrip.setSurveyMeasurements(Sets.<SurveyMeasurement>newHashSet()); -// } -// -// fishingTrip.getSurveyMeasurements().add(result); -// -// return result; -// } -// -// protected SurveyMeasurement setSurveyMeasurement(FishingTrip fishingTrip, -// Integer pmfmId, -// Float numericalValue, -// String alphanumericalValue, -// Integer qualitativevalueId) { -// SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); -// -// if (result == null) { -// result = createSurveyMeasurement(fishingTrip, -// pmfmId, -// numericalValue, -// alphanumericalValue, -// qualitativevalueId); -// } -// -// return result; -// } -// -// protected SurveyMeasurement removeSurveyMeasurement(FishingTrip fishingTrip, -// Integer pmfmId) { -// SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); -// -// if (result != null) { -// -// // measurement found, remove it -// result.setFishingTrip(null); -// fishingTrip.getSurveyMeasurements().remove(result); -// } -// -// return result; -// } } Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -58,10 +58,6 @@ import fr.ifremer.adagio.core.dao.referential.gear.GearImpl; import fr.ifremer.adagio.core.dao.referential.location.LocationExtendDao; import fr.ifremer.adagio.core.dao.referential.location.LocationImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl; import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; import fr.ifremer.adagio.core.service.referential.location.LocationService; import fr.ifremer.tutti.persistence.dao.GearPhysicalFeaturesDaoTutti; @@ -77,6 +73,9 @@ import fr.ifremer.tutti.persistence.entities.referential.Person; import fr.ifremer.tutti.persistence.entities.referential.TuttiLocation; import fr.ifremer.tutti.persistence.entities.referential.Vessel; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; +import fr.ifremer.tutti.persistence.service.util.VesselPersonFeaturesPersistenceHelper; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -223,7 +222,7 @@ } // SynchronizationStatus - fishingOperation.setSynchronizationStatus((String)source[colIndex++]); + fishingOperation.setSynchronizationStatus((String) source[colIndex++]); // If not found, compute it using a counter (see "order by startDateTime" in HQL query) if (fishingOperation.getFishingOperationNumber() == null) { @@ -285,7 +284,7 @@ } // SynchronizationStatus - result.setSynchronizationStatus((String)source[colIndex++]); + result.setSynchronizationStatus((String) source[colIndex++]); Short rankOrder = (Short) source[colIndex++]; @@ -879,7 +878,7 @@ // StationNumber if (source.getStationNumber() != null) { - VesselUseMeasurement vum = setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_STATION_NUMBER, null, source.getStationNumber(), null); + VesselUseMeasurement vum = measurementPersistenceHelper.setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_STATION_NUMBER, null, source.getStationNumber(), null); notChangedVesselUseMeasurements.remove(vum); } @@ -926,19 +925,19 @@ // Trawl distance if (source.getTrawlDistance() != null) { - VesselUseMeasurement vum = setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_TRAWL_DISTANCE, source.getTrawlDistance(), null, null); + VesselUseMeasurement vum = measurementPersistenceHelper.setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_TRAWL_DISTANCE, source.getTrawlDistance(), null, null); notChangedVesselUseMeasurements.remove(vum); } // Rectilinear operation { - VesselUseMeasurement vum = setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_RECTILINEAR_OPERATION, null, null, source.isFishingOperationRectiligne() ? enumeration.QUALITATIVE_RECTILINEAR_OPERATION_YES : enumeration.QUALITATIVE_RECTILINEAR_OPERATION_NO); + VesselUseMeasurement vum = measurementPersistenceHelper.setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_RECTILINEAR_OPERATION, null, null, source.isFishingOperationRectiligne() ? enumeration.QUALITATIVE_RECTILINEAR_OPERATION_YES : enumeration.QUALITATIVE_RECTILINEAR_OPERATION_NO); notChangedVesselUseMeasurements.remove(vum); } // Operation is valid ? if (source.getFishingOperationValid() != null) { - VesselUseMeasurement vum = setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_HAUL_VALID, null, null, source.getFishingOperationValid() ? enumeration.QUALITATIVE_HAUL_VALID_YES : enumeration.QUALITATIVE_HAUL_VALID_NO); + VesselUseMeasurement vum = measurementPersistenceHelper.setVesselUseMeasurement(scientificCruise, vesselUseFeatures, enumeration.PMFM_ID_HAUL_VALID, null, null, source.getFishingOperationValid() ? enumeration.QUALITATIVE_HAUL_VALID_YES : enumeration.QUALITATIVE_HAUL_VALID_NO); notChangedVesselUseMeasurements.remove(vum); } @@ -1074,7 +1073,7 @@ CaracteristicMap vesselUseCaracteristics = source.getVesselUseFeatures(); if (MapUtils.isNotEmpty(vesselUseCaracteristics)) { for (Caracteristic caracteristic : vesselUseCaracteristics.keySet()) { - VesselUseMeasurement vum = setVesselUseMeasurement(scientificCruise, vesselUseFeatures, caracteristic, vesselUseCaracteristics.get(caracteristic)); + VesselUseMeasurement vum = measurementPersistenceHelper.setVesselUseMeasurement(scientificCruise, vesselUseFeatures, caracteristic, vesselUseCaracteristics.get(caracteristic)); notChangedVesselUseMeasurements.remove(vum); } } @@ -1263,135 +1262,6 @@ return DEFAULT_EMPTY_LONGITUDE.equals(databaseValue) ? null : databaseValue; } - - protected VesselUseMeasurement getVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, - Integer pmfmId, boolean createIfNotExists) { - VesselUseMeasurement vesselUseMeasurement = null; - if (vesselUseFeatures.getVesselUseMeasurements() != null) { - for (VesselUseMeasurement vum : vesselUseFeatures.getVesselUseMeasurements()) { - if (pmfmId.equals(vum.getPmfm().getId())) { - vesselUseMeasurement = vum; - break; - } - } - } - if (vesselUseMeasurement == null) { - if (!createIfNotExists) { - return null; - } - vesselUseMeasurement = VesselUseMeasurement.Factory.newInstance(); - vesselUseMeasurement.setVesselUseFeatures(vesselUseFeatures); - if (vesselUseFeatures.getVesselUseMeasurements() == null) { - vesselUseFeatures.setVesselUseMeasurements(Sets.newHashSet(vesselUseMeasurement)); - } else { - vesselUseFeatures.getVesselUseMeasurements().add(vesselUseMeasurement); - } - vesselUseMeasurement.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); - vesselUseMeasurement.setDepartment(scientificCruise.getRecorderDepartment()); - vesselUseMeasurement.setPmfm(load(PmfmImpl.class, pmfmId)); - } - - return vesselUseMeasurement; - } - - protected VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, - Integer pmfmId, - Float numericalValue, - String alphanumericalValue, - Integer qualitativevalueId) { - VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, pmfmId, true); - - if (alphanumericalValue != null) { - vesselUseMeasurement.setAlphanumericalValue(alphanumericalValue); - } else if (numericalValue != null) { - vesselUseMeasurement.setNumericalValue(numericalValue); - } else if (qualitativevalueId != null) { - vesselUseMeasurement.setQualitativeValue(load(QualitativeValueImpl.class, qualitativevalueId)); - } - - return vesselUseMeasurement; - } - - protected VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, - Integer pmfmId, - Serializable value) { - VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, pmfmId, true); - - if (value instanceof String) { - vesselUseMeasurement.setAlphanumericalValue((String) value); - } else if (value instanceof Float) { - vesselUseMeasurement.setNumericalValue((Float) value); - } else if (value instanceof Integer) { - vesselUseMeasurement.setQualitativeValue(load(QualitativeValueImpl.class, value)); - } - - return vesselUseMeasurement; - } - - protected VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, - Caracteristic caracteristic, Serializable value) { - VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, Integer.valueOf(caracteristic.getId()), true); - measurementPersistenceHelper.setMeasurement(vesselUseMeasurement, caracteristic, value); - return vesselUseMeasurement; - } - -// protected GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, -// Integer pmfmId, -// Float numericalValue, -// String alphanumericalValue, -// Integer qualitativevalueId) { -// GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, pmfmId, true); -// -// if (alphanumericalValue != null) { -// gearUseMeasurement.setAlphanumericalValue(alphanumericalValue); -// } else if (numericalValue != null) { -// gearUseMeasurement.setNumericalValue(numericalValue); -// } else if (qualitativevalueId != null) { -// QualitativeValue qv = load(QualitativeValueImpl.class, qualitativevalueId); -// gearUseMeasurement.setQualitativeValue(qv); -// } -// -// return gearUseMeasurement; -// } - -// protected GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, -// Caracteristic caracteristic, Serializable value) { -// GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, Integer.valueOf(caracteristic.getId()), true); -// measurementPersistenceHelper.setMeasurement(gearUseMeasurement, caracteristic, value); -// return gearUseMeasurement; -// } -// -// protected GearUseMeasurement getGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, -// Integer pmfmId, boolean createIfNotExists) { -// GearUseMeasurement gearUseMeasurement = null; -// if (gearUseFeatures.getGearUseMeasurements() != null) { -// for (GearUseMeasurement vum : gearUseFeatures.getGearUseMeasurements()) { -// if (pmfmId.equals(vum.getPmfm().getId())) { -// gearUseMeasurement = vum; -// break; -// } -// } -// } -// if (gearUseMeasurement == null) { -// if (!createIfNotExists) { -// return null; -// } -// gearUseMeasurement = GearUseMeasurement.Factory.newInstance(); -// gearUseMeasurement.setGearUseFeatures(gearUseFeatures); -// if (gearUseFeatures.getGearUseMeasurements() == null) { -// gearUseFeatures.setGearUseMeasurements(Sets.newHashSet(gearUseMeasurement)); -// } else { -// gearUseFeatures.getGearUseMeasurements().add(gearUseMeasurement); -// } -// gearUseMeasurement.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); -// gearUseMeasurement.setDepartment(scientificCruise.getRecorderDepartment()); -// Pmfm pmfm = (Pmfm) getCurrentSession().load(PmfmImpl.class, pmfmId); -// gearUseMeasurement.setPmfm(pmfm); -// } -// -// return gearUseMeasurement; -// } - protected void setOperationVesselAssociation(Operation target, List<String> vesselCodes) { boolean noOperationVesselAssociations = Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/IndividualObservationBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -45,7 +45,9 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.service.batch.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SamplePersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.SynchronizationStatusHelper; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -140,8 +142,6 @@ Preconditions.checkNotNull(bean); Preconditions.checkState(TuttiEntities.isNew(bean)); Preconditions.checkNotNull(bean.getSpecies()); -// Preconditions.checkNotNull(bean.getSize()); -// Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); FishingOperation fishingOperation = bean.getFishingOperation(); Preconditions.checkNotNull(fishingOperation); @@ -162,8 +162,6 @@ Preconditions.checkNotNull(bean); Preconditions.checkState(!TuttiEntities.isNew(bean)); Preconditions.checkNotNull(bean.getSpecies()); -// Preconditions.checkNotNull(bean.getSize()); -// Preconditions.checkNotNull(bean.getLengthStepCaracteristic()); FishingOperation fishingOperation = bean.getFishingOperation(); Preconditions.checkNotNull(fishingOperation); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MarineLitterBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MarineLitterBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MarineLitterBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -39,8 +39,9 @@ import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.persistence.service.batch.BatchPersistenceHelper; -import fr.ifremer.tutti.persistence.service.batch.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Service; @@ -304,21 +305,4 @@ sortingMeasurements.removeAll(notChangedSortingMeasurements); } } - -// public void setMarineLitterBatchParents(SortingBatch target, CatchBatch catchBatch) { -// -// Preconditions.checkNotNull(target); -// -// SortingBatch parentBatch = batchTreeHelper.getMarineLitterRootBatch(catchBatch); -// -// if (parentBatch == null) { -// -// SortingBatch horsVracBatch = batchHelper.getOrCreateHorsVracBatch(catchBatch); -// -// parentBatch = batchHelper.getOrCreateMarineLitterRootBatch(catchBatch, horsVracBatch, null); -// } -// -// target.setParentBatch(parentBatch); -// target.setRootBatch(catchBatch); -// } } Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MeasurementPersistenceHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MeasurementPersistenceHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MeasurementPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,295 +0,0 @@ -package fr.ifremer.tutti.persistence.service; - -/* - * #%L - * Tutti :: Persistence - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; -import fr.ifremer.adagio.core.dao.data.batch.Batch; -import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; -import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; -import fr.ifremer.adagio.core.dao.data.measure.GearUseMeasurement; -import fr.ifremer.adagio.core.dao.data.measure.Measurement; -import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement; -import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; -import fr.ifremer.adagio.core.dao.data.measure.SurveyMeasurement; -import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; -import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; -import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures; -import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue; -import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.io.Serializable; - -/** - * Helper around {@link Measurement}. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.0 - */ -@Component("measurementPersistenceHelper") -public class MeasurementPersistenceHelper extends AbstractPersistenceService { - - @Resource(name = "referentialPersistenceService") - protected ReferentialPersistenceService referentialService; - - @Resource(name = "catchBatchDao") - protected CatchBatchExtendDao catchBatchDao; - - public void setMeasurement(Measurement measurement, - Caracteristic caracteristic, - Serializable value) { - if (value == null) { - return; - } - switch (caracteristic.getCaracteristicType()) { - - case NUMBER: - measurement.setNumericalValue((Float) value); - break; - case QUALITATIVE: - Integer qvId = null; - if (value instanceof CaracteristicQualitativeValue) { - qvId = Integer.valueOf(((CaracteristicQualitativeValue) value).getId()); - } else if (value instanceof Integer) { - qvId = (Integer) value; - } - QualitativeValue qv = load(QualitativeValueImpl.class, qvId); - measurement.setQualitativeValue(qv); - break; - case TEXT: - measurement.setAlphanumericalValue((String) value); - break; - } - } - - //------------------------------------------------------------------------// - //-- SortingMeasurement --// - //------------------------------------------------------------------------// - - public SortingMeasurement setSortingMeasurement( - SortingBatch sortingBatch, - Integer pmfmId, - Serializable value) { - Preconditions.checkNotNull(pmfmId); - Preconditions.checkNotNull(value); - - Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); - SortingMeasurement sortingMeasurement = catchBatchDao.getSortingMeasurement( - sortingBatch, pmfmId, getRecorderDepartmentId(), true); - setMeasurement(sortingMeasurement, - caracteristic, - value); - return sortingMeasurement; - } - - public QuantificationMeasurement setWeightMeasurementQuantificationMeasurement(Batch batch, Float weightValue) { - return catchBatchDao.setQuantificationMeasurement(batch, enumeration.PMFM_ID_WEIGHT_MEASURED, getRecorderDepartmentId(), weightValue, true); - } - - public QuantificationMeasurement getWeightMeasurementQuantificationMeasurement(Batch batch) { - QuantificationMeasurement quantificationMeasurement = catchBatchDao.getQuantificationMeasurement(batch, enumeration.PMFM_ID_WEIGHT_MEASURED, getRecorderDepartmentId(), false); - return quantificationMeasurement; - } - - public SortingMeasurement getInheritedSortingMeasurement(SortingBatch sortingBatch) { - return catchBatchDao.getInheritedSortingMeasurement(sortingBatch, enumeration.PMFM_ID_SORTED_UNSORTED); - } - - //------------------------------------------------------------------------// - //-- GearUseMeasurement --// - //------------------------------------------------------------------------// - - public GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, - Integer pmfmId, - Float numericalValue, - String alphanumericalValue, - Integer qualitativevalueId) { - GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, pmfmId, true); - - if (alphanumericalValue != null) { - gearUseMeasurement.setAlphanumericalValue(alphanumericalValue); - } else if (numericalValue != null) { - gearUseMeasurement.setNumericalValue(numericalValue); - } else if (qualitativevalueId != null) { - QualitativeValue qv = load(QualitativeValueImpl.class, qualitativevalueId); - gearUseMeasurement.setQualitativeValue(qv); - } - - return gearUseMeasurement; - } - - protected GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, - Caracteristic caracteristic, Serializable value) { - GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, Integer.valueOf(caracteristic.getId()), true); - setMeasurement(gearUseMeasurement, caracteristic, value); - return gearUseMeasurement; - } - - protected GearUseMeasurement getGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, - Integer pmfmId, boolean createIfNotExists) { - GearUseMeasurement gearUseMeasurement = null; - if (gearUseFeatures.getGearUseMeasurements() != null) { - for (GearUseMeasurement vum : gearUseFeatures.getGearUseMeasurements()) { - if (pmfmId.equals(vum.getPmfm().getId())) { - gearUseMeasurement = vum; - break; - } - } - } - if (gearUseMeasurement == null) { - if (!createIfNotExists) { - return null; - } - gearUseMeasurement = GearUseMeasurement.Factory.newInstance(); - gearUseMeasurement.setGearUseFeatures(gearUseFeatures); - if (gearUseFeatures.getGearUseMeasurements() == null) { - gearUseFeatures.setGearUseMeasurements(Sets.newHashSet(gearUseMeasurement)); - } else { - gearUseFeatures.getGearUseMeasurements().add(gearUseMeasurement); - } - gearUseMeasurement.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); - gearUseMeasurement.setDepartment(scientificCruise.getRecorderDepartment()); - Pmfm pmfm = (Pmfm) getCurrentSession().load(PmfmImpl.class, pmfmId); - gearUseMeasurement.setPmfm(pmfm); - } - - return gearUseMeasurement; - } - - - //------------------------------------------------------------------------// - //-- Misc --// - //------------------------------------------------------------------------// - - public String toString(Measurement measurement) { - Pmfm pmfm = load(PmfmImpl.class, measurement.getPmfm().getId()); - String value = null; - if (measurement.getQualitativeValue() != null) { - QualitativeValue qualitativeValue = measurement.getQualitativeValue(); - String qualitativeName = load(QualitativeValueImpl.class, qualitativeValue.getId()).getName(); - - value = qualitativeName + " (" + qualitativeValue.getId() + ")"; - } else if (measurement.getNumericalValue() != null) { - value = "" + measurement.getNumericalValue(); - } else if (measurement.getAlphanumericalValue() != null) { - value = measurement.getAlphanumericalValue(); - } - return pmfm.getParameter().getName() + " (" + pmfm.getId() + ") / " + value; - } - - //------------------------------------------------------------------------// - //-- SurveyMeasurement --// - //------------------------------------------------------------------------// - - public SurveyMeasurement setSurveyMeasurement(FishingTrip fishingTrip, - Integer pmfmId, - Float numericalValue, - String alphanumericalValue, - Integer qualitativevalueId) { - SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); - - if (result == null) { - result = createSurveyMeasurement(fishingTrip, - pmfmId, - numericalValue, - alphanumericalValue, - qualitativevalueId); - } - - return result; - } - - public SurveyMeasurement removeSurveyMeasurement(FishingTrip fishingTrip, - Integer pmfmId) { - SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); - - if (result != null) { - - // measurement found, remove it - result.setFishingTrip(null); - fishingTrip.getSurveyMeasurements().remove(result); - } - - return result; - } - - protected SurveyMeasurement createSurveyMeasurement(FishingTrip fishingTrip, - Integer pmfmId, - Float numericalValue, - String alphanumericalValue, - Integer qualitativevalueId) { - - SurveyMeasurement result = SurveyMeasurement.Factory.newInstance(); - result.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); - result.setDepartment(fishingTrip.getRecorderDepartment()); - Pmfm pmfm = load(PmfmImpl.class, pmfmId); - result.setPmfm(pmfm); - result.setFishingTrip(fishingTrip); - - if (alphanumericalValue != null) { - result.setAlphanumericalValue(alphanumericalValue); - } else if (numericalValue != null) { - result.setNumericalValue(numericalValue); - } else if (qualitativevalueId != null) { - result.setQualitativeValue(load(QualitativeValueImpl.class, qualitativevalueId)); - } - - // add it to fishingTrip - if (fishingTrip.getSurveyMeasurements() == null) { - - //create new set of measurements - fishingTrip.setSurveyMeasurements(Sets.<SurveyMeasurement>newHashSet()); - } - - fishingTrip.getSurveyMeasurements().add(result); - - return result; - } - - protected SurveyMeasurement getSurveyMeasurement(FishingTrip fishingTrip, Integer pmfmId) { - SurveyMeasurement result = null; - - for (SurveyMeasurement vum : fishingTrip.getSurveyMeasurements()) { - if (pmfmId.equals(vum.getPmfm().getId())) { - result = vum; - break; - } - } - - return result; - } - - protected Integer getRecorderDepartmentId() { - // TODO BL : voir si on peut récupérer le departement (du 1er saisisseur ?) - return enumeration.DEPARTMENT_ID_UNKNOWN_RECORDER_DEPARTMENT; - } -} Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SamplePersistenceHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SamplePersistenceHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SamplePersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,177 +0,0 @@ -package fr.ifremer.tutti.persistence.service; - -/* - * #%L - * Tutti :: Persistence - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.collect.Sets; -import fr.ifremer.adagio.core.dao.data.measure.SampleMeasurement; -import fr.ifremer.adagio.core.dao.data.sample.Sample; -import fr.ifremer.adagio.core.dao.data.sample.SampleDao; -import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; -import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; -import fr.ifremer.tutti.persistence.entities.CaracteristicMap; -import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import org.hibernate.type.IntegerType; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.io.Serializable; -import java.util.Iterator; -import java.util.Set; - -/** - * Helper around {@link Sample}. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.6 - */ -@Component("samplePersistenceHelper") -public class SamplePersistenceHelper extends AbstractPersistenceService { - - @Resource(name = "referentialPersistenceService") - protected ReferentialPersistenceService referentialService; - - @Resource(name = "measurementPersistenceHelper") - protected MeasurementPersistenceHelper measurementPersistenceHelper; - - @Resource(name = "attachmentPersistenceService") - protected AttachmentPersistenceService attachmentPersistenceService; - - @Resource(name = "sampleDao") - protected SampleDao sampleDao; - - public Sample create(Sample sample) { - return sampleDao.create(sample); - } - - public void update(Sample sample) { - sampleDao.update(sample); - } - - public Sample load(Integer id) { - return sampleDao.load(id); - } - - public void deleteSample(Integer sampleId) { - - Sample sample = sampleDao.load(sampleId); - if (sample != null) { - sample.getSampleMeasurements().clear(); - sampleDao.remove(sample); - attachmentPersistenceService.deleteAllAttachment( - AttachementObjectTypeEnum.SAMPLE, - sampleId); - } - } - - public void setSampleMeasurements(Sample target, - CaracteristicMap caracteristics) { - - Set<SampleMeasurement> notChangedSampleMeasurements = Sets.newHashSet(); - if (target.getSampleMeasurements() != null) { - notChangedSampleMeasurements.addAll(target.getSampleMeasurements()); - } - - for (Caracteristic caracteristic : caracteristics.keySet()) { - SampleMeasurement vum = setSampleMeasurement( - target, - caracteristic, - caracteristics.get(caracteristic)); - notChangedSampleMeasurements.remove(vum); - } - - 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); - while (list.hasNext()) { - int colIndex = 0; - Object[] source = list.next(); - Integer pmfmId = (Integer) source[colIndex++]; - Float numericalValue = (Float) source[colIndex++]; - String alphanumericalValue = (String) source[colIndex++]; - Integer qualitativeValueId = (Integer) source[colIndex]; - - Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); - Serializable value = null; - switch (caracteristic.getCaracteristicType()) { - - case NUMBER: - value = numericalValue; - break; - case QUALITATIVE: - value = TuttiEntities.getQualitativeValue(caracteristic, - qualitativeValueId); - break; - case TEXT: - value = alphanumericalValue; - break; - } - result.put(caracteristic, value); - } - } - - protected SampleMeasurement setSampleMeasurement(Sample sample, - Caracteristic caracteristic, - Serializable value) { - - Integer pmfmId = caracteristic.getIdAsInt(); - - SampleMeasurement result = null; - if (sample.getSampleMeasurements() != null) { - for (SampleMeasurement vum : sample.getSampleMeasurements()) { - if (pmfmId.equals(vum.getPmfm().getId())) { - result = vum; - break; - } - } - } - if (result == null) { - - result = SampleMeasurement.Factory.newInstance(); - - result.setSample(sample); - if (sample.getSampleMeasurements() == null) { - sample.setSampleMeasurements(Sets.newHashSet(result)); - } else { - sample.getSampleMeasurements().add(result); - } - result.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); - result.setDepartment(sample.getRecorderDepartment()); - result.setPmfm(load(PmfmImpl.class, pmfmId)); - } - measurementPersistenceHelper.setMeasurement(result, caracteristic, value); - return result; - } - -} Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -46,8 +46,9 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequencys; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.service.batch.BatchPersistenceHelper; -import fr.ifremer.tutti.persistence.service.batch.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.BatchPersistenceHelper; +import fr.ifremer.tutti.persistence.service.util.BatchTreeHelper; +import fr.ifremer.tutti.persistence.service.util.MeasurementPersistenceHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.dao.DataIntegrityViolationException; Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SynchronizationStatusHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SynchronizationStatusHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SynchronizationStatusHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,85 +0,0 @@ -package fr.ifremer.tutti.persistence.service; - -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.sample.Sample; -import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; -import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; -import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; -import org.hibernate.type.IntegerType; -import org.hibernate.type.StringType; -import org.springframework.stereotype.Component; - -/** - * Helper around SynchronizationStatus. - * <p/> - * Created on 4/22/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 3.5 - */ -@Component("synchronizationStatusHelper") -public class SynchronizationStatusHelper extends AbstractPersistenceService { - - public void setDirty(ScientificCruise scientificCruise) { - String synchronizationStatus = getDirtyValue(); - scientificCruise.setSynchronizationStatus(synchronizationStatus); - } - - public void setDirty(FishingTrip fishingTrip) { - String synchronizationStatus = getDirtyValue(); - fishingTrip.setSynchronizationStatus(synchronizationStatus); - setDirty(fishingTrip.getScientificCruise()); - } - - public void setDirty(CatchBatch catchBatch) { - String synchronizationStatus = getDirtyValue(); - catchBatch.setSynchronizationStatus(synchronizationStatus); - setDirty(catchBatch.getFishingOperation().getFishingTrip()); - } - - public void setDirty(Sample sample) { - String synchronizationStatus = getDirtyValue(); - sample.setSynchronizationStatus(synchronizationStatus); - Batch batch = sample.getBatch(); - if (batch != null && batch instanceof CatchBatch) { - setDirty((CatchBatch) batch); - } else { - setDirty(sample.getFishingOperation().getFishingTrip()); - } - } - - public void setReadyToSynch(String cruiseId) { - - String oldStatus = getDirtyValue(); - String newStatus = SynchronizationStatus.READY_TO_SYNCHRONIZE.getValue(); - - // update scientificCruise - queryUpdate("updateScientificCruiseSynchronizationStatus", - "cruiseId", IntegerType.INSTANCE, cruiseId, - "oldStatus", StringType.INSTANCE, oldStatus, - "newStatus", StringType.INSTANCE, newStatus); - - // update fishingTrip - queryUpdate("updateFishingTripSynchronizationStatus", - "cruiseId", IntegerType.INSTANCE, cruiseId, - "oldStatus", StringType.INSTANCE, oldStatus, - "newStatus", StringType.INSTANCE, newStatus); - - // update catchBatch - queryUpdate("updateCatchBatchSynchronizationStatus", - "cruiseId", IntegerType.INSTANCE, cruiseId, - "oldStatus", StringType.INSTANCE, oldStatus, - "newStatus", StringType.INSTANCE, newStatus); - - // update sample - queryUpdate("updateSampleSynchronizationStatus", - "cruiseId", IntegerType.INSTANCE, cruiseId, - "oldStatus", StringType.INSTANCE, oldStatus, - "newStatus", StringType.INSTANCE, newStatus); - } - - protected String getDirtyValue() { - return SynchronizationStatus.DIRTY.getValue(); - } -} Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/VesselPersonFeaturesPersistenceHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/VesselPersonFeaturesPersistenceHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/VesselPersonFeaturesPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,153 +0,0 @@ -package fr.ifremer.tutti.persistence.service; - -/* - * #%L - * Tutti :: Persistence - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.adagio.core.dao.administration.user.Person; -import fr.ifremer.adagio.core.dao.administration.user.PersonImpl; -import fr.ifremer.adagio.core.dao.data.operation.FishingOperation; -import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; -import fr.ifremer.adagio.core.dao.data.vessel.feature.person.VesselPersonFeatures; -import fr.ifremer.adagio.core.dao.referential.VesselPersonRole; -import fr.ifremer.adagio.core.dao.referential.VesselPersonRoleImpl; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.stereotype.Component; - -import java.util.Date; -import java.util.Map; - -/** - * Helper around {@link VesselPersonFeatures}. - * - * @author tchemit <chemit@codelutin.com> - * @since 2.0 - */ -@Component("vesselPersonFeaturesPersistenceHelper") -public class VesselPersonFeaturesPersistenceHelper extends AbstractPersistenceService { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(VesselPersonFeaturesPersistenceHelper.class); - - public VesselPersonFeaturesPersistenceHelper() { - } - - public VesselPersonRole getScientificCruiseManagerRole() { - return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_SCIENTIFIC_CRUISE_MANAGER); - } - - public VesselPersonRole getSortRoomManagerRole() { - return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_SORT_ROOM_MANAGER); - } - - public VesselPersonRole getRecorderPersonRole() { - return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_RECORDER_PERSON); - } - - public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson, - Integer personId, - FishingTrip fishingTrip, - VesselPersonRole role, - short rankOrder) { - - VesselPersonFeatures vesselPersonFeatures = - vesselPersonFeaturesPerPerson.get(personId); - if (vesselPersonFeatures == null) { - - PersonImpl person = load(PersonImpl.class, personId); - - if (log.isDebugEnabled()) { - log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname()); - } - - vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance(); - vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures); - vesselPersonFeatures.setPerson(person); - - vesselPersonFeatures.setFishingTrip(fishingTrip); - vesselPersonFeatures.setStartDate(fishingTrip.getDepartureDateTime()); - vesselPersonFeatures.setEndDate(fishingTrip.getReturnDateTime()); - vesselPersonFeatures.setVessel(fishingTrip.getVessel()); - vesselPersonFeatures.setProgram(fishingTrip.getProgram()); - - vesselPersonFeatures.setCreationDate(fishingTrip.getCreationDate()); - vesselPersonFeatures.setQualityFlag(fishingTrip.getQualityFlag()); - vesselPersonFeatures.setRankOrder(rankOrder); - } - - addRole(role, vesselPersonFeatures); - } - - public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson, - Integer personId, - FishingOperation fishingOperation, - VesselPersonRole role, - short rankOrder) { - - VesselPersonFeatures vesselPersonFeatures = - vesselPersonFeaturesPerPerson.get(personId); - if (vesselPersonFeatures == null) { - - PersonImpl person = load(PersonImpl.class, personId); - if (log.isDebugEnabled()) { - log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname()); - } - - vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance(); - vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures); - vesselPersonFeatures.setOperation(fishingOperation); - vesselPersonFeatures.setFishingTrip(fishingOperation.getFishingTrip()); - vesselPersonFeatures.setPerson(person); - vesselPersonFeatures.setStartDate(fishingOperation.getStartDateTime()); - vesselPersonFeatures.setEndDate(fishingOperation.getEndDateTime()); - vesselPersonFeatures.setVessel(fishingOperation.getVessel()); - vesselPersonFeatures.setProgram(fishingOperation.getFishingTrip().getProgram()); - - vesselPersonFeatures.setCreationDate(new Date()); - vesselPersonFeatures.setQualityFlag(fishingOperation.getQualityFlag()); - vesselPersonFeatures.setRankOrder(rankOrder); - } - - addRole(role, vesselPersonFeatures); - } - - protected void addRole(VesselPersonRole role, - VesselPersonFeatures vesselPersonFeatures) { - Person person = vesselPersonFeatures.getPerson(); - if (vesselPersonFeatures.getVesselPersonRoles().contains(role)) { - if (log.isWarnEnabled()) { - log.warn("vessel person feature for person: " + person.getId() + " with role: " + role.getName() + " already exist, do not add it twice."); - } - } else { - - // add this new role - if (log.isInfoEnabled()) { - log.info("Add vessel person feature for person: " + person.getId() + " with role: " + role.getName()); - } - vesselPersonFeatures.getVesselPersonRoles().add(role); - - } - } -} \ No newline at end of file Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,746 +0,0 @@ -package fr.ifremer.tutti.persistence.service.batch; - -/* - * #%L - * Tutti :: Persistence - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Joiner; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -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.CatchBatchExtendDao; -import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; -import fr.ifremer.adagio.core.dao.data.batch.SortingBatchDao; -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationError; -import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; -import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; -import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; -import fr.ifremer.tutti.persistence.InvalidBatchModelException; -import fr.ifremer.tutti.persistence.entities.TuttiEntity; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; -import fr.ifremer.tutti.persistence.entities.data.BatchContainer; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; -import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; -import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; -import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; -import fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceService; -import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.dao.DataRetrievalFailureException; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.io.Serializable; -import java.text.MessageFormat; -import java.util.Collection; -import java.util.List; - -import static org.nuiton.i18n.I18n.t; - -/** - * Helper around batches. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.2 - */ -@Component("batchPersistenceHelper") -public class BatchPersistenceHelper extends AbstractPersistenceService { - - /** Logger. */ - private static final Log log = - LogFactory.getLog(BatchPersistenceHelper.class); - - @Resource(name = "referentialPersistenceService") - protected ReferentialPersistenceService referentialService; - - @Resource(name = "attachmentPersistenceService") - protected AttachmentPersistenceService attachmentPersistenceService; - - @Resource(name = "individualObservationBatchPersistenceService") - protected IndividualObservationBatchPersistenceService individualObservationBatchPersistenceService; - - @Resource(name = "catchBatchDao") - protected CatchBatchExtendDao catchBatchDao; - - @Resource(name = "sortingBatchDao") - protected SortingBatchDao sortingBatchDao; - - @Resource(name = "scientificCruiseCatchBatchValidator") - protected TuttiCatchBatchValidator catchBatchValidator; - - @Resource(name = "batchTreeHelper") - protected BatchTreeHelper batchTreeHelper; - - @Override - public void init() { - super.init(); - catchBatchDao.registerCatchBatchValidator(catchBatchValidator); - } - - @Override - public void close() { - catchBatchDao.unregisterCatchBatchValidator(catchBatchValidator); - super.close(); - } - - public fr.ifremer.tutti.persistence.entities.data.CatchBatch createCatchBatch(fr.ifremer.tutti.persistence.entities.data.CatchBatch bean, CatchBatch catchBatch) { - catchBatch = catchBatchDao.create(catchBatch); - bean.setId(catchBatch.getId()); - return bean; - } - - public void validateSpecies(SampleCategoryModel sampleCategoryModel, - BatchContainer<SpeciesBatch> species) throws InvalidBatchModelException { - List<CatchBatchValidationError> errors = catchBatchValidator.validateSpecies(sampleCategoryModel, species); - List<String> errorsStr = Lists.newArrayList(); - for (CatchBatchValidationError error : errors) { - if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { - errorsStr.add(error.getMessage()); - } - } - if (!errorsStr.isEmpty()) { - String join = Joiner.on("<br/>").join(errorsStr); - throw new InvalidBatchModelException(t("tutti.persistence.batch.validation.bad.sample.categories", join)); - } - } - - public void validateBenthos(SampleCategoryModel sampleCategoryModel, - BatchContainer<BenthosBatch> benthos) throws InvalidBatchModelException { - List<CatchBatchValidationError> errors = catchBatchValidator.validateBenthos(sampleCategoryModel, benthos); - - if (CollectionUtils.isNotEmpty(errors)) { - List<String> errorsStr = Lists.newArrayList(); - for (CatchBatchValidationError error : errors) { - if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { - errorsStr.add(error.getMessage()); - } - } - if (!errorsStr.isEmpty()) { - String join = Joiner.on("<br/>").join(errorsStr); - throw new InvalidBatchModelException(t("tutti.persistence.batch.validation.bad.sample.categories", join)); - } - } - } - - public void deleteCatchBatch(String fishingOperationId, Integer catchBatchId) { - - // delete individual observation batchs - individualObservationBatchPersistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); - - getCurrentSession().flush(); - - // get all catch batch children ids (to delete attachments) - List<Integer> ids = catchBatchDao.getAllChildrenIds(catchBatchId); - - catchBatchDao.remove(catchBatchId); - - getCurrentSession().flush(); - - attachmentPersistenceService.deleteAllAttachment( - AttachementObjectTypeEnum.BATCH, - ids.toArray(new Integer[ids.size()])); - } - - public <D extends TuttiEntity> D createSortingBatch(D bean, CatchBatch catchBatch, SortingBatch batch) { - batch = catchBatchDao.createSortingBatch(batch, catchBatch); - bean.setId(batch.getId()); - return bean; - } - - public void removeWithChildren(Integer batchId) { - List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); - ids.add(batchId); - catchBatchDao.removeWithChildren(batchId); - - attachmentPersistenceService.deleteAllAttachment( - AttachementObjectTypeEnum.BATCH, - ids.toArray(new Integer[ids.size()])); - } - - public void removeWithChildren(Integer batchId, CatchBatch parentCatchBatch) { - List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); - ids.add(batchId); - catchBatchDao.removeWithChildren(batchId, parentCatchBatch); - - attachmentPersistenceService.deleteAllAttachment( - AttachementObjectTypeEnum.BATCH, - ids.toArray(new Integer[ids.size()])); - } - - public void updateSortingBatch(List<SortingBatch> sortingBatchs, CatchBatch parentCatchBatch) { - catchBatchDao.updateSortingBatch(sortingBatchs, parentCatchBatch); - } - - public SortingBatch loadSortingBatch(Integer sortingBatchId, CatchBatch parentCatchBatch) { - return catchBatchDao.loadSortingBatch(sortingBatchId, parentCatchBatch); - } - - public void update(CatchBatch catchBatch) { - catchBatchDao.update(catchBatch); - } - - public void setSortingBatchReferenceTaxon(String batchId, Integer referenceTaxonId) { - catchBatchDao.setSortingBatchReferenceTaxon(batchId, referenceTaxonId); - } - - public SortingBatch getSortingBatchById(CatchBatch catchBatch, Integer sortingBatchId) { - return catchBatchDao.getSortingBatchById(catchBatch, sortingBatchId); - } - - public void updateSortingBatch(SortingBatch sortingBatch, CatchBatch parentCatchBatch) { - catchBatchDao.updateSortingBatch(sortingBatch, parentCatchBatch); - } - - public List<SortingBatch> getFrequencyChilds(SortingBatch sortingBatch) { - List<SortingBatch> result = Lists.newArrayList(); - - SampleCategoryModel sampleCategoryModel = getSampleCategoryModel(); - - for (Batch batch : sortingBatch.getChildBatchs()) { - SortingBatch child = (SortingBatch) batch; - if (isFrequencyBatch(sampleCategoryModel, child)) { - result.add(child); - } - } - return result; - } - - public List<SortingBatch> getFrequencies(String batchId) { - Preconditions.checkNotNull(batchId); - Integer sortingBatchId = Integer.valueOf(batchId); - CatchBatch catchBatch = getRootCatchBatchByBatchId(sortingBatchId); - SortingBatch sortingBatch = catchBatchDao.getSortingBatchById( - catchBatch, sortingBatchId); - - List<SortingBatch> frequencyChilds = getFrequencyChilds( - sortingBatch); - return frequencyChilds; - } - - public fr.ifremer.adagio.core.dao.data.batch.CatchBatch getRootCatchBatchByFishingOperationId(String fishingOperationId, boolean validate) { - Preconditions.checkNotNull(fishingOperationId); - - Integer catchBatchId = catchBatchDao.getIdByFishingOperationId(Integer.valueOf(fishingOperationId)); - Preconditions.checkNotNull(catchBatchId); - - // whenever want to repair anything from Tutti - fr.ifremer.adagio.core.dao.data.batch.CatchBatch result; - - if (validate) { - - try { - result = catchBatchDao.loadFullTree(catchBatchId, true, false); - } catch (CatchBatchValidationException e) { - throw new InvalidBatchModelException( - "L'arbre d'échantillonage n'est pas compatible avec celui de Tutti.", e); - } - } else { - result = catchBatchDao.loadFullTree(catchBatchId); - } - Preconditions.checkNotNull(result); - return result; - } - - public boolean isCatchBatchExistsForFishingOperation(Integer fishingOperationId) { - return catchBatchDao.isCatchBatchExistsForFishingOperation(fishingOperationId); - } - - public Integer getCatchBatchIdByFishingOperationId(Integer fishingOperationId) throws DataRetrievalFailureException { - return catchBatchDao.getIdByFishingOperationId(fishingOperationId); - } - - public fr.ifremer.adagio.core.dao.data.batch.CatchBatch getRootCatchBatchByBatchId(Integer batchId) { - Preconditions.checkNotNull(batchId); - - Integer catchBatchId = catchBatchDao.getIdBySortingBatchId(batchId); - Preconditions.checkNotNull(catchBatchId); - - // whenever want to repair anything from Tutti - fr.ifremer.adagio.core.dao.data.batch.CatchBatch result; - - result = catchBatchDao.loadFullTree(catchBatchId); - - Preconditions.checkNotNull(result); - return result; - } - - public void setSpeciesBatchParents(Integer sampleCategoryId, - Serializable sampleCategoryValue, - SortingBatch target, - String parentBatchIdStr, - CatchBatch catchBatch) { - - Preconditions.checkNotNull(target); - Preconditions.checkNotNull(catchBatch); - - target.setRootBatch(catchBatch); - - SortingBatch parentBatch; - if (parentBatchIdStr != null) { - - // Load existing parent and root - parentBatch = catchBatchDao.getSortingBatchById(catchBatch, Integer.valueOf(parentBatchIdStr)); - } else { - - // Or retrieve parent batch, from pmfm id - // Retrieve category type - if (!sampleCategoryId.equals(enumeration.PMFM_ID_SORTED_UNSORTED)) { - throw new DataIntegrityViolationException(MessageFormat.format( - "A species or benthos batch with no parent should have a sampleCategoryType {0} (PMFM.ID={1})", - sampleCategoryId, - enumeration.PMFM_ID_SORTED_UNSORTED)); - } - - Integer qualitativeValueId = convertSampleCategoryValueIntoQualitativeId(sampleCategoryValue); - - if (enumeration.QUALITATIVE_VRAC_ID.equals(qualitativeValueId)) { - - // -- Vrac > Species > Alive itemized - parentBatch = batchTreeHelper.getSpeciesVracAliveItemizedRootBatch(catchBatch); - - if (parentBatch == null) { - - // -- Vrac - SortingBatch vracBatch = batchTreeHelper.getVracBatch(catchBatch); - - if (vracBatch == null) { - vracBatch = batchTreeHelper.getOrCreateVracBatch(catchBatch, null, null); - } - - // -- Vrac > Species - SortingBatch vracSpeciesBatch = batchTreeHelper.getSpeciesVracRootBatch(vracBatch); - - if (vracSpeciesBatch == null) { - vracSpeciesBatch = batchTreeHelper.getOrCreateSpeciesVracRootBatch(catchBatch, vracBatch, null); - } - - // -- Vrac > Species > Alive itemized - parentBatch = batchTreeHelper.getOrCreateSpeciesVracAliveItemizedRootBatch(catchBatch, vracSpeciesBatch); - - } - } else if (enumeration.QUALITATIVE_HORS_VRAC_ID.equals(qualitativeValueId)) { - - // -- Hors Vrac > Species - parentBatch = batchTreeHelper.getSpeciesHorsVracRootBatch(catchBatch); - - if (parentBatch == null) { - - // -- Hors Vrac - SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); - - // -- Hors Vrac > Species - parentBatch = batchTreeHelper.getOrCreateSpeciesHorsVracRootBatch(catchBatch, horsVracBatch); - } - } else { - - // not possible - throw new DataIntegrityViolationException("Should have Vrac / Hor Vrac qualitative value, but had: " + qualitativeValueId); - } - - } - - Preconditions.checkNotNull(parentBatch); - target.setParentBatch(parentBatch); - } - - public void setBenthosBatchParents(Integer sampleCategoryType, - Serializable sampleCategoryValue, - SortingBatch target, - String parentBatchIdStr, - CatchBatch catchBatch) { - - Preconditions.checkNotNull(target); - Preconditions.checkNotNull(catchBatch); - - target.setRootBatch(catchBatch); - - SortingBatch parentBatch; - if (parentBatchIdStr != null) { - - // Load existing parent and root - parentBatch = catchBatchDao.getSortingBatchById(catchBatch, Integer.valueOf(parentBatchIdStr)); - } else { - - // Or retrieve parent batch, from pmfm id - // Retrieve category type - if (!sampleCategoryType.equals(enumeration.PMFM_ID_SORTED_UNSORTED)) { - throw new DataIntegrityViolationException(MessageFormat.format( - "A species or benthos batch with no parent should have a sampleCategoryType {0} (PMFM.ID={1})", - sampleCategoryType, - enumeration.PMFM_ID_SORTED_UNSORTED)); - } - - Integer qualitativeValueId = convertSampleCategoryValueIntoQualitativeId(sampleCategoryValue); - - if (enumeration.QUALITATIVE_VRAC_ID.equals(qualitativeValueId)) { - - // -- Vrac > Benthos > Alive Itemized - parentBatch = batchTreeHelper.getBenthosVracAliveItemizedRootBatch(catchBatch); - - if (parentBatch == null) { - - // -- Vrac - SortingBatch vracBatch = batchTreeHelper.getVracBatch(catchBatch); - - if (vracBatch == null) { - vracBatch = batchTreeHelper.getOrCreateVracBatch(catchBatch, null, null); - } - - // -- Vrac > Benthos - SortingBatch vracBenthosBatch = batchTreeHelper.getBenthosVracRootBatch(vracBatch); - - if (vracBenthosBatch == null) { - vracBenthosBatch = batchTreeHelper.getOrCreateBenthosVracRootBatch(catchBatch, vracBatch, null); - } - - // -- Vrac > Benthos > Alive itemized - parentBatch = batchTreeHelper.getOrCreateBenthosVracAliveItemizedRootBatch(catchBatch, vracBenthosBatch); - - } - } else if (enumeration.QUALITATIVE_HORS_VRAC_ID.equals(qualitativeValueId)) { - - // -- Hors Vrac > Benthos - parentBatch = batchTreeHelper.getBenthosHorsVracRootBatch(catchBatch); - - if (parentBatch == null) { - - // -- Hors Vrac - SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); - - // -- Hors Vrac > Benthos - parentBatch = batchTreeHelper.getOrCreateBenthosHorsVracRootBatch(catchBatch, horsVracBatch); - } - } else { - - // not possible - throw new DataIntegrityViolationException("Should have Vrac / Hors Vrac qualitative value, but had: " + qualitativeValueId); - } - } - - Preconditions.checkNotNull(parentBatch); - target.setParentBatch(parentBatch); - } - - public void setMarineLitterBatchParents(SortingBatch target, CatchBatch catchBatch) { - - Preconditions.checkNotNull(target); - - // -- Hors Vrac > Marine Litter - SortingBatch parentBatch = batchTreeHelper.getMarineLitterRootBatch(catchBatch); - - if (parentBatch == null) { - - // -- Hors Vrac - SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); - - // -- Hors Vrac > Marine Litter - parentBatch = batchTreeHelper.getOrCreateMarineLitterRootBatch(catchBatch, horsVracBatch, null); - } - - target.setParentBatch(parentBatch); - target.setRootBatch(catchBatch); - } - - public Integer convertSampleCategoryValueIntoQualitativeId(Serializable value) { - if (value == null) { - return null; - } - Integer qualitativeValueId = null; - if (value instanceof CaracteristicQualitativeValue) { - CaracteristicQualitativeValue cqValue = (CaracteristicQualitativeValue) value; - qualitativeValueId = cqValue.getIdAsInt(); - } else if (value instanceof String) { - qualitativeValueId = Integer.valueOf((String) value); - } - return qualitativeValueId; - } - - public void deleteSpeciesSubBatch(String id) { - Preconditions.checkNotNull(id); - - Integer speciesBatchId = Integer.valueOf(id); - - CatchBatch catchBatch = getRootCatchBatchByBatchId(speciesBatchId); - SortingBatch sortingBatch = getSortingBatchById(catchBatch, speciesBatchId); - - // get his children - Collection<Batch> childBatchs = sortingBatch.getChildBatchs(); - - if (CollectionUtils.isNotEmpty(childBatchs)) { - - for (Batch childBatch : childBatchs) { - - // delete this child and all his children - Integer childBatchId = childBatch.getId(); - - if (log.isDebugEnabled()) { - log.debug("Delete child [" + childBatchId + "] of species batch: " + id); - } - removeWithChildren(childBatchId); - } - } - } - - - public <S extends SpeciesAbleBatch> void setSampleCategoryQualitative(S target, - Integer pmfmId, - Float numericalvalue, - String alphanumericalValue, - Integer qualitativeValueId) { - // skip if null or corresponding to the SORTING_TYPE PMFM (Espèce, Benthos, Plancton, etc.) - if (pmfmId == null || pmfmId.equals(enumeration.PMFM_ID_SORTING_TYPE)) { - return; - } - SampleCategoryModel sampleCategoryModel = getSampleCategoryModel(); - - boolean isSamplingCategory = sampleCategoryModel.containsCategoryId(pmfmId); - Preconditions.checkNotNull(isSamplingCategory, "Unable to find corresponding SampleCategoryEnum for PMFM.ID : " + pmfmId); - - target.setSampleCategoryId(pmfmId); - Serializable categoryValue = getSampleCategoryQualitative( - pmfmId, - numericalvalue, - alphanumericalValue, - qualitativeValueId); - target.setSampleCategoryValue(categoryValue); - } - - public <F extends SpeciesAbleBatchFrequency & TuttiEntity> void entityToBatchFrequency(SortingBatch source, - F target) { - - target.setId(source.getId()); - - // Rank order - target.setRankOrder(Integer.valueOf(source.getRankOrder())); - - target.setNumber(source.getIndividualCount()); - target.setWeight(source.getWeight()); - - Preconditions.checkState(source.getSortingMeasurements().size() == 1, "SortingBatch [" + source.getId() + "] need exactly one sortingMeasurement (to store the length step category), but had " + source.getSortingMeasurements().size()); - SortingMeasurement sm = source.getSortingMeasurements().iterator().next(); - Preconditions.checkNotNull(sm.getPmfm(), "SortingMeasurement [" + sm.getId() + "] can not have a null pmfm"); - Preconditions.checkNotNull(sm.getPmfm().getId(), "SortingMeasurement [" + sm.getId() + "] can not have a pmfm with null id"); - - // Length step category - Caracteristic lengthStepCaracteristic = referentialService.getCaracteristic(sm.getPmfm().getId()); - target.setLengthStepCaracteristic(lengthStepCaracteristic); - - // Length - target.setLengthStep(sm.getNumericalValue()); - } - - public Serializable getSampleCategoryQualitative(Integer pmfmId, - Float numericalvalue, - String alphanumericalValue, - Integer qualitativeValueId) { - - if (numericalvalue != null) { - return numericalvalue; - } - if (alphanumericalValue != null) { - return alphanumericalValue; - } - - Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); - if (caracteristic == null || caracteristic.getCaracteristicType() != CaracteristicType.QUALITATIVE) { - return null; - } - CaracteristicQualitativeValue value = null; - for (CaracteristicQualitativeValue qv : caracteristic.getQualitativeValue()) { - if (qualitativeValueId.equals(qv.getIdAsInt())) { - value = qv; - break; - } - } - - return value; - } - - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// - - protected Integer getRecorderDepartmentId() { - // TODO BL : voir si on peut récupérer le departement (du 1er saisisseur ?) - return enumeration.DEPARTMENT_ID_UNKNOWN_RECORDER_DEPARTMENT; - } - - /** - * Check if the given {@code sortingBatch} is a frequency one. - * <p/> - * We test that: - * <ul> - * <li>batch has exactly one measurement</li> - * <li>the measurement pmfm is not a sample category</li> - * </ul> - * - * @param sampleCategoryModel model of authorized sample categories - * @param sortingBatch batch to check - * @return {@code true} if given batch is a frequency batch, - * {@code false} otherwise. - */ - public boolean isFrequencyBatch(SampleCategoryModel sampleCategoryModel, - SortingBatch sortingBatch) { - boolean result = false; - if (sortingBatch.getSortingMeasurements().size() == 1) { - SortingMeasurement sm - = sortingBatch.getSortingMeasurements().iterator().next(); - Pmfm pmfm = sm.getPmfm(); - - result = sortingBatch.getIndividualCount() != null && - !sampleCategoryModel.containsCategoryId(pmfm.getId()); - } - return result; - } - -// protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch target, -// Batch batch, -// Integer pmfmId, -// Integer pmfmValue, -// Float totalWeight, -// short rankOrder) { -// return getOrCreate( -// target, -// batch, -// pmfmId, -// pmfmValue, -// totalWeight, -// null, -// rankOrder -// ); -// } - -// protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, -// Batch parentBatch, -// Integer sortingPmfmId, -// Integer sortingQualitativeValueId, -// Float weight, -// Float weightBeforeSampling, -// short rankOrder) { -// SortingBatch result = batchTreeHelper.get( -// parentBatch, -// sortingPmfmId, -// sortingQualitativeValueId); -// -// if (result == null) { -// -// result = SortingBatch.Factory.newInstance(); -// if (parentBatch.getChildBatchs() == null) { -// parentBatch.setChildBatchs(Sets.<Batch>newHashSet()); -// } -// parentBatch.getChildBatchs().add(result); -// -// Collection<SortingMeasurement> sortingMeasurements = result.getSortingMeasurements(); -// -// // Create lists to store all updates, then remove not updated items -// Set<SortingMeasurement> notChangedSortingMeasurements = Sets.newHashSet(); -// if (sortingMeasurements != null) { -// notChangedSortingMeasurements.addAll(sortingMeasurements); -// } -// -// // Some mandatory properties : -// QualityFlagImpl qualityFlag = load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED); -// result.setQualityFlag(qualityFlag); -// result.setRootBatch(rootBatch); -// result.setParentBatch(parentBatch); -// result.setExhaustiveInventory(true); -// -// // No taxon or taxon group -// result.setReferenceTaxon(null); -// result.setTaxonGroup(null); -// -// result.setRankOrder(rankOrder); -// -// // Sorting measurement -// if (sortingPmfmId != null && sortingQualitativeValueId != null) { -// SortingMeasurement sm = setSortingMeasurement( -// result, -// sortingPmfmId, -// sortingQualitativeValueId); -// notChangedSortingMeasurements.remove(sm); -// } -// // Removed not changed sorting measurements -// if (sortingMeasurements != null) { -// sortingMeasurements.removeAll(notChangedSortingMeasurements); -// } -// -// catchBatchDao.createSortingBatch(result, rootBatch); -// } -// -// Collection<QuantificationMeasurement> quantificationMeasurements = result.getQuantificationMeasurements(); -// Set<QuantificationMeasurement> notChangedQuantificationMeasurements = Sets.newHashSet(); -// if (quantificationMeasurements != null) { -// notChangedQuantificationMeasurements.addAll(quantificationMeasurements); -// } -// -// // Sampling Ratio -// if (weightBeforeSampling == null || weight == null) { -// result.setSamplingRatio(null); -// result.setSamplingRatioText(null); -// } else { -// String samplingRatioText = weight + "/" + weightBeforeSampling; -// samplingRatioText = samplingRatioText.replaceAll(",", "."); -// result.setSamplingRatioText(samplingRatioText); -// result.setSamplingRatio(weight / weightBeforeSampling); -// } -// -// // Weight -// if (weightBeforeSampling != null || weight != null) { -// Float batchReferenceWeight = weight; -// if (batchReferenceWeight == null) { -// batchReferenceWeight = weightBeforeSampling; -// } -// QuantificationMeasurement quantificationMeasurement = setWeightMeasurementQuantificationMeasurement( -// result, -// batchReferenceWeight); -// notChangedQuantificationMeasurements.remove(quantificationMeasurement); -// } -// // Removed not changed quantification measurements -// if (quantificationMeasurements != null) { -// quantificationMeasurements.removeAll(notChangedQuantificationMeasurements); -// } -// -// return result; -// } - -// protected SortingBatch get(Batch parentBatch, -// Integer sortingPmfmId, -// Integer sortingQualitativeValueId) { -// SortingBatch result = getSortingBatch( -// parentBatch, -// null, -// sortingPmfmId, -// sortingQualitativeValueId); -// return result; -// } -} Deleted: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchTreeHelper.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchTreeHelper.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchTreeHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -1,687 +0,0 @@ -package fr.ifremer.tutti.persistence.service.batch; - -import com.google.common.base.Joiner; -import com.google.common.collect.Sets; -import fr.ifremer.adagio.core.dao.data.batch.Batch; -import fr.ifremer.adagio.core.dao.data.batch.Batchs; -import fr.ifremer.adagio.core.dao.data.batch.CatchBatch; -import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; -import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; -import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement; -import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; -import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; -import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon; -import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; -import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; -import fr.ifremer.tutti.persistence.service.MeasurementPersistenceHelper; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.SystemUtils; -import org.apache.commons.lang3.builder.ToStringBuilder; -import org.apache.commons.lang3.builder.ToStringStyle; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.stereotype.Component; - -import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Set; - -/** - * Helper to build or navigauet into the batch tree. - * <p/> - * Created on 4/20/14. - * - * @author Tony Chemit <chemit@codelutin.com> - * @since 3.5 - */ -@Component("batchTreeHelper") -public class BatchTreeHelper extends AbstractPersistenceService { - - /** Logger. */ - private static final Log log = LogFactory.getLog(BatchTreeHelper.class); - - @Resource(name = "measurementPersistenceHelper") - protected MeasurementPersistenceHelper measurementPersistenceHelper; - - @Resource(name = "catchBatchDao") - protected CatchBatchExtendDao catchBatchDao; - - protected Comparator<Batch> batchComparator = Batchs.newRankOrderComparator(); - - //------------------------------------------------------------------------// - //-- Get CatchBatch navigation methods --// - //------------------------------------------------------------------------// - - public SortingBatch getSpeciesVracAliveItemizedRootBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Vrac > Species > Alive Itemized", - enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_VRAC_ID, - enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, - enumeration.PMFM_ID_SORTING_TYPE_2, enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED - ); - } - - public SortingBatch getBenthosVracAliveItemizedRootBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Vrac > Benthos > Alive itemized", - enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_VRAC_ID, - enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, - enumeration.PMFM_ID_SORTING_TYPE_2, enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED - ); - } - - public SortingBatch getSpeciesHorsVracRootBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > Species", - enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_HORS_VRAC_ID, - enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES - ); - } - - public SortingBatch getBenthosHorsVracRootBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > Benthos", - enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_HORS_VRAC_ID, - enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS - ); - } - - public SortingBatch getMarineLitterRootBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > Marine Litter", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_HORS_VRAC_ID, - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER - ); - } - - public SortingBatch getVracBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Vrac", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_VRAC_ID - ); - } - - public SortingBatch getHorsVracBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_HORS_VRAC_ID - ); - } - - public SortingBatch getRejectedBatch(CatchBatch batch) { - return getSortingBatch( - batch, - "Unsorted", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_UNSORTED_ID - ); - } - - //------------------------------------------------------------------------// - //-- Get SortingBatch navigation methods --// - //------------------------------------------------------------------------// - - public SortingBatch getSpeciesVracRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Species", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES - ); - } - - public SortingBatch getBenthosVracRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Benthos", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS - ); - } - - public SortingBatch getSpeciesVracAliveNotItemizedRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Species > Alive not itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED - ); - } - - public SortingBatch getBenthosVracAliveNotItemizedRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Benthos > Alive not itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED - ); - } - - public SortingBatch getSpeciesVracInertRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Species > Inert (not alive)", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT - ); - } - - public SortingBatch getBenthosVracInertRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Benthos > Inert (not alive)", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT - ); - } - - public SortingBatch getSpeciesVracAliveItemizedRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Species > Alive itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED - ); - } - - public SortingBatch getBenthosVracAliveItemizedRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Vrac > Benthos > Alive itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED - ); - } - - public SortingBatch getSpeciesHorsVracRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > Species", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES - ); - } - - public SortingBatch getBenthosHorsVracRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > Benthos", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS - ); - } - - public SortingBatch getMarineLitterRootBatch(SortingBatch batch) { - return getSortingBatch( - batch, - "Hors Vrac > MarineLitter", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER - ); - } - - //------------------------------------------------------------------------// - //-- getOrCreate methods --// - //------------------------------------------------------------------------// - - public SortingBatch getOrCreateVracBatch(CatchBatch batch, - Float weight, - Float weightBeforeSampling) { - return getOrCreate( - batch, - batch, - "Vrac", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_VRAC_ID, - weight, - weightBeforeSampling, - (short) 1 - ); - } - - public SortingBatch getOrCreateSpeciesVracRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Species", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, - totalWeight, - (short) 1 - ); - } - - public SortingBatch getOrCreateSpeciesVracAliveNotItemizedRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Species > Alive Not Itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED, - totalWeight, - (short) 1 - ); - } - - public SortingBatch getOrCreateSpeciesVracInertRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Species > Inert", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT, - totalWeight, - (short) 2 - ); - } - - public SortingBatch getOrCreateSpeciesVracAliveItemizedRootBatch(CatchBatch target, - SortingBatch batch) { - return getOrCreate( - target, - batch, - "Vrac > Benthos > Alive Itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED, - null, - (short) 3 - ); - } - - public SortingBatch getOrCreateBenthosVracRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Benthos", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, - totalWeight, - (short) 2 - ); - } - - public SortingBatch getOrCreateBenthosVracAliveNotItemizedRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Benthos > Alive Not itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED, - totalWeight, - (short) 1 - ); - } - - public SortingBatch getOrCreateBenthosVracInertRootBatch(fr.ifremer.adagio.core.dao.data.batch.CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Vrac > Benthos > Inert", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT, - totalWeight, - (short) 2 - ); - } - - public SortingBatch getOrCreateBenthosVracAliveItemizedRootBatch(CatchBatch target, - SortingBatch batch) { - return getOrCreate( - target, - batch, - "Vrac > Benthos > Alive Itemized", - enumeration.PMFM_ID_SORTING_TYPE_2, - enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED, - null, - (short) 3 - ); - } - - public SortingBatch getOrCreateHorsVracBatch(CatchBatch batch) { - return getOrCreate( - batch, - batch, - "Hors Vrac", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_HORS_VRAC_ID, - null, - (short) 2 - ); - } - - public SortingBatch getOrCreateSpeciesHorsVracRootBatch(CatchBatch target, - SortingBatch batch) { - return getOrCreate( - target, - batch, - "Hors Vrac > Species", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, - null, - (short) 1 - ); - } - - public SortingBatch getOrCreateBenthosHorsVracRootBatch(CatchBatch target, - SortingBatch batch) { - return getOrCreate( - target, - batch, - "Hors Vrac > Benthos", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, - null, - (short) 2 - ); - } - - public SortingBatch getOrCreateMarineLitterRootBatch(CatchBatch target, - SortingBatch batch, - Float totalWeight) { - return getOrCreate( - target, - batch, - "Hors Vrac > Marine Litter", - enumeration.PMFM_ID_SORTING_TYPE, - enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER, - totalWeight, - (short) 3 - ); - } - - public SortingBatch getOrCreateRejectedBatch(CatchBatch batch, - Float weight) { - - return getOrCreate( - batch, - batch, - "Unsorted", - enumeration.PMFM_ID_SORTED_UNSORTED, - enumeration.QUALITATIVE_UNSORTED_ID, - weight, - (short) 3 - ); - } - - //------------------------------------------------------------------------// - //-- Internal methods --// - //------------------------------------------------------------------------// - - protected SortingBatch get(Batch parentBatch, - Integer sortingPmfmId, - Integer sortingQualitativeValueId) { - SortingBatch result = getSortingBatch( - parentBatch, - null, - sortingPmfmId, - sortingQualitativeValueId); - return result; - } - - protected SortingBatch getSortingBatch(Batch source, - String debugMessage, - Integer... ids) { - - return getSortingBatch(source.getChildBatchs(), debugMessage, ids); - } - - protected SortingBatch getSortingBatch(Collection<Batch> childs, - String debugMessage, - Integer... ids) { - - int nbParams = ids.length / 2; - - Object[] params = new Object[nbParams * 3]; - for (int i = 0; i < nbParams; i++) { - Integer sortingPmfmId = ids[2 * i]; - Integer sortingQualitativeValueId = ids[2 * i + 1]; - params[3 * i] = CatchBatchExtendDao.PMFM_ID; - params[3 * i + 1] = sortingPmfmId; - params[3 * i + 2] = sortingQualitativeValueId; - } - SortingBatch result = catchBatchDao.getSortingBatch(childs, params); - if (result != null && debugMessage != null && log.isDebugEnabled()) { - log.debug("Loaded " + debugMessage + ": " + result.getId()); - } - return result; - } - - protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, - Batch batch, - String debugMessage, - Integer sortingPmfmId, - Integer sortingQualitativeValueId, - Float totalWeight, - short rankOrder) { - return getOrCreate( - rootBatch, - batch, - debugMessage, - sortingPmfmId, - sortingQualitativeValueId, - totalWeight, - null, - rankOrder - ); - } - - protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, - Batch batch, - String debugMessage, - Integer sortingPmfmId, - Integer sortingQualitativeValueId, - Float weight, - Float weightBeforeSampling, - short rankOrder) { - SortingBatch result = getSortingBatch( - batch, - debugMessage, - sortingPmfmId, - sortingQualitativeValueId); - - if (result == null) { - - result = SortingBatch.Factory.newInstance(); - if (batch.getChildBatchs() == null) { - batch.setChildBatchs(Sets.<Batch>newHashSet()); - } - batch.getChildBatchs().add(result); - - Collection<SortingMeasurement> sortingMeasurements = result.getSortingMeasurements(); - - // Create lists to store all updates, then remove not updated items - Set<SortingMeasurement> notChangedSortingMeasurements = Sets.newHashSet(); - if (sortingMeasurements != null) { - notChangedSortingMeasurements.addAll(sortingMeasurements); - } - - // Some mandatory properties : - QualityFlagImpl qualityFlag = load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED); - result.setQualityFlag(qualityFlag); - result.setRootBatch(rootBatch); - result.setParentBatch(batch); - result.setExhaustiveInventory(true); - - // No taxon or taxon group - result.setReferenceTaxon(null); - result.setTaxonGroup(null); - - result.setRankOrder(rankOrder); - - // Sorting measurement - if (sortingPmfmId != null && sortingQualitativeValueId != null) { - SortingMeasurement sm = measurementPersistenceHelper.setSortingMeasurement( - result, - sortingPmfmId, - sortingQualitativeValueId); - notChangedSortingMeasurements.remove(sm); - } - // Removed not changed sorting measurements - if (sortingMeasurements != null) { - sortingMeasurements.removeAll(notChangedSortingMeasurements); - } - - catchBatchDao.createSortingBatch(result, rootBatch); - } - - Collection<QuantificationMeasurement> quantificationMeasurements = result.getQuantificationMeasurements(); - Set<QuantificationMeasurement> notChangedQuantificationMeasurements = Sets.newHashSet(); - if (quantificationMeasurements != null) { - notChangedQuantificationMeasurements.addAll(quantificationMeasurements); - } - - // Sampling Ratio - if (weightBeforeSampling == null || weight == null) { - result.setSamplingRatio(null); - result.setSamplingRatioText(null); - } else { - String samplingRatioText = weight + "/" + weightBeforeSampling; - samplingRatioText = samplingRatioText.replaceAll(",", "."); - result.setSamplingRatioText(samplingRatioText); - result.setSamplingRatio(weight / weightBeforeSampling); - } - - // Weight - if (weightBeforeSampling != null || weight != null) { - Float batchReferenceWeight = weight; - if (batchReferenceWeight == null) { - batchReferenceWeight = weightBeforeSampling; - } - QuantificationMeasurement quantificationMeasurement = measurementPersistenceHelper.setWeightMeasurementQuantificationMeasurement( - result, - batchReferenceWeight); - notChangedQuantificationMeasurements.remove(quantificationMeasurement); - } - // Removed not changed quantification measurements - if (quantificationMeasurements != null) { - quantificationMeasurements.removeAll(notChangedQuantificationMeasurements); - } - - return result; - } - - //------------------------------------------------------------------------// - //-- Debug methods --// - //------------------------------------------------------------------------// - - public void displayCatchBatch(CatchBatch result) { - StringBuilder sb = new StringBuilder(); - displayBatch(result, 0, sb); - if (log.isDebugEnabled()) { - log.debug(sb.toString()); - } - } - - protected void displayBatch(Batch batch, int level, StringBuilder sb) { - - ToStringStyle style = new BatchTreeToStringStyle(); - - ToStringBuilder builder = new ToStringBuilder(batch, style); - builder.append("id", batch.getId()); - builder.append("rankOrder", batch.getRankOrder()); -// builder.append("level", level); -// if (batch.getParentBatch() != null) { -// builder.append("parentId", batch.getParentBatch().getId()); -// } - - if (batch instanceof CatchBatch) { - CatchBatch catchBatch = (CatchBatch) batch; - builder.append("synchronizationStatus", catchBatch.getSynchronizationStatus()); - } - if (batch instanceof SortingBatch) { - SortingBatch sortingBatch = (SortingBatch) batch; - if (sortingBatch.getSamplingRatio() != null) { - builder.append("samplingRatio", sortingBatch.getSamplingRatio()); - } - if (sortingBatch.getSamplingRatioText() != null) { - builder.append("samplingRatioText", sortingBatch.getSamplingRatioText()); - } - if (sortingBatch.getIndividualCount() != null) { - builder.append("individualCount", sortingBatch.getIndividualCount()); - } - if (sortingBatch.getReferenceTaxon() != null) { - ReferenceTaxon referenceTaxon = sortingBatch.getReferenceTaxon(); - builder.append("referenceTaxon", load(ReferenceTaxonImpl.class, referenceTaxon.getId()).getName()); - } - - SortingMeasurement sm = null; - if (sortingBatch.getSortingMeasurements() != null && sortingBatch.getSortingMeasurements().size() == 1) { - sm = sortingBatch.getSortingMeasurements().iterator().next(); - } else if (sortingBatch.getReferenceTaxon() != null && sortingBatch.getReferenceTaxon().getId() != null) { - sm = measurementPersistenceHelper.getInheritedSortingMeasurement(sortingBatch); - } - if (sm != null) { - String sortingMeasurementStr = measurementPersistenceHelper.toString(sm); - builder.append("sortingMeasurement", sortingMeasurementStr); - } - } - QuantificationMeasurement quantificationMeasurement = measurementPersistenceHelper.getWeightMeasurementQuantificationMeasurement(batch); - if (quantificationMeasurement != null) { - String quantificationMeasurementStr = measurementPersistenceHelper.toString(quantificationMeasurement); - builder.append("weightQuantificationMeasurement", quantificationMeasurementStr); - builder.append("weightQuantificationMeasurement.isReferenceQuantification", quantificationMeasurement.getIsReferenceQuantification()); - } - if (batch.getWeight() != null) { - builder.append("weight", batch.getWeight()); - } - if (batch.getWeightBeforeSampling() != null) { - builder.append("weightBeforeSampling", batch.getWeightBeforeSampling()); - } - builder.append("qualityFlag", load(QualityFlagImpl.class, batch.getQualityFlag().getCode()).getName()); - - String prefix = "\n" + StringUtils.leftPad("", 2 * level); - String batchStr = Joiner.on(prefix).join(builder.build().split("\n")); - sb.append(prefix).append(batchStr); - Collection<Batch> childBatchs = batch.getChildBatchs(); - if (childBatchs != null) { - List<Batch> childBatchList = new ArrayList<>(childBatchs); - Collections.sort(childBatchList, batchComparator); - for (Batch childBatch : childBatchList) { - displayBatch(childBatch, level + 1, sb); - } - } - } - - - static final class BatchTreeToStringStyle extends ToStringStyle { - - private static final long serialVersionUID = 1L; - - BatchTreeToStringStyle() { - super(); - this.setUseClassName(true); - this.setUseShortClassName(true); - this.setContentStart(""); - this.setFieldSeparator(SystemUtils.LINE_SEPARATOR + " | "); - this.setFieldSeparatorAtStart(true); - this.setContentEnd(""); - } - } -} Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/ScientificCruiseCatchBatchValidator.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -34,6 +34,7 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.service.util.BatchTreeHelper; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Component; Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java (from rev 1722, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchPersistenceHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,747 @@ +package fr.ifremer.tutti.persistence.service.util; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Joiner; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +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.CatchBatchExtendDao; +import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; +import fr.ifremer.adagio.core.dao.data.batch.SortingBatchDao; +import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationError; +import fr.ifremer.adagio.core.dao.data.batch.validator.CatchBatchValidationException; +import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; +import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; +import fr.ifremer.tutti.persistence.InvalidBatchModelException; +import fr.ifremer.tutti.persistence.entities.TuttiEntity; +import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; +import fr.ifremer.tutti.persistence.entities.data.BatchContainer; +import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatch; +import fr.ifremer.tutti.persistence.entities.data.SpeciesAbleBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicType; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; +import fr.ifremer.tutti.persistence.service.IndividualObservationBatchPersistenceService; +import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; +import fr.ifremer.tutti.persistence.service.batch.TuttiCatchBatchValidator; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.dao.DataRetrievalFailureException; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.text.MessageFormat; +import java.util.Collection; +import java.util.List; + +import static org.nuiton.i18n.I18n.t; + +/** + * Helper around batches. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.2 + */ +@Component("batchPersistenceHelper") +public class BatchPersistenceHelper extends AbstractPersistenceService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(BatchPersistenceHelper.class); + + @Resource(name = "referentialPersistenceService") + protected ReferentialPersistenceService referentialService; + + @Resource(name = "attachmentPersistenceService") + protected AttachmentPersistenceService attachmentPersistenceService; + + @Resource(name = "individualObservationBatchPersistenceService") + protected IndividualObservationBatchPersistenceService individualObservationBatchPersistenceService; + + @Resource(name = "catchBatchDao") + protected CatchBatchExtendDao catchBatchDao; + + @Resource(name = "sortingBatchDao") + protected SortingBatchDao sortingBatchDao; + + @Resource(name = "scientificCruiseCatchBatchValidator") + protected TuttiCatchBatchValidator catchBatchValidator; + + @Resource(name = "batchTreeHelper") + protected BatchTreeHelper batchTreeHelper; + + @Override + public void init() { + super.init(); + catchBatchDao.registerCatchBatchValidator(catchBatchValidator); + } + + @Override + public void close() { + catchBatchDao.unregisterCatchBatchValidator(catchBatchValidator); + super.close(); + } + + public fr.ifremer.tutti.persistence.entities.data.CatchBatch createCatchBatch(fr.ifremer.tutti.persistence.entities.data.CatchBatch bean, CatchBatch catchBatch) { + catchBatch = catchBatchDao.create(catchBatch); + bean.setId(catchBatch.getId()); + return bean; + } + + public void validateSpecies(SampleCategoryModel sampleCategoryModel, + BatchContainer<SpeciesBatch> species) throws InvalidBatchModelException { + List<CatchBatchValidationError> errors = catchBatchValidator.validateSpecies(sampleCategoryModel, species); + List<String> errorsStr = Lists.newArrayList(); + for (CatchBatchValidationError error : errors) { + if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { + errorsStr.add(error.getMessage()); + } + } + if (!errorsStr.isEmpty()) { + String join = Joiner.on("<br/>").join(errorsStr); + throw new InvalidBatchModelException(t("tutti.persistence.batch.validation.bad.sample.categories", join)); + } + } + + public void validateBenthos(SampleCategoryModel sampleCategoryModel, + BatchContainer<BenthosBatch> benthos) throws InvalidBatchModelException { + List<CatchBatchValidationError> errors = catchBatchValidator.validateBenthos(sampleCategoryModel, benthos); + + if (CollectionUtils.isNotEmpty(errors)) { + List<String> errorsStr = Lists.newArrayList(); + for (CatchBatchValidationError error : errors) { + if (error.getGravity() == CatchBatchValidationError.GRAVITY_ERROR) { + errorsStr.add(error.getMessage()); + } + } + if (!errorsStr.isEmpty()) { + String join = Joiner.on("<br/>").join(errorsStr); + throw new InvalidBatchModelException(t("tutti.persistence.batch.validation.bad.sample.categories", join)); + } + } + } + + public void deleteCatchBatch(String fishingOperationId, Integer catchBatchId) { + + // delete individual observation batchs + individualObservationBatchPersistenceService.deleteIndividualObservationBatchForFishingOperation(fishingOperationId); + + getCurrentSession().flush(); + + // get all catch batch children ids (to delete attachments) + List<Integer> ids = catchBatchDao.getAllChildrenIds(catchBatchId); + + catchBatchDao.remove(catchBatchId); + + getCurrentSession().flush(); + + attachmentPersistenceService.deleteAllAttachment( + AttachementObjectTypeEnum.BATCH, + ids.toArray(new Integer[ids.size()])); + } + + public <D extends TuttiEntity> D createSortingBatch(D bean, CatchBatch catchBatch, SortingBatch batch) { + batch = catchBatchDao.createSortingBatch(batch, catchBatch); + bean.setId(batch.getId()); + return bean; + } + + public void removeWithChildren(Integer batchId) { + List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); + ids.add(batchId); + catchBatchDao.removeWithChildren(batchId); + + attachmentPersistenceService.deleteAllAttachment( + AttachementObjectTypeEnum.BATCH, + ids.toArray(new Integer[ids.size()])); + } + + public void removeWithChildren(Integer batchId, CatchBatch parentCatchBatch) { + List<Integer> ids = catchBatchDao.getAllChildrenIds(batchId); + ids.add(batchId); + catchBatchDao.removeWithChildren(batchId, parentCatchBatch); + + attachmentPersistenceService.deleteAllAttachment( + AttachementObjectTypeEnum.BATCH, + ids.toArray(new Integer[ids.size()])); + } + + public void updateSortingBatch(List<SortingBatch> sortingBatchs, CatchBatch parentCatchBatch) { + catchBatchDao.updateSortingBatch(sortingBatchs, parentCatchBatch); + } + + public SortingBatch loadSortingBatch(Integer sortingBatchId, CatchBatch parentCatchBatch) { + return catchBatchDao.loadSortingBatch(sortingBatchId, parentCatchBatch); + } + + public void update(CatchBatch catchBatch) { + catchBatchDao.update(catchBatch); + } + + public void setSortingBatchReferenceTaxon(String batchId, Integer referenceTaxonId) { + catchBatchDao.setSortingBatchReferenceTaxon(batchId, referenceTaxonId); + } + + public SortingBatch getSortingBatchById(CatchBatch catchBatch, Integer sortingBatchId) { + return catchBatchDao.getSortingBatchById(catchBatch, sortingBatchId); + } + + public void updateSortingBatch(SortingBatch sortingBatch, CatchBatch parentCatchBatch) { + catchBatchDao.updateSortingBatch(sortingBatch, parentCatchBatch); + } + + public List<SortingBatch> getFrequencyChilds(SortingBatch sortingBatch) { + List<SortingBatch> result = Lists.newArrayList(); + + SampleCategoryModel sampleCategoryModel = getSampleCategoryModel(); + + for (Batch batch : sortingBatch.getChildBatchs()) { + SortingBatch child = (SortingBatch) batch; + if (isFrequencyBatch(sampleCategoryModel, child)) { + result.add(child); + } + } + return result; + } + + public List<SortingBatch> getFrequencies(String batchId) { + Preconditions.checkNotNull(batchId); + Integer sortingBatchId = Integer.valueOf(batchId); + CatchBatch catchBatch = getRootCatchBatchByBatchId(sortingBatchId); + SortingBatch sortingBatch = catchBatchDao.getSortingBatchById( + catchBatch, sortingBatchId); + + List<SortingBatch> frequencyChilds = getFrequencyChilds( + sortingBatch); + return frequencyChilds; + } + + public fr.ifremer.adagio.core.dao.data.batch.CatchBatch getRootCatchBatchByFishingOperationId(String fishingOperationId, boolean validate) { + Preconditions.checkNotNull(fishingOperationId); + + Integer catchBatchId = catchBatchDao.getIdByFishingOperationId(Integer.valueOf(fishingOperationId)); + Preconditions.checkNotNull(catchBatchId); + + // whenever want to repair anything from Tutti + fr.ifremer.adagio.core.dao.data.batch.CatchBatch result; + + if (validate) { + + try { + result = catchBatchDao.loadFullTree(catchBatchId, true, false); + } catch (CatchBatchValidationException e) { + throw new InvalidBatchModelException( + "L'arbre d'échantillonage n'est pas compatible avec celui de Tutti.", e); + } + } else { + result = catchBatchDao.loadFullTree(catchBatchId); + } + Preconditions.checkNotNull(result); + return result; + } + + public boolean isCatchBatchExistsForFishingOperation(Integer fishingOperationId) { + return catchBatchDao.isCatchBatchExistsForFishingOperation(fishingOperationId); + } + + public Integer getCatchBatchIdByFishingOperationId(Integer fishingOperationId) throws DataRetrievalFailureException { + return catchBatchDao.getIdByFishingOperationId(fishingOperationId); + } + + public fr.ifremer.adagio.core.dao.data.batch.CatchBatch getRootCatchBatchByBatchId(Integer batchId) { + Preconditions.checkNotNull(batchId); + + Integer catchBatchId = catchBatchDao.getIdBySortingBatchId(batchId); + Preconditions.checkNotNull(catchBatchId); + + // whenever want to repair anything from Tutti + fr.ifremer.adagio.core.dao.data.batch.CatchBatch result; + + result = catchBatchDao.loadFullTree(catchBatchId); + + Preconditions.checkNotNull(result); + return result; + } + + public void setSpeciesBatchParents(Integer sampleCategoryId, + Serializable sampleCategoryValue, + SortingBatch target, + String parentBatchIdStr, + CatchBatch catchBatch) { + + Preconditions.checkNotNull(target); + Preconditions.checkNotNull(catchBatch); + + target.setRootBatch(catchBatch); + + SortingBatch parentBatch; + if (parentBatchIdStr != null) { + + // Load existing parent and root + parentBatch = catchBatchDao.getSortingBatchById(catchBatch, Integer.valueOf(parentBatchIdStr)); + } else { + + // Or retrieve parent batch, from pmfm id + // Retrieve category type + if (!sampleCategoryId.equals(enumeration.PMFM_ID_SORTED_UNSORTED)) { + throw new DataIntegrityViolationException(MessageFormat.format( + "A species or benthos batch with no parent should have a sampleCategoryType {0} (PMFM.ID={1})", + sampleCategoryId, + enumeration.PMFM_ID_SORTED_UNSORTED)); + } + + Integer qualitativeValueId = convertSampleCategoryValueIntoQualitativeId(sampleCategoryValue); + + if (enumeration.QUALITATIVE_VRAC_ID.equals(qualitativeValueId)) { + + // -- Vrac > Species > Alive itemized + parentBatch = batchTreeHelper.getSpeciesVracAliveItemizedRootBatch(catchBatch); + + if (parentBatch == null) { + + // -- Vrac + SortingBatch vracBatch = batchTreeHelper.getVracBatch(catchBatch); + + if (vracBatch == null) { + vracBatch = batchTreeHelper.getOrCreateVracBatch(catchBatch, null, null); + } + + // -- Vrac > Species + SortingBatch vracSpeciesBatch = batchTreeHelper.getSpeciesVracRootBatch(vracBatch); + + if (vracSpeciesBatch == null) { + vracSpeciesBatch = batchTreeHelper.getOrCreateSpeciesVracRootBatch(catchBatch, vracBatch, null); + } + + // -- Vrac > Species > Alive itemized + parentBatch = batchTreeHelper.getOrCreateSpeciesVracAliveItemizedRootBatch(catchBatch, vracSpeciesBatch); + + } + } else if (enumeration.QUALITATIVE_HORS_VRAC_ID.equals(qualitativeValueId)) { + + // -- Hors Vrac > Species + parentBatch = batchTreeHelper.getSpeciesHorsVracRootBatch(catchBatch); + + if (parentBatch == null) { + + // -- Hors Vrac + SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); + + // -- Hors Vrac > Species + parentBatch = batchTreeHelper.getOrCreateSpeciesHorsVracRootBatch(catchBatch, horsVracBatch); + } + } else { + + // not possible + throw new DataIntegrityViolationException("Should have Vrac / Hor Vrac qualitative value, but had: " + qualitativeValueId); + } + + } + + Preconditions.checkNotNull(parentBatch); + target.setParentBatch(parentBatch); + } + + public void setBenthosBatchParents(Integer sampleCategoryType, + Serializable sampleCategoryValue, + SortingBatch target, + String parentBatchIdStr, + CatchBatch catchBatch) { + + Preconditions.checkNotNull(target); + Preconditions.checkNotNull(catchBatch); + + target.setRootBatch(catchBatch); + + SortingBatch parentBatch; + if (parentBatchIdStr != null) { + + // Load existing parent and root + parentBatch = catchBatchDao.getSortingBatchById(catchBatch, Integer.valueOf(parentBatchIdStr)); + } else { + + // Or retrieve parent batch, from pmfm id + // Retrieve category type + if (!sampleCategoryType.equals(enumeration.PMFM_ID_SORTED_UNSORTED)) { + throw new DataIntegrityViolationException(MessageFormat.format( + "A species or benthos batch with no parent should have a sampleCategoryType {0} (PMFM.ID={1})", + sampleCategoryType, + enumeration.PMFM_ID_SORTED_UNSORTED)); + } + + Integer qualitativeValueId = convertSampleCategoryValueIntoQualitativeId(sampleCategoryValue); + + if (enumeration.QUALITATIVE_VRAC_ID.equals(qualitativeValueId)) { + + // -- Vrac > Benthos > Alive Itemized + parentBatch = batchTreeHelper.getBenthosVracAliveItemizedRootBatch(catchBatch); + + if (parentBatch == null) { + + // -- Vrac + SortingBatch vracBatch = batchTreeHelper.getVracBatch(catchBatch); + + if (vracBatch == null) { + vracBatch = batchTreeHelper.getOrCreateVracBatch(catchBatch, null, null); + } + + // -- Vrac > Benthos + SortingBatch vracBenthosBatch = batchTreeHelper.getBenthosVracRootBatch(vracBatch); + + if (vracBenthosBatch == null) { + vracBenthosBatch = batchTreeHelper.getOrCreateBenthosVracRootBatch(catchBatch, vracBatch, null); + } + + // -- Vrac > Benthos > Alive itemized + parentBatch = batchTreeHelper.getOrCreateBenthosVracAliveItemizedRootBatch(catchBatch, vracBenthosBatch); + + } + } else if (enumeration.QUALITATIVE_HORS_VRAC_ID.equals(qualitativeValueId)) { + + // -- Hors Vrac > Benthos + parentBatch = batchTreeHelper.getBenthosHorsVracRootBatch(catchBatch); + + if (parentBatch == null) { + + // -- Hors Vrac + SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); + + // -- Hors Vrac > Benthos + parentBatch = batchTreeHelper.getOrCreateBenthosHorsVracRootBatch(catchBatch, horsVracBatch); + } + } else { + + // not possible + throw new DataIntegrityViolationException("Should have Vrac / Hors Vrac qualitative value, but had: " + qualitativeValueId); + } + } + + Preconditions.checkNotNull(parentBatch); + target.setParentBatch(parentBatch); + } + + public void setMarineLitterBatchParents(SortingBatch target, CatchBatch catchBatch) { + + Preconditions.checkNotNull(target); + + // -- Hors Vrac > Marine Litter + SortingBatch parentBatch = batchTreeHelper.getMarineLitterRootBatch(catchBatch); + + if (parentBatch == null) { + + // -- Hors Vrac + SortingBatch horsVracBatch = batchTreeHelper.getOrCreateHorsVracBatch(catchBatch); + + // -- Hors Vrac > Marine Litter + parentBatch = batchTreeHelper.getOrCreateMarineLitterRootBatch(catchBatch, horsVracBatch, null); + } + + target.setParentBatch(parentBatch); + target.setRootBatch(catchBatch); + } + + public Integer convertSampleCategoryValueIntoQualitativeId(Serializable value) { + if (value == null) { + return null; + } + Integer qualitativeValueId = null; + if (value instanceof CaracteristicQualitativeValue) { + CaracteristicQualitativeValue cqValue = (CaracteristicQualitativeValue) value; + qualitativeValueId = cqValue.getIdAsInt(); + } else if (value instanceof String) { + qualitativeValueId = Integer.valueOf((String) value); + } + return qualitativeValueId; + } + + public void deleteSpeciesSubBatch(String id) { + Preconditions.checkNotNull(id); + + Integer speciesBatchId = Integer.valueOf(id); + + CatchBatch catchBatch = getRootCatchBatchByBatchId(speciesBatchId); + SortingBatch sortingBatch = getSortingBatchById(catchBatch, speciesBatchId); + + // get his children + Collection<Batch> childBatchs = sortingBatch.getChildBatchs(); + + if (CollectionUtils.isNotEmpty(childBatchs)) { + + for (Batch childBatch : childBatchs) { + + // delete this child and all his children + Integer childBatchId = childBatch.getId(); + + if (log.isDebugEnabled()) { + log.debug("Delete child [" + childBatchId + "] of species batch: " + id); + } + removeWithChildren(childBatchId); + } + } + } + + + public <S extends SpeciesAbleBatch> void setSampleCategoryQualitative(S target, + Integer pmfmId, + Float numericalvalue, + String alphanumericalValue, + Integer qualitativeValueId) { + // skip if null or corresponding to the SORTING_TYPE PMFM (Espèce, Benthos, Plancton, etc.) + if (pmfmId == null || pmfmId.equals(enumeration.PMFM_ID_SORTING_TYPE)) { + return; + } + SampleCategoryModel sampleCategoryModel = getSampleCategoryModel(); + + boolean isSamplingCategory = sampleCategoryModel.containsCategoryId(pmfmId); + Preconditions.checkNotNull(isSamplingCategory, "Unable to find corresponding SampleCategoryEnum for PMFM.ID : " + pmfmId); + + target.setSampleCategoryId(pmfmId); + Serializable categoryValue = getSampleCategoryQualitative( + pmfmId, + numericalvalue, + alphanumericalValue, + qualitativeValueId); + target.setSampleCategoryValue(categoryValue); + } + + public <F extends SpeciesAbleBatchFrequency & TuttiEntity> void entityToBatchFrequency(SortingBatch source, + F target) { + + target.setId(source.getId()); + + // Rank order + target.setRankOrder(Integer.valueOf(source.getRankOrder())); + + target.setNumber(source.getIndividualCount()); + target.setWeight(source.getWeight()); + + Preconditions.checkState(source.getSortingMeasurements().size() == 1, "SortingBatch [" + source.getId() + "] need exactly one sortingMeasurement (to store the length step category), but had " + source.getSortingMeasurements().size()); + SortingMeasurement sm = source.getSortingMeasurements().iterator().next(); + Preconditions.checkNotNull(sm.getPmfm(), "SortingMeasurement [" + sm.getId() + "] can not have a null pmfm"); + Preconditions.checkNotNull(sm.getPmfm().getId(), "SortingMeasurement [" + sm.getId() + "] can not have a pmfm with null id"); + + // Length step category + Caracteristic lengthStepCaracteristic = referentialService.getCaracteristic(sm.getPmfm().getId()); + target.setLengthStepCaracteristic(lengthStepCaracteristic); + + // Length + target.setLengthStep(sm.getNumericalValue()); + } + + public Serializable getSampleCategoryQualitative(Integer pmfmId, + Float numericalvalue, + String alphanumericalValue, + Integer qualitativeValueId) { + + if (numericalvalue != null) { + return numericalvalue; + } + if (alphanumericalValue != null) { + return alphanumericalValue; + } + + Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); + if (caracteristic == null || caracteristic.getCaracteristicType() != CaracteristicType.QUALITATIVE) { + return null; + } + CaracteristicQualitativeValue value = null; + for (CaracteristicQualitativeValue qv : caracteristic.getQualitativeValue()) { + if (qualitativeValueId.equals(qv.getIdAsInt())) { + value = qv; + break; + } + } + + return value; + } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected Integer getRecorderDepartmentId() { + // TODO BL : voir si on peut récupérer le departement (du 1er saisisseur ?) + return enumeration.DEPARTMENT_ID_UNKNOWN_RECORDER_DEPARTMENT; + } + + /** + * Check if the given {@code sortingBatch} is a frequency one. + * <p/> + * We test that: + * <ul> + * <li>batch has exactly one measurement</li> + * <li>the measurement pmfm is not a sample category</li> + * </ul> + * + * @param sampleCategoryModel model of authorized sample categories + * @param sortingBatch batch to check + * @return {@code true} if given batch is a frequency batch, + * {@code false} otherwise. + */ + public boolean isFrequencyBatch(SampleCategoryModel sampleCategoryModel, + SortingBatch sortingBatch) { + boolean result = false; + if (sortingBatch.getSortingMeasurements().size() == 1) { + SortingMeasurement sm + = sortingBatch.getSortingMeasurements().iterator().next(); + Pmfm pmfm = sm.getPmfm(); + + result = sortingBatch.getIndividualCount() != null && + !sampleCategoryModel.containsCategoryId(pmfm.getId()); + } + return result; + } + +// protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch target, +// Batch batch, +// Integer pmfmId, +// Integer pmfmValue, +// Float totalWeight, +// short rankOrder) { +// return getOrCreate( +// target, +// batch, +// pmfmId, +// pmfmValue, +// totalWeight, +// null, +// rankOrder +// ); +// } + +// protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, +// Batch parentBatch, +// Integer sortingPmfmId, +// Integer sortingQualitativeValueId, +// Float weight, +// Float weightBeforeSampling, +// short rankOrder) { +// SortingBatch result = batchTreeHelper.get( +// parentBatch, +// sortingPmfmId, +// sortingQualitativeValueId); +// +// if (result == null) { +// +// result = SortingBatch.Factory.newInstance(); +// if (parentBatch.getChildBatchs() == null) { +// parentBatch.setChildBatchs(Sets.<Batch>newHashSet()); +// } +// parentBatch.getChildBatchs().add(result); +// +// Collection<SortingMeasurement> sortingMeasurements = result.getSortingMeasurements(); +// +// // Create lists to store all updates, then remove not updated items +// Set<SortingMeasurement> notChangedSortingMeasurements = Sets.newHashSet(); +// if (sortingMeasurements != null) { +// notChangedSortingMeasurements.addAll(sortingMeasurements); +// } +// +// // Some mandatory properties : +// QualityFlagImpl qualityFlag = load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED); +// result.setQualityFlag(qualityFlag); +// result.setRootBatch(rootBatch); +// result.setParentBatch(parentBatch); +// result.setExhaustiveInventory(true); +// +// // No taxon or taxon group +// result.setReferenceTaxon(null); +// result.setTaxonGroup(null); +// +// result.setRankOrder(rankOrder); +// +// // Sorting measurement +// if (sortingPmfmId != null && sortingQualitativeValueId != null) { +// SortingMeasurement sm = setSortingMeasurement( +// result, +// sortingPmfmId, +// sortingQualitativeValueId); +// notChangedSortingMeasurements.remove(sm); +// } +// // Removed not changed sorting measurements +// if (sortingMeasurements != null) { +// sortingMeasurements.removeAll(notChangedSortingMeasurements); +// } +// +// catchBatchDao.createSortingBatch(result, rootBatch); +// } +// +// Collection<QuantificationMeasurement> quantificationMeasurements = result.getQuantificationMeasurements(); +// Set<QuantificationMeasurement> notChangedQuantificationMeasurements = Sets.newHashSet(); +// if (quantificationMeasurements != null) { +// notChangedQuantificationMeasurements.addAll(quantificationMeasurements); +// } +// +// // Sampling Ratio +// if (weightBeforeSampling == null || weight == null) { +// result.setSamplingRatio(null); +// result.setSamplingRatioText(null); +// } else { +// String samplingRatioText = weight + "/" + weightBeforeSampling; +// samplingRatioText = samplingRatioText.replaceAll(",", "."); +// result.setSamplingRatioText(samplingRatioText); +// result.setSamplingRatio(weight / weightBeforeSampling); +// } +// +// // Weight +// if (weightBeforeSampling != null || weight != null) { +// Float batchReferenceWeight = weight; +// if (batchReferenceWeight == null) { +// batchReferenceWeight = weightBeforeSampling; +// } +// QuantificationMeasurement quantificationMeasurement = setWeightMeasurementQuantificationMeasurement( +// result, +// batchReferenceWeight); +// notChangedQuantificationMeasurements.remove(quantificationMeasurement); +// } +// // Removed not changed quantification measurements +// if (quantificationMeasurements != null) { +// quantificationMeasurements.removeAll(notChangedQuantificationMeasurements); +// } +// +// return result; +// } + +// protected SortingBatch get(Batch parentBatch, +// Integer sortingPmfmId, +// Integer sortingQualitativeValueId) { +// SortingBatch result = getSortingBatch( +// parentBatch, +// null, +// sortingPmfmId, +// sortingQualitativeValueId); +// return result; +// } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchTreeHelper.java (from rev 1722, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/batch/BatchTreeHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchTreeHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/BatchTreeHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,686 @@ +package fr.ifremer.tutti.persistence.service.util; + +import com.google.common.base.Joiner; +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.data.batch.Batch; +import fr.ifremer.adagio.core.dao.data.batch.Batchs; +import fr.ifremer.adagio.core.dao.data.batch.CatchBatch; +import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; +import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; +import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement; +import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; +import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; +import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxon; +import fr.ifremer.adagio.core.dao.referential.taxon.ReferenceTaxonImpl; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.SystemUtils; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.Set; + +/** + * Helper to build or navigauet into the batch tree. + * <p/> + * Created on 4/20/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 3.5 + */ +@Component("batchTreeHelper") +public class BatchTreeHelper extends AbstractPersistenceService { + + /** Logger. */ + private static final Log log = LogFactory.getLog(BatchTreeHelper.class); + + @Resource(name = "measurementPersistenceHelper") + protected MeasurementPersistenceHelper measurementPersistenceHelper; + + @Resource(name = "catchBatchDao") + protected CatchBatchExtendDao catchBatchDao; + + protected Comparator<Batch> batchComparator = Batchs.newRankOrderComparator(); + + //------------------------------------------------------------------------// + //-- Get CatchBatch navigation methods --// + //------------------------------------------------------------------------// + + public SortingBatch getSpeciesVracAliveItemizedRootBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Vrac > Species > Alive Itemized", + enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_VRAC_ID, + enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, + enumeration.PMFM_ID_SORTING_TYPE_2, enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED + ); + } + + public SortingBatch getBenthosVracAliveItemizedRootBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Vrac > Benthos > Alive itemized", + enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_VRAC_ID, + enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, + enumeration.PMFM_ID_SORTING_TYPE_2, enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED + ); + } + + public SortingBatch getSpeciesHorsVracRootBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > Species", + enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_HORS_VRAC_ID, + enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES + ); + } + + public SortingBatch getBenthosHorsVracRootBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > Benthos", + enumeration.PMFM_ID_SORTED_UNSORTED, enumeration.QUALITATIVE_HORS_VRAC_ID, + enumeration.PMFM_ID_SORTING_TYPE, enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS + ); + } + + public SortingBatch getMarineLitterRootBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > Marine Litter", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_HORS_VRAC_ID, + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER + ); + } + + public SortingBatch getVracBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Vrac", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_VRAC_ID + ); + } + + public SortingBatch getHorsVracBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_HORS_VRAC_ID + ); + } + + public SortingBatch getRejectedBatch(CatchBatch batch) { + return getSortingBatch( + batch, + "Unsorted", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_UNSORTED_ID + ); + } + + //------------------------------------------------------------------------// + //-- Get SortingBatch navigation methods --// + //------------------------------------------------------------------------// + + public SortingBatch getSpeciesVracRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Species", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES + ); + } + + public SortingBatch getBenthosVracRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Benthos", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS + ); + } + + public SortingBatch getSpeciesVracAliveNotItemizedRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Species > Alive not itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED + ); + } + + public SortingBatch getBenthosVracAliveNotItemizedRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Benthos > Alive not itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED + ); + } + + public SortingBatch getSpeciesVracInertRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Species > Inert (not alive)", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT + ); + } + + public SortingBatch getBenthosVracInertRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Benthos > Inert (not alive)", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT + ); + } + + public SortingBatch getSpeciesVracAliveItemizedRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Species > Alive itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED + ); + } + + public SortingBatch getBenthosVracAliveItemizedRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Vrac > Benthos > Alive itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED + ); + } + + public SortingBatch getSpeciesHorsVracRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > Species", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES + ); + } + + public SortingBatch getBenthosHorsVracRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > Benthos", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS + ); + } + + public SortingBatch getMarineLitterRootBatch(SortingBatch batch) { + return getSortingBatch( + batch, + "Hors Vrac > MarineLitter", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER + ); + } + + //------------------------------------------------------------------------// + //-- getOrCreate methods --// + //------------------------------------------------------------------------// + + public SortingBatch getOrCreateVracBatch(CatchBatch batch, + Float weight, + Float weightBeforeSampling) { + return getOrCreate( + batch, + batch, + "Vrac", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_VRAC_ID, + weight, + weightBeforeSampling, + (short) 1 + ); + } + + public SortingBatch getOrCreateSpeciesVracRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Species", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, + totalWeight, + (short) 1 + ); + } + + public SortingBatch getOrCreateSpeciesVracAliveNotItemizedRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Species > Alive Not Itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED, + totalWeight, + (short) 1 + ); + } + + public SortingBatch getOrCreateSpeciesVracInertRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Species > Inert", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT, + totalWeight, + (short) 2 + ); + } + + public SortingBatch getOrCreateSpeciesVracAliveItemizedRootBatch(CatchBatch target, + SortingBatch batch) { + return getOrCreate( + target, + batch, + "Vrac > Benthos > Alive Itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED, + null, + (short) 3 + ); + } + + public SortingBatch getOrCreateBenthosVracRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Benthos", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, + totalWeight, + (short) 2 + ); + } + + public SortingBatch getOrCreateBenthosVracAliveNotItemizedRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Benthos > Alive Not itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_NOT_ITEMIZED, + totalWeight, + (short) 1 + ); + } + + public SortingBatch getOrCreateBenthosVracInertRootBatch(fr.ifremer.adagio.core.dao.data.batch.CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Vrac > Benthos > Inert", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_INERT, + totalWeight, + (short) 2 + ); + } + + public SortingBatch getOrCreateBenthosVracAliveItemizedRootBatch(CatchBatch target, + SortingBatch batch) { + return getOrCreate( + target, + batch, + "Vrac > Benthos > Alive Itemized", + enumeration.PMFM_ID_SORTING_TYPE_2, + enumeration.QUALITATIVE_ID_SORTING_TYPE_2_ALIVE_ITEMIZED, + null, + (short) 3 + ); + } + + public SortingBatch getOrCreateHorsVracBatch(CatchBatch batch) { + return getOrCreate( + batch, + batch, + "Hors Vrac", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_HORS_VRAC_ID, + null, + (short) 2 + ); + } + + public SortingBatch getOrCreateSpeciesHorsVracRootBatch(CatchBatch target, + SortingBatch batch) { + return getOrCreate( + target, + batch, + "Hors Vrac > Species", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_SPECIES, + null, + (short) 1 + ); + } + + public SortingBatch getOrCreateBenthosHorsVracRootBatch(CatchBatch target, + SortingBatch batch) { + return getOrCreate( + target, + batch, + "Hors Vrac > Benthos", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_BENTHOS, + null, + (short) 2 + ); + } + + public SortingBatch getOrCreateMarineLitterRootBatch(CatchBatch target, + SortingBatch batch, + Float totalWeight) { + return getOrCreate( + target, + batch, + "Hors Vrac > Marine Litter", + enumeration.PMFM_ID_SORTING_TYPE, + enumeration.QUALITATIVE_ID_SORTING_TYPE_MARINE_LITTER, + totalWeight, + (short) 3 + ); + } + + public SortingBatch getOrCreateRejectedBatch(CatchBatch batch, + Float weight) { + + return getOrCreate( + batch, + batch, + "Unsorted", + enumeration.PMFM_ID_SORTED_UNSORTED, + enumeration.QUALITATIVE_UNSORTED_ID, + weight, + (short) 3 + ); + } + + //------------------------------------------------------------------------// + //-- Internal methods --// + //------------------------------------------------------------------------// + + protected SortingBatch get(Batch parentBatch, + Integer sortingPmfmId, + Integer sortingQualitativeValueId) { + SortingBatch result = getSortingBatch( + parentBatch, + null, + sortingPmfmId, + sortingQualitativeValueId); + return result; + } + + protected SortingBatch getSortingBatch(Batch source, + String debugMessage, + Integer... ids) { + + return getSortingBatch(source.getChildBatchs(), debugMessage, ids); + } + + protected SortingBatch getSortingBatch(Collection<Batch> childs, + String debugMessage, + Integer... ids) { + + int nbParams = ids.length / 2; + + Object[] params = new Object[nbParams * 3]; + for (int i = 0; i < nbParams; i++) { + Integer sortingPmfmId = ids[2 * i]; + Integer sortingQualitativeValueId = ids[2 * i + 1]; + params[3 * i] = CatchBatchExtendDao.PMFM_ID; + params[3 * i + 1] = sortingPmfmId; + params[3 * i + 2] = sortingQualitativeValueId; + } + SortingBatch result = catchBatchDao.getSortingBatch(childs, params); + if (result != null && debugMessage != null && log.isDebugEnabled()) { + log.debug("Loaded " + debugMessage + ": " + result.getId()); + } + return result; + } + + protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, + Batch batch, + String debugMessage, + Integer sortingPmfmId, + Integer sortingQualitativeValueId, + Float totalWeight, + short rankOrder) { + return getOrCreate( + rootBatch, + batch, + debugMessage, + sortingPmfmId, + sortingQualitativeValueId, + totalWeight, + null, + rankOrder + ); + } + + protected SortingBatch getOrCreate(fr.ifremer.adagio.core.dao.data.batch.CatchBatch rootBatch, + Batch batch, + String debugMessage, + Integer sortingPmfmId, + Integer sortingQualitativeValueId, + Float weight, + Float weightBeforeSampling, + short rankOrder) { + SortingBatch result = getSortingBatch( + batch, + debugMessage, + sortingPmfmId, + sortingQualitativeValueId); + + if (result == null) { + + result = SortingBatch.Factory.newInstance(); + if (batch.getChildBatchs() == null) { + batch.setChildBatchs(Sets.<Batch>newHashSet()); + } + batch.getChildBatchs().add(result); + + Collection<SortingMeasurement> sortingMeasurements = result.getSortingMeasurements(); + + // Create lists to store all updates, then remove not updated items + Set<SortingMeasurement> notChangedSortingMeasurements = Sets.newHashSet(); + if (sortingMeasurements != null) { + notChangedSortingMeasurements.addAll(sortingMeasurements); + } + + // Some mandatory properties : + QualityFlagImpl qualityFlag = load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED); + result.setQualityFlag(qualityFlag); + result.setRootBatch(rootBatch); + result.setParentBatch(batch); + result.setExhaustiveInventory(true); + + // No taxon or taxon group + result.setReferenceTaxon(null); + result.setTaxonGroup(null); + + result.setRankOrder(rankOrder); + + // Sorting measurement + if (sortingPmfmId != null && sortingQualitativeValueId != null) { + SortingMeasurement sm = measurementPersistenceHelper.setSortingMeasurement( + result, + sortingPmfmId, + sortingQualitativeValueId); + notChangedSortingMeasurements.remove(sm); + } + // Removed not changed sorting measurements + if (sortingMeasurements != null) { + sortingMeasurements.removeAll(notChangedSortingMeasurements); + } + + catchBatchDao.createSortingBatch(result, rootBatch); + } + + Collection<QuantificationMeasurement> quantificationMeasurements = result.getQuantificationMeasurements(); + Set<QuantificationMeasurement> notChangedQuantificationMeasurements = Sets.newHashSet(); + if (quantificationMeasurements != null) { + notChangedQuantificationMeasurements.addAll(quantificationMeasurements); + } + + // Sampling Ratio + if (weightBeforeSampling == null || weight == null) { + result.setSamplingRatio(null); + result.setSamplingRatioText(null); + } else { + String samplingRatioText = weight + "/" + weightBeforeSampling; + samplingRatioText = samplingRatioText.replaceAll(",", "."); + result.setSamplingRatioText(samplingRatioText); + result.setSamplingRatio(weight / weightBeforeSampling); + } + + // Weight + if (weightBeforeSampling != null || weight != null) { + Float batchReferenceWeight = weight; + if (batchReferenceWeight == null) { + batchReferenceWeight = weightBeforeSampling; + } + QuantificationMeasurement quantificationMeasurement = measurementPersistenceHelper.setWeightMeasurementQuantificationMeasurement( + result, + batchReferenceWeight); + notChangedQuantificationMeasurements.remove(quantificationMeasurement); + } + // Removed not changed quantification measurements + if (quantificationMeasurements != null) { + quantificationMeasurements.removeAll(notChangedQuantificationMeasurements); + } + + return result; + } + + //------------------------------------------------------------------------// + //-- Debug methods --// + //------------------------------------------------------------------------// + + public void displayCatchBatch(CatchBatch result) { + StringBuilder sb = new StringBuilder(); + displayBatch(result, 0, sb); + if (log.isDebugEnabled()) { + log.debug(sb.toString()); + } + } + + protected void displayBatch(Batch batch, int level, StringBuilder sb) { + + ToStringStyle style = new BatchTreeToStringStyle(); + + ToStringBuilder builder = new ToStringBuilder(batch, style); + builder.append("id", batch.getId()); + builder.append("rankOrder", batch.getRankOrder()); +// builder.append("level", level); +// if (batch.getParentBatch() != null) { +// builder.append("parentId", batch.getParentBatch().getId()); +// } + + if (batch instanceof CatchBatch) { + CatchBatch catchBatch = (CatchBatch) batch; + builder.append("synchronizationStatus", catchBatch.getSynchronizationStatus()); + } + if (batch instanceof SortingBatch) { + SortingBatch sortingBatch = (SortingBatch) batch; + if (sortingBatch.getSamplingRatio() != null) { + builder.append("samplingRatio", sortingBatch.getSamplingRatio()); + } + if (sortingBatch.getSamplingRatioText() != null) { + builder.append("samplingRatioText", sortingBatch.getSamplingRatioText()); + } + if (sortingBatch.getIndividualCount() != null) { + builder.append("individualCount", sortingBatch.getIndividualCount()); + } + if (sortingBatch.getReferenceTaxon() != null) { + ReferenceTaxon referenceTaxon = sortingBatch.getReferenceTaxon(); + builder.append("referenceTaxon", load(ReferenceTaxonImpl.class, referenceTaxon.getId()).getName()); + } + + SortingMeasurement sm = null; + if (sortingBatch.getSortingMeasurements() != null && sortingBatch.getSortingMeasurements().size() == 1) { + sm = sortingBatch.getSortingMeasurements().iterator().next(); + } else if (sortingBatch.getReferenceTaxon() != null && sortingBatch.getReferenceTaxon().getId() != null) { + sm = measurementPersistenceHelper.getInheritedSortingMeasurement(sortingBatch); + } + if (sm != null) { + String sortingMeasurementStr = measurementPersistenceHelper.toString(sm); + builder.append("sortingMeasurement", sortingMeasurementStr); + } + } + QuantificationMeasurement quantificationMeasurement = measurementPersistenceHelper.getWeightMeasurementQuantificationMeasurement(batch); + if (quantificationMeasurement != null) { + String quantificationMeasurementStr = measurementPersistenceHelper.toString(quantificationMeasurement); + builder.append("weightQuantificationMeasurement", quantificationMeasurementStr); + builder.append("weightQuantificationMeasurement.isReferenceQuantification", quantificationMeasurement.getIsReferenceQuantification()); + } + if (batch.getWeight() != null) { + builder.append("weight", batch.getWeight()); + } + if (batch.getWeightBeforeSampling() != null) { + builder.append("weightBeforeSampling", batch.getWeightBeforeSampling()); + } + builder.append("qualityFlag", load(QualityFlagImpl.class, batch.getQualityFlag().getCode()).getName()); + + String prefix = "\n" + StringUtils.leftPad("", 2 * level); + String batchStr = Joiner.on(prefix).join(builder.build().split("\n")); + sb.append(prefix).append(batchStr); + Collection<Batch> childBatchs = batch.getChildBatchs(); + if (childBatchs != null) { + List<Batch> childBatchList = new ArrayList<>(childBatchs); + Collections.sort(childBatchList, batchComparator); + for (Batch childBatch : childBatchList) { + displayBatch(childBatch, level + 1, sb); + } + } + } + + + static final class BatchTreeToStringStyle extends ToStringStyle { + + private static final long serialVersionUID = 1L; + + BatchTreeToStringStyle() { + super(); + this.setUseClassName(true); + this.setUseShortClassName(true); + this.setContentStart(""); + this.setFieldSeparator(SystemUtils.LINE_SEPARATOR + " | "); + this.setFieldSeparatorAtStart(true); + this.setContentEnd(""); + } + } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/MeasurementPersistenceHelper.java (from rev 1722, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/MeasurementPersistenceHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/MeasurementPersistenceHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/MeasurementPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,374 @@ +package fr.ifremer.tutti.persistence.service.util; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.data.batch.Batch; +import fr.ifremer.adagio.core.dao.data.batch.CatchBatchExtendDao; +import fr.ifremer.adagio.core.dao.data.batch.SortingBatch; +import fr.ifremer.adagio.core.dao.data.measure.GearUseMeasurement; +import fr.ifremer.adagio.core.dao.data.measure.Measurement; +import fr.ifremer.adagio.core.dao.data.measure.QuantificationMeasurement; +import fr.ifremer.adagio.core.dao.data.measure.SortingMeasurement; +import fr.ifremer.adagio.core.dao.data.measure.SurveyMeasurement; +import fr.ifremer.adagio.core.dao.data.measure.VesselUseMeasurement; +import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; +import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; +import fr.ifremer.adagio.core.dao.data.vessel.feature.use.GearUseFeatures; +import fr.ifremer.adagio.core.dao.data.vessel.feature.use.VesselUseFeatures; +import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.Pmfm; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValue; +import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; + +/** + * Helper around {@link Measurement}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.0 + */ +@Component("measurementPersistenceHelper") +public class MeasurementPersistenceHelper extends AbstractPersistenceService { + + @Resource(name = "referentialPersistenceService") + protected ReferentialPersistenceService referentialService; + + @Resource(name = "catchBatchDao") + protected CatchBatchExtendDao catchBatchDao; + + public void setMeasurement(Measurement measurement, + Caracteristic caracteristic, + Serializable value) { + if (value == null) { + return; + } + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: + measurement.setNumericalValue((Float) value); + break; + case QUALITATIVE: + Integer qvId = null; + if (value instanceof CaracteristicQualitativeValue) { + qvId = Integer.valueOf(((CaracteristicQualitativeValue) value).getId()); + } else if (value instanceof Integer) { + qvId = (Integer) value; + } + QualitativeValue qv = load(QualitativeValueImpl.class, qvId); + measurement.setQualitativeValue(qv); + break; + case TEXT: + measurement.setAlphanumericalValue((String) value); + break; + } + } + + //------------------------------------------------------------------------// + //-- SortingMeasurement --// + //------------------------------------------------------------------------// + + public SortingMeasurement setSortingMeasurement( + SortingBatch sortingBatch, + Integer pmfmId, + Serializable value) { + Preconditions.checkNotNull(pmfmId); + Preconditions.checkNotNull(value); + + Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); + SortingMeasurement sortingMeasurement = catchBatchDao.getSortingMeasurement( + sortingBatch, pmfmId, getRecorderDepartmentId(), true); + setMeasurement(sortingMeasurement, + caracteristic, + value); + return sortingMeasurement; + } + + public QuantificationMeasurement setWeightMeasurementQuantificationMeasurement(Batch batch, Float weightValue) { + return catchBatchDao.setQuantificationMeasurement(batch, enumeration.PMFM_ID_WEIGHT_MEASURED, getRecorderDepartmentId(), weightValue, true); + } + + public QuantificationMeasurement getWeightMeasurementQuantificationMeasurement(Batch batch) { + QuantificationMeasurement quantificationMeasurement = catchBatchDao.getQuantificationMeasurement(batch, enumeration.PMFM_ID_WEIGHT_MEASURED, getRecorderDepartmentId(), false); + return quantificationMeasurement; + } + + public SortingMeasurement getInheritedSortingMeasurement(SortingBatch sortingBatch) { + return catchBatchDao.getInheritedSortingMeasurement(sortingBatch, enumeration.PMFM_ID_SORTED_UNSORTED); + } + + //------------------------------------------------------------------------// + //-- VesselUseUseMeasurement --// + //------------------------------------------------------------------------// + + public VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, + Integer pmfmId, + Float numericalValue, + String alphanumericalValue, + Integer qualitativevalueId) { + VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, pmfmId, true); + + if (alphanumericalValue != null) { + vesselUseMeasurement.setAlphanumericalValue(alphanumericalValue); + } else if (numericalValue != null) { + vesselUseMeasurement.setNumericalValue(numericalValue); + } else if (qualitativevalueId != null) { + vesselUseMeasurement.setQualitativeValue(load(QualitativeValueImpl.class, qualitativevalueId)); + } + + return vesselUseMeasurement; + } + + public VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, + Caracteristic caracteristic, Serializable value) { + VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, Integer.valueOf(caracteristic.getId()), true); + setMeasurement(vesselUseMeasurement, caracteristic, value); + return vesselUseMeasurement; + } + + public VesselUseMeasurement getVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, + Integer pmfmId, boolean createIfNotExists) { + VesselUseMeasurement vesselUseMeasurement = null; + if (vesselUseFeatures.getVesselUseMeasurements() != null) { + for (VesselUseMeasurement vum : vesselUseFeatures.getVesselUseMeasurements()) { + if (pmfmId.equals(vum.getPmfm().getId())) { + vesselUseMeasurement = vum; + break; + } + } + } + if (vesselUseMeasurement == null) { + if (!createIfNotExists) { + return null; + } + vesselUseMeasurement = VesselUseMeasurement.Factory.newInstance(); + vesselUseMeasurement.setVesselUseFeatures(vesselUseFeatures); + if (vesselUseFeatures.getVesselUseMeasurements() == null) { + vesselUseFeatures.setVesselUseMeasurements(Sets.newHashSet(vesselUseMeasurement)); + } else { + vesselUseFeatures.getVesselUseMeasurements().add(vesselUseMeasurement); + } + vesselUseMeasurement.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + vesselUseMeasurement.setDepartment(scientificCruise.getRecorderDepartment()); + vesselUseMeasurement.setPmfm(load(PmfmImpl.class, pmfmId)); + } + + return vesselUseMeasurement; + } + + protected VesselUseMeasurement setVesselUseMeasurement(ScientificCruise scientificCruise, VesselUseFeatures vesselUseFeatures, + Integer pmfmId, + Serializable value) { + VesselUseMeasurement vesselUseMeasurement = getVesselUseMeasurement(scientificCruise, vesselUseFeatures, pmfmId, true); + + if (value instanceof String) { + vesselUseMeasurement.setAlphanumericalValue((String) value); + } else if (value instanceof Float) { + vesselUseMeasurement.setNumericalValue((Float) value); + } else if (value instanceof Integer) { + vesselUseMeasurement.setQualitativeValue(load(QualitativeValueImpl.class, value)); + } + + return vesselUseMeasurement; + } + + //------------------------------------------------------------------------// + //-- GearUseMeasurement --// + //------------------------------------------------------------------------// + + public GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, + Integer pmfmId, + Float numericalValue, + String alphanumericalValue, + Integer qualitativevalueId) { + GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, pmfmId, true); + + if (alphanumericalValue != null) { + gearUseMeasurement.setAlphanumericalValue(alphanumericalValue); + } else if (numericalValue != null) { + gearUseMeasurement.setNumericalValue(numericalValue); + } else if (qualitativevalueId != null) { + QualitativeValue qv = load(QualitativeValueImpl.class, qualitativevalueId); + gearUseMeasurement.setQualitativeValue(qv); + } + + return gearUseMeasurement; + } + + public GearUseMeasurement setGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, + Caracteristic caracteristic, Serializable value) { + GearUseMeasurement gearUseMeasurement = getGearUseMeasurement(scientificCruise, gearUseFeatures, Integer.valueOf(caracteristic.getId()), true); + setMeasurement(gearUseMeasurement, caracteristic, value); + return gearUseMeasurement; + } + + protected GearUseMeasurement getGearUseMeasurement(ScientificCruise scientificCruise, GearUseFeatures gearUseFeatures, + Integer pmfmId, boolean createIfNotExists) { + GearUseMeasurement gearUseMeasurement = null; + if (gearUseFeatures.getGearUseMeasurements() != null) { + for (GearUseMeasurement vum : gearUseFeatures.getGearUseMeasurements()) { + if (pmfmId.equals(vum.getPmfm().getId())) { + gearUseMeasurement = vum; + break; + } + } + } + if (gearUseMeasurement == null) { + if (!createIfNotExists) { + return null; + } + gearUseMeasurement = GearUseMeasurement.Factory.newInstance(); + gearUseMeasurement.setGearUseFeatures(gearUseFeatures); + if (gearUseFeatures.getGearUseMeasurements() == null) { + gearUseFeatures.setGearUseMeasurements(Sets.newHashSet(gearUseMeasurement)); + } else { + gearUseFeatures.getGearUseMeasurements().add(gearUseMeasurement); + } + gearUseMeasurement.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + gearUseMeasurement.setDepartment(scientificCruise.getRecorderDepartment()); + Pmfm pmfm = (Pmfm) getCurrentSession().load(PmfmImpl.class, pmfmId); + gearUseMeasurement.setPmfm(pmfm); + } + + return gearUseMeasurement; + } + + + //------------------------------------------------------------------------// + //-- Misc --// + //------------------------------------------------------------------------// + + public String toString(Measurement measurement) { + Pmfm pmfm = load(PmfmImpl.class, measurement.getPmfm().getId()); + String value = null; + if (measurement.getQualitativeValue() != null) { + QualitativeValue qualitativeValue = measurement.getQualitativeValue(); + String qualitativeName = load(QualitativeValueImpl.class, qualitativeValue.getId()).getName(); + + value = qualitativeName + " (" + qualitativeValue.getId() + ")"; + } else if (measurement.getNumericalValue() != null) { + value = "" + measurement.getNumericalValue(); + } else if (measurement.getAlphanumericalValue() != null) { + value = measurement.getAlphanumericalValue(); + } + return pmfm.getParameter().getName() + " (" + pmfm.getId() + ") / " + value; + } + + //------------------------------------------------------------------------// + //-- SurveyMeasurement --// + //------------------------------------------------------------------------// + + public SurveyMeasurement setSurveyMeasurement(FishingTrip fishingTrip, + Integer pmfmId, + Float numericalValue, + String alphanumericalValue, + Integer qualitativevalueId) { + SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); + + if (result == null) { + result = createSurveyMeasurement(fishingTrip, + pmfmId, + numericalValue, + alphanumericalValue, + qualitativevalueId); + } + + return result; + } + + public SurveyMeasurement removeSurveyMeasurement(FishingTrip fishingTrip, + Integer pmfmId) { + SurveyMeasurement result = getSurveyMeasurement(fishingTrip, pmfmId); + + if (result != null) { + + // measurement found, remove it + result.setFishingTrip(null); + fishingTrip.getSurveyMeasurements().remove(result); + } + + return result; + } + + protected SurveyMeasurement createSurveyMeasurement(FishingTrip fishingTrip, + Integer pmfmId, + Float numericalValue, + String alphanumericalValue, + Integer qualitativevalueId) { + + SurveyMeasurement result = SurveyMeasurement.Factory.newInstance(); + result.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + result.setDepartment(fishingTrip.getRecorderDepartment()); + Pmfm pmfm = load(PmfmImpl.class, pmfmId); + result.setPmfm(pmfm); + result.setFishingTrip(fishingTrip); + + if (alphanumericalValue != null) { + result.setAlphanumericalValue(alphanumericalValue); + } else if (numericalValue != null) { + result.setNumericalValue(numericalValue); + } else if (qualitativevalueId != null) { + result.setQualitativeValue(load(QualitativeValueImpl.class, qualitativevalueId)); + } + + // add it to fishingTrip + if (fishingTrip.getSurveyMeasurements() == null) { + + //create new set of measurements + fishingTrip.setSurveyMeasurements(Sets.<SurveyMeasurement>newHashSet()); + } + + fishingTrip.getSurveyMeasurements().add(result); + + return result; + } + + protected SurveyMeasurement getSurveyMeasurement(FishingTrip fishingTrip, Integer pmfmId) { + SurveyMeasurement result = null; + + for (SurveyMeasurement vum : fishingTrip.getSurveyMeasurements()) { + if (pmfmId.equals(vum.getPmfm().getId())) { + result = vum; + break; + } + } + + return result; + } + + protected Integer getRecorderDepartmentId() { + // TODO BL : voir si on peut récupérer le departement (du 1er saisisseur ?) + return enumeration.DEPARTMENT_ID_UNKNOWN_RECORDER_DEPARTMENT; + } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java (from rev 1718, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SamplePersistenceHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SamplePersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,180 @@ +package fr.ifremer.tutti.persistence.service.util; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.adagio.core.dao.data.measure.SampleMeasurement; +import fr.ifremer.adagio.core.dao.data.sample.Sample; +import fr.ifremer.adagio.core.dao.data.sample.SampleDao; +import fr.ifremer.adagio.core.dao.referential.QualityFlagImpl; +import fr.ifremer.adagio.core.dao.referential.pmfm.PmfmImpl; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.TuttiEntities; +import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import fr.ifremer.tutti.persistence.service.AttachmentPersistenceService; +import fr.ifremer.tutti.persistence.service.ReferentialPersistenceService; +import org.hibernate.type.IntegerType; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.io.Serializable; +import java.util.Iterator; +import java.util.Set; + +/** + * Helper around {@link Sample}. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.6 + */ +@Component("samplePersistenceHelper") +public class SamplePersistenceHelper extends AbstractPersistenceService { + + @Resource(name = "referentialPersistenceService") + protected ReferentialPersistenceService referentialService; + + @Resource(name = "measurementPersistenceHelper") + protected MeasurementPersistenceHelper measurementPersistenceHelper; + + @Resource(name = "attachmentPersistenceService") + protected AttachmentPersistenceService attachmentPersistenceService; + + @Resource(name = "sampleDao") + protected SampleDao sampleDao; + + public Sample create(Sample sample) { + return sampleDao.create(sample); + } + + public void update(Sample sample) { + sampleDao.update(sample); + } + + public Sample load(Integer id) { + return sampleDao.load(id); + } + + public void deleteSample(Integer sampleId) { + + Sample sample = sampleDao.load(sampleId); + if (sample != null) { + sample.getSampleMeasurements().clear(); + sampleDao.remove(sample); + attachmentPersistenceService.deleteAllAttachment( + AttachementObjectTypeEnum.SAMPLE, + sampleId); + } + } + + public void setSampleMeasurements(Sample target, + CaracteristicMap caracteristics) { + + Set<SampleMeasurement> notChangedSampleMeasurements = Sets.newHashSet(); + if (target.getSampleMeasurements() != null) { + notChangedSampleMeasurements.addAll(target.getSampleMeasurements()); + } + + for (Caracteristic caracteristic : caracteristics.keySet()) { + SampleMeasurement vum = setSampleMeasurement( + target, + caracteristic, + caracteristics.get(caracteristic)); + notChangedSampleMeasurements.remove(vum); + } + + 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); + while (list.hasNext()) { + int colIndex = 0; + Object[] source = list.next(); + Integer pmfmId = (Integer) source[colIndex++]; + Float numericalValue = (Float) source[colIndex++]; + String alphanumericalValue = (String) source[colIndex++]; + Integer qualitativeValueId = (Integer) source[colIndex]; + + Caracteristic caracteristic = referentialService.getCaracteristic(pmfmId); + Serializable value = null; + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: + value = numericalValue; + break; + case QUALITATIVE: + value = TuttiEntities.getQualitativeValue(caracteristic, + qualitativeValueId); + break; + case TEXT: + value = alphanumericalValue; + break; + } + result.put(caracteristic, value); + } + } + + protected SampleMeasurement setSampleMeasurement(Sample sample, + Caracteristic caracteristic, + Serializable value) { + + Integer pmfmId = caracteristic.getIdAsInt(); + + SampleMeasurement result = null; + if (sample.getSampleMeasurements() != null) { + for (SampleMeasurement vum : sample.getSampleMeasurements()) { + if (pmfmId.equals(vum.getPmfm().getId())) { + result = vum; + break; + } + } + } + if (result == null) { + + result = SampleMeasurement.Factory.newInstance(); + + result.setSample(sample); + if (sample.getSampleMeasurements() == null) { + sample.setSampleMeasurements(Sets.newHashSet(result)); + } else { + sample.getSampleMeasurements().add(result); + } + result.setQualityFlag(load(QualityFlagImpl.class, enumeration.QUALITY_FLAG_CODE_NOT_QUALIFIED)); + result.setDepartment(sample.getRecorderDepartment()); + result.setPmfm(load(PmfmImpl.class, pmfmId)); + } + measurementPersistenceHelper.setMeasurement(result, caracteristic, value); + return result; + } + +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java (from rev 1722, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SynchronizationStatusHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/SynchronizationStatusHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,86 @@ +package fr.ifremer.tutti.persistence.service.util; + +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.sample.Sample; +import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; +import fr.ifremer.adagio.core.dao.data.survey.scientificCruise.ScientificCruise; +import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.springframework.stereotype.Component; + +/** + * Helper around SynchronizationStatus. + * <p/> + * Created on 4/22/14. + * + * @author Tony Chemit <chemit@codelutin.com> + * @since 3.5 + */ +@Component("synchronizationStatusHelper") +public class SynchronizationStatusHelper extends AbstractPersistenceService { + + public void setDirty(ScientificCruise scientificCruise) { + String synchronizationStatus = getDirtyValue(); + scientificCruise.setSynchronizationStatus(synchronizationStatus); + } + + public void setDirty(FishingTrip fishingTrip) { + String synchronizationStatus = getDirtyValue(); + fishingTrip.setSynchronizationStatus(synchronizationStatus); + setDirty(fishingTrip.getScientificCruise()); + } + + public void setDirty(CatchBatch catchBatch) { + String synchronizationStatus = getDirtyValue(); + catchBatch.setSynchronizationStatus(synchronizationStatus); + setDirty(catchBatch.getFishingOperation().getFishingTrip()); + } + + public void setDirty(Sample sample) { + String synchronizationStatus = getDirtyValue(); + sample.setSynchronizationStatus(synchronizationStatus); + Batch batch = sample.getBatch(); + if (batch != null && batch instanceof CatchBatch) { + setDirty((CatchBatch) batch); + } else { + setDirty(sample.getFishingOperation().getFishingTrip()); + } + } + + public void setReadyToSynch(String cruiseId) { + + String oldStatus = getDirtyValue(); + String newStatus = SynchronizationStatus.READY_TO_SYNCHRONIZE.getValue(); + + // update scientificCruise + queryUpdate("updateScientificCruiseSynchronizationStatus", + "cruiseId", IntegerType.INSTANCE, cruiseId, + "oldStatus", StringType.INSTANCE, oldStatus, + "newStatus", StringType.INSTANCE, newStatus); + + // update fishingTrip + queryUpdate("updateFishingTripSynchronizationStatus", + "cruiseId", IntegerType.INSTANCE, cruiseId, + "oldStatus", StringType.INSTANCE, oldStatus, + "newStatus", StringType.INSTANCE, newStatus); + + // update catchBatch + queryUpdate("updateCatchBatchSynchronizationStatus", + "cruiseId", IntegerType.INSTANCE, cruiseId, + "oldStatus", StringType.INSTANCE, oldStatus, + "newStatus", StringType.INSTANCE, newStatus); + + // update sample + queryUpdate("updateSampleSynchronizationStatus", + "cruiseId", IntegerType.INSTANCE, cruiseId, + "oldStatus", StringType.INSTANCE, oldStatus, + "newStatus", StringType.INSTANCE, newStatus); + } + + protected String getDirtyValue() { + return SynchronizationStatus.DIRTY.getValue(); + } +} Copied: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/VesselPersonFeaturesPersistenceHelper.java (from rev 1718, trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/VesselPersonFeaturesPersistenceHelper.java) =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/VesselPersonFeaturesPersistenceHelper.java (rev 0) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/util/VesselPersonFeaturesPersistenceHelper.java 2014-04-23 08:11:03 UTC (rev 1723) @@ -0,0 +1,154 @@ +package fr.ifremer.tutti.persistence.service.util; + +/* + * #%L + * Tutti :: Persistence + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.adagio.core.dao.administration.user.Person; +import fr.ifremer.adagio.core.dao.administration.user.PersonImpl; +import fr.ifremer.adagio.core.dao.data.operation.FishingOperation; +import fr.ifremer.adagio.core.dao.data.survey.fishingTrip.FishingTrip; +import fr.ifremer.adagio.core.dao.data.vessel.feature.person.VesselPersonFeatures; +import fr.ifremer.adagio.core.dao.referential.VesselPersonRole; +import fr.ifremer.adagio.core.dao.referential.VesselPersonRoleImpl; +import fr.ifremer.tutti.persistence.service.AbstractPersistenceService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.Map; + +/** + * Helper around {@link VesselPersonFeatures}. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.0 + */ +@Component("vesselPersonFeaturesPersistenceHelper") +public class VesselPersonFeaturesPersistenceHelper extends AbstractPersistenceService { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(VesselPersonFeaturesPersistenceHelper.class); + + public VesselPersonFeaturesPersistenceHelper() { + } + + public VesselPersonRole getScientificCruiseManagerRole() { + return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_SCIENTIFIC_CRUISE_MANAGER); + } + + public VesselPersonRole getSortRoomManagerRole() { + return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_SORT_ROOM_MANAGER); + } + + public VesselPersonRole getRecorderPersonRole() { + return load(VesselPersonRoleImpl.class, enumeration.VESSEL_PERSON_ROLE_ID_RECORDER_PERSON); + } + + public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson, + Integer personId, + FishingTrip fishingTrip, + VesselPersonRole role, + short rankOrder) { + + VesselPersonFeatures vesselPersonFeatures = + vesselPersonFeaturesPerPerson.get(personId); + if (vesselPersonFeatures == null) { + + PersonImpl person = load(PersonImpl.class, personId); + + if (log.isDebugEnabled()) { + log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname()); + } + + vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance(); + vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures); + vesselPersonFeatures.setPerson(person); + + vesselPersonFeatures.setFishingTrip(fishingTrip); + vesselPersonFeatures.setStartDate(fishingTrip.getDepartureDateTime()); + vesselPersonFeatures.setEndDate(fishingTrip.getReturnDateTime()); + vesselPersonFeatures.setVessel(fishingTrip.getVessel()); + vesselPersonFeatures.setProgram(fishingTrip.getProgram()); + + vesselPersonFeatures.setCreationDate(fishingTrip.getCreationDate()); + vesselPersonFeatures.setQualityFlag(fishingTrip.getQualityFlag()); + vesselPersonFeatures.setRankOrder(rankOrder); + } + + addRole(role, vesselPersonFeatures); + } + + public void fillVesselPersonFeatures(Map<Integer, VesselPersonFeatures> vesselPersonFeaturesPerPerson, + Integer personId, + FishingOperation fishingOperation, + VesselPersonRole role, + short rankOrder) { + + VesselPersonFeatures vesselPersonFeatures = + vesselPersonFeaturesPerPerson.get(personId); + if (vesselPersonFeatures == null) { + + PersonImpl person = load(PersonImpl.class, personId); + if (log.isDebugEnabled()) { + log.debug("Create an new vesselPersonFeatures for person: [" + personId + "]" + person.getFirstname() + " - " + person.getLastname()); + } + + vesselPersonFeatures = VesselPersonFeatures.Factory.newInstance(); + vesselPersonFeaturesPerPerson.put(personId, vesselPersonFeatures); + vesselPersonFeatures.setOperation(fishingOperation); + vesselPersonFeatures.setFishingTrip(fishingOperation.getFishingTrip()); + vesselPersonFeatures.setPerson(person); + vesselPersonFeatures.setStartDate(fishingOperation.getStartDateTime()); + vesselPersonFeatures.setEndDate(fishingOperation.getEndDateTime()); + vesselPersonFeatures.setVessel(fishingOperation.getVessel()); + vesselPersonFeatures.setProgram(fishingOperation.getFishingTrip().getProgram()); + + vesselPersonFeatures.setCreationDate(new Date()); + vesselPersonFeatures.setQualityFlag(fishingOperation.getQualityFlag()); + vesselPersonFeatures.setRankOrder(rankOrder); + } + + addRole(role, vesselPersonFeatures); + } + + protected void addRole(VesselPersonRole role, + VesselPersonFeatures vesselPersonFeatures) { + Person person = vesselPersonFeatures.getPerson(); + if (vesselPersonFeatures.getVesselPersonRoles().contains(role)) { + if (log.isWarnEnabled()) { + log.warn("vessel person feature for person: " + person.getId() + " with role: " + role.getName() + " already exist, do not add it twice."); + } + } else { + + // add this new role + if (log.isInfoEnabled()) { + log.info("Add vessel person feature for person: " + person.getId() + " with role: " + role.getName()); + } + vesselPersonFeatures.getVesselPersonRoles().add(role); + + } + } +} \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2014-04-22 22:43:02 UTC (rev 1722) +++ trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2014-04-23 08:11:03 UTC (rev 1723) @@ -31,7 +31,7 @@ # tutti levels log4j.logger.fr.ifremer=INFO -log4j.logger.fr.ifremer.tutti.persistence.service.batch.BatchTreeHelper=DEBUG +log4j.logger.fr.ifremer.tutti.persistence.service.util.BatchTreeHelper=DEBUG #See https://forum.hibernate.org/viewtopic.php?p=2404391 log4j.logger.org.hibernate.engine.StatefulPersistenceContext.ProxyWarnLog=ERROR