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 9f0f94f7ac1397be5d716feb6f3fc25d5c519a16 Author: Julien Ruchaud <julien.ruchaud@debux.org> Date: Fri Jul 1 11:21:52 2016 +0200 Create ancillary intrumentation import for the voyage --- .../services/service/UserDbPersistenceService.java | 7 ++ .../service/importdata/ImportDataService.java | 21 +++++- ...mportAncillaryInstrumentationActionSupport.java | 57 ++++++++------- ...ommonsAncillaryInstrumentationImportAction.java | 15 +++- ...ommonsAncillaryInstrumentationImportAction.java | 79 +++++++++++++++++++++ ...ncillaryInstrumentationImportConfiguration.java | 53 ++++++++++++++ ...sAncillaryInstrumentationImportDataContext.java | 71 ++++++++++++++++++ .../csv/AncillaryInstrumentationImportRow.java | 4 +- ...ngCommonsAncillaryInstrumentationImportRow.java | 16 +---- ...sAncillaryInstrumentationImportExportModel.java | 9 ++- ...geCommonsAncillaryInstrumentationImportRow.java | 23 +++--- .../echobase/services/EchoBaseServiceFixtures.java | 6 +- .../echobase/services/ImportDataFixtures.java | 1 + ...onsAncillaryInstrumentationImportServiceIT.java | 3 +- ...nsAncillaryInstrumentationImportServiceIT.java} | 25 ++++--- .../common/ancillaryInstrumentation.csv.gz | Bin 0 -> 131 bytes .../import-data/echobase-commonData.h2.db.gz | Bin 369793 -> 370212 bytes 17 files changed, 317 insertions(+), 73 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 ec7c0ce..77789d2 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 @@ -1049,6 +1049,13 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { persistenceContext.getTransectDao().delete(transect); } + public List<Transect> getTransects(Voyage voyage, Vessel vessel) { + return persistenceContext.getTransectDao() + .forVesselEquals(vessel) + .addEquals(Transect.PROPERTY_TRANSIT + "." + Transit.PROPERTY_VOYAGE, voyage) + .findAll(); + } + //------------------------------------------------------------------------// //--- Transit ------------------------------------------------------------// //------------------------------------------------------------------------// 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 240e418..7eeeb39 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 @@ -37,6 +37,7 @@ import fr.ifremer.echobase.services.service.importdata.actions.VoyageAcousticsIm import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesBiometrySampleImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesSubSampleImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesTotalSampleImportAction; +import fr.ifremer.echobase.services.service.importdata.actions.VoyageCommonsAncillaryInstrumentationImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCommonsTransectImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCommonsTransitImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCommonsVoyageImportAction; @@ -61,6 +62,7 @@ import fr.ifremer.echobase.services.service.importdata.configurations.MooringCom import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsMooringImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageAcousticsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCatchesImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCommonsAncillaryInstrumentationImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCommonsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageOperationsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageResultsImportConfiguration; @@ -70,6 +72,7 @@ import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommonsAn import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommonsMooringImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageAcousticsImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCatchesImportDataContext; +import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsAncillaryInstrumentationImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageOperationsImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImportDataContext; @@ -181,13 +184,18 @@ public class ImportDataService extends EchoBaseServiceSupport { } public ImportDataResult<VoyageAcousticsImportConfiguration> doImportVoyageAcoustics(VoyageAcousticsImportConfiguration configuration, EchoBaseUser user) throws ImportException { - VoyageAcousticsImportDataContext importDataContext = newVoyageAcousticsImportContext(configuration, user); Set<VoyageAcousticsImportAction> importActions = Collections.singleton(new VoyageAcousticsImportAction(importDataContext)); return doImport(importDataContext, importActions); } + public ImportDataResult<VoyageCommonsAncillaryInstrumentationImportConfiguration> doImportVoyageCommonsAncillaryInstrumentation(VoyageCommonsAncillaryInstrumentationImportConfiguration configuration, EchoBaseUser user) throws ImportException { + VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext = newVoyageCommonsAncillaryInstrumentationImportContext(configuration, user); + Set<VoyageCommonsAncillaryInstrumentationImportAction> importActions = Collections.singleton(new VoyageCommonsAncillaryInstrumentationImportAction(importDataContext)); + return doImport(importDataContext, importActions); + } + public ImportDataResult<MooringCommonsMooringImportConfiguration> doImportMooringCommonsMooring(MooringCommonsMooringImportConfiguration configuration, EchoBaseUser user) throws ImportException { MooringCommonsMooringImportDataContext importDataContext = newMooringCommonsMooringImportContext(configuration, user); Set<MooringCommonsMooringImportAction> importActions = Collections.singleton(new MooringCommonsMooringImportAction(importDataContext)); @@ -305,6 +313,10 @@ public class ImportDataService extends EchoBaseServiceSupport { return new VoyageCommonsImportDataContext(persistenceService, getLocale(), getCsvSeparator(), configuration, user, newDate()); } + private VoyageCommonsAncillaryInstrumentationImportDataContext newVoyageCommonsAncillaryInstrumentationImportContext(VoyageCommonsAncillaryInstrumentationImportConfiguration configuration, EchoBaseUser user) { + return new VoyageCommonsAncillaryInstrumentationImportDataContext(persistenceService, getLocale(), getCsvSeparator(), configuration, user, newDate()); + } + private VoyageResultsImportDataContext newVoyageResultsImportContext(VoyageResultsImportConfiguration configuration, EchoBaseUser user) { return new VoyageResultsImportDataContext(persistenceService, getLocale(), getCsvSeparator(), configuration, user, newDate()); } @@ -421,6 +433,13 @@ public class ImportDataService extends EchoBaseServiceSupport { } } + public static class VoyageCommonsAncillaryInstrumentationImportDataAction implements ImportDataAction<VoyageCommonsAncillaryInstrumentationImportConfiguration> { + @Override + public ImportDataResult<VoyageCommonsAncillaryInstrumentationImportConfiguration> doImport(ImportDataService service, VoyageCommonsAncillaryInstrumentationImportConfiguration configuration, EchoBaseUser user) throws ImportException { + return service.doImportVoyageCommonsAncillaryInstrumentation(configuration, user); + } + } + public static class VoyageOperationsImportDataAction implements ImportDataAction<VoyageOperationsImportConfiguration> { @Override public ImportDataResult<VoyageOperationsImportConfiguration> doImport(ImportDataService service, VoyageOperationsImportConfiguration configuration, EchoBaseUser user) throws ImportException { diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAncillaryInstrumentationActionSupport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAncillaryInstrumentationActionSupport.java index 5a41ebf..789573c 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAncillaryInstrumentationActionSupport.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAncillaryInstrumentationActionSupport.java @@ -28,14 +28,16 @@ import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.service.importdata.DuplicatedAncillaryInstrumentationAssociationException; import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; -import fr.ifremer.echobase.services.service.importdata.MismatchProviderException; import fr.ifremer.echobase.services.service.importdata.configurations.ImportDataConfigurationSupport; import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataContextSupport; import fr.ifremer.echobase.services.service.importdata.csv.AncillaryInstrumentationImportRow; import java.util.LinkedList; +import java.util.List; +import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.Import; +import org.nuiton.topia.persistence.TopiaEntity; /** * @author Julien Ruchaud - ruchaud@codelutin.com @@ -46,7 +48,7 @@ public abstract class ImportAncillaryInstrumentationActionSupport<M extends Impo /** Logger. */ private static final Log log = LogFactory.getLog(ImportAncillaryInstrumentationActionSupport.class); - private final LinkedList<String> ancillaryInstrumentations = new LinkedList<>(); + private final LinkedList<Pair<String, String>> ancillaryInstrumentations = new LinkedList<>(); public ImportAncillaryInstrumentationActionSupport(C importDataContext, InputFile inputFile) { super(importDataContext, inputFile); @@ -54,7 +56,7 @@ public abstract class ImportAncillaryInstrumentationActionSupport<M extends Impo protected abstract E newImportedRow(DataAcousticProvider provider, AncillaryInstrumentation ancillaryInstrumentation); - protected abstract DataAcousticProvider getDataProvider(C importDataContext); + protected abstract List<DataAcousticProvider> getDataProviders(C importDataContext, E row, int rowNumber); @Override protected void performImport(C importDataContext, InputFile inputFile, ImportDataFileResult result) { @@ -62,8 +64,6 @@ public abstract class ImportAncillaryInstrumentationActionSupport<M extends Impo log.info("Starts import of ancillary instrumentation from file " + inputFile.getFileName()); } - DataAcousticProvider expectedProvider = getDataProvider(importDataContext); - try (Import<E> importer = open()) { incrementsProgress(); @@ -73,25 +73,27 @@ public abstract class ImportAncillaryInstrumentationActionSupport<M extends Impo doFlushTransaction(++rowNumber); - DataAcousticProvider provider = row.getProvider(); - - if (!expectedProvider.equals(provider)) { - throw new MismatchProviderException(getLocale(), rowNumber, provider.getName()); - } - - AncillaryInstrumentation ancillaryInstrumentation = row.getAncillaryInstrumentation(); - - AncillaryInstrumentation existingAncillaryInstrumentation = provider.getAncillaryInstrumentationByTopiaId(ancillaryInstrumentation.getTopiaId()); - if (existingAncillaryInstrumentation != null) { - throw new DuplicatedAncillaryInstrumentationAssociationException(getLocale(), rowNumber, provider.getName(), ancillaryInstrumentation.getName()); + boolean firstLine = true; + List<DataAcousticProvider> dataProviders = getDataProviders(importDataContext, row, rowNumber); + for (DataAcousticProvider provider : dataProviders) { + + AncillaryInstrumentation ancillaryInstrumentation = row.getAncillaryInstrumentation(); + + AncillaryInstrumentation existingAncillaryInstrumentation = provider.getAncillaryInstrumentationByTopiaId(ancillaryInstrumentation.getTopiaId()); + if (existingAncillaryInstrumentation != null) { + throw new DuplicatedAncillaryInstrumentationAssociationException(getLocale(), rowNumber, provider.getName(), ancillaryInstrumentation.getName()); + } + + // add it + provider.addAncillaryInstrumentation(ancillaryInstrumentation); + result.incrementsNumberUpdated(EchoBaseUserEntityEnum.AncillaryInstrumentation); + + if (firstLine) { + ancillaryInstrumentations.add(Pair.of(ancillaryInstrumentation.getTopiaId(), provider.getEntity().getTopiaId())); + firstLine = false; + } } - // add it - provider.addAncillaryInstrumentation(ancillaryInstrumentation); - ancillaryInstrumentations.add(ancillaryInstrumentation.getTopiaId()); - - - result.incrementsNumberUpdated(EchoBaseUserEntityEnum.AncillaryInstrumentation); addProcessedRow(result, row); } } @@ -99,13 +101,16 @@ public abstract class ImportAncillaryInstrumentationActionSupport<M extends Impo @Override protected void computeImportedExport(C importDataContext, ImportDataFileResult result) { - DataAcousticProvider provider = getDataProvider(importDataContext); - - for (String ancillaryInstrumentationId : ancillaryInstrumentations) { + for (Pair<String, String> entry : ancillaryInstrumentations) { + String ancillaryInstrumentationId = entry.getKey(); AncillaryInstrumentation ancillaryInstrumentation = persistenceService.getAncillaryInstrumentation(ancillaryInstrumentationId); Preconditions.checkNotNull(ancillaryInstrumentation); - E row = newImportedRow(provider, ancillaryInstrumentation); + String providerId = entry.getValue(); + TopiaEntity provider = persistenceService.getEntity(providerId); + Preconditions.checkNotNull(provider); + + E row = newImportedRow((DataAcousticProvider) provider, ancillaryInstrumentation); addImportedRow(result, row); } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java index 8931dc3..873081f 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringCommonsAncillaryInstrumentationImportAction.java @@ -21,12 +21,16 @@ package fr.ifremer.echobase.services.service.importdata.actions; * #L% */ +import com.google.common.collect.Lists; import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Mooring; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; +import fr.ifremer.echobase.services.service.importdata.MismatchProviderException; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommonsAncillaryInstrumentationImportDataContext; import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsAncillaryInstrumentationImportExportModel; import fr.ifremer.echobase.services.service.importdata.csv.MooringCommonsAncillaryInstrumentationImportRow; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -49,8 +53,15 @@ public class MooringCommonsAncillaryInstrumentationImportAction extends ImportAn } @Override - protected DataAcousticProvider getDataProvider(MooringCommonsAncillaryInstrumentationImportDataContext importDataContext) { - return importDataContext.getMooring(); + protected List<DataAcousticProvider> getDataProviders(MooringCommonsAncillaryInstrumentationImportDataContext importDataContext, MooringCommonsAncillaryInstrumentationImportRow row, int rowNumber) { + Mooring expectedMooring = importDataContext.getMooring(); + DataAcousticProvider mooring = row.getMooring(); + + if (!expectedMooring.equals(mooring)) { + throw new MismatchProviderException(getLocale(), rowNumber, mooring.getName()); + } + + return Lists.newArrayList(mooring); } @Override diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsAncillaryInstrumentationImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsAncillaryInstrumentationImportAction.java new file mode 100644 index 0000000..c556126 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsAncillaryInstrumentationImportAction.java @@ -0,0 +1,79 @@ +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.Voyage; +import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; +import fr.ifremer.echobase.entities.references.Vessel; +import fr.ifremer.echobase.services.service.importdata.MismatchProviderException; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCommonsAncillaryInstrumentationImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsAncillaryInstrumentationImportDataContext; +import fr.ifremer.echobase.services.service.importdata.csv.VoyageCommonsAncillaryInstrumentationImportExportModel; +import fr.ifremer.echobase.services.service.importdata.csv.VoyageCommonsAncillaryInstrumentationImportRow; +import java.util.List; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class VoyageCommonsAncillaryInstrumentationImportAction extends ImportAncillaryInstrumentationActionSupport<VoyageCommonsAncillaryInstrumentationImportConfiguration, VoyageCommonsAncillaryInstrumentationImportDataContext, VoyageCommonsAncillaryInstrumentationImportRow> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(VoyageCommonsAncillaryInstrumentationImportAction.class); + + public VoyageCommonsAncillaryInstrumentationImportAction(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext) { + super(importDataContext, importDataContext.getConfiguration().getAncillaryInstrumentationFile()); + } + + @Override + protected VoyageCommonsAncillaryInstrumentationImportRow newImportedRow(DataAcousticProvider provider, AncillaryInstrumentation ancillaryInstrumentation) { + return VoyageCommonsAncillaryInstrumentationImportRow.of(provider, ancillaryInstrumentation); + } + + @Override + protected List<DataAcousticProvider> getDataProviders(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext, VoyageCommonsAncillaryInstrumentationImportRow row, int rowNumber) { + Voyage expectedVoyage = importDataContext.getVoyage(); + Voyage voyage = row.getVoyage(); + + if (!expectedVoyage.equals(voyage)) { + throw new MismatchProviderException(getLocale(), rowNumber, voyage.getName()); + } + + Vessel vessel = row.getVessel(); + List transects = persistenceService.getTransects(voyage, vessel); + return transects; + } + + @Override + protected VoyageCommonsAncillaryInstrumentationImportExportModel createCsvImportModel(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext) { + return VoyageCommonsAncillaryInstrumentationImportExportModel.forImport(importDataContext); + } + + @Override + protected VoyageCommonsAncillaryInstrumentationImportExportModel createCsvExportModel(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext) { + return VoyageCommonsAncillaryInstrumentationImportExportModel.forExport(importDataContext); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/VoyageCommonsAncillaryInstrumentationImportConfiguration.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/VoyageCommonsAncillaryInstrumentationImportConfiguration.java new file mode 100644 index 0000000..1c8fa7c --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/VoyageCommonsAncillaryInstrumentationImportConfiguration.java @@ -0,0 +1,53 @@ +/* + * #%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.configurations; + +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.io.InputFile; +import java.util.Locale; +import static org.nuiton.i18n.I18n.l; + +/** + * Configuration mooring import. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class VoyageCommonsAncillaryInstrumentationImportConfiguration extends VoyageImportDataConfigurationSupport { + + private static final long serialVersionUID = 1L; + + protected final InputFile ancillaryInstrumentationFile; + + public VoyageCommonsAncillaryInstrumentationImportConfiguration(Locale locale) { + ancillaryInstrumentationFile = InputFile.newFile(l(locale, "echobase.common.ancillaryInstrumentationFile")); + importType = ImportType.COMMON_ANCILLARY_INSTRUMENTATION; + } + + public InputFile getAncillaryInstrumentationFile() { + return ancillaryInstrumentationFile; + } + + @Override + public InputFile[] getInputFiles() { + return new InputFile[]{ancillaryInstrumentationFile}; + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCommonsAncillaryInstrumentationImportDataContext.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCommonsAncillaryInstrumentationImportDataContext.java new file mode 100644 index 0000000..f50555e --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCommonsAncillaryInstrumentationImportDataContext.java @@ -0,0 +1,71 @@ +package fr.ifremer.echobase.services.service.importdata.contexts; + +/* + * #%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 com.google.common.collect.Maps; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.data.Moorings; +import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.data.Voyages; +import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCommonsAncillaryInstrumentationImportConfiguration; +import java.util.Collections; + +import java.util.Date; +import java.util.Locale; +import java.util.Map; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.O + */ +public class VoyageCommonsAncillaryInstrumentationImportDataContext extends ImportDataContextSupport<VoyageCommonsAncillaryInstrumentationImportConfiguration> { + + private Voyage voyage; + + private Map<String, Voyage> voyagesByName; + + public VoyageCommonsAncillaryInstrumentationImportDataContext(UserDbPersistenceService persistenceService, Locale locale, char csvSeparator, VoyageCommonsAncillaryInstrumentationImportConfiguration configuration, EchoBaseUser user, Date importDate) { + super(persistenceService, locale, csvSeparator, configuration, user, importDate); + } + + public final Voyage getVoyage() { + if (voyage == null) { + voyage = persistenceService.getVoyage(configuration.getVoyageId()); + } + return voyage; + } + + @Override + public String getEntityId() { + return configuration.getVoyageId(); + } + + public final Map<String, Voyage> getVoyagesByName() { + if (voyagesByName == null) { + voyagesByName = Maps.uniqueIndex(Collections.singletonList(getVoyage()), Voyages.VOYAGE_NAME); + } + return voyagesByName; + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AncillaryInstrumentationImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AncillaryInstrumentationImportRow.java index 8c127b9..534aae2 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AncillaryInstrumentationImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AncillaryInstrumentationImportRow.java @@ -22,16 +22,14 @@ package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; import fr.ifremer.echobase.entities.references.AncillaryInstrumentationImpl; -import fr.ifremer.echobase.services.csv.ProviderAble; import java.io.Serializable; -import org.nuiton.topia.persistence.TopiaEntity; /** * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public abstract class AncillaryInstrumentationImportRow<E extends TopiaEntity> implements Serializable, ProviderAble<E> { +public abstract class AncillaryInstrumentationImportRow implements Serializable { private static final long serialVersionUID = 1L; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java index 38d9e9b..6ec2f03 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringCommonsAncillaryInstrumentationImportRow.java @@ -28,16 +28,16 @@ import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public class MooringCommonsAncillaryInstrumentationImportRow extends AncillaryInstrumentationImportRow<Mooring> { +public class MooringCommonsAncillaryInstrumentationImportRow extends AncillaryInstrumentationImportRow { private static final long serialVersionUID = 1L; public static final String PROPERTY_MOORING = "mooring"; protected Mooring mooring; - public static MooringCommonsAncillaryInstrumentationImportRow of(DataAcousticProvider provider, AncillaryInstrumentation ancillaryInstrumentation) { + public static MooringCommonsAncillaryInstrumentationImportRow of(DataAcousticProvider<Mooring> provider, AncillaryInstrumentation ancillaryInstrumentation) { MooringCommonsAncillaryInstrumentationImportRow row = new MooringCommonsAncillaryInstrumentationImportRow(ancillaryInstrumentation); - row.setProvider(provider); + row.mooring = provider.getEntity(); return row; } @@ -56,14 +56,4 @@ public class MooringCommonsAncillaryInstrumentationImportRow extends AncillaryIn 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(); - } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java index f32a7cb..eb44279 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportExportModel.java @@ -22,8 +22,9 @@ package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; +import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; -import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.contexts.VoyageCommonsAncillaryInstrumentationImportDataContext; /** * @author Julien Ruchaud - ruchaud@codelutin.com @@ -35,19 +36,21 @@ public class VoyageCommonsAncillaryInstrumentationImportExportModel extends Echo super(separator); } - public static VoyageCommonsAncillaryInstrumentationImportExportModel forImport(VoyageCommonsImportDataContext importDataContext) { + public static VoyageCommonsAncillaryInstrumentationImportExportModel forImport(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext) { VoyageCommonsAncillaryInstrumentationImportExportModel model = new VoyageCommonsAncillaryInstrumentationImportExportModel(importDataContext.getCsvSeparator()); model.newForeignKeyColumn(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_VOYAGE, Voyage.class, Voyage.PROPERTY_NAME, importDataContext.getVoyagesByName()); + model.newForeignKeyColumn(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_VESSEL, Vessel.class, Vessel.PROPERTY_NAME, importDataContext.getVesselsByName()); model.newForeignKeyColumn(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_ANCILLARY_INSTRUMENTATION, AncillaryInstrumentation.class, AncillaryInstrumentation.PROPERTY_NAME, importDataContext.getAncillaryInstrumentationsByName()); return model; } - public static VoyageCommonsAncillaryInstrumentationImportExportModel forExport(VoyageCommonsImportDataContext importDataContext) { + public static VoyageCommonsAncillaryInstrumentationImportExportModel forExport(VoyageCommonsAncillaryInstrumentationImportDataContext importDataContext) { VoyageCommonsAncillaryInstrumentationImportExportModel model = new VoyageCommonsAncillaryInstrumentationImportExportModel(importDataContext.getCsvSeparator()); model.newColumnForExport(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_VOYAGE, EchoBaseCsvUtil.VOYAGE_FORMATTER); + model.newColumnForExport(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_VESSEL, EchoBaseCsvUtil.VESSEL_FORMATTER); model.newColumnForExport(VoyageCommonsAncillaryInstrumentationImportRow.PROPERTY_ANCILLARY_INSTRUMENTATION, EchoBaseCsvUtil.ANCILLARY_INSTRUMENTATION_FORMATTER); return model; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java index 68c43fb..932a762 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCommonsAncillaryInstrumentationImportRow.java @@ -21,24 +21,31 @@ package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; +import fr.ifremer.echobase.entities.references.Vessel; /** * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public class VoyageCommonsAncillaryInstrumentationImportRow extends AncillaryInstrumentationImportRow<Voyage> { +public class VoyageCommonsAncillaryInstrumentationImportRow extends AncillaryInstrumentationImportRow { private static final long serialVersionUID = 1L; public static final String PROPERTY_VOYAGE = "voyage"; + public static final String PROPERTY_VESSEL = "vessel"; protected Voyage voyage; + + protected Vessel vessel; - public static VoyageCommonsAncillaryInstrumentationImportRow of(DataAcousticProvider provider, AncillaryInstrumentation ancillaryInstrumentation) { + public static VoyageCommonsAncillaryInstrumentationImportRow of(DataAcousticProvider<Transect> provider, AncillaryInstrumentation ancillaryInstrumentation) { VoyageCommonsAncillaryInstrumentationImportRow row = new VoyageCommonsAncillaryInstrumentationImportRow(ancillaryInstrumentation); - row.setProvider(provider); + Transect transect = provider.getEntity(); + row.voyage = transect.getTransit().getVoyage(); + row.vessel = transect.getVessel(); return row; } @@ -58,13 +65,11 @@ public class VoyageCommonsAncillaryInstrumentationImportRow extends AncillaryIns this.voyage = voyage; } - @Override - public DataAcousticProvider<Voyage> getProvider() { - return voyage; + public Vessel getVessel() { + return vessel; } - @Override - public void setProvider(DataAcousticProvider<Voyage> provider) { - this.voyage = provider.getEntity(); + public void setVessel(Vessel vessel) { + this.vessel = vessel; } } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java index bd97004..651d793 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/EchoBaseServiceFixtures.java @@ -69,10 +69,14 @@ public class EchoBaseServiceFixtures { return 3; } - public int NB_PROVIDER_ANCILLAY_INSTRUMENTATION() { + public int NB_MOORING_ANCILLAY_INSTRUMENTATION() { return 2; } + public int NB_VOYAGE_ANCILLAY_INSTRUMENTATION() { + return 66; + } + public int NB_TRANSIT() { return 3; } 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 b05ab67..03bbbf1 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 @@ -77,6 +77,7 @@ public enum ImportDataFixtures { serviceContext.assertNbEntities(Voyage.class, fixtures.NB_VOYAGE()); serviceContext.assertNbEntities(Transit.class, fixtures.NB_TRANSIT()); serviceContext.assertNbEntities(Transect.class, fixtures.NB_TRANSECT()); + serviceContext.assertNbEntities(AncillaryInstrumentation.class, fixtures.NB_ANCILLAY_INSTRUMENTATION()); } }, IMPORT_DATA_ECHOBASE_OPERATION("/import-data/echobase-operation.h2.db.gz") { diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java index 721ce55..e3d1756 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java @@ -21,7 +21,6 @@ package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Iterables; -import fr.ifremer.echobase.entities.data.Mooring; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; import fr.ifremer.echobase.services.ImportDataFixtures; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; @@ -64,7 +63,7 @@ public class MooringCommonsAncillaryInstrumentationImportServiceIT extends Abstr @Override protected void assertAfertImport(ImportDataResult<MooringCommonsAncillaryInstrumentationImportConfiguration> result) throws IOException { int nbAncillaryInstrumentation = fixtures.NB_ANCILLAY_INSTRUMENTATION(); - int updated = fixtures.NB_PROVIDER_ANCILLAY_INSTRUMENTATION(); + int updated = fixtures.NB_MOORING_ANCILLAY_INSTRUMENTATION(); ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); assertCsvImportResultPerEntity(importDataFileResult, AncillaryInstrumentation.class, 0, updated, nbAncillaryInstrumentation); diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCommonsAncillaryInstrumentationImportServiceIT.java similarity index 60% copy from echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java copy to echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCommonsAncillaryInstrumentationImportServiceIT.java index 721ce55..2873a2b 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringCommonsAncillaryInstrumentationImportServiceIT.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageCommonsAncillaryInstrumentationImportServiceIT.java @@ -21,10 +21,9 @@ package fr.ifremer.echobase.services.service.importdata; import com.google.common.collect.Iterables; -import fr.ifremer.echobase.entities.data.Mooring; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; import fr.ifremer.echobase.services.ImportDataFixtures; -import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageCommonsAncillaryInstrumentationImportConfiguration; import java.io.IOException; @@ -32,39 +31,39 @@ import java.io.IOException; * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public class MooringCommonsAncillaryInstrumentationImportServiceIT extends AbstractImportDataServiceIT<MooringCommonsAncillaryInstrumentationImportConfiguration> { +public class VoyageCommonsAncillaryInstrumentationImportServiceIT extends AbstractImportDataServiceIT<VoyageCommonsAncillaryInstrumentationImportConfiguration> { - public MooringCommonsAncillaryInstrumentationImportServiceIT() { + public VoyageCommonsAncillaryInstrumentationImportServiceIT() { super(1); } @Override public ImportDataFixtures getImportDataFixture() { - return ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING; + return ImportDataFixtures.IMPORT_DATA_ECHOBASE_COMMON_DATA; } @Override protected String[] getImportPath(String filename) { - return new String[]{"/import-data", "mooring", filename}; + return new String[]{"/import-data", "common", filename}; } @Override - protected MooringCommonsAncillaryInstrumentationImportConfiguration createConfiguration() throws IOException { - MooringCommonsAncillaryInstrumentationImportConfiguration conf = new MooringCommonsAncillaryInstrumentationImportConfiguration(getLocale()); - conf.setMooringId(getMooringId()); + protected VoyageCommonsAncillaryInstrumentationImportConfiguration createConfiguration() throws IOException { + VoyageCommonsAncillaryInstrumentationImportConfiguration conf = new VoyageCommonsAncillaryInstrumentationImportConfiguration(getLocale()); + conf.setVoyageId(getVoyageId()); prepareInputFile(conf.getAncillaryInstrumentationFile(), getImportPath("ancillaryInstrumentation.csv.gz")); return conf; } @Override - protected ImportDataService.MooringCommonsAncillaryInstrumentationImportDataAction newAction() throws IOException { - return new ImportDataService.MooringCommonsAncillaryInstrumentationImportDataAction(); + protected ImportDataService.VoyageCommonsAncillaryInstrumentationImportDataAction newAction() throws IOException { + return new ImportDataService.VoyageCommonsAncillaryInstrumentationImportDataAction(); } @Override - protected void assertAfertImport(ImportDataResult<MooringCommonsAncillaryInstrumentationImportConfiguration> result) throws IOException { + protected void assertAfertImport(ImportDataResult<VoyageCommonsAncillaryInstrumentationImportConfiguration> result) throws IOException { int nbAncillaryInstrumentation = fixtures.NB_ANCILLAY_INSTRUMENTATION(); - int updated = fixtures.NB_PROVIDER_ANCILLAY_INSTRUMENTATION(); + int updated = fixtures.NB_VOYAGE_ANCILLAY_INSTRUMENTATION(); ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); assertCsvImportResultPerEntity(importDataFileResult, AncillaryInstrumentation.class, 0, updated, nbAncillaryInstrumentation); diff --git a/echobase-services/src/test/resources/import-data/common/ancillaryInstrumentation.csv.gz b/echobase-services/src/test/resources/import-data/common/ancillaryInstrumentation.csv.gz new file mode 100644 index 0000000..a798fd2 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/common/ancillaryInstrumentation.csv.gz differ diff --git a/echobase-services/src/test/resources/import-data/echobase-commonData.h2.db.gz b/echobase-services/src/test/resources/import-data/echobase-commonData.h2.db.gz index a854105..3363b6d 100644 Binary files a/echobase-services/src/test/resources/import-data/echobase-commonData.h2.db.gz and b/echobase-services/src/test/resources/import-data/echobase-commonData.h2.db.gz differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.