This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 150c45eb905551c9182b600095f797c2bdd001a6 Author: Tony CHEMIT <chemit@codelutin.com> Date: Thu Feb 19 17:10:54 2015 +0100 ca continue l'import... --- .../genericformat/GenericFormatImportContext.java | 54 +++++++++++++++------- .../genericformat/GenericFormatImportResult.java | 19 ++++++++ .../genericformat/GenericFormatImportService.java | 52 +++++++++++++++------ .../GenericformatImportPersitenceHelper.java | 31 +++++++++++-- .../resources/i18n/tutti-service_en_GB.properties | 7 +++ .../resources/i18n/tutti-service_fr_FR.properties | 10 ++-- 6 files changed, 136 insertions(+), 37 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java index a0bfceb..9afba1a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java @@ -3,6 +3,8 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Cruises; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.PersistenceService; @@ -23,6 +25,7 @@ import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpec import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import java.io.Closeable; import java.io.IOException; @@ -50,12 +53,12 @@ public class GenericFormatImportContext implements Closeable { private final GenericformatImportPersitenceHelper persitenceHelper; - public GenericFormatImportContext(GenericFormatImportRequest importRequest, ProgressionModel progressionModel, PersistenceService persistenceService) { + public GenericFormatImportContext(GenericFormatImportRequest importRequest, ProgressionModel progressionModel, PersistenceService persistenceService, Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { this.importRequest = importRequest; this.progressionModel = progressionModel; this.importResult = new GenericFormatImportResult(importRequest); this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, importRequest, importResult); - this.persitenceHelper = new GenericformatImportPersitenceHelper(this, persistenceService); + this.persitenceHelper = new GenericformatImportPersitenceHelper(this, persistenceService, cruiseDecorator, fishingOperationDecorator); } public GenericFormatImportRequest getImportRequest() { @@ -89,21 +92,6 @@ public class GenericFormatImportContext implements Closeable { } - public boolean isCruiseAlreadyImported(Cruise cruise) { - - boolean equals = false; - for (Cruise existingCruise : importResult.getImportedCruises()) { - - equals = Cruises.equals(cruise, existingCruise); - if (equals) { - break; - } - - } - return equals; - - } - public Cruise getImportedCruise(Cruise importRowCruise) { Cruise result = null; @@ -120,6 +108,13 @@ public class GenericFormatImportContext implements Closeable { } + public boolean isCruiseAlreadyImported(Cruise cruise) { + + Cruise importedCruise = getImportedCruise(cruise); + return importedCruise !=null; + + } + public Gear getGear(Cruise cruise, Gear gear, int rankOrder) { Gear result = null; @@ -137,6 +132,31 @@ public class GenericFormatImportContext implements Closeable { } + public FishingOperation getImportedFishingOperation(FishingOperation importRowFishingOperation) { + + Cruise cruise = importRowFishingOperation.getCruise(); + + FishingOperation result = null; + for (FishingOperation importedFishingOperation : importResult.getImportedFishingOperations(cruise)) { + + boolean equals = FishingOperations.equals(importRowFishingOperation, importedFishingOperation); + if (equals) { + result = importedFishingOperation; + break; + } + + } + return result; + + } + + public boolean isFishingOperationAlreadyImported(FishingOperation fishingOperation) { + + FishingOperation importedFishingOperation = getImportedFishingOperation(fishingOperation); + return importedFishingOperation!=null; + + } + public CsvConsumerForSampleCategory loadSampleCategories() { CsvConsumerForSampleCategory consumer = new CsvConsumerForSampleCategory(importRequest.getArchive().getSampleCategoryModelPath(), importRequest.getCsvSeparator(), importEntityParserFactory); return consumer; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java index b551a79..24471a5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportResult.java @@ -1,7 +1,11 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.ImmutableSetMultimap; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.Multimap; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -21,6 +25,8 @@ public class GenericFormatImportResult { private final Set<Cruise> importedCruises; + private final Multimap<Cruise, FishingOperation> importedFishingOperations; + private final Set<String> errors; private TuttiProtocol protocol; @@ -39,6 +45,7 @@ public class GenericFormatImportResult { this.importRequest = importRequest; this.importedCruises = new LinkedHashSet<>(); this.errors = new LinkedHashSet<>(); + this.importedFishingOperations = LinkedHashMultimap.create(); } public GenericFormatImportRequest getImportRequest() { @@ -49,6 +56,14 @@ public class GenericFormatImportResult { return ImmutableSet.copyOf(importedCruises); } + public Multimap<Cruise, FishingOperation> getImportedFishingOperations() { + return ImmutableSetMultimap.copyOf(importedFishingOperations); + } + + public Set<FishingOperation> getImportedFishingOperations(Cruise cruise) { + return ImmutableSet.copyOf(importedFishingOperations.get(cruise)); + } + public TuttiProtocol getProtocol() { return protocol; } @@ -61,6 +76,10 @@ public class GenericFormatImportResult { importedCruises.add(cruise); } + public void addImportedFishingOperation(FishingOperation fishingOperation) { + importedFishingOperations.put(fishingOperation.getCruise(), fishingOperation); + } + public void addError(String error) { errors.add(error); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java index c584601..9c6625c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportService.java @@ -2,6 +2,8 @@ package fr.ifremer.tutti.service.genericformat; import com.google.common.base.Preconditions; import fr.ifremer.tutti.persistence.ProgressionModel; +import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; @@ -52,6 +54,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; import org.nuiton.csv.ImportRuntimeException; +import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.File; @@ -80,8 +83,6 @@ public class GenericFormatImportService extends AbstractTuttiService { protected WeightComputingService weightComputingService; - protected DecoratorService decoratorService; - protected ReferentialTemporaryGearService referentialTemporaryGearService; protected ReferentialTemporaryPersonService referentialTemporaryPersonService; @@ -92,12 +93,15 @@ public class GenericFormatImportService extends AbstractTuttiService { protected ProtocolImportExportService protocolImportExportService; + protected Decorator<FishingOperation> fishingOperationDecorator; + + protected Decorator<Cruise> cruiseDecorator; + @Override public void setServiceContext(TuttiServiceContext context) { super.setServiceContext(context); persistenceService = getService(PersistenceService.class); - decoratorService = getService(DecoratorService.class); validationService = getService(ValidationService.class); weightComputingService = getService(WeightComputingService.class); referentialTemporaryGearService = getService(ReferentialTemporaryGearService.class); @@ -106,6 +110,10 @@ public class GenericFormatImportService extends AbstractTuttiService { referentialTemporaryVesselService = getService(ReferentialTemporaryVesselService.class); protocolImportExportService = getService(ProtocolImportExportService.class); + DecoratorService decoratorService = getService(DecoratorService.class); + cruiseDecorator = decoratorService.getDecoratorByType(Cruise.class); + fishingOperationDecorator = decoratorService.getDecoratorByType(FishingOperation.class); + } public int getImportProgramNbSteps(File importFile) { @@ -147,7 +155,7 @@ public class GenericFormatImportService extends AbstractTuttiService { program, context.getSampleCategoryModel()); - try (GenericFormatImportContext importContext = new GenericFormatImportContext(request, progressionModel, persistenceService)) { + try (GenericFormatImportContext importContext = new GenericFormatImportContext(request, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator)) { GenericFormatImportResult result = new GenericFormatImportResult(request); @@ -186,7 +194,7 @@ public class GenericFormatImportService extends AbstractTuttiService { int nbCategories = 0; for (ImportRow<SampleCategoryRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); nbCategories++; } @@ -403,7 +411,7 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForSurvey consumer = importContext.loadSurveys()) { for (ImportRow<SurveyRow> row : consumer) { - consumer.checkRow(row, importContext, validationService); + consumer.validateRow(row, importContext, validationService); consumer.prepareRowForPersist(row); @@ -426,7 +434,7 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForGearCaracteristic consumer = importContext.loadGearCaracteristics()) { for (ImportRow<GearCaracteristicRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); consumer.prepareRowForPersist(row); @@ -449,7 +457,15 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForOperation consumer = importContext.loadOperations()) { for (ImportRow<OperationRow> row : consumer) { - consumer.checkRow(row, importContext,validationService); + consumer.validateRow(row, importContext, validationService); + + consumer.prepareRowForPersist(row); + + OperationRow bean = row.getBean(); + + importContext.getPersitenceHelper().persistFishingOperation(bean.getFishingOperation()); + + importContext.getPersitenceHelper().persistCatchBatch(bean.getCatchBatch()); } } catch (IOException e) { @@ -468,7 +484,9 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForParameter consumer = importContext.loadParameters()) { for (ImportRow<ParameterRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); + + consumer.prepareRowForPersist(row); } } catch (IOException e) { @@ -487,7 +505,9 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForCatch consumer = importContext.loadCatches()) { for (ImportRow<CatchRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); + + consumer.prepareRowForPersist(row); } } catch (IOException e) { @@ -506,7 +526,9 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForAccidentalCatch consumer = importContext.loadAccidentalCatches()) { for (ImportRow<AccidentalCatchRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); + + consumer.prepareRowForPersist(row); } } catch (IOException e) { @@ -525,7 +547,9 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForIndividualObservation consumer = importContext.loadIndividualObservations()) { for (ImportRow<IndividualObservationRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); + + consumer.prepareRowForPersist(row); } } catch (IOException e) { @@ -544,7 +568,9 @@ public class GenericFormatImportService extends AbstractTuttiService { try (CsvConsumerForMarineLitter consumer = importContext.loadMarineLitters()) { for (ImportRow<MarineLitterRow> row : consumer) { - consumer.checkRow(row, importContext); + consumer.validateRow(row, importContext); + + consumer.prepareRowForPersist(row); } } catch (IOException e) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java index 8739011..0ec9ba7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersitenceHelper.java @@ -1,12 +1,15 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.PersistenceService; import org.apache.commons.collections4.MapUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.decorator.Decorator; import java.util.Set; @@ -25,15 +28,21 @@ public class GenericformatImportPersitenceHelper { private final PersistenceService persistenceService; - public GenericformatImportPersitenceHelper(GenericFormatImportContext importContext, PersistenceService persistenceService) { + private final Decorator<Cruise> cruiseDecorator; + + private final Decorator<FishingOperation> fishingOperationDecorator; + + public GenericformatImportPersitenceHelper(GenericFormatImportContext importContext, PersistenceService persistenceService, Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { this.importContext = importContext; this.persistenceService = persistenceService; + this.cruiseDecorator = cruiseDecorator; + this.fishingOperationDecorator = fishingOperationDecorator; } public void persistCruise(Cruise cruise) { if (log.isInfoEnabled()) { - log.info("Persist cruise: " + cruise.getName()); + log.info("Persist cruise: " + cruiseDecorator.toString(cruise)); } Cruise persistedCruise = persistenceService.createCruise(cruise); importContext.getImportResult().addImportedCruise(persistedCruise); @@ -52,7 +61,7 @@ public class GenericformatImportPersitenceHelper { if (MapUtils.isNotEmpty(caracteristics)) { if (log.isInfoEnabled()) { - log.info("Persist " + caracteristics.size() + " gear caracteristics for gear: " + gear.getName() + " of cruise: " + cruise.getName()); + log.info("Persist " + caracteristics.size() + " gear caracteristics for gear: " + gear.getName() + " of cruise: " + cruiseDecorator.toString(cruise)); } persistenceService.saveGearCaracteristics(gear, cruise); @@ -63,4 +72,20 @@ public class GenericformatImportPersitenceHelper { } + public void persistFishingOperation(FishingOperation fishingOperation) { + + if (log.isInfoEnabled()) { + log.info("Persist fishing Operation: " + fishingOperationDecorator.toString(fishingOperation)); + } + + } + + public void persistCatchBatch(CatchBatch catchBatch) { + + if (log.isInfoEnabled()) { + log.info("Persist catchBatch of fishing Operation: " + fishingOperationDecorator.toString(catchBatch.getFishingOperation())); + } + + } + } diff --git a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties index 1a5c17b..dba959a 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties @@ -16,7 +16,12 @@ tutti.genericFormat.import.accidentalCatches= tutti.genericFormat.import.catches= tutti.genericFormat.import.cruises= tutti.genericFormat.import.error.cruiseAlreadyExist= +tutti.genericFormat.import.error.cruiseAlreadyImported= +tutti.genericFormat.import.error.cruiseNotFound= tutti.genericFormat.import.error.cruiseNotValid= +tutti.genericFormat.import.error.fishingOperationAlreadyImported= +tutti.genericFormat.import.error.fishingOperationNotValid= +tutti.genericFormat.import.error.gearNotFoundInCruise= tutti.genericFormat.import.gearCaracteristics= tutti.genericFormat.import.individualObservations= tutti.genericFormat.import.marineLitters= @@ -103,8 +108,10 @@ tutti.service.bigfinImport.warning.speciesBatch.tooCategorized= tutti.service.bigfinimport.error.no.protocol= tutti.service.compressZipFile.error= tutti.service.context.serviceInstanciation.error= +tutti.service.csv.caracteristic.qualitativeValue.notFound= tutti.service.csv.parse.entityNotFound= tutti.service.csv.parse.foreignEntityNotFound= +tutti.service.csv.parse.qualitativeValueError= tutti.service.cvs.format.error= tutti.service.cvs.mandatory.value= tutti.service.error.species.null= diff --git a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties index 3cabedf..5bfa000 100644 --- a/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties +++ b/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties @@ -12,17 +12,17 @@ tutti.genericFormat.import.catches=Import des captures tutti.genericFormat.import.cruises=Import des campagnes tutti.genericFormat.import.error.cruiseAlreadyExist=Il existe déjà une campagne avec ce nom %s tutti.genericFormat.import.error.cruiseAlreadyImported=La campagne avec ce nom %s a déjà été importée -tutti.genericFormat.import.error.cruiseNotFound=La campagne (année: %s, série: %s, série partielle %s) n'existe pas -tutti.genericFormat.import.error.gearNotFoundInCruise=L'engin %s (position %s) non trouvé dans la campagne (année: %s, série: %s, série partielle %s) +tutti.genericFormat.import.error.cruiseNotFound=La campagne (année\: %s, série\: %s, série partielle %s) n'existe pas +tutti.genericFormat.import.error.cruiseNotValid= +tutti.genericFormat.import.error.fishingOperationAlreadyImported=Un trait %s - %s - %s -%s a déjà été importé dans la campagne %s tutti.genericFormat.import.error.fishingOperationNotValid=La campagne n'est pas valide \:\n%s +tutti.genericFormat.import.error.gearNotFoundInCruise=L'engin %s (position %s) non trouvé dans la campagne (année\: %s, série\: %s, série partielle %s) tutti.genericFormat.import.gearCaracteristics=Import des caractéristiques d'engin tutti.genericFormat.import.individualObservations=Import des observations individuelles tutti.genericFormat.import.marineLitters=Import des macro-déchets tutti.genericFormat.import.operations=Import des traits tutti.genericFormat.import.parameters=Import des paramètres de trait tutti.genericFormat.import.protocol=Import d'un nouveau protocol %s -tutti.service.csv.parse.qualitativeValueError=La valeur %s de la caractéristique %s n'est pas valide: %s -tutti.service.csv.caracteristic.qualitativeValue.notFound=La caractéristique qualitative %s n'a pas de value d'id %s tutti.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation tutti.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s tutti.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s @@ -97,8 +97,10 @@ tutti.service.bigfinImport.warning.speciesBatch.tooCategorized=Le lot '<strong>% tutti.service.bigfinimport.error.no.protocol=Impossible de faire un import Bigfin sans protocol. tutti.service.compressZipFile.error=Erreur lors de la compression du dossier %1s dans le fichier %2s tutti.service.context.serviceInstanciation.error=Erreur lors de l'instanciation du service %s +tutti.service.csv.caracteristic.qualitativeValue.notFound=La caractéristique qualitative %s n'a pas de value d'id %s tutti.service.csv.parse.entityNotFound=L'entité de type %1s avec la propriété %2s de valeur %3s n'a pas été trouvée tutti.service.csv.parse.foreignEntityNotFound=L'entité de type %1s avec l'identifiant %3s n'a pas été trouvée +tutti.service.csv.parse.qualitativeValueError=La valeur %s de la caractéristique %s n'est pas valide\: %s tutti.service.cvs.format.error=Erreur lors du formatage de la valeur %s tutti.service.cvs.mandatory.value=Valeur obligatoire tutti.service.error.species.null=Taxon non trouvé -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.