This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository tutti. See http://git.codelutin.com/tutti.git commit 8eb2beb9b45b0f693db06d2cf5b27066a8d05f4f Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Mar 25 16:15:06 2015 +0100 reusinage du context + ajout du modèle de catégorisation dans le context + nettoyage a la fin de la validation ou import --- ...ntext.java => GenericFormatContextSupport.java} | 45 +- .../genericformat/GenericFormatImportContext.java | 478 +-------------------- .../GenericFormatImportEntityParserFactory.java | 4 +- .../genericformat/GenericFormatImportRequest.java | 10 +- .../genericformat/GenericFormatImportService.java | 14 +- .../GenericFormatImportValidationDataContext.java | 4 +- .../GenericFormatImportValidationHelper.java | 8 +- .../genericformat/GenericFormatResultSupport.java | 16 +- .../GenericFormatValidateFileContext.java | 13 +- .../consumer/CsvConsumerForAccidentalCatch.java | 4 +- .../consumer/CsvConsumerForCatch.java | 4 +- .../consumer/CsvConsumerForGearCaracteristic.java | 4 +- .../CsvConsumerForIndividualObservation.java | 4 +- .../consumer/CsvConsumerForMarineLitter.java | 4 +- .../consumer/CsvConsumerForOperation.java | 4 +- .../consumer/CsvConsumerForParameter.java | 4 +- .../consumer/CsvConsumerForSampleCategory.java | 43 +- .../consumer/CsvConsumerForSurvey.java | 4 +- .../genericformat/csv/SampleCategoryRow.java | 4 + .../importactions/ImportActionSupport.java | 6 +- .../importactions/ImportProtocolAction.java | 4 +- .../importactions/ImportReferentialGearAction.java | 4 +- .../ImportReferentialPersonAction.java | 4 +- .../ImportReferentialSpeciesAction.java | 4 +- .../ImportReferentialVesselAction.java | 4 +- ...yAction.java => ImpotSampleCategoryAction.java} | 68 +-- .../importactions/RestoreAfterImportAction.java | 53 +++ .../importactions/RestoreAfterValidateAction.java | 86 ++++ .../ValidateAccidentalCatchAction.java | 4 +- .../importactions/ValidateCatchAction.java | 4 +- .../ValidateGearCaracteristicAction.java | 4 +- .../ValidateIndividualObservationAction.java | 4 +- .../importactions/ValidateMarineLitterAction.java | 4 +- .../importactions/ValidateOperationAction.java | 4 +- .../importactions/ValidateParameterAction.java | 4 +- .../importactions/ValidateSurveyAction.java | 4 +- .../resources/i18n/tutti-service_fr_FR.properties | 6 +- 37 files changed, 311 insertions(+), 631 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/GenericFormatContextSupport.java similarity index 94% copy from tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportContext.java copy to tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatContextSupport.java index 0aba098..6e32462 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/GenericFormatContextSupport.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; 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.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -74,7 +75,7 @@ import java.util.Set; * @author Tony Chemit - chemit@codelutin.com * @since 3.13 */ -public class GenericFormatImportContext implements Closeable { +public abstract class GenericFormatContextSupport implements Closeable { private final GenericFormatImportRequest importRequest; @@ -92,6 +93,8 @@ public class GenericFormatImportContext implements Closeable { private TuttiProtocol importedProtocol; + private SampleCategoryModel importedSampleCategoryModel; + private final GenericFormatCsvFileResult sampleCategoryFileResult; private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; @@ -122,11 +125,13 @@ public class GenericFormatImportContext implements Closeable { private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; - public GenericFormatImportContext(GenericFormatImportRequest importRequest, - ProgressionModel progressionModel, - PersistenceService persistenceService, - Decorator<Cruise> cruiseDecorator, - Decorator<FishingOperation> fishingOperationDecorator) { + protected abstract void onClose(); + + public GenericFormatContextSupport(GenericFormatImportRequest importRequest, + ProgressionModel progressionModel, + PersistenceService persistenceService, + Decorator<Cruise> cruiseDecorator, + Decorator<FishingOperation> fishingOperationDecorator) { Preconditions.checkNotNull(importRequest); Preconditions.checkNotNull(progressionModel); @@ -164,14 +169,22 @@ public class GenericFormatImportContext implements Closeable { } @Override - public void close() { + public final void close() { - validationHelper.close(); + try { + + onClose(); + + } finally { + + validationHelper.close(); + + for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { + cruiseContext.close(); + } + cruiseContexts.clear(); - for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { - cruiseContext.close(); } - cruiseContexts.clear(); } @@ -255,6 +268,14 @@ public class GenericFormatImportContext implements Closeable { this.importedProtocol = importedProtocol; } + public SampleCategoryModel getImportedSampleCategoryModel() { + return importedSampleCategoryModel; + } + + public void setImportedSampleCategoryModel(SampleCategoryModel importedSampleCategoryModel) { + this.importedSampleCategoryModel = importedSampleCategoryModel; + } + public Cruise getExistingCruise(Cruise cruise) { return importRequest.getExistingCruise(cruise); } @@ -353,7 +374,7 @@ public class GenericFormatImportContext implements Closeable { public CsvConsumerForCatch loadCatches(boolean failFast) { catchFileResult.setImported(true); catchFileResult.setLinesCount(importRequest.getArchive().getCatchPathLineCount()); - CsvConsumerForCatch consumer = new CsvConsumerForCatch(importRequest.getArchive().getCatchPath(), importRequest.getCsvSeparator(), importRequest.getSampleCategoryModel(), importEntityParserFactory, failFast); + CsvConsumerForCatch consumer = new CsvConsumerForCatch(importRequest.getArchive().getCatchPath(), importRequest.getCsvSeparator(), getImportedSampleCategoryModel(), importEntityParserFactory, failFast); return consumer; } 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 0aba098..037f8b9 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 @@ -24,103 +24,22 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ -import com.google.common.base.Preconditions; -import com.google.common.collect.ImmutableSet; import fr.ifremer.tutti.persistence.ProgressionModel; -import fr.ifremer.tutti.persistence.entities.data.CatchBatch; 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.protocol.TuttiProtocol; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.TuttiReferentialEntity; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.ValidationService; -import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; -import fr.ifremer.tutti.service.csv.CaracteristicValueParserFormatter; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; -import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; -import fr.ifremer.tutti.service.genericformat.csv.RowWithCruiseContextSupport; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryGear; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryPerson; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporarySpecies; -import fr.ifremer.tutti.service.referential.consumer.CsvConsumerForTemporaryVessel; -import org.apache.commons.collections4.CollectionUtils; +import fr.ifremer.tutti.service.genericformat.importactions.RestoreAfterImportAction; import org.nuiton.decorator.Decorator; -import java.io.Closeable; -import java.io.File; -import java.io.Serializable; -import java.nio.file.Path; -import java.text.ParseException; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; - /** * Created on 2/5/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.13 */ -public class GenericFormatImportContext implements Closeable { - - private final GenericFormatImportRequest importRequest; - - private final ProgressionModel progressionModel; - - private final Decorator<Cruise> cruiseDecorator; - - private final Decorator<FishingOperation> fishingOperationDecorator; - - private final GenericFormatImportEntityParserFactory importEntityParserFactory; - - private final GenericFormatImportValidationHelper validationHelper; - - private Set<String> archiveLayoutErrors; - - private TuttiProtocol importedProtocol; - - private final GenericFormatCsvFileResult sampleCategoryFileResult; - - private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; - - private final GenericFormatReferentialImportResult<Person, Integer> referentialTemporaryPersonFileResult; - - private final GenericFormatReferentialImportResult<Species, Integer> referentialTemporarySpeciesFileResult; - - private final GenericFormatReferentialImportResult<Vessel, String> referentialTemporaryVesselFileResult; - - private final GenericFormatFileResult protocolFileResult; - - private final GenericFormatCsvFileResult surveyFileResult; - - private final GenericFormatCsvFileResult accidentalCatchFileResult; - - private final GenericFormatCsvFileResult individualObservationFileResult; - - private final GenericFormatCsvFileResult marineLitterFileResult; - - private final GenericFormatCsvFileResult catchFileResult; - - private final GenericFormatCsvFileResult parameterFileResult; - - private final GenericFormatCsvFileResult operationFileResult; - - private final GenericFormatCsvFileResult gearCaracteristicFileResult; +public class GenericFormatImportContext extends GenericFormatContextSupport { - private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; + private final RestoreAfterImportAction closeAction; public GenericFormatImportContext(GenericFormatImportRequest importRequest, ProgressionModel progressionModel, @@ -128,400 +47,17 @@ public class GenericFormatImportContext implements Closeable { Decorator<Cruise> cruiseDecorator, Decorator<FishingOperation> fishingOperationDecorator) { - Preconditions.checkNotNull(importRequest); - Preconditions.checkNotNull(progressionModel); - Preconditions.checkNotNull(persistenceService); - Preconditions.checkNotNull(cruiseDecorator); - Preconditions.checkNotNull(fishingOperationDecorator); - - this.importRequest = importRequest; - this.progressionModel = progressionModel; - this.cruiseDecorator = cruiseDecorator; - this.fishingOperationDecorator = fishingOperationDecorator; - this.importEntityParserFactory = new GenericFormatImportEntityParserFactory(persistenceService, this); - this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); - this.cruiseContexts = new LinkedHashMap<>(); - - GenericFormatArchive archive = importRequest.getArchive(); - - this.sampleCategoryFileResult = createFileResult(archive.getSampleCategoryModelPath(), true); - - this.referentialTemporaryGearFileResult = createReferentialFileResult(archive.getTemporaryReferentialGearsPath()); - this.referentialTemporaryPersonFileResult = createReferentialFileResult(archive.getTemporaryReferentialPersonsPath()); - this.referentialTemporarySpeciesFileResult = createReferentialFileResult(archive.getTemporaryReferentialSpeciesPath()); - this.referentialTemporaryVesselFileResult = createReferentialFileResult(archive.getTemporaryReferentialVesselsPath()); - this.protocolFileResult = createFileResult(archive.getProtocolPath(), false); - - this.surveyFileResult = createFileResult(archive.getSurveyPath(), true); - this.gearCaracteristicFileResult = createFileResult(archive.getGearCaracteristicsPath(), true); - this.operationFileResult = createFileResult(archive.getOperationPath(), true); - this.parameterFileResult = createFileResult(archive.getParameterPath(), true); - this.catchFileResult = createFileResult(archive.getCatchPath(), true); - this.marineLitterFileResult = createFileResult(archive.getMarineLitterPath(), true); - this.individualObservationFileResult = createFileResult(archive.getIndividualObservationPath(), true); - this.accidentalCatchFileResult = createFileResult(archive.getAccidentalCatchPath(), true); + super(importRequest, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator); + this.closeAction = new RestoreAfterImportAction(this, persistenceService); } @Override - public void close() { - - validationHelper.close(); + protected void onClose() { - for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { - cruiseContext.close(); - } - cruiseContexts.clear(); - - } - - public boolean isArchiveLayoutValid() { - return CollectionUtils.isEmpty(archiveLayoutErrors); - } - - public void setArchiveLayoutErrors(Set<String> archiveLayoutErrors) { - this.archiveLayoutErrors = archiveLayoutErrors; - } + closeAction.execute(); - public Set<String> getArchiveLayoutErrors() { - return ImmutableSet.copyOf(archiveLayoutErrors); } - public GenericFormatCsvFileResult getSampleCategoryFileResult() { - return sampleCategoryFileResult; - } - - public GenericFormatReferentialImportResult<Gear, Integer> getReferentialTemporaryGearFileResult() { - return referentialTemporaryGearFileResult; - } - - public GenericFormatReferentialImportResult<Person, Integer> getReferentialTemporaryPersonFileResult() { - return referentialTemporaryPersonFileResult; - } - - public GenericFormatReferentialImportResult<Species, Integer> getReferentialTemporarySpeciesFileResult() { - return referentialTemporarySpeciesFileResult; - } - - public GenericFormatReferentialImportResult<Vessel, String> getReferentialTemporaryVesselFileResult() { - return referentialTemporaryVesselFileResult; - } - - public GenericFormatFileResult getProtocolFileResult() { - return protocolFileResult; - } - - public GenericFormatCsvFileResult getSurveyFileResult() { - return surveyFileResult; - } - - public GenericFormatCsvFileResult getGearCaracteristicFileResult() { - return gearCaracteristicFileResult; - } - - public GenericFormatCsvFileResult getOperationFileResult() { - return operationFileResult; - } - - public GenericFormatCsvFileResult getParameterFileResult() { - return parameterFileResult; - } - - public GenericFormatCsvFileResult getCatchFileResult() { - return catchFileResult; - } - - public GenericFormatCsvFileResult getMarineLitterFileResult() { - return marineLitterFileResult; - } - - public GenericFormatCsvFileResult getIndividualObservationFileResult() { - return individualObservationFileResult; - } - - public GenericFormatCsvFileResult getAccidentalCatchFileResult() { - return accidentalCatchFileResult; - } - - public GenericFormatImportRequest getImportRequest() { - return importRequest; - } - - public TuttiProtocol getImportedProtocol() { - return importedProtocol; - } - - public void setImportedProtocol(TuttiProtocol importedProtocol) { - this.importedProtocol = importedProtocol; - } - - public Cruise getExistingCruise(Cruise cruise) { - return importRequest.getExistingCruise(cruise); - } - - public boolean isCruiseAlreadyImported(Cruise cruise) { - - GenericFormatImportCruiseContext cruiseContext = getCruiseContext(cruise); - return cruiseContext != null; - - } - - public void addImportedCruise(Cruise cruise, boolean override) { - - String cruiseId = cruise.getId(); - GenericFormatImportCruiseContext cruiseContext = new GenericFormatImportCruiseContext(cruise, override, cruiseDecorator.toString(cruise)); - cruiseContexts.put(cruiseId, cruiseContext); - - } - - public void addImportedFishingOperation(FishingOperation fishingOperation, CatchBatch catchBatch) { - - GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - String fishingOperationLabel = fishingOperationDecorator.toString(fishingOperation); - cruiseContext.addFishingOperation(fishingOperation, catchBatch, fishingOperationLabel); - - } - - public GenericFormatImportCruiseContext getCruiseContext(RowWithCruiseContextSupport row) { - - Cruise cruise = row.getCruise(); - - GenericFormatImportCruiseContext result = null; - for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { - - boolean equals = Cruises.equals(cruise, cruiseContext.getCruise()); - if (equals) { - result = cruiseContext; - break; - } - - } - return result; - - } - - public GenericFormatImportCruiseContext getCruiseContext(Cruise cruise) { - - GenericFormatImportCruiseContext cruiseContext = cruiseContexts.get(cruise.getId()); - return cruiseContext; - - } - - public GenericFormatImportOperationContext getFishingOperationContext(FishingOperation fishingOperation) { - - GenericFormatImportCruiseContext cruiseContext = getCruiseContext(fishingOperation.getCruise()); - GenericFormatImportOperationContext result = cruiseContext.getFishingOperationContext(fishingOperation); - return result; - - } - - public CsvConsumerForSampleCategory loadSampleCategories(boolean failFast) { - sampleCategoryFileResult.setImported(true); - surveyFileResult.setLinesCount(importRequest.getArchive().getSampleCategoryLineCount()); - CsvConsumerForSampleCategory consumer = new CsvConsumerForSampleCategory(importRequest.getArchive().getSampleCategoryModelPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForSurvey loadSurveys(boolean failFast) { - surveyFileResult.setImported(true); - surveyFileResult.setLinesCount(importRequest.getArchive().getSurveyLineCount()); - CsvConsumerForSurvey consumer = new CsvConsumerForSurvey(importRequest.getArchive().getSurveyPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForGearCaracteristic loadGearCaracteristics(boolean failFast) { - gearCaracteristicFileResult.setImported(true); - gearCaracteristicFileResult.setLinesCount(importRequest.getArchive().getGearCaracteristicsPathLineCount()); - CsvConsumerForGearCaracteristic consumer = new CsvConsumerForGearCaracteristic(importRequest.getArchive().getGearCaracteristicsPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForOperation loadOperations(boolean failFast) { - operationFileResult.setImported(true); - operationFileResult.setLinesCount(importRequest.getArchive().getOperationPathLineCount()); - CsvConsumerForOperation consumer = new CsvConsumerForOperation(importRequest.getArchive().getOperationPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForParameter loadParameters(boolean failFast) { - parameterFileResult.setImported(true); - parameterFileResult.setLinesCount(importRequest.getArchive().getParameterPathLineCount()); - CsvConsumerForParameter consumer = new CsvConsumerForParameter(importRequest.getArchive().getParameterPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForCatch loadCatches(boolean failFast) { - catchFileResult.setImported(true); - catchFileResult.setLinesCount(importRequest.getArchive().getCatchPathLineCount()); - CsvConsumerForCatch consumer = new CsvConsumerForCatch(importRequest.getArchive().getCatchPath(), importRequest.getCsvSeparator(), importRequest.getSampleCategoryModel(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForMarineLitter loadMarineLitters(boolean failFast) { - marineLitterFileResult.setImported(true); - marineLitterFileResult.setLinesCount(importRequest.getArchive().getMarineLitterPathLineCount()); - CsvConsumerForMarineLitter consumer = new CsvConsumerForMarineLitter(importRequest.getArchive().getMarineLitterPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForIndividualObservation loadIndividualObservations(boolean failFast) { - individualObservationFileResult.setImported(true); - individualObservationFileResult.setLinesCount(importRequest.getArchive().getIndividualObservationPathLineCount()); - CsvConsumerForIndividualObservation consumer = new CsvConsumerForIndividualObservation(importRequest.getArchive().getIndividualObservationPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForAccidentalCatch loadAccidentalCatches(boolean failFast) { - accidentalCatchFileResult.setImported(true); - accidentalCatchFileResult.setLinesCount(importRequest.getArchive().getAccidentalCatchPathLineCount()); - CsvConsumerForAccidentalCatch consumer = new CsvConsumerForAccidentalCatch(importRequest.getArchive().getAccidentalCatchPath(), importRequest.getCsvSeparator(), importEntityParserFactory, failFast); - return consumer; - } - - public CsvConsumerForTemporaryGear loadTemporaryGears(boolean failFast) { - referentialTemporaryGearFileResult.setImported(true); - referentialTemporaryGearFileResult.setLinesCount(importRequest.getArchive().getTemporaryReferentialGearLineCount()); - CsvConsumerForTemporaryGear consumer = new CsvConsumerForTemporaryGear(importRequest.getArchive().getTemporaryReferentialGearsPath(), importRequest.getCsvSeparator(), failFast); - return consumer; - } - - public CsvConsumerForTemporaryPerson loadTemporaryPersons(boolean failFast) { - referentialTemporaryPersonFileResult.setImported(true); - referentialTemporaryPersonFileResult.setLinesCount(importRequest.getArchive().getTemporaryReferentialPersonLineCount()); - CsvConsumerForTemporaryPerson consumer = new CsvConsumerForTemporaryPerson(importRequest.getArchive().getTemporaryReferentialPersonsPath(), importRequest.getCsvSeparator(), failFast); - return consumer; - } - - public CsvConsumerForTemporarySpecies loadTemporarySpecies(boolean failFast) { - referentialTemporarySpeciesFileResult.setImported(true); - referentialTemporarySpeciesFileResult.setLinesCount(importRequest.getArchive().getTemporaryReferentialSpeciesLineCount()); - CsvConsumerForTemporarySpecies consumer = new CsvConsumerForTemporarySpecies(importRequest.getArchive().getTemporaryReferentialSpeciesPath(), importRequest.getCsvSeparator(), failFast); - return consumer; - } - - public CsvConsumerForTemporaryVessel loadTemporaryVessels(boolean failFast) { - referentialTemporaryVesselFileResult.setImported(true); - referentialTemporaryVesselFileResult.setLinesCount(importRequest.getArchive().getTemporaryReferentialVesselLineCount()); - CsvConsumerForTemporaryVessel consumer = new CsvConsumerForTemporaryVessel(importRequest.getArchive().getTemporaryReferentialVesselsPath(), importRequest.getCsvSeparator(), failFast); - return consumer; - } - - public Serializable parseCaracteristicValue(Caracteristic caracteristic, String value) throws CaracteristicValueParseException { - - CaracteristicValueParserFormatter parser = CaracteristicValueParserFormatter.newParser(caracteristic); - try { - - Serializable caracteristicValue = parser.parse(value); - return caracteristicValue; - - } catch (ParseException e) { - throw new CaracteristicValueParseException(caracteristic, value, e.getMessage()); - } - - } - - public void increments(String message) { - progressionModel.increments(message); - } - - public void addStepsInProgressionModel(int size) { - progressionModel.adaptTotal(progressionModel.getTotal() + size); - } - - public GenericFormatImportValidationHelper getValidationHelper() { - return validationHelper; - } - - public void doActionOnCruiseContexts(CruiseContextAction action) { - - for (GenericFormatImportCruiseContext cruiseContext : cruiseContexts.values()) { - - action.onCruise(cruiseContext, progressionModel); - - } - } - - public boolean isTechnicalFilesValid() { - return isArchiveLayoutValid() - && sampleCategoryFileResult.isValid() - && referentialTemporaryGearFileResult.isValid() - && referentialTemporaryPersonFileResult.isValid() - && referentialTemporarySpeciesFileResult.isValid() - && referentialTemporaryVesselFileResult.isValid() - && protocolFileResult.isValid(); - } - - public boolean isCanImportReferentialGear() { - return isArchiveLayoutValid() && referentialTemporaryGearFileResult.isFound(); - } - - public boolean isCanImportReferentialPerson() { - return isArchiveLayoutValid() && referentialTemporaryPersonFileResult.isFound(); - } - - public boolean isCanImportReferentialSpecies() { - return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isFound(); - } - - public boolean isCanImportReferentialVessel() { - return isArchiveLayoutValid() && referentialTemporaryVesselFileResult.isFound(); - } - - public boolean isCanImportProtocol() { - return isArchiveLayoutValid() && referentialTemporarySpeciesFileResult.isValid() && protocolFileResult.isFound(); - } - - public boolean isCanImportSurvey() { - return isTechnicalFilesValid(); - } - - public boolean isCanImportGearCaracteristic() { - return isTechnicalFilesValid() && getSurveyFileResult().isValid(); - } - - public boolean isCanImportOperation() { - return isTechnicalFilesValid() && getSurveyFileResult().isValid(); - } - - public boolean isCanImportParameter() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportCatch() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportMarineLitter() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportAccidentalCatch() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - public boolean isCanImportIndividualObservation() { - return isTechnicalFilesValid() && getOperationFileResult().isValid(); - } - - - public static interface CruiseContextAction { - - void onCruise(GenericFormatImportCruiseContext cruiseContext, ProgressionModel progressionModel); - - } - - protected GenericFormatCsvFileResult createFileResult(Path path, boolean mandatory) { - - File file = path.toFile(); - return new GenericFormatCsvFileResult(file.getName(), mandatory, file.exists()); - - } - - protected <E extends TuttiReferentialEntity, K extends Comparable<K>> GenericFormatReferentialImportResult<E, K> createReferentialFileResult(Path path) { - - File file = path.toFile(); - return new GenericFormatReferentialImportResult<>(file.getName(), file.exists()); - - } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java index c58b7b4..e07d9b5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportEntityParserFactory.java @@ -54,7 +54,7 @@ public class GenericFormatImportEntityParserFactory { private final PersistenceService persistenceService; - private final GenericFormatImportContext importContext; + private final GenericFormatContextSupport importContext; private ProgramParserFormatter programParser; @@ -89,7 +89,7 @@ public class GenericFormatImportEntityParserFactory { private CaracteristicValueParserFormatter marineLitterSizeCategoryValueParser; public GenericFormatImportEntityParserFactory(PersistenceService persistenceService, - GenericFormatImportContext importContext) { + GenericFormatContextSupport importContext) { this.persistenceService = persistenceService; this.importContext = importContext; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java index 7217138..1d56f7d 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportRequest.java @@ -55,7 +55,7 @@ public class GenericFormatImportRequest implements Serializable { private final Set<Cruise> existingCruises; - private final TuttiProtocol oldProtocol; + private final TuttiProtocol protocol; private final Program program; @@ -67,14 +67,14 @@ public class GenericFormatImportRequest implements Serializable { Program program, SampleCategoryModel sampleCategoryModel, Set<Cruise> cruises, - TuttiProtocol oldProtocol) { + TuttiProtocol protocol) { this.importConfiguration = importConfiguration; this.archive = archive; this.csvSeparator = csvSeparator; this.sampleCategoryModel = sampleCategoryModel; this.program = program; this.existingCruises = cruises; - this.oldProtocol = oldProtocol; + this.protocol = protocol; this.startingDate = new Date(); } @@ -95,8 +95,8 @@ public class GenericFormatImportRequest implements Serializable { return existingCruises; } - public TuttiProtocol getOldProtocol() { - return oldProtocol; + public TuttiProtocol getProtocol() { + return protocol; } public Program getProgram() { 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 f932a0f..e5d54b4 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 @@ -56,7 +56,7 @@ import fr.ifremer.tutti.service.genericformat.importactions.ValidateIndividualOb import fr.ifremer.tutti.service.genericformat.importactions.ValidateMarineLitterAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateOperationAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateParameterAction; -import fr.ifremer.tutti.service.genericformat.importactions.ValidateSampleCategoryAction; +import fr.ifremer.tutti.service.genericformat.importactions.ImpotSampleCategoryAction; import fr.ifremer.tutti.service.genericformat.importactions.ValidateSurveyAction; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -121,14 +121,14 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { GenericFormatImportRequest importRequest = createImportRequest(importConfiguration, archive); try { - GenericFormatValidateFileResult result = doValidate(importRequest, progressionModel); + GenericFormatValidateFileResult result = doValidate(importRequest, progressionModel); generateValidateReport(result, progressionModel); - return result; + } finally { - TuttiProtocol oldProtocol = importRequest.getOldProtocol(); + TuttiProtocol oldProtocol = importRequest.getProtocol(); if (oldProtocol != null) { @@ -229,7 +229,7 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - protected void validateArchiveLayout(GenericFormatImportContext importContext) { + protected void validateArchiveLayout(GenericFormatContextSupport importContext) { try { importContext.getImportRequest().getArchive().validateArchiveLayout(); @@ -370,9 +370,9 @@ public class GenericFormatImportService extends GenericFormatServiceSupport { } - protected void addTechnicalActions(GenericFormatImportContext importContext, Set<ImportActionSupport> actions) { + protected void addTechnicalActions(GenericFormatContextSupport importContext, Set<ImportActionSupport> actions) { - actions.add(new ValidateSampleCategoryAction(importContext)); + actions.add(new ImpotSampleCategoryAction(importContext, persistenceService)); actions.add(new ImportReferentialGearAction(importContext, referentialTemporaryGearService)); actions.add(new ImportReferentialPersonAction(importContext, referentialTemporaryPersonService)); actions.add(new ImportReferentialSpeciesAction(importContext, referentialTemporarySpeciesService)); diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java index fb881b2..94765d3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationDataContext.java @@ -49,9 +49,9 @@ public class GenericFormatImportValidationDataContext extends TuttiValidationDat private FishingOperation fishingOperation; - private final GenericFormatImportContext importContext; + private final GenericFormatContextSupport importContext; - public GenericFormatImportValidationDataContext(GenericFormatImportContext importContext) { + public GenericFormatImportValidationDataContext(GenericFormatContextSupport importContext) { this.importContext = importContext; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java index ab69cac..31b9d94 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportValidationHelper.java @@ -63,7 +63,7 @@ public class GenericFormatImportValidationHelper implements Closeable { private final GenericFormatImportValidationDataContext validationDataContext; - public GenericFormatImportValidationHelper(GenericFormatImportContext importContext, ValidationService validationService) { + public GenericFormatImportValidationHelper(GenericFormatContextSupport importContext, ValidationService validationService) { this.validationService = validationService; this.validationDataContext = new GenericFormatImportValidationDataContext(importContext); this.originalValidationDataContextSupport = TuttiValidationDataContextSupport.setValidationContext(validationDataContext, true); @@ -148,7 +148,7 @@ public class GenericFormatImportValidationHelper implements Closeable { } } - public <R extends RowWithCruiseContextSupport> GenericFormatImportCruiseContext getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatImportContext importContext) { + public <R extends RowWithCruiseContextSupport> GenericFormatImportCruiseContext getCruise(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatContextSupport importContext) { R bean = row.getBean(); @@ -173,7 +173,7 @@ public class GenericFormatImportValidationHelper implements Closeable { } - public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatImportContext importContext, ImportRow<R> row, Gear gear, short rankOrder) { + public <R extends RowWithCruiseContextSupport> Gear getGear(CsvComsumer<R, ?> consumer, GenericFormatContextSupport importContext, ImportRow<R> row, Gear gear, short rankOrder) { Cruise cruise = row.getBean().getCruise(); GenericFormatImportCruiseContext cruiseContext = importContext.getCruiseContext(cruise); @@ -187,7 +187,7 @@ public class GenericFormatImportValidationHelper implements Closeable { } - public <R extends RowWithOperationContextSupport> GenericFormatImportOperationContext getFishingOperationContext(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatImportContext importContext) { + public <R extends RowWithOperationContextSupport> GenericFormatImportOperationContext getFishingOperationContext(CsvComsumer<R, ?> consumer, ImportRow<R> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext fishingOperationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java index 4015373..09d57b1 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatResultSupport.java @@ -25,9 +25,7 @@ package fr.ifremer.tutti.service.genericformat; */ import com.google.common.collect.ImmutableSet; -import fr.ifremer.tutti.persistence.entities.data.Cruise; import fr.ifremer.tutti.persistence.entities.data.Program; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Person; @@ -86,7 +84,7 @@ public abstract class GenericFormatResultSupport implements Serializable { private final GenericFormatCsvFileResult accidentalCatchFileResult; - protected GenericFormatResultSupport(GenericFormatImportContext importContext) { + protected GenericFormatResultSupport(GenericFormatContextSupport importContext) { this.importRequest = importContext.getImportRequest(); this.protocol = importContext.getImportedProtocol(); @@ -212,18 +210,6 @@ public abstract class GenericFormatResultSupport implements Serializable { return importRequest.getImportConfiguration(); } - public SampleCategoryModel getSampleCategoryModel() { - return importRequest.getSampleCategoryModel(); - } - - public Set<Cruise> getExistingCruises() { - return importRequest.getExistingCruises(); - } - - public TuttiProtocol getOldProtocol() { - return importRequest.getOldProtocol(); - } - public Program getProgram() { return importRequest.getProgram(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java index 5faf8de..0b11594 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatValidateFileContext.java @@ -29,6 +29,7 @@ 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.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.importactions.RestoreAfterValidateAction; import org.nuiton.decorator.Decorator; /** @@ -37,7 +38,9 @@ import org.nuiton.decorator.Decorator; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatValidateFileContext extends GenericFormatImportContext { +public class GenericFormatValidateFileContext extends GenericFormatContextSupport { + + private final RestoreAfterValidateAction closeAction; public GenericFormatValidateFileContext(GenericFormatImportRequest importRequest, ProgressionModel progressionModel, @@ -46,6 +49,14 @@ public class GenericFormatValidateFileContext extends GenericFormatImportContext Decorator<FishingOperation> fishingOperationDecorator) { super(importRequest, progressionModel, persistenceService, cruiseDecorator, fishingOperationDecorator); + this.closeAction = new RestoreAfterValidateAction(this, persistenceService); + + } + + @Override + protected void onClose() { + + closeAction.execute(); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java index 0034714..2694a7e 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForAccidentalCatch.java @@ -30,7 +30,7 @@ import fr.ifremer.tutti.persistence.entities.data.AccidentalBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchModel; @@ -57,7 +57,7 @@ public class CsvConsumerForAccidentalCatch extends CsvComsumer<AccidentalCatchRo super(file, AccidentalCatchModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportOperationContext validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<AccidentalCatchRow> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext operationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java index 85ef134..2ffdb69 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForCatch.java @@ -40,7 +40,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.csv.CatchModel; @@ -80,7 +80,7 @@ public class CsvConsumerForCatch extends CsvComsumer<CatchRow, CatchModel> { } - public GenericFormatImportOperationContext validateRow(ImportRow<CatchRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<CatchRow> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext operationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java index f900cc2..7dcbd28 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForGearCaracteristic.java @@ -28,7 +28,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportValidationHelper; @@ -51,7 +51,7 @@ public class CsvConsumerForGearCaracteristic extends CsvComsumer<GearCaracterist super(file, GearCaracteristicModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportCruiseContext validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportCruiseContext validateRow(ImportRow<GearCaracteristicRow> row, GenericFormatContextSupport importContext) { GenericFormatImportCruiseContext cruiseContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java index a71b28e..b7a7575 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForIndividualObservation.java @@ -30,7 +30,7 @@ import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationModel; @@ -57,7 +57,7 @@ public class CsvConsumerForIndividualObservation extends CsvComsumer<IndividualO super(file, IndividualObservationModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<IndividualObservationRow> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext operationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java index b406b66..a233c52 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForMarineLitter.java @@ -26,7 +26,7 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.csv.MarineLitterModel; @@ -47,7 +47,7 @@ public class CsvConsumerForMarineLitter extends CsvComsumer<MarineLitterRow, Mar super(file, MarineLitterModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportOperationContext validateRow(ImportRow<MarineLitterRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<MarineLitterRow> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext operationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java index d7f61d7..87fe198 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForOperation.java @@ -28,7 +28,7 @@ import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportValidationHelper; @@ -54,7 +54,7 @@ public class CsvConsumerForOperation extends CsvComsumer<OperationRow, Operation super(file, OperationModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportCruiseContext validateRow(ImportRow<OperationRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportCruiseContext validateRow(ImportRow<OperationRow> row, GenericFormatContextSupport importContext) { GenericFormatImportCruiseContext cruiseContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java index fd6c4a2..129e6ea 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForParameter.java @@ -27,7 +27,7 @@ package fr.ifremer.tutti.service.genericformat.consumer; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.csv.CaracteristicValueParseException; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.csv.ParameterModel; @@ -49,7 +49,7 @@ public class CsvConsumerForParameter extends CsvComsumer<ParameterRow, Parameter super(file, ParameterModel.forImport(separator, parserFactory), reportError); } - public GenericFormatImportOperationContext validateRow(ImportRow<ParameterRow> row, GenericFormatImportContext importContext) { + public GenericFormatImportOperationContext validateRow(ImportRow<ParameterRow> row, GenericFormatContextSupport importContext) { GenericFormatImportOperationContext operationContext = null; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java index 8832e58..22296dd 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSampleCategory.java @@ -24,10 +24,8 @@ package fr.ifremer.tutti.service.genericformat.consumer; * #L% */ -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryModel; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; @@ -35,7 +33,7 @@ import org.apache.commons.lang3.StringUtils; import org.nuiton.csv.ImportRow; import java.nio.file.Path; -import java.util.Objects; +import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -51,44 +49,31 @@ public class CsvConsumerForSampleCategory extends CsvComsumer<SampleCategoryRow, super(file, SampleCategoryModel.forImport(separator, parserFactory), reportError); } - public void validateRow(ImportRow<SampleCategoryRow> row, GenericFormatImportContext importContext) { + public void validateRow(ImportRow<SampleCategoryRow> row, Set<String> existingCodes, Set<Integer> existingCaracteristicIds) { if (row.isValid()) { - int categoryIndex = (int) row.getLineNumber() - 1; - fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel sampleCategoryModel = importContext.getImportRequest().getSampleCategoryModel(); + SampleCategoryRow bean = row.getBean(); - int nbSampling = sampleCategoryModel.getNbSampling(); - if (nbSampling >= categoryIndex) { + String code = bean.getCode(); - SampleCategoryRow bean = row.getBean(); - SampleCategoryModelEntry categoryEntry = sampleCategoryModel.getCategoryByIndex(categoryIndex); + if (StringUtils.isBlank(code)) { - String code = bean.getCode(); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCode"))); - if (StringUtils.isBlank(code)) { - - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCode"))); - - } else { - - if (!Objects.equals(categoryEntry.getCode(), code)) { - - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching", categoryEntry.getCode(), code))); - - } + } else if (!existingCodes.add(code)) { + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCode", code))); + } - Caracteristic caracteristic = bean.getCaracteristic(); - if (caracteristic == null) { + Caracteristic caracteristic = bean.getCaracteristic(); + if (caracteristic == null) { - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic"))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic"))); - } else if (!Objects.equals(categoryEntry.getCategoryId(), caracteristic.getIdAsInt())) { + } else if (!existingCaracteristicIds.add(caracteristic.getIdAsInt())) { - addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching", categoryEntry.getCategoryId(), caracteristic.getIdAsInt()))); + addCheckError(row, new IllegalStateException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCaracteristic", caracteristic.getIdAsInt()))); - } - } } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java index 42c76ec..31b5e5f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/consumer/CsvConsumerForSurvey.java @@ -29,7 +29,7 @@ import fr.ifremer.tutti.persistence.entities.data.Program; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrder; import fr.ifremer.tutti.persistence.entities.referential.GearWithOriginalRankOrders; import fr.ifremer.tutti.service.csv.CsvComsumer; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatImportEntityParserFactory; import fr.ifremer.tutti.service.genericformat.GenericFormatImportValidationHelper; import fr.ifremer.tutti.service.genericformat.csv.SurveyModel; @@ -54,7 +54,7 @@ public class CsvConsumerForSurvey extends CsvComsumer<SurveyRow, SurveyModel> { super(file, SurveyModel.forImport(separator, parserFactory), reportError); } - public void validateRow(ImportRow<SurveyRow> row, GenericFormatImportContext importContext) { + public void validateRow(ImportRow<SurveyRow> row, GenericFormatContextSupport importContext) { if (row.isValid()) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryRow.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryRow.java index b0d832e..cec3689 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryRow.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/csv/SampleCategoryRow.java @@ -47,6 +47,10 @@ public class SampleCategoryRow implements Serializable { private SampleCategoryModelEntry sampleCategoryModelEntry; + public SampleCategoryModelEntry getSampleCategoryModelEntry() { + return sampleCategoryModelEntry; + } + public void setSampleCategoryModelEntry(SampleCategoryModelEntry sampleCategoryModelEntry) { this.sampleCategoryModelEntry = sampleCategoryModelEntry; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java index dee7743..94477d8 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportActionSupport.java @@ -24,7 +24,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; /** * Created on 3/3/15. @@ -34,13 +34,13 @@ import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; */ public abstract class ImportActionSupport { - protected final GenericFormatImportContext importContext; + protected final GenericFormatContextSupport importContext; protected abstract boolean canExecute(); protected abstract void doExecute(); - protected ImportActionSupport(GenericFormatImportContext importContext) { + protected ImportActionSupport(GenericFormatContextSupport importContext) { this.importContext = importContext; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java index 32b3b05..680b3b9 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportProtocolAction.java @@ -29,8 +29,8 @@ import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.genericformat.GenericFormatArchive; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.protocol.ProtocolImportExportService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -56,7 +56,7 @@ public class ImportProtocolAction extends ImportActionSupport { private final ProtocolImportExportService protocolImportExportService; - public ImportProtocolAction(GenericFormatImportContext importContext, PersistenceService persistenceService, ProtocolImportExportService protocolImportExportService) { + public ImportProtocolAction(GenericFormatContextSupport importContext, PersistenceService persistenceService, ProtocolImportExportService protocolImportExportService) { super(importContext); this.persistenceService = persistenceService; this.protocolImportExportService = protocolImportExportService; diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java index ceb09eb..2e94785 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialGearAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; */ import fr.ifremer.tutti.persistence.entities.referential.Gear; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; @@ -55,7 +55,7 @@ public class ImportReferentialGearAction extends ImportActionSupport { private final ReferentialTemporaryGearService referentialTemporaryGearService; - public ImportReferentialGearAction(GenericFormatImportContext importContext, ReferentialTemporaryGearService referentialTemporaryGearService) { + public ImportReferentialGearAction(GenericFormatContextSupport importContext, ReferentialTemporaryGearService referentialTemporaryGearService) { super(importContext); this.referentialTemporaryGearService = referentialTemporaryGearService; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java index 3af42ae..3ad5c2c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialPersonAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; */ import fr.ifremer.tutti.persistence.entities.referential.Person; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; @@ -55,7 +55,7 @@ public class ImportReferentialPersonAction extends ImportActionSupport { private final ReferentialTemporaryPersonService referentialTemporaryPersonService; - public ImportReferentialPersonAction(GenericFormatImportContext importContext, ReferentialTemporaryPersonService referentialTemporaryPersonService) { + public ImportReferentialPersonAction(GenericFormatContextSupport importContext, ReferentialTemporaryPersonService referentialTemporaryPersonService) { super(importContext); this.referentialTemporaryPersonService = referentialTemporaryPersonService; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java index dc9a594..dcf2203 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialSpeciesAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; */ import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; @@ -55,7 +55,7 @@ public class ImportReferentialSpeciesAction extends ImportActionSupport { private final ReferentialTemporarySpeciesService referentialTemporarySpeciesService; - public ImportReferentialSpeciesAction(GenericFormatImportContext importContext, ReferentialTemporarySpeciesService referentialTemporarySpeciesService) { + public ImportReferentialSpeciesAction(GenericFormatContextSupport importContext, ReferentialTemporarySpeciesService referentialTemporarySpeciesService) { super(importContext); this.referentialTemporarySpeciesService = referentialTemporarySpeciesService; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java index 2d213d6..78d46c3 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportReferentialVesselAction.java @@ -25,7 +25,7 @@ package fr.ifremer.tutti.service.genericformat.importactions; */ import fr.ifremer.tutti.persistence.entities.referential.Vessel; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatReferentialImportResult; import fr.ifremer.tutti.service.referential.ReferentialImportRequest; import fr.ifremer.tutti.service.referential.ReferentialImportResult; @@ -55,7 +55,7 @@ public class ImportReferentialVesselAction extends ImportActionSupport { private final ReferentialTemporaryVesselService referentialTemporaryVesselService; - public ImportReferentialVesselAction(GenericFormatImportContext importContext, ReferentialTemporaryVesselService referentialTemporaryVesselService) { + public ImportReferentialVesselAction(GenericFormatContextSupport importContext, ReferentialTemporaryVesselService referentialTemporaryVesselService) { super(importContext); this.referentialTemporaryVesselService = referentialTemporaryVesselService; } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java similarity index 56% rename from tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java rename to tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java index 2c33ae6..8b805a5 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSampleCategoryAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImpotSampleCategoryAction.java @@ -26,8 +26,9 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModelEntry; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSampleCategory; import fr.ifremer.tutti.service.genericformat.csv.SampleCategoryRow; import org.apache.commons.logging.Log; @@ -37,7 +38,9 @@ import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; import java.io.IOException; -import java.util.LinkedHashSet; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; import java.util.Set; import static org.nuiton.i18n.I18n.t; @@ -48,13 +51,16 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class ValidateSampleCategoryAction extends ImportActionSupport { +public class ImpotSampleCategoryAction extends ImportActionSupport { /** Logger. */ - private static final Log log = LogFactory.getLog(ValidateSampleCategoryAction.class); + private static final Log log = LogFactory.getLog(ImpotSampleCategoryAction.class); - public ValidateSampleCategoryAction(GenericFormatImportContext importContext) { + private final PersistenceService persistenceService; + + public ImpotSampleCategoryAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { super(importContext); + this.persistenceService = persistenceService; } @Override @@ -71,48 +77,30 @@ public class ValidateSampleCategoryAction extends ImportActionSupport { importContext.increments(t("tutti.service.genericFormat.import.sampleCategoryModel")); + List<SampleCategoryModelEntry> categories = new ArrayList<>(); + GenericFormatCsvFileResult importFileResult = importContext.getSampleCategoryFileResult(); try (CsvConsumerForSampleCategory consumer = importContext.loadSampleCategories(false)) { - SampleCategoryModel sampleCategoryModel = importContext.getImportRequest().getSampleCategoryModel(); - int nbExpectedSampling = sampleCategoryModel.getNbSampling(); + Set<String> existingCodes = new HashSet<>(); + Set<Integer> existingCaracteristicIds = new HashSet<>(); - Set<String> categoryCodesFromApplication = new LinkedHashSet<>(); - for (SampleCategoryModelEntry sampleCategoryModelEntry : sampleCategoryModel.getCategory()) { - categoryCodesFromApplication.add(sampleCategoryModelEntry.getCode()); - } - - Set<String> categoryCodesFromImport = new LinkedHashSet<>(); for (ImportRow<SampleCategoryRow> row : consumer) { - consumer.validateRow(row, importContext); - SampleCategoryRow bean = row.getBean(); - categoryCodesFromImport.add(bean.getCode()); - } - - importFileResult.flushErrors(consumer); - - int nbActualSampling = categoryCodesFromImport.size(); - - if (nbActualSampling < nbExpectedSampling) { - - // Il manque des catégories dans l'import - Set<String> missingCodes = new LinkedHashSet<>(categoryCodesFromApplication); - missingCodes.removeAll(categoryCodesFromImport); - throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories", missingCodes)); + consumer.validateRow(row, existingCodes, existingCaracteristicIds); - } else if (nbActualSampling > nbExpectedSampling) { + if (row.isValid()) { - // Il manque des catégories dans l'application + SampleCategoryRow bean = row.getBean(); + categories.add(bean.getSampleCategoryModelEntry()); - Set<String> missingCodes = new LinkedHashSet<>(categoryCodesFromImport); - missingCodes.removeAll(categoryCodesFromApplication); - - throw new ImportRuntimeException(t("tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories", missingCodes)); + } } + importFileResult.flushErrors(consumer); + } catch (IOException e) { throw new ApplicationTechnicalException("Could not close sampleCategory.csv file", e); } catch (ImportRuntimeException e) { @@ -121,6 +109,18 @@ public class ValidateSampleCategoryAction extends ImportActionSupport { } + if (importFileResult.isValid()) { + + SampleCategoryModel sampleCategoryModel = new SampleCategoryModel(categories); + + if (log.isInfoEnabled()) { + log.info("Will use sample category model: " + sampleCategoryModel); + } + persistenceService.setSampleCategoryModel(sampleCategoryModel); + importContext.setImportedSampleCategoryModel(sampleCategoryModel); + + } + } } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterImportAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterImportAction.java new file mode 100644 index 0000000..8965ba9 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterImportAction.java @@ -0,0 +1,53 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 3/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.15 + */ +public class RestoreAfterImportAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(RestoreAfterImportAction.class); + + private final PersistenceService persistenceService; + + public RestoreAfterImportAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + super(importContext); + this.persistenceService = persistenceService; + } + + @Override + protected boolean canExecute() { + return true; + } + + @Override + protected void doExecute() { + + GenericFormatImportRequest importRequest = importContext.getImportRequest(); + + rollbackSampleCategoryModel(importRequest); + + } + + protected void rollbackSampleCategoryModel(GenericFormatImportRequest importRequest) { + + SampleCategoryModel sampleCategoryModel = importRequest.getSampleCategoryModel(); + + if (log.isInfoEnabled()) { + log.info("Rollback previous sample cateogry model: " + sampleCategoryModel); + } + persistenceService.setSampleCategoryModel(sampleCategoryModel); + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterValidateAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterValidateAction.java new file mode 100644 index 0000000..f4c11d6 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/RestoreAfterValidateAction.java @@ -0,0 +1,86 @@ +package fr.ifremer.tutti.service.genericformat.importactions; + +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; +import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; +import fr.ifremer.tutti.service.genericformat.GenericFormatImportRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 3/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.15 + */ +public class RestoreAfterValidateAction extends ImportActionSupport { + + /** Logger. */ + private static final Log log = LogFactory.getLog(RestoreAfterValidateAction.class); + + private final PersistenceService persistenceService; + + public RestoreAfterValidateAction(GenericFormatContextSupport importContext, PersistenceService persistenceService) { + super(importContext); + this.persistenceService = persistenceService; + } + + @Override + protected boolean canExecute() { + return true; + } + + @Override + protected void doExecute() { + + GenericFormatImportRequest importRequest = importContext.getImportRequest(); + + try { + + rollbackSampleCategoryModel(importRequest); + + } finally { + + rollbackProtocol(importRequest); + + } + + } + + protected void rollbackSampleCategoryModel(GenericFormatImportRequest importRequest) { + + SampleCategoryModel sampleCategoryModel = importRequest.getSampleCategoryModel(); + + if (log.isInfoEnabled()) { + log.info("Rollback previous sample cateogry model: " + sampleCategoryModel); + } + persistenceService.setSampleCategoryModel(sampleCategoryModel); + + } + + protected void rollbackProtocol(GenericFormatImportRequest importRequest) { + + TuttiProtocol previousProtocol = importRequest.getProtocol(); + if (previousProtocol != null) { + + if (log.isInfoEnabled()) { + log.info("Rollback previous protocol: " + previousProtocol); + } + persistenceService.setProtocol(previousProtocol); + + } + + TuttiProtocol importedProtocol = importContext.getImportedProtocol(); + if (importedProtocol != null) { + + if (log.isInfoEnabled()) { + log.info("Delete imported protocol: " + importedProtocol); + } + persistenceService.deleteProtocol(importedProtocol.getId()); + + } + + + } +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java index a683b7a..56b7627 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateAccidentalCatchAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForAccidentalCatch; import fr.ifremer.tutti.service.genericformat.csv.AccidentalCatchRow; @@ -50,7 +50,7 @@ public class ValidateAccidentalCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateAccidentalCatchAction.class); - public ValidateAccidentalCatchAction(GenericFormatImportContext importContext) { + public ValidateAccidentalCatchAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java index eeaa9ae..94037ee 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateCatchAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForCatch; import fr.ifremer.tutti.service.genericformat.csv.CatchRow; @@ -50,7 +50,7 @@ public class ValidateCatchAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateCatchAction.class); - public ValidateCatchAction(GenericFormatImportContext importContext) { + public ValidateCatchAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java index 793b1bb..486e1c7 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateGearCaracteristicAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForGearCaracteristic; import fr.ifremer.tutti.service.genericformat.csv.GearCaracteristicRow; @@ -50,7 +50,7 @@ public class ValidateGearCaracteristicAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateGearCaracteristicAction.class); - public ValidateGearCaracteristicAction(GenericFormatImportContext importContext) { + public ValidateGearCaracteristicAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java index d4ec3de..a17bd42 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateIndividualObservationAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; @@ -50,7 +50,7 @@ public class ValidateIndividualObservationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateIndividualObservationAction.class); - public ValidateIndividualObservationAction(GenericFormatImportContext importContext) { + public ValidateIndividualObservationAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java index 3d406ef..43f929a 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateMarineLitterAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForMarineLitter; import fr.ifremer.tutti.service.genericformat.csv.MarineLitterRow; @@ -50,7 +50,7 @@ public class ValidateMarineLitterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateMarineLitterAction.class); - public ValidateMarineLitterAction(GenericFormatImportContext importContext) { + public ValidateMarineLitterAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java index aa1a498..3238e0c 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateOperationAction.java @@ -26,8 +26,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportCruiseContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForOperation; import fr.ifremer.tutti.service.genericformat.csv.OperationRow; @@ -52,7 +52,7 @@ public class ValidateOperationAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateOperationAction.class); - public ValidateOperationAction(GenericFormatImportContext importContext) { + public ValidateOperationAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java index b933948..db7bc11 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateParameterAction.java @@ -24,8 +24,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; * #L% */ +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.GenericFormatImportOperationContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForParameter; import fr.ifremer.tutti.service.genericformat.csv.ParameterRow; @@ -50,7 +50,7 @@ public class ValidateParameterAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateParameterAction.class); - public ValidateParameterAction(GenericFormatImportContext importContext) { + public ValidateParameterAction(GenericFormatContextSupport importContext) { super(importContext); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java index b4eeaa7..436a807 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ValidateSurveyAction.java @@ -26,8 +26,8 @@ package fr.ifremer.tutti.service.genericformat.importactions; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Cruise; +import fr.ifremer.tutti.service.genericformat.GenericFormatContextSupport; import fr.ifremer.tutti.service.genericformat.GenericFormatCsvFileResult; -import fr.ifremer.tutti.service.genericformat.GenericFormatImportContext; import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForSurvey; import fr.ifremer.tutti.service.genericformat.csv.SurveyRow; import org.apache.commons.logging.Log; @@ -51,7 +51,7 @@ public class ValidateSurveyAction extends ImportActionSupport { /** Logger. */ private static final Log log = LogFactory.getLog(ValidateSurveyAction.class); - public ValidateSurveyAction(GenericFormatImportContext importContext) { + public ValidateSurveyAction(GenericFormatContextSupport importContext) { super(importContext); } 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 ce8e8b6..3ae7a58 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 @@ -155,12 +155,10 @@ tutti.service.genericFormat.import.parameters=Import des paramètres de trait tutti.service.genericFormat.import.protocol=Import d'un nouveau protocol %s tutti.service.genericFormat.import.protocol.notValid=Import d'un nouveau protocol %s annulé (protocol non valide) tutti.service.genericFormat.import.sampleCategoryModel=Import du modèle de catégorisation -tutti.service.genericFormat.import.sampleCategoryModel.error.caracteristicNotMatching=L'identifiant de la caractéristique devrait être %s, mais vaut %s -tutti.service.genericFormat.import.sampleCategoryModel.error.codeNotMatching=Le code devrait être %s, mais vaut %s -tutti.service.genericFormat.import.sampleCategoryModel.error.missingCategories=Dans le fichier d'import, il manque les catégorisations avec les codes suivants %s. Vous devez les supprimer dans l'application (Menu Administration > Configurer les catégorisations). tutti.service.genericFormat.import.sampleCategoryModel.error.noCaracteristic=La catactéristique est obligatoire +tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCaracteristic=La catactéristique %s est déja utilisée tutti.service.genericFormat.import.sampleCategoryModel.error.noCode=Le code est obligatoire -tutti.service.genericFormat.import.sampleCategoryModel.error.tooMuchCategories=Dans l'application, il manque les catégories avec les codes suivants %s. Vous devez les ajouter dans l'application (Menu Administration > Configurer les catégorisations). +tutti.service.genericFormat.import.sampleCategoryModel.error.alreadyUsedCode=Le code %s est déja utilisé tutti.service.genericFormat.import.temporaryGears=Import des références temporaires d'engins tutti.service.genericFormat.import.temporaryPersons=Import des références temporaires de personnes tutti.service.genericFormat.import.temporarySpecies=Import des références temporaires de Taxons -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.