branch feature/8180 updated (0b01f5f -> 9f0f94f)
This is an automated email from the git hooks/post-receive script. New change to branch feature/8180 in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git from 0b01f5f Handle duplication on elementary cell (refs #2246) new 9f0f94f Create ancillary intrumentation import for the voyage The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: 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 Summary of changes: .../services/service/UserDbPersistenceService.java | 7 ++ .../service/importdata/ImportDataService.java | 21 +++++- ...mportAncillaryInstrumentationActionSupport.java | 57 ++++++++------- ...ommonsAncillaryInstrumentationImportAction.java | 15 +++- ...ommonsAncillaryInstrumentationImportAction.java | 79 +++++++++++++++++++++ ...cillaryInstrumentationImportConfiguration.java} | 6 +- ...AncillaryInstrumentationImportDataContext.java} | 35 +++++---- .../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, 217 insertions(+), 90 deletions(-) create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCommonsAncillaryInstrumentationImportAction.java copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/{MooringCommonsAncillaryInstrumentationImportConfiguration.java => VoyageCommonsAncillaryInstrumentationImportConfiguration.java} (85%) copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/{VoyageAcousticsImportDataContext.java => VoyageCommonsAncillaryInstrumentationImportDataContext.java} (61%) copy echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/{MooringCommonsAncillaryInstrumentationImportServiceIT.java => VoyageCommonsAncillaryInstrumentationImportServiceIT.java} (60%) create mode 100644 echobase-services/src/test/resources/import-data/common/ancillaryInstrumentation.csv.gz -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
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>.
participants (1)
-
codelutin.com scm