Author: blavenier Date: 2013-02-11 15:40:21 +0100 (Mon, 11 Feb 2013) New Revision: 391 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/391 Log: Fix : - fishingOperation add preconditions on date - save batchSpecies Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.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/ReferentialPersistenceService.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-02-11 14:40:21 UTC (rev 391) @@ -34,6 +34,7 @@ import org.hibernate.classic.Session; import org.hibernate.type.Type; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.dao.DataIntegrityViolationException; import java.io.Serializable; import java.util.Iterator; @@ -50,6 +51,8 @@ private static final Log log = LogFactory.getLog(AbstractPersistenceService.class); + private boolean debug = false; + /** * Session factory. * @@ -146,9 +149,23 @@ } protected <T extends Serializable> T load(Class<? extends T> clazz, Serializable id) { + // TODO BLA : ajouter une annotation qui rejoue une méthode + // avec debug=true. puis repasse à faux, + // lorsqu'une erreur + if (debug) { + T load = (T) getCurrentSession().get(clazz, id); + if (load == null) { + throw new DataIntegrityViolationException("Unable to load entity " + clazz.getName() + " with id="+id+" : not found in database."); + } + } T load = (T) getCurrentSession().load(clazz, id); return load; } + + protected <T extends Serializable> T get(Class<? extends T> clazz, Serializable id) { + T load = (T) getCurrentSession().get(clazz, id); + return load; + } protected int queryUpdate(String queryName, Object... params) { 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 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/FishingOperationPersistenceServiceImpl.java 2013-02-11 14:40:21 UTC (rev 391) @@ -316,24 +316,21 @@ // Strata : Integer strataId = (Integer) source[colIndex++]; if (strataId != null) { - FishingOperationLocation strata = new FishingOperationLocation(); - strata.setId(strataId.toString()); + FishingOperationLocation strata = referentialService.getFishingOperationLocation(strataId.toString()); result.setStrata(strata); } // Sub Strata : Integer subStrataId = (Integer) source[colIndex++]; if (subStrataId != null) { - FishingOperationLocation subStrata = new FishingOperationLocation(); - subStrata.setId(subStrataId.toString()); + FishingOperationLocation subStrata = referentialService.getFishingOperationLocation(subStrataId.toString()); result.setSubStrata(subStrata); } // Localite : Integer localiteId = (Integer) source[colIndex++]; if (localiteId != null) { - FishingOperationLocation localite = new FishingOperationLocation(); - localite.setId(localiteId.toString()); + FishingOperationLocation localite = referentialService.getFishingOperationLocation(localiteId.toString()); result.setLocation(localite); } @@ -375,6 +372,10 @@ Preconditions.checkNotNull(bean.getId()); Preconditions.checkNotNull(bean.getCruise()); Preconditions.checkNotNull(bean.getCruise().getId()); + + if (bean.getGearShootingStartDate() != null && bean.getGearShootingEndDate() != null) { + Preconditions.checkArgument(bean.getGearShootingStartDate().equals(bean.getGearShootingEndDate()) == false); + } getCurrentSession().clear(); getCurrentSession().setFlushMode(FlushMode.COMMIT); Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceService.java 2013-02-11 14:40:21 UTC (rev 391) @@ -104,6 +104,15 @@ List<FishingOperationLocation> getAllFishingOperationLocation(String zoneId, String strataId, String subStrataId); /** + * Get a location by id (location could be of any type : strata, substrata, localite, etc.). + * + * @param id the id of locations to load + * @return the locations with given ids + * @since 1.0 + */ + FishingOperationLocation getFishingOperationLocation(String id); + + /** * @return all scientific vessels (used by a {@link Cruise}). * @see Cruise#getVessel() * @see Cruise#setVessel(List) Modified: trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java =================================================================== --- trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/ReferentialPersistenceServiceImpl.java 2013-02-11 14:40:21 UTC (rev 391) @@ -212,7 +212,27 @@ parentLocationLevelId); return result; } + + @Override + public FishingOperationLocation getFishingOperationLocation(String id) { + Object[] source = queryUnique( + "fishingOperationLocationById", + "locationId", IntegerType.INSTANCE, Integer.valueOf(id) + ); + if (source == null) { + return null; + } + FishingOperationLocation target = new FishingOperationLocation(); + target.setId(String.valueOf(source[0])); + target.setLabel((String) source[1]); + target.setName((String) source[2]); + target.setLocationLevel((Integer) source[3]); + setStatus((fr.ifremer.adagio.core.dao.referential.Status) source[4], target); + + return target; + } + @Override public List<Vessel> getAllScientificVessel() { 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 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/SpeciesBatchPersistenceServiceImpl.java 2013-02-11 14:40:21 UTC (rev 391) @@ -170,13 +170,18 @@ Preconditions.checkNotNull(bean.getFishingOperation()); Preconditions.checkNotNull(bean.getFishingOperation().getId()); // TODO BLA uncomment this after v1.0 : - // Preconditions.checkNotNull(bean.getCatchBatch()); + //Preconditions.checkNotNull(bean.getCatchBatch()); + + getCurrentSession().setFlushMode(FlushMode.ALWAYS); SortingBatch batch = SortingBatch.Factory.newInstance(); beanToEntity(bean, batch, parentBatchId, true); batch = sortingBatchDao.create(batch); bean.setId(String.valueOf(batch.getId())); + + getCurrentSession().flush(); + return bean; } @@ -220,7 +225,9 @@ @Override public void changeSpeciesBatchSpecies(String batchId, Species species) { - //TODO + + log.debug("Changing species for batch id="+batchId); + } @Override @@ -330,7 +337,6 @@ // TODO BLA : prendre le service du 1er saisisseur ? Integer recorderDepartmentId = enumeration.DEPARTMENT_ID_UNKNOWN_RECORDER_DEPARTMENT; - // Create lists to store all updates, then remove not updated items Set<QuantificationMeasurement> notChangedQuantificationMeasurements = new HashSet<QuantificationMeasurement>(); if (target.getQuantificationMeasurements() != null) { @@ -359,12 +365,12 @@ } // Weight or SampleCategoryWeight - if (copyIfNull && source.getWeight() == null) { + if (copyIfNull && source.getWeight() == null && source.getSampleCategoryWeight() == null) { // Nothing to do : will be removed later, using notChangedSortingMeasurements - } else if (source.getSampleCategoryWeight() != null) { + } else if (source.getSampleCategoryWeight() != null && source.getWeight() == null) { QuantificationMeasurement quantificationMeasurement = measurementHelper.setQuantificationMeasurement(target, enumeration.PMFM_ID_WEIGHT_MEASURED, recorderDepartmentId, source.getSampleCategoryWeight(), true); notChangedQuantificationMeasurements.remove(quantificationMeasurement); - } else if (source.getWeight() != null) { + } else if (source.getWeight() != null && source.getSampleCategoryWeight() == null) { QuantificationMeasurement quantificationMeasurement = measurementHelper.setQuantificationMeasurement(target, enumeration.PMFM_ID_WEIGHT_MEASURED, recorderDepartmentId, source.getWeight(), true); notChangedQuantificationMeasurements.remove(quantificationMeasurement); } @@ -403,7 +409,7 @@ if (copyIfNull && (source.getSpecies() == null || parentBatchId != null)) { target.setReferenceTaxon(null); } else if (source.getSpecies() != null && parentBatchId == null) { - ReferenceTaxon referenceTaxon = load(ReferenceTaxonImpl.class, Integer.valueOf(source.getSpecies().getId())); + ReferenceTaxon referenceTaxon = load(ReferenceTaxonImpl.class, Integer.valueOf(source.getSpecies().getReferenceTaxonId())); target.setReferenceTaxon(referenceTaxon); } Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-02-11 12:45:44 UTC (rev 390) +++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-02-11 14:40:21 UTC (rev 391) @@ -575,6 +575,22 @@ <query-param name="statusValidCode" type="java.lang.String"/> <query-param name="statusTemporaryCode" type="java.lang.String"/> </query> + + <query cacheable="true" name="fishingOperationLocationById"> + <![CDATA[ + SELECT + l.id as locationId, + l.label as locationLabel, + l.name as locationName, + l.locationLevel.id as locationLevelId, + l.status as status + FROM + LocationImpl l + WHERE + l.id = :locationId + ]]> + <query-param name="locationId" type="java.lang.Integer"/> + </query> <!-- [REF-04] et [REF-05] Get all vessel for a given vesselType --> <query cacheable="true" name="allVessels">