Author: kmorin Date: 2013-05-23 11:36:17 +0200 (Thu, 23 May 2013) New Revision: 986 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/986 Log: fixes #2464 [CAMPAGNE] erreur de suppression d'un engin utilis?\195?\169 dans des traits 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/CruisePersistenceServiceImpl.java trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 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-05-23 08:14:40 UTC (rev 985) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/AbstractPersistenceService.java 2013-05-23 09:36:17 UTC (rev 986) @@ -38,11 +38,7 @@ import java.io.Serializable; import java.sql.Timestamp; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Iterator; -import java.util.List; +import java.util.*; /** * TODO @@ -150,7 +146,12 @@ String paramName = (String) params[3 * i]; Type paramType = (Type) params[3 * i + 1]; Object paramValue = params[3 * i + 2]; - query.setParameter(paramName, paramValue, paramType); + + if (paramValue != null && Collection.class.isAssignableFrom(paramValue.getClass())) { + query.setParameterList(paramName, (Collection)paramValue, paramType); + } else { + query.setParameter(paramName, paramValue, paramType); + } if (log.isDebugEnabled()) { log.debug("query [" + queryName + "] (param " + i + " [" + paramName + '=' + paramValue + "])"); 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 2013-05-23 08:14:40 UTC (rev 985) +++ trunk/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/service/CruisePersistenceServiceImpl.java 2013-05-23 09:36:17 UTC (rev 986) @@ -24,6 +24,7 @@ * #L% */ +import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -58,6 +59,8 @@ import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueDao; import fr.ifremer.adagio.core.dao.referential.pmfm.QualitativeValueImpl; import fr.ifremer.adagio.core.dao.technical.synchronization.SynchronizationStatus; +import fr.ifremer.tutti.TuttiBusinessException; +import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.TuttiEntities; @@ -75,6 +78,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.type.IntegerType; +import org.hibernate.type.ListType; +import org.hibernate.type.ObjectType; import org.hibernate.type.StringType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataRetrievalFailureException; @@ -90,6 +95,8 @@ import java.util.Map; import java.util.Set; +import static org.nuiton.i18n.I18n._; + /** * @author tchemit <chemit@codelutin.com> * @since 0.3 @@ -315,14 +322,9 @@ log.info("Change vessel to " + vessel.getId() + " for cruise: " + bean.getId()); } - List<FishingOperation> operations = fishingOperationService.getAllFishingOperation(bean.getId()); - List<FishingOperation> operationsToSave = Lists.newArrayList(); - for (FishingOperation operation : operations) { - FishingOperation modifiedOperation = fishingOperationService.getFishingOperation(operation.getId()); - modifiedOperation.setVessel(vessel); - operationsToSave.add(modifiedOperation); - } - fishingOperationService.saveFishingOperations(operationsToSave); + queryUpdate("updateOperationsVessel", + "cruiseId", IntegerType.INSTANCE, scientificCruise.getId(), + "vesselId", StringType.INSTANCE, scientificCruise.getVessel().getCode()); } return bean; @@ -437,6 +439,26 @@ // Remove deleted gear physical features if (fishingTrip.getGearPhysicalFeatures() != null && notChangedGearPhysicalFeatures.size() > 0) { + List<Integer> gearIds = Lists.transform(Lists.newArrayList(notChangedGearPhysicalFeatures), + new Function<GearPhysicalFeatures, Integer>() { + @Override + public Integer apply(GearPhysicalFeatures input) { + Integer result = null; + if (input != null && input.getGear() != null) { + result = input.getGear().getId(); + } + return result; + } + }); + Iterator<Object[]> list = queryList( + "allFishingOperationsWithGear", + "cruiseId", IntegerType.INSTANCE, Integer.valueOf(target.getId()), + "gearIds", IntegerType.INSTANCE, gearIds + ); + if (list.hasNext()) { + throw new TuttiBusinessException(_("tutti.persistence.cruise.gearUsedInOperations.error")); + } + for (GearPhysicalFeatures guf : notChangedGearPhysicalFeatures) { if (guf.getGearPhysicalMeasurements() != null) { guf.getGearPhysicalMeasurements().clear(); Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-05-23 08:14:40 UTC (rev 985) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties 2013-05-23 09:36:17 UTC (rev 986) @@ -33,6 +33,7 @@ tutti.persistence.batch.validation.vracSpeciesNotFound= tutti.persistence.config.generateEnumFile.error= tutti.persistence.config.generateFile.error= +tutti.persistence.cruise.gearUsedInOperations.error= tutti.persistence.dbMetadata.instanciation.error= tutti.persistence.loader.error= tutti.persistence.mkDir.error= Modified: trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties =================================================================== --- trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-05-23 08:14:40 UTC (rev 985) +++ trunk/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties 2013-05-23 09:36:17 UTC (rev 986) @@ -33,6 +33,7 @@ tutti.persistence.batch.validation.vracSpeciesNotFound=Lot 'Vrac > Espèces' non trouvé, ou configuré avec d'autres critères de classement. tutti.persistence.config.generateEnumFile.error=Erreur lors de la génération du fichier d'énumération de la configuration de la base de données tutti.persistence.config.generateFile.error=Erreur lors de la génération du fichier de configuration de la base de données +tutti.persistence.cruise.gearUsedInOperations.error=Vous essayez d'enlever un ou plusieurs engins qui sont utilisés sur des traits.<br/>Veuillez changer l'engin des traits en question pour pouvoir les enlever de la campagne. tutti.persistence.dbMetadata.instanciation.error=Erreur lors de l'initialisation des metadata de la base de données par la connexion %s tutti.persistence.loader.error=Erreur de conversion du dossier %s en URL tutti.persistence.mkDir.error=Erreur lors de la création du dossier %s Modified: trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml =================================================================== --- trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-05-23 08:14:40 UTC (rev 985) +++ trunk/tutti-persistence/src/main/resources/queries-override.hbm.xml 2013-05-23 09:36:17 UTC (rev 986) @@ -173,6 +173,20 @@ <query-param name="pmfmIdTrawlNet" type="java.lang.Integer"/> </query> + <query cacheable="true" name="updateOperationsVessel"> + <![CDATA[ + UPDATE FishingOperationImpl o + SET o.vessel.id=:vesselId + WHERE + o IN ( + FROM FishingOperationImpl fo + WHERE fo.fishingTrip.scientificCruise.id=:cruiseId + ) + ]]> + <query-param name="cruiseId" type="java.lang.Integer"/> + <query-param name="vesselId" type="java.lang.String"/> + </query> + <query cacheable="true" name="gearCaracteristics"> <![CDATA[ SELECT @@ -231,6 +245,23 @@ <query-param name="pmfmIdMultirigAggregation" type="java.lang.Integer"/> </query> + <query cacheable="true" name="allFishingOperationsWithGear"> + <![CDATA[ + SELECT + o.id AS id + FROM + FishingOperationImpl o + LEFT OUTER JOIN o.gearUseFeatures guf + LEFT OUTER JOIN guf.gear g + WHERE + o.fishingTrip.scientificCruise.id=:cruiseId + AND + g.id in (:gearIds) + ]]> + <query-param name="cruiseId" type="java.lang.Integer"/> + <query-param name="gearIds" type="java.lang.Integer"/> + </query> + <query cacheable="true" name="fishingOperation"> <![CDATA[ SELECT