This is an automated email from the git hooks/post-receive script. New commit to branch feature/8180 in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 2b736c089116319e8f1345c25b9e99b75779c23e Author: Julien Ruchaud <julien.ruchaud@debux.org> Date: Mon Jul 4 16:55:07 2016 +0200 Create service for esdu results import for mooring --- .../services/service/UserDbPersistenceService.java | 4 +- .../service/importdata/ImportDataService.java | 66 +++++---- ...ava => ResultsImportAlreadyExistException.java} | 6 +- .../MooringResultsCellImportDataActionSupport.java | 51 +++++++ ...EchotypeAndSpeciesCategoryCellImportAction.java | 71 ++++++++++ ...ringResultsEsduByEchotypeCellImportAction.java} | 31 ++--- ...oyageResultsEsduByEchotypeCellImportAction.java | 1 - ...chotypeAndSpeciesCategoryImportExportModel.java | 94 +++++++++++++ ...sEsduByEchotypeAndSpeciesCategoryImportRow.java | 150 +++++++++++++++++++++ ...ringResultsEsduByEchotypeImportExportModel.java | 83 ++++++++++++ .../csv/MooringResultsEsduByEchotypeImportRow.java | 120 +++++++++++++++++ .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + .../echobase/services/ImportDataFixtures.java | 12 ++ .../services/MigrateImportDataDatabasesIT.java | 5 + .../importdata/AbstractImportDataServiceIT.java | 30 ++++- ...EchotypeAndSpeciesCategoryImportServiceIT.java} | 35 ++--- ...esultsEsduCellOnlyEchotypeImportServiceIT.java} | 33 +++-- ...AndSpeciesCategoryAndLengthImportServiceIT.java | 2 +- ...ciesCategoryAndLength_SmallImportServiceIT.java | 2 +- ...yEchotypeAndSpeciesCategoryImportServiceIT.java | 2 +- ...ResultsEsduCellOnlyEchotypeImportServiceIT.java | 2 +- ...llOnlySpeciesAndAgeCategoryImportServiceIT.java | 2 +- .../VoyageResultsRegionCellImportServiceIT.java | 2 +- ...VoyageResultsRegionCell_AllImportServiceIT.java | 2 +- .../import-data/echobase-mooring-results.h2.db.gz | Bin 0 -> 932433 bytes .../byEchotypeAndSpeciesCategory_small.csv.gz | Bin 0 -> 2038 bytes .../result/mooring-esdu/byEchotype_small.csv.gz | Bin 0 -> 2798 bytes 28 files changed, 719 insertions(+), 89 deletions(-) diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java index 77789d2..578fbfe 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/UserDbPersistenceService.java @@ -687,11 +687,11 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { } - public boolean isImportLogFor(String entityId, String importLogId) { + public boolean isImportLogFor(String entityId, String importLogId, ImportType importType) { ImportLogTopiaDao importLogDao = persistenceContext.getImportLogDao(); return importLogDao.forEntityIdEquals(entityId) .addNotEquals(ImportLog.PROPERTY_TOPIA_ID, importLogId) - .addEquals(ImportLog.PROPERTY_IMPORT_TYPE, ImportType.RESULT_VOYAGE) + .addEquals(ImportLog.PROPERTY_IMPORT_TYPE, importType) .exists(); } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportDataService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportDataService.java index cda8fea..2b0038c 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportDataService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ImportDataService.java @@ -34,6 +34,8 @@ import fr.ifremer.echobase.services.service.importdata.actions.MooringAcousticsI import fr.ifremer.echobase.services.service.importdata.actions.MooringCommonsAncillaryInstrumentationImportAction; import fr.ifremer.echobase.services.service.importdata.actions.MooringCommonsMooringImportAction; import fr.ifremer.echobase.services.service.importdata.actions.MooringResultsEchotypeImportAction; +import fr.ifremer.echobase.services.service.importdata.actions.MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction; +import fr.ifremer.echobase.services.service.importdata.actions.MooringResultsEsduByEchotypeCellImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageAcousticsImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesBiometrySampleImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesSubSampleImportAction; @@ -219,7 +221,42 @@ public class ImportDataService extends EchoBaseServiceSupport { public ImportDataResult<MooringResultsImportConfiguration> doImportMooringResults(MooringResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { MooringResultsImportDataContext importDataContext = newMooringResultsImportContext(configuration, user); - Set<MooringResultsEchotypeImportAction> importActions = Collections.singleton(new MooringResultsEchotypeImportAction(importDataContext)); + + Collection<ImportDataActionSupport> importActions = new LinkedHashSet<>(); + + ImportType importMode = configuration.getImportType(); + switch (importMode) { + case RESULT_MOORING: + // check if there is a such same import on this voyage (with a different id) + String importLogId = importDataContext.getImportLog().getTopiaId(); + boolean importExists = persistenceService.isImportLogFor(configuration.getMooringId(), importLogId, ImportType.RESULT_MOORING); + if (importExists) { + if (log.isWarnEnabled()) { + log.warn("there is already a mooring result import for this voyage, won't import."); + } + throw new ResultsImportAlreadyExistException(getLocale()); + } + + if (configuration.getEchotypeFile().hasFile()) { + importActions.add(new MooringResultsEchotypeImportAction(importDataContext)); + } + break; + + case RESULT_MOORING_ESDU: + if (configuration.getEsduByEchotypeFile().hasFile()) { + importActions.add(new MooringResultsEsduByEchotypeCellImportAction(importDataContext)); + } + + if (configuration.getEsduByEchotypeAndSpeciesCategoryFile().hasFile()) { + importActions.add(new MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction(importDataContext)); + } + + break; + + default: + throw new EchoBaseTechnicalException("Can not treate import result of type " + importMode); + } + return doImport(importDataContext, importActions); } @@ -230,64 +267,47 @@ public class ImportDataService extends EchoBaseServiceSupport { Collection<ImportDataActionSupport> importActions = new LinkedHashSet<>(); ImportType importMode = configuration.getImportType(); - switch (importMode) { - - case RESULT_VOYAGE: { + case RESULT_VOYAGE: // check if there is a such same import on this voyage (with a different id) String importLogId = importDataContext.getImportLog().getTopiaId(); - boolean importExists = persistenceService.isImportLogFor(configuration.getVoyageId(), importLogId); + boolean importExists = persistenceService.isImportLogFor(configuration.getVoyageId(), importLogId, ImportType.RESULT_VOYAGE); if (importExists) { if (log.isWarnEnabled()) { log.warn("there is already a voyage result import for this voyage, won't import."); } - throw new ResultsVoyageImportAlreadyExistException(getLocale()); + throw new ResultsImportAlreadyExistException(getLocale()); } if (configuration.getLengthAgeKeyFile().hasFile()) { - importActions.add(new VoyageResultsVoyageLengthAgeKeyImportAction(importDataContext)); - } if (configuration.getLengthWeightKeyFile().hasFile()) { - importActions.add(new VoyageResultsVoyageLengthWeightKeyImportAction(importDataContext)); - } if (configuration.getEchotypeFile().hasFile()) { - importActions.add(new VoyageResultsVoyageEchotypeImportAction(importDataContext)); - } - - } - break; + + break; case RESULT_ESDU: if (configuration.getEsduByEchotypeFile().hasFile()) { - importActions.add(new VoyageResultsEsduByEchotypeCellImportAction(importDataContext)); - } if (configuration.getEsduByEchotypeAndSpeciesCategoryFile().hasFile()) { - importActions.add(new VoyageResultsEsduByEchotypeAndSpeciesCategoryCellImportAction(importDataContext)); - } if (configuration.getEsduByEchotypeAndSpeciesCategoryAndLengthFile().hasFile()) { - importActions.add(new VoyageResultsEsduByEchotypeAndSpeciesCategoryAndLengthCellImportAction(importDataContext)); - } if (configuration.getEsduBySpeciesAndAgeCategoryFile().hasFile()) { - importActions.add(new VoyageResultsEsduSpeciesAndAgeCategoryCellImportAction(importDataContext)); - } break; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportAlreadyExistException.java similarity index 82% rename from echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java rename to echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportAlreadyExistException.java index 9ff9d50..aea7fae 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsVoyageImportAlreadyExistException.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/ResultsImportAlreadyExistException.java @@ -31,11 +31,11 @@ import static org.nuiton.i18n.I18n.l; * @author Tony Chemit - chemit@codelutin.com * @since 2.9 */ -public class ResultsVoyageImportAlreadyExistException extends ImportException { +public class ResultsImportAlreadyExistException extends ImportException { private static final long serialVersionUID = 1L; - public ResultsVoyageImportAlreadyExistException(Locale locale) { - super(l(locale, "echobase.importError.voyageResultImport.alreadyDone")); + public ResultsImportAlreadyExistException(Locale locale) { + super(l(locale, "echobase.importError.resultImport.alreadyDone")); } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsCellImportDataActionSupport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsCellImportDataActionSupport.java new file mode 100644 index 0000000..336ad93 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsCellImportDataActionSupport.java @@ -0,0 +1,51 @@ +package fr.ifremer.echobase.services.service.importdata.actions; + +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2016 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.csv.CellAble; +import fr.ifremer.echobase.services.csv.ResultAble; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public abstract class MooringResultsCellImportDataActionSupport<E extends ResultAble & CellAble> extends ImportResultsCellDataActionSupport<MooringResultsImportConfiguration, MooringResultsImportDataContext, E> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(MooringResultsCellImportDataActionSupport.class); + + protected MooringResultsCellImportDataActionSupport(MooringResultsImportDataContext importDataContext, InputFile inputFile, String... columnNamesToExclude) { + super(importDataContext, inputFile, columnNamesToExclude); + } + + @Override + protected DataAcousticProvider getDataProvider(MooringResultsImportDataContext importDataContext) { + return importDataContext.getMooring(); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction.java new file mode 100644 index 0000000..4c01459 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction.java @@ -0,0 +1,71 @@ +package fr.ifremer.echobase.services.service.importdata.actions; + +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2016 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ + +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; +import fr.ifremer.echobase.services.service.importdata.ResultCategoryCache; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow; + +import java.util.List; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction extends MooringResultsCellImportDataActionSupport<MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow> { + + public MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction(MooringResultsImportDataContext importDataContext) { + super(importDataContext, importDataContext.getConfiguration().getEsduByEchotypeAndSpeciesCategoryFile(), MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.COLUMN_NAMES_TO_EXCLUDE); + } + + @Override + protected MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel createCsvImportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.forImport(importDataContext, metas); + } + + @Override + protected MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel createCsvExportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.forExport(importDataContext, metas); + } + + @Override + protected Category getResultCategory(ImportDataFileResult result, ResultCategoryCache resultCategoryCache, MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow row) { + return resultCategoryCache.getResultCategory(row.getEchotype(), + row.getSpecies(), + null, + row.getSizeCategory(), + null, + result); + } + + @Override + protected MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow newImportedRow(DataAcousticProvider voyage, Cell cell, Category category, List<Result> cellResults) { + return MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.of(voyage, cell, category, cellResults); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeCellImportAction.java similarity index 51% copy from echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java copy to echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeCellImportAction.java index 9d3c7b1..c9359c9 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEsduByEchotypeCellImportAction.java @@ -25,45 +25,42 @@ import fr.ifremer.echobase.entities.data.DataAcousticProvider; import fr.ifremer.echobase.entities.data.Category; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.ResultCategoryCache; -import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImportDataContext; -import fr.ifremer.echobase.services.service.importdata.csv.VoyageResultsEsduByEchotypeImportExportModel; -import fr.ifremer.echobase.services.service.importdata.csv.VoyageResultsEsduByEchotypeImportRow; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEsduByEchotypeImportExportModel; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEsduByEchotypeImportRow; import java.util.List; /** - * Created on 25/03/16. - * - * @author Tony Chemit - chemit@codelutin.com + * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public class VoyageResultsEsduByEchotypeCellImportAction extends VoyageResultsCellImportDataActionSupport<VoyageResultsEsduByEchotypeImportRow> { +public class MooringResultsEsduByEchotypeCellImportAction extends MooringResultsCellImportDataActionSupport<MooringResultsEsduByEchotypeImportRow> { - public VoyageResultsEsduByEchotypeCellImportAction(VoyageResultsImportDataContext importDataContext) { - super(importDataContext, importDataContext.getConfiguration().getEsduByEchotypeFile(), VoyageResultsEsduByEchotypeImportExportModel.COLUMN_NAMES_TO_EXCLUDE); + public MooringResultsEsduByEchotypeCellImportAction(MooringResultsImportDataContext importDataContext) { + super(importDataContext, importDataContext.getConfiguration().getEsduByEchotypeFile(), MooringResultsEsduByEchotypeImportExportModel.COLUMN_NAMES_TO_EXCLUDE); } @Override - protected VoyageResultsEsduByEchotypeImportExportModel createCsvImportModel(VoyageResultsImportDataContext importDataContext) { - return VoyageResultsEsduByEchotypeImportExportModel.forImport(importDataContext, metas); + protected MooringResultsEsduByEchotypeImportExportModel createCsvImportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEsduByEchotypeImportExportModel.forImport(importDataContext, metas); } @Override - protected VoyageResultsEsduByEchotypeImportExportModel createCsvExportModel(VoyageResultsImportDataContext importDataContext) { - return VoyageResultsEsduByEchotypeImportExportModel.forExport(importDataContext, metas); + protected MooringResultsEsduByEchotypeImportExportModel createCsvExportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEsduByEchotypeImportExportModel.forExport(importDataContext, metas); } @Override - protected Category getResultCategory(ImportDataFileResult result, ResultCategoryCache resultCategoryCache, VoyageResultsEsduByEchotypeImportRow row) { + protected Category getResultCategory(ImportDataFileResult result, ResultCategoryCache resultCategoryCache, MooringResultsEsduByEchotypeImportRow row) { return resultCategoryCache.getResultCategory(row.getEchotype(), null, result); } @Override - protected VoyageResultsEsduByEchotypeImportRow newImportedRow(DataAcousticProvider voyage, Cell cell, Category category, List<Result> cellResults) { - return VoyageResultsEsduByEchotypeImportRow.of(voyage, cell, category, cellResults); + protected MooringResultsEsduByEchotypeImportRow newImportedRow(DataAcousticProvider voyage, Cell cell, Category category, List<Result> cellResults) { + return MooringResultsEsduByEchotypeImportRow.of(voyage, cell, category, cellResults); } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java index 9d3c7b1..808624c 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsEsduByEchotypeCellImportAction.java @@ -25,7 +25,6 @@ import fr.ifremer.echobase.entities.data.DataAcousticProvider; import fr.ifremer.echobase.entities.data.Category; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Result; -import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.ResultCategoryCache; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImportDataContext; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.java new file mode 100644 index 0000000..7e79ab2 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel.java @@ -0,0 +1,94 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.importdata.csv; + +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataQuality; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; + +import java.util.List; + +/** + * Model to import {@link Result} for esdu cell and echotypes. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel extends EchoBaseImportExportModelSupport<MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow> { + + protected static final String HEADER_SPECIES = "baracoudaCode"; + + public static final String[] COLUMN_NAMES_TO_EXCLUDE = { + EchoBaseCsvUtil.CELL_NAME, + HEADER_SPECIES, + MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_SIZE_CATEGORY, + MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_ECHOTYPE, + MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_DATA_QUALITY, + MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_MOORING + }; + + private MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel(char separator) { + super(separator); + } + + public static MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel forImport(MooringResultsImportDataContext importDataContext, List<DataMetadata> dataMetadatas) { + + MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel model = new MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel(importDataContext.getCsvSeparator()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_MOORING, Mooring.class, Mooring.PROPERTY_CODE, importDataContext.getMooringsByCode()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_ECHOTYPE, Echotype.class, Echotype.PROPERTY_NAME, importDataContext.getMooringEchotypesByName()); + model.newForeignKeyColumn(HEADER_SPECIES, MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_SPECIES, Species.class, Species.PROPERTY_BARACOUDA_CODE, importDataContext.getSpeciesByBaracoudaCode()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_SIZE_CATEGORY, SizeCategory.class, SizeCategory.PROPERTY_NAME, importDataContext.getSizeCategoriesByName()); + model.newMandatoryColumn(EchoBaseCsvUtil.CELL_NAME, MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_CELL, importDataContext.getCellValueParser()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_DATA_QUALITY, DataQuality.class, DataQuality.PROPERTY_QUALITY_DATA_FLAG_VALUES, importDataContext.getDataQualitiesByName()); + + addResultsColumnsForImport(model, dataMetadatas); + return model; + + } + + public static MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel forExport(MooringResultsImportDataContext importDataContext, List<DataMetadata> dataMetadatas) { + + MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel model = new MooringResultsEsduByEchotypeAndSpeciesCategoryImportExportModel(importDataContext.getCsvSeparator()); + model.newColumnForExport(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_MOORING, EchoBaseCsvUtil.MOORING_FORMATTER); + model.newColumnForExport(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_ECHOTYPE, EchoBaseCsvUtil.ECHOTYPE_FORMATTER); + model.newColumnForExport(HEADER_SPECIES, MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_SPECIES, EchoBaseCsvUtil.SPECIES_FORMATTER); + model.newColumnForExport(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_SIZE_CATEGORY, EchoBaseCsvUtil.SIZE_CATEGORY_FORMATTER); + model.newColumnForExport(EchoBaseCsvUtil.CELL_NAME, VoyageResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_CELL, importDataContext.getCellValueFormatter()); + model.newColumnForExport(MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.PROPERTY_DATA_QUALITY, EchoBaseCsvUtil.DATA_QUALITY_FORMATTER); + + addResultsColumns(model, dataMetadatas); + return model; + + } + + @Override + public MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow newEmptyInstance() { + return new MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow(); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.java new file mode 100644 index 0000000..ac2728b --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow.java @@ -0,0 +1,150 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.importdata.csv; + +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.DataQuality; +import fr.ifremer.echobase.entities.references.SizeCategory; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.services.csv.CellAble; +import fr.ifremer.echobase.services.csv.ResultAble; + +import java.util.LinkedList; +import java.util.List; + +/** + * Bean used as a row for import of + * {@link VoyageResultsEsduByEchotypeAndSpeciesCategoryImportExportModel}. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 0.3 + */ +public class MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow implements ResultAble, CellAble<Mooring> { + + public static final String PROPERTY_MOORING = "mooring"; + + public static final String PROPERTY_ECHOTYPE = "echotype"; + + public static final String PROPERTY_CELL = "cell"; + + public static final String PROPERTY_SPECIES = "species"; + + public static final String PROPERTY_SIZE_CATEGORY = "sizeCategory"; + + public static final String PROPERTY_DATA_QUALITY = "dataQuality"; + + protected Mooring mooring; + protected Cell cell; + protected Echotype echotype; + protected final List<Result> result = new LinkedList<>(); + protected Species species; + protected DataQuality dataQuality; + protected SizeCategory sizeCategory; + + public static MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow of(DataAcousticProvider provider, Cell cell, Category category, List<Result> cellResults) { + MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow row = new MooringResultsEsduByEchotypeAndSpeciesCategoryImportRow(); + row.setProvider(provider); + row.setCell(cell); + row.setSpecies(category.getSpeciesCategory().getSpecies()); + row.setEchotype(category.getEchotype()); + row.setSizeCategory(category.getSpeciesCategory().getSizeCategory()); + row.result.addAll(cellResults); + return row; + } + + public Mooring getMooring() { + return mooring; + } + + public void setMooring(Mooring mooring) { + this.mooring = mooring; + } + + @Override + public DataAcousticProvider<Mooring> getProvider() { + return mooring; + } + + @Override + public void setProvider(DataAcousticProvider<Mooring> provider) { + this.mooring = provider.getEntity(); + } + + public Echotype getEchotype() { + return echotype; + } + + public void setEchotype(Echotype echotype) { + this.echotype = echotype; + } + + @Override + public Cell getCell() { + return cell; + } + + @Override + public void setCell(Cell cell) { + this.cell = cell; + } + + @Override + public List<Result> getResult() { + return result; + } + + @Override + public void addResult(Result result) { + this.result.add(result); + } + + @Override + public DataQuality getDataQuality() { + return dataQuality; + } + + @Override + public void setDataQuality(DataQuality dataQuality) { + this.dataQuality = dataQuality; + } + + public Species getSpecies() { + return species; + } + + public void setSpecies(Species species) { + this.species = species; + } + + public SizeCategory getSizeCategory() { + return sizeCategory; + } + + public void setSizeCategory(SizeCategory sizeCategory) { + this.sizeCategory = sizeCategory; + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportExportModel.java new file mode 100644 index 0000000..795b4a5 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportExportModel.java @@ -0,0 +1,83 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.importdata.csv; + +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.references.DataMetadata; +import fr.ifremer.echobase.entities.references.DataQuality; +import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; + +import java.util.List; + +/** + * Model to import {@link Result} for esdu cell and echotypes. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsEsduByEchotypeImportExportModel extends EchoBaseImportExportModelSupport<MooringResultsEsduByEchotypeImportRow> { + + public static final String[] COLUMN_NAMES_TO_EXCLUDE = { + EchoBaseCsvUtil.CELL_NAME, + MooringResultsEsduByEchotypeImportRow.PROPERTY_ECHOTYPE, + MooringResultsEsduByEchotypeImportRow.PROPERTY_DATA_QUALITY, + MooringResultsEsduByEchotypeImportRow.PROPERTY_MOORING + }; + + private MooringResultsEsduByEchotypeImportExportModel(char separator) { + super(separator); + } + + public static MooringResultsEsduByEchotypeImportExportModel forImport(MooringResultsImportDataContext importDataContext, List<DataMetadata> dataMetadatas) { + + MooringResultsEsduByEchotypeImportExportModel model = new MooringResultsEsduByEchotypeImportExportModel(importDataContext.getCsvSeparator()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeImportRow.PROPERTY_MOORING, Mooring.class, Mooring.PROPERTY_CODE, importDataContext.getMooringsByCode()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeImportRow.PROPERTY_ECHOTYPE, Echotype.class, Echotype.PROPERTY_NAME, importDataContext.getMooringEchotypesByName()); + model.newMandatoryColumn(EchoBaseCsvUtil.CELL_NAME, VoyageResultsEsduByEchotypeImportRow.PROPERTY_CELL, importDataContext.getCellValueParser()); + model.newForeignKeyColumn(MooringResultsEsduByEchotypeImportRow.PROPERTY_DATA_QUALITY, DataQuality.class, DataQuality.PROPERTY_QUALITY_DATA_FLAG_VALUES, importDataContext.getDataQualitiesByName()); + + addResultsColumnsForImport(model, dataMetadatas); + return model; + + } + + public static MooringResultsEsduByEchotypeImportExportModel forExport(MooringResultsImportDataContext importDataContext, List<DataMetadata> dataMetadatas) { + + MooringResultsEsduByEchotypeImportExportModel model = new MooringResultsEsduByEchotypeImportExportModel(importDataContext.getCsvSeparator()); + model.newColumnForExport(MooringResultsEsduByEchotypeImportRow.PROPERTY_MOORING, EchoBaseCsvUtil.MOORING_FORMATTER); + model.newColumnForExport(MooringResultsEsduByEchotypeImportRow.PROPERTY_ECHOTYPE, EchoBaseCsvUtil.ECHOTYPE_FORMATTER); + model.newColumnForExport(EchoBaseCsvUtil.CELL_NAME, MooringResultsEsduByEchotypeImportRow.PROPERTY_CELL, importDataContext.getCellValueFormatter()); + model.newColumnForExport(MooringResultsEsduByEchotypeImportRow.PROPERTY_DATA_QUALITY, EchoBaseCsvUtil.DATA_QUALITY_FORMATTER); + + addResultsColumns(model, dataMetadatas); + return model; + + } + + @Override + public MooringResultsEsduByEchotypeImportRow newEmptyInstance() { + return new MooringResultsEsduByEchotypeImportRow(); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportRow.java new file mode 100644 index 0000000..491deb6 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEsduByEchotypeImportRow.java @@ -0,0 +1,120 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.importdata.csv; + +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Cell; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.data.Result; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.DataQuality; +import fr.ifremer.echobase.services.csv.CellAble; +import fr.ifremer.echobase.services.csv.ResultAble; + +import java.util.LinkedList; +import java.util.List; + +/** + * Bean used as a row for import of {@link MooringResultsEsduByEchotypeImportExportModel}. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 0.3 + */ +public class MooringResultsEsduByEchotypeImportRow implements ResultAble, CellAble<Mooring> { + + public static final String PROPERTY_MOORING = "mooring"; + public static final String PROPERTY_ECHOTYPE = "echotype"; + public static final String PROPERTY_CELL = "cell"; + public static final String PROPERTY_DATA_QUALITY = "dataQuality"; + + protected Mooring mooring; + protected Cell cell; + protected Echotype echotype; + protected final List<Result> result = new LinkedList<>(); + protected DataQuality dataQuality; + + public static MooringResultsEsduByEchotypeImportRow of(DataAcousticProvider provider, Cell cell, Category category, List<Result> cellResults) { + MooringResultsEsduByEchotypeImportRow row = new MooringResultsEsduByEchotypeImportRow(); + row.setProvider(provider); + row.setCell(cell); + row.setEchotype(category.getEchotype()); + row.result.addAll(cellResults); + return row; + } + + public Mooring getMooring() { + return mooring; + } + + public void setMooring(Mooring mooring) { + this.mooring = mooring; + } + + @Override + public DataAcousticProvider<Mooring> getProvider() { + return mooring; + } + + @Override + public void setProvider(DataAcousticProvider<Mooring> provider) { + this.mooring = provider.getEntity(); + } + + @Override + public Cell getCell() { + return cell; + } + + @Override + public void setCell(Cell cell) { + this.cell = cell; + } + + @Override + public List<Result> getResult() { + return result; + } + + @Override + public void addResult(Result result) { + this.result.add(result); + } + + @Override + public DataQuality getDataQuality() { + return dataQuality; + } + + @Override + public void setDataQuality(DataQuality dataQuality) { + this.dataQuality = dataQuality; + } + + public Echotype getEchotype() { + return echotype; + } + + public void setEchotype(Echotype echotype) { + this.echotype = echotype; + } +} diff --git a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties index 6777c35..247b8f0 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties @@ -62,6 +62,7 @@ echobase.importError.mismatch.sizeCategoryMeaning=Imported size category meaning echobase.importError.mismatch.voyage=Line %s - Used voyage «%s» does not match with the voyage configured. echobase.importError.no.transit.between.date=No transit associated to voyage %s between dates %s and %s echobase.importError.no.voyage.imported=No voyage imported +echobase.importError.resultImport.alreadyDone= echobase.importError.transect.notfound=No parent transit for date %s and vessel %s in cruise %s (line %s) echobase.importError.transit.notfound=No parent transit for date %s in cruise %s (line %s) echobase.importError.voyageResultImport.alreadyDone=There is already a such import (Voyage result) for the given voyage. diff --git a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties index 58e0019..51e5c6c 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties @@ -62,6 +62,7 @@ echobase.importError.mismatch.sizeCategoryMeaning=Le label de la catégorie de t echobase.importError.mismatch.voyage=Ligne %s - La marée «%s» ne correspond pas à celle configurée. echobase.importError.no.transit.between.date=Pas de transit attribué au voyage %s entre les dates %s et %s echobase.importError.no.voyage.imported=Aucun voyage importé +echobase.importError.resultImport.alreadyDone= echobase.importError.transect.notfound=Pas de transit auquel rattacher la date %s et le navire %s dans la campagne %s (ligne %s) echobase.importError.transit.notfound=Pas de transit auquel rattacher la date %s dans la campagne %s (ligne %s) echobase.importError.voyageResultImport.alreadyDone=Il existe déjà un import de type Résultat voyage pour le voyage sélectionné. diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDataFixtures.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDataFixtures.java index 03bbbf1..40130ad 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDataFixtures.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/ImportDataFixtures.java @@ -151,6 +151,18 @@ public enum ImportDataFixtures { serviceContext.assertNbEntities(Mooring.class, fixtures.NB_MOORING_TOTAL()); serviceContext.assertNbEntities(AncillaryInstrumentation.class, fixtures.NB_ANCILLAY_INSTRUMENTATION()); } + }, + IMPORT_DATA_ECHOBASE_MOORING_RESULTS("/import-data/echobase-mooring-results.h2.db.gz") { + @Override + public void assertBeforeImportNotExisting(FakeEchoBaseServiceContext serviceContext, EchoBaseServiceFixtures fixtures) { + serviceContext.assertNoEntities(DataAcquisition.class, DataProcessing.class, Data.class, Result.class, Cell.class); + } + + @Override + public void assertBeforeImportExisting(FakeEchoBaseServiceContext serviceContext, EchoBaseServiceFixtures fixtures) { + IMPORT_DATA_ECHOBASE_MOORING.assertBeforeImportExisting(serviceContext, fixtures); + serviceContext.assertNbEntities(Echotype.class, fixtures.NB_ECHOTYPE()); + } }; diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/MigrateImportDataDatabasesIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/MigrateImportDataDatabasesIT.java index 33ffcc9..5b8ed61 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/MigrateImportDataDatabasesIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/MigrateImportDataDatabasesIT.java @@ -57,6 +57,7 @@ public class MigrateImportDataDatabasesIT extends EchoBaseServiceSupport { .put("catches", ImportDataFixtures.IMPORT_DATA_ECHOBASE_CATCHES.getDbPath()) .put("catchesWithVoyageResult", ImportDataFixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT.getDbPath()) .put("mooring", ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING.getDbPath()) + .put("mooringResults", ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING_RESULTS.getDbPath()) .build(); @Rule @@ -131,4 +132,8 @@ public class MigrateImportDataDatabasesIT extends EchoBaseServiceSupport { @Test public void mooring() { } + + @Test + public void mooringResults() { + } } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java index f9cecfd..8622a77 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/AbstractImportDataServiceIT.java @@ -31,8 +31,10 @@ import fr.ifremer.echobase.entities.EchoBaseUserEntityEnum; import fr.ifremer.echobase.entities.EchoBaseUserPersistenceContext; import fr.ifremer.echobase.entities.data.Cell; import fr.ifremer.echobase.entities.data.Cells; +import fr.ifremer.echobase.entities.data.DataAcousticProvider; import fr.ifremer.echobase.entities.data.DataAcquisition; import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.data.Mooring; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.TransectImpl; import fr.ifremer.echobase.entities.data.Transit; @@ -142,14 +144,12 @@ public abstract class AbstractImportDataServiceIT<C extends ImportDataConfigurat assertAfertImport(importDataResult); } - protected void addMissingEsduCells(String esduColumnName, String voyageId, InputFile inputFile) throws TopiaException, IOException { + protected void addVoyageMissingEsduCells(String esduColumnName, String voyageId, InputFile inputFile) throws TopiaException, IOException { UserDbPersistenceService persistenceService = serviceContext.newService(UserDbPersistenceService.class); Voyage voyage = persistenceService.getVoyage(voyageId); Transit transit; Transect transect; - DataAcquisition dataAcquisition; - DataProcessing dataProcessing; if (voyage.isTransitEmpty()) { @@ -168,17 +168,33 @@ public abstract class AbstractImportDataServiceIT<C extends ImportDataConfigurat } else { transect = transit.getTransect().iterator().next(); } + + addDataAcquisitionMissingEsduCells(persistenceService, esduColumnName, transect, inputFile); + } + + protected void addMooringMissingEsduCells(String esduColumnName, String mooringId, InputFile inputFile) throws TopiaException, IOException { + UserDbPersistenceService persistenceService = serviceContext.newService(UserDbPersistenceService.class); - if (transect.isDataAcquisitionEmpty()) { + Mooring mooring = persistenceService.getMooring(mooringId); + addDataAcquisitionMissingEsduCells(persistenceService, esduColumnName, mooring, inputFile); + } + + protected void addDataAcquisitionMissingEsduCells(UserDbPersistenceService persistenceService, String esduColumnName, + DataAcousticProvider<?> provider, InputFile inputFile) throws TopiaException, IOException { + + DataAcquisition dataAcquisition; + DataProcessing dataProcessing; + + if (provider.isDataAcquisitionEmpty()) { // create a fake dataAcquisition AcousticInstrument acousticInstrument = persistenceService.getFirstAcousticInstrument(); dataAcquisition = persistenceService.createDataAcquisition(acousticInstrument); - transect.addDataAcquisition(dataAcquisition); + provider.addDataAcquisition(dataAcquisition); } else { - dataAcquisition = transect.getDataAcquisition().iterator().next(); + dataAcquisition = provider.getDataAcquisition().iterator().next(); } - + if (dataAcquisition.isDataProcessingEmpty()) { // creates a fake dataProcessing diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java similarity index 65% copy from echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java copy to echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java index b9c2f59..b35ac71 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java @@ -28,57 +28,62 @@ import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.ImportDataFixtures; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; -import fr.ifremer.echobase.services.service.importdata.configurations.VoyageResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; import java.io.IOException; /** - * @author Tony Chemit - chemit@codelutin.com - * @since 0.3 + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 */ -public class VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT extends VoyageResultsImportServiceITSupport { +public class MooringResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT extends AbstractImportDataServiceIT<MooringResultsImportConfiguration> { - public VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT() { + public MooringResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT() { super(1); } @Override public ImportDataFixtures getImportDataFixture() { - return ImportDataFixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT; + return ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING_RESULTS; } protected String[] getImportPath(String filename) { - return new String[]{"/import-data", "result", "esdu", filename}; + return new String[]{"/import-data", "result", "mooring-esdu", filename}; } @Override - protected VoyageResultsImportConfiguration createConfiguration() throws IOException { - VoyageResultsImportConfiguration configuration = super.createConfiguration(); - configuration.setImportType(ImportType.RESULT_ESDU); + protected MooringResultsImportConfiguration createConfiguration() throws IOException { + MooringResultsImportConfiguration configuration = new MooringResultsImportConfiguration(getLocale()); + configuration.setImportType(ImportType.RESULT_MOORING_ESDU); + configuration.setMooringId(getMooringId()); + configuration.setResultLabel("resultLabel"); InputFile inputFile = configuration.getEsduByEchotypeAndSpeciesCategoryFile(); prepareInputFile(inputFile, getImportPath("byEchotypeAndSpeciesCategory_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addMooringMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getMooringId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); + return configuration; } @Override - protected void assertAfertImport(ImportDataResult<VoyageResultsImportConfiguration> result) throws IOException { + protected ImportDataService.MooringResultsImportDataAction newAction() throws IOException { + return new ImportDataService.MooringResultsImportDataAction(); + } + + @Override + protected void assertAfertImport(ImportDataResult<MooringResultsImportConfiguration> result) throws IOException { int nbCategory = 20; -// int nbCategory = 27; int nbSpeciesCategories = 1; int nbResult = 1584; -// int nbResult = 357291; ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); assertCsvImportResultPerEntity(importDataFileResult, Result.class, nbResult, 0, nbResult); assertCsvImportResultPerEntity(importDataFileResult, Category.class, nbCategory, 0, nbCategory); assertCsvImportResultPerEntity(importDataFileResult, SpeciesCategory.class, nbSpeciesCategories, 0, 457); assertCsvImportResult0(importDataFileResult, nbResult); - } } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeImportServiceIT.java similarity index 63% copy from echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java copy to echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeImportServiceIT.java index fb55c25..4d08906 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsEsduCellOnlyEchotypeImportServiceIT.java @@ -27,55 +27,60 @@ import fr.ifremer.echobase.entities.data.Result; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.ImportDataFixtures; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; -import fr.ifremer.echobase.services.service.importdata.configurations.VoyageResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; import java.io.IOException; /** - * @author Tony Chemit - chemit@codelutin.com - * @since 0.3 + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 */ -public class VoyageResultsEsduCellOnlyEchotypeImportServiceIT extends VoyageResultsImportServiceITSupport { +public class MooringResultsEsduCellOnlyEchotypeImportServiceIT extends AbstractImportDataServiceIT<MooringResultsImportConfiguration> { - public VoyageResultsEsduCellOnlyEchotypeImportServiceIT() { + public MooringResultsEsduCellOnlyEchotypeImportServiceIT() { super(1); } @Override public ImportDataFixtures getImportDataFixture() { - return ImportDataFixtures.IMPORT_DATA_ECHOBASE_CATCHES_AND_VOYAGE_RESULT; + return ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING_RESULTS; } protected String[] getImportPath(String filename) { - return new String[]{"/import-data", "result", "esdu", filename}; + return new String[]{"/import-data", "result", "mooring-esdu", filename}; } @Override - protected VoyageResultsImportConfiguration createConfiguration() throws IOException { - VoyageResultsImportConfiguration configuration = super.createConfiguration(); - configuration.setImportType(ImportType.RESULT_ESDU); + protected MooringResultsImportConfiguration createConfiguration() throws IOException { + MooringResultsImportConfiguration configuration = new MooringResultsImportConfiguration(getLocale()); + configuration.setImportType(ImportType.RESULT_MOORING_ESDU); + configuration.setMooringId(getMooringId()); + configuration.setResultLabel("resultLabel"); InputFile inputFile = configuration.getEsduByEchotypeFile(); prepareInputFile(inputFile, getImportPath("byEchotype_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addMooringMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getMooringId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; } @Override - protected void assertAfertImport(ImportDataResult<VoyageResultsImportConfiguration> result) throws IOException { + protected ImportDataService.MooringResultsImportDataAction newAction() throws IOException { + return new ImportDataService.MooringResultsImportDataAction(); + } + + @Override + protected void assertAfertImport(ImportDataResult<MooringResultsImportConfiguration> result) throws IOException { int nbCategory = 7; int nbResult = 1569; -// int nbResult = 43533; ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); assertCsvImportResult0(importDataFileResult, nbResult); assertCsvImportResultPerEntity(importDataFileResult, Result.class, nbResult, 0, nbResult); assertCsvImportResultPerEntity(importDataFileResult, Category.class, nbCategory, 0, nbCategory); - } } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLengthImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLengthImportServiceIT.java index 2f45a1d..a646444 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLengthImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLengthImportServiceIT.java @@ -62,7 +62,7 @@ public class VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLengthImportS InputFile inputFile = configuration.getEsduByEchotypeAndSpeciesCategoryAndLengthFile(); prepareInputFile(inputFile, getImportPath("byEchotypeAndSpeciesCategoryAndLength.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addVoyageMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLength_SmallImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLength_SmallImportServiceIT.java index 0ca9c2f..47b99c0 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLength_SmallImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLength_SmallImportServiceIT.java @@ -60,7 +60,7 @@ public class VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryAndLength_SmallI InputFile inputFile = configuration.getEsduByEchotypeAndSpeciesCategoryAndLengthFile(); prepareInputFile(inputFile, getImportPath("byEchotypeAndSpeciesCategoryAndLength_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addVoyageMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java index b9c2f59..2d9e648 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT.java @@ -59,7 +59,7 @@ public class VoyageResultsEsduCellOnlyEchotypeAndSpeciesCategoryImportServiceIT InputFile inputFile = configuration.getEsduByEchotypeAndSpeciesCategoryFile(); prepareInputFile(inputFile, getImportPath("byEchotypeAndSpeciesCategory_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addVoyageMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java index fb55c25..088b0ba 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlyEchotypeImportServiceIT.java @@ -58,7 +58,7 @@ public class VoyageResultsEsduCellOnlyEchotypeImportServiceIT extends VoyageResu InputFile inputFile = configuration.getEsduByEchotypeFile(); prepareInputFile(inputFile, getImportPath("byEchotype_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addVoyageMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlySpeciesAndAgeCategoryImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlySpeciesAndAgeCategoryImportServiceIT.java index 70083e7..55e81bc 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlySpeciesAndAgeCategoryImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsEsduCellOnlySpeciesAndAgeCategoryImportServiceIT.java @@ -60,7 +60,7 @@ public class VoyageResultsEsduCellOnlySpeciesAndAgeCategoryImportServiceIT exten InputFile inputFile = configuration.getEsduBySpeciesAndAgeCategoryFile(); prepareInputFile(inputFile, getImportPath("bySpeciesAndAgeCategory_small.csv.gz")); - addMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); + addVoyageMissingEsduCells(EchoBaseCsvUtil.CELL_NAME, configuration.getVoyageId(), inputFile); configuration.setDataProcessingId(getDataProcessingId()); return configuration; } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCellImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCellImportServiceIT.java index 109f463..8497603 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCellImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCellImportServiceIT.java @@ -59,7 +59,7 @@ public class VoyageResultsRegionCellImportServiceIT extends VoyageResultsImportS prepareInputFile(configuration.getRegionAssociationFile(), getImportPath("regionAssociations_small.csv.gz")); prepareInputFile(configuration.getRegionResultFile(), getImportPath("regionResults.csv.gz")); - addMissingEsduCells("esduName", configuration.getVoyageId(), configuration.getRegionAssociationFile()); + addVoyageMissingEsduCells("esduName", configuration.getVoyageId(), configuration.getRegionAssociationFile()); fakeServiceContext.assertNbEntities(Cell.class, NB_ESDU_CELLS); diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCell_AllImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCell_AllImportServiceIT.java index f181c1c..c43ab13 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCell_AllImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageResultsRegionCell_AllImportServiceIT.java @@ -59,7 +59,7 @@ public class VoyageResultsRegionCell_AllImportServiceIT extends VoyageResultsImp prepareInputFile(configuration.getRegionAssociationFile(), getImportPath("regionAssociations.csv.gz")); prepareInputFile(configuration.getRegionResultFile(), getImportPath("regionResults.csv.gz")); - addMissingEsduCells("esduName", configuration.getVoyageId(), configuration.getRegionAssociationFile()); + addVoyageMissingEsduCells("esduName", configuration.getVoyageId(), configuration.getRegionAssociationFile()); fakeServiceContext.assertNbEntities(Cell.class, NB_ESDU_CELLS); diff --git a/echobase-services/src/test/resources/import-data/echobase-mooring-results.h2.db.gz b/echobase-services/src/test/resources/import-data/echobase-mooring-results.h2.db.gz new file mode 100644 index 0000000..bcb3800 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/echobase-mooring-results.h2.db.gz differ diff --git a/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotypeAndSpeciesCategory_small.csv.gz b/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotypeAndSpeciesCategory_small.csv.gz new file mode 100644 index 0000000..5e22683 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotypeAndSpeciesCategory_small.csv.gz differ diff --git a/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotype_small.csv.gz b/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotype_small.csv.gz new file mode 100644 index 0000000..23660c9 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/result/mooring-esdu/byEchotype_small.csv.gz differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.