This is an automated email from the git hooks/post-receive script. New commit to branch feature/6688 in repository tutti. See http://git.codelutin.com/tutti.git commit 841732ae1099f9b4d075c6cc3e5d68d9ecc917eb Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Mar 2 08:51:04 2015 +0100 improve file result api and add a file result for any files (protocol included) --- .../genericformat/GenericFormatArchive.java | 15 --- .../genericformat/GenericFormatCsvFileResult.java | 42 +++++++++ .../genericformat/GenericFormatFileResult.java | 61 ++++++++----- .../genericformat/GenericFormatImportContext.java | 101 ++++++++++++++------- .../GenericFormatReferentialImportResult.java | 6 +- .../genericformat/GenericFormatResultSupport.java | 82 ++++++++++------- 6 files changed, 202 insertions(+), 105 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java index 20a89c3..3233861 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatArchive.java @@ -294,21 +294,6 @@ public class GenericFormatArchive implements Serializable { } - public Set<String> getImportFiles() { - - Set<String> result = new LinkedHashSet<>(); - for (ArchiveFilePath archiveFilePath : ArchiveFilePath.values()) { - - if (!missingPaths.contains(archiveFilePath)) { - result.add(archiveFilePath.getFilename()); - } - - } - return result; - - } - - public void createZip(ProgressionModel progressionModel) { if (progressionModel != null) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java new file mode 100644 index 0000000..1db7939 --- /dev/null +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatCsvFileResult.java @@ -0,0 +1,42 @@ +package fr.ifremer.tutti.service.genericformat; + +import fr.ifremer.tutti.service.csv.CsvComsumer; + +import java.util.Map; +import java.util.Set; + +/** + * Created on 2/25/15. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 3.14 + */ +public class GenericFormatCsvFileResult extends GenericFormatFileResult { + + private static final long serialVersionUID = 1L; + + private int linesCount; + + + public GenericFormatCsvFileResult(String filename, boolean mandatory, boolean found) { + super(filename, mandatory, found); + } + + public int getLinesCount() { + return linesCount; + } + + public void setLinesCount(int linesCount) { + this.linesCount = linesCount; + } + + public void flushErrors(CsvComsumer<?, ?> consumer) { + + Map<Long, Set<String>> rowsInError = consumer.getRowsInError(); + if (!rowsInError.isEmpty()) { + getErrors().putAll(rowsInError); + } + + } + +} diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java index 98ea8ef..5e33454 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatFileResult.java @@ -1,15 +1,13 @@ package fr.ifremer.tutti.service.genericformat; -import com.google.common.collect.Sets; -import fr.ifremer.tutti.service.csv.CsvComsumer; - import java.io.Serializable; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; /** - * Created on 2/25/15. + * Created on 3/2/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.14 @@ -20,14 +18,18 @@ public class GenericFormatFileResult implements Serializable { private final String filename; - private final Map<Long, Set<String>> errors; + private final boolean mandatory; - private int linesCount; + private final boolean found; + + private final Map<Long, Set<String>> errors; private boolean imported; - public GenericFormatFileResult(String filename) { + public GenericFormatFileResult(String filename, boolean mandatory, boolean found) { this.filename = filename; + this.mandatory = mandatory; + this.found = found; this.errors = new LinkedHashMap<>(); } @@ -35,24 +37,36 @@ public class GenericFormatFileResult implements Serializable { return filename; } - public int getLinesCount() { - return linesCount; - } - - public void setLinesCount(int linesCount) { - this.linesCount = linesCount; - } - public Set<Map.Entry<Long, Set<String>>> getErrorsEntries() { return errors.entrySet(); } public boolean isValid() { - return errors.isEmpty(); + boolean result; + + if (!found) { + + // valid only if not mandatory + result = !mandatory; + + } else { + + // must be imported and with no errors please + result = isImported() && errors.isEmpty(); + + } + + return result; } public void addGlobalError(String error) { - this.errors.put(0l, Sets.newHashSet(error)); + + Set<String> globalErrors = errors.get(0l); + if (globalErrors==null) { + globalErrors = new LinkedHashSet<>(); + errors.put(0l, globalErrors); + } + globalErrors.add(error); } public boolean isImported() { @@ -63,12 +77,15 @@ public class GenericFormatFileResult implements Serializable { this.imported = imported; } - public void flushErrors(CsvComsumer<?, ?> consumer) { + public boolean isFound() { + return found; + } - Map<Long, Set<String>> rowsInError = consumer.getRowsInError(); - if (!rowsInError.isEmpty()) { - errors.putAll(rowsInError); - } + public boolean isMandatory() { + return mandatory; + } + protected Map<Long, Set<String>> getErrors() { + return errors; } } 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 e70cb70..0963d64 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 @@ -12,6 +12,7 @@ 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; @@ -35,7 +36,9 @@ import org.apache.commons.collections4.CollectionUtils; 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; @@ -65,7 +68,7 @@ public class GenericFormatImportContext implements Closeable { private TuttiProtocol importedProtocol; - private final GenericFormatFileResult sampleCategoryFileResult; + private final GenericFormatCsvFileResult sampleCategoryFileResult; private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; @@ -75,21 +78,23 @@ public class GenericFormatImportContext implements Closeable { private final GenericFormatReferentialImportResult<Vessel, String> referentialTemporaryVesselFileResult; - private final GenericFormatFileResult surveyFileResult; + private final GenericFormatFileResult protocolFileResult; - private final GenericFormatFileResult accidentalCatchFileResult; + private final GenericFormatCsvFileResult surveyFileResult; - private final GenericFormatFileResult individualObservationFileResult; + private final GenericFormatCsvFileResult accidentalCatchFileResult; - private final GenericFormatFileResult marineLitterFileResult; + private final GenericFormatCsvFileResult individualObservationFileResult; - private final GenericFormatFileResult catchFileResult; + private final GenericFormatCsvFileResult marineLitterFileResult; - private final GenericFormatFileResult parameterFileResult; + private final GenericFormatCsvFileResult catchFileResult; - private final GenericFormatFileResult operationFileResult; + private final GenericFormatCsvFileResult parameterFileResult; - private final GenericFormatFileResult gearCaracteristicFileResult; + private final GenericFormatCsvFileResult operationFileResult; + + private final GenericFormatCsvFileResult gearCaracteristicFileResult; private final Map<String, GenericFormatImportCruiseContext> cruiseContexts; @@ -113,19 +118,24 @@ public class GenericFormatImportContext implements Closeable { this.validationHelper = new GenericFormatImportValidationHelper(this, new ValidationService()); this.cruiseContexts = new LinkedHashMap<>(); - this.sampleCategoryFileResult = new GenericFormatFileResult("sampleCategory.csv"); - this.surveyFileResult = new GenericFormatFileResult("survey.csv"); - this.gearCaracteristicFileResult = new GenericFormatFileResult("gearCaracteristics.csv"); - this.operationFileResult = new GenericFormatFileResult("operation.csv"); - this.parameterFileResult = new GenericFormatFileResult("parameter.csv"); - this.catchFileResult = new GenericFormatFileResult("catch.csv"); - this.marineLitterFileResult = new GenericFormatFileResult("marineLitter.csv"); - this.individualObservationFileResult = new GenericFormatFileResult("individualObservation.csv"); - this.accidentalCatchFileResult = new GenericFormatFileResult("accidentalCatch.csv"); - this.referentialTemporaryGearFileResult = new GenericFormatReferentialImportResult<>("temporaryGears.csv"); - this.referentialTemporaryPersonFileResult = new GenericFormatReferentialImportResult<>("temporaryPersons.csv"); - this.referentialTemporarySpeciesFileResult = new GenericFormatReferentialImportResult<>("temporarySpecies.csv"); - this.referentialTemporaryVesselFileResult = new GenericFormatReferentialImportResult<>("temporaryVessels.csv"); + 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); } @@ -153,7 +163,7 @@ public class GenericFormatImportContext implements Closeable { return ImmutableSet.copyOf(archiveLayoutErrors); } - public GenericFormatFileResult getSampleCategoryFileResult() { + public GenericFormatCsvFileResult getSampleCategoryFileResult() { return sampleCategoryFileResult; } @@ -173,35 +183,39 @@ public class GenericFormatImportContext implements Closeable { return referentialTemporaryVesselFileResult; } - public GenericFormatFileResult getSurveyFileResult() { + public GenericFormatFileResult getProtocolFileResult() { + return protocolFileResult; + } + + public GenericFormatCsvFileResult getSurveyFileResult() { return surveyFileResult; } - public GenericFormatFileResult getGearCaracteristicFileResult() { + public GenericFormatCsvFileResult getGearCaracteristicFileResult() { return gearCaracteristicFileResult; } - public GenericFormatFileResult getOperationFileResult() { + public GenericFormatCsvFileResult getOperationFileResult() { return operationFileResult; } - public GenericFormatFileResult getParameterFileResult() { + public GenericFormatCsvFileResult getParameterFileResult() { return parameterFileResult; } - public GenericFormatFileResult getCatchFileResult() { + public GenericFormatCsvFileResult getCatchFileResult() { return catchFileResult; } - public GenericFormatFileResult getMarineLitterFileResult() { + public GenericFormatCsvFileResult getMarineLitterFileResult() { return marineLitterFileResult; } - public GenericFormatFileResult getIndividualObservationFileResult() { + public GenericFormatCsvFileResult getIndividualObservationFileResult() { return individualObservationFileResult; } - public GenericFormatFileResult getAccidentalCatchFileResult() { + public GenericFormatCsvFileResult getAccidentalCatchFileResult() { return accidentalCatchFileResult; } @@ -403,9 +417,34 @@ public class GenericFormatImportContext implements Closeable { } } + public boolean isTechnicalFilesValid() { + return isArchiveLayoutValid() + && sampleCategoryFileResult.isValid() + && referentialTemporaryGearFileResult.isValid() + && referentialTemporaryPersonFileResult.isValid() + && referentialTemporarySpeciesFileResult.isValid() + && referentialTemporaryVesselFileResult.isValid() + && protocolFileResult.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/GenericFormatReferentialImportResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java index 8c972b9..93c492b 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatReferentialImportResult.java @@ -19,7 +19,7 @@ import java.util.TreeMap; * @author Tony Chemit - chemit@codelutin.com * @since 3.14 */ -public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> extends GenericFormatFileResult { +public class GenericFormatReferentialImportResult<E extends TuttiReferentialEntity, K extends Comparable<K>> extends GenericFormatCsvFileResult { private static final long serialVersionUID = 1L; @@ -29,8 +29,8 @@ public class GenericFormatReferentialImportResult<E extends TuttiReferentialEnti private Map<String, String> idTranslationMap; - public GenericFormatReferentialImportResult(String filename) { - super(filename); + public GenericFormatReferentialImportResult(String filename, boolean found) { + super(filename, false, found); this.entitiesAdded = Collections.emptyMap(); this.entitiesLinked = Collections.emptyMap(); this.idTranslationMap = Collections.emptyMap(); 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 3276cf6..df88436 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 @@ -26,17 +26,15 @@ public abstract class GenericFormatResultSupport implements Serializable { private static final long serialVersionUID = 1L; - private boolean valid; + private final boolean valid; private GenericFormatImportRequest importRequest; private final Set<String> archiveLayoutErrors; - private final Set<String> archiveFiles; - private final TuttiProtocol protocol; - private final GenericFormatFileResult sampleCategoryFileResult; + private final GenericFormatCsvFileResult sampleCategoryFileResult; private final GenericFormatReferentialImportResult<Gear, Integer> referentialTemporaryGearFileResult; @@ -46,21 +44,23 @@ public abstract class GenericFormatResultSupport implements Serializable { private final GenericFormatReferentialImportResult<Vessel, String> referentialTemporaryVesselFileResult; - private final GenericFormatFileResult surveyFileResult; + private final GenericFormatFileResult protocolFileResult; + + private final GenericFormatCsvFileResult surveyFileResult; - private final GenericFormatFileResult gearCaracteristicFileResult; + private final GenericFormatCsvFileResult gearCaracteristicFileResult; - private final GenericFormatFileResult operationFileResult; + private final GenericFormatCsvFileResult operationFileResult; - private final GenericFormatFileResult parameterFileResult; + private final GenericFormatCsvFileResult parameterFileResult; - private final GenericFormatFileResult catchFileResult; + private final GenericFormatCsvFileResult catchFileResult; - private final GenericFormatFileResult marineLitterFileResult; + private final GenericFormatCsvFileResult marineLitterFileResult; - private final GenericFormatFileResult individualObservationFileResult; + private final GenericFormatCsvFileResult individualObservationFileResult; - private final GenericFormatFileResult accidentalCatchFileResult; + private final GenericFormatCsvFileResult accidentalCatchFileResult; protected GenericFormatResultSupport(GenericFormatImportContext importContext) { @@ -71,6 +71,7 @@ public abstract class GenericFormatResultSupport implements Serializable { this.referentialTemporaryPersonFileResult = importContext.getReferentialTemporaryPersonFileResult(); this.referentialTemporarySpeciesFileResult = importContext.getReferentialTemporarySpeciesFileResult(); this.referentialTemporaryVesselFileResult = importContext.getReferentialTemporaryVesselFileResult(); + this.protocolFileResult = importContext.getProtocolFileResult(); this.surveyFileResult = importContext.getSurveyFileResult(); this.gearCaracteristicFileResult = importContext.getGearCaracteristicFileResult(); this.operationFileResult = importContext.getOperationFileResult(); @@ -87,7 +88,28 @@ public abstract class GenericFormatResultSupport implements Serializable { archiveLayoutErrors1 = importContext.getArchiveLayoutErrors(); } this.archiveLayoutErrors = ImmutableSet.copyOf(archiveLayoutErrors1); - this.archiveFiles = importContext.getImportRequest().getArchive().getImportFiles(); + this.valid = computeValid(); + } + + private boolean computeValid() { + + boolean result = isArchiveLayoutValid() + && sampleCategoryFileResult.isValid() + && referentialTemporaryGearFileResult.isValid() + && referentialTemporaryPersonFileResult.isValid() + && referentialTemporarySpeciesFileResult.isValid() + && referentialTemporaryVesselFileResult.isValid() + && protocolFileResult.isValid() + && surveyFileResult.isValid() + && gearCaracteristicFileResult.isValid() + && operationFileResult.isValid() + && parameterFileResult.isValid() + && catchFileResult.isValid() + && marineLitterFileResult.isValid() + && accidentalCatchFileResult.isValid() + && individualObservationFileResult.isValid(); + return result; + } public boolean isArchiveLayoutValid() { @@ -98,19 +120,11 @@ public abstract class GenericFormatResultSupport implements Serializable { return archiveLayoutErrors; } - public Set<String> getArchiveFiles() { - return archiveFiles; - } - - public boolean isProtocolImported() { - return protocol != null; - } - public TuttiProtocol getProtocol() { return protocol; } - public GenericFormatFileResult getSampleCategoryFileResult() { + public GenericFormatCsvFileResult getSampleCategoryFileResult() { return sampleCategoryFileResult; } @@ -130,35 +144,39 @@ public abstract class GenericFormatResultSupport implements Serializable { return referentialTemporaryVesselFileResult; } - public GenericFormatFileResult getSurveyFileResult() { + public GenericFormatFileResult getProtocolFileResult() { + return protocolFileResult; + } + + public GenericFormatCsvFileResult getSurveyFileResult() { return surveyFileResult; } - public GenericFormatFileResult getGearCaracteristicFileResult() { + public GenericFormatCsvFileResult getGearCaracteristicFileResult() { return gearCaracteristicFileResult; } - public GenericFormatFileResult getOperationFileResult() { + public GenericFormatCsvFileResult getOperationFileResult() { return operationFileResult; } - public GenericFormatFileResult getParameterFileResult() { + public GenericFormatCsvFileResult getParameterFileResult() { return parameterFileResult; } - public GenericFormatFileResult getCatchFileResult() { + public GenericFormatCsvFileResult getCatchFileResult() { return catchFileResult; } - public GenericFormatFileResult getMarineLitterFileResult() { + public GenericFormatCsvFileResult getMarineLitterFileResult() { return marineLitterFileResult; } - public GenericFormatFileResult getIndividualObservationFileResult() { + public GenericFormatCsvFileResult getIndividualObservationFileResult() { return individualObservationFileResult; } - public GenericFormatFileResult getAccidentalCatchFileResult() { + public GenericFormatCsvFileResult getAccidentalCatchFileResult() { return accidentalCatchFileResult; } @@ -210,8 +228,4 @@ public abstract class GenericFormatResultSupport implements Serializable { return valid; } - public void setValid(boolean valid) { - this.valid = valid; - } - } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.