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 bcee297b5fc53471266b1e913697baae16edaebb Author: Julien Ruchaud <julien.ruchaud@debux.org> Date: Mon Jul 4 15:19:17 2016 +0200 Create service for echotype import for mooring --- .../service/importdata/ImportDataService.java | 22 ++++- .../MooringResultsEchotypeImportAction.java | 67 +++++++++++++ .../VoyageResultsVoyageEchotypeImportAction.java | 2 +- .../MooringResultsImportConfiguration.java | 91 ++++++++++++++++++ .../contexts/MooringResultsImportDataContext.java | 81 ++++++++++++++++ ...> MooringResultsEchotypeImportExportModel.java} | 36 +++---- .../csv/MooringResultsEchotypeImportRow.java | 73 ++++++++++++++ .../importdata/csv/ResultsEchotypeImportRow.java | 4 +- ...yageResultsVoyageEchotypeImportExportModel.java | 5 +- .../service/removedata/RemoveDataService.java | 3 +- .../strategy/MooringResultsRemoveDataStrategy.java | 105 +++++++++++++++++++++ .../importdata/MooringResultsImportServiceIT.java | 72 ++++++++++++++ .../removedata/AbstractRemoveDataServiceTest.java | 27 +++++- .../removedata/MooringRemoveDataServiceTest.java | 2 + ...va => MooringResultsRemoveDataServiceTest.java} | 24 ++--- .../import-data/result/mooring/echotype.csv.gz | Bin 0 -> 593 bytes 16 files changed, 571 insertions(+), 43 deletions(-) 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 7eeeb39..cda8fea 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 @@ -33,6 +33,7 @@ import fr.ifremer.echobase.services.service.importdata.actions.ImportDataActionS import fr.ifremer.echobase.services.service.importdata.actions.MooringAcousticsImportAction; import fr.ifremer.echobase.services.service.importdata.actions.MooringCommonsAncillaryInstrumentationImportAction; import fr.ifremer.echobase.services.service.importdata.actions.MooringCommonsMooringImportAction; +import fr.ifremer.echobase.services.service.importdata.actions.MooringResultsEchotypeImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageAcousticsImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesBiometrySampleImportAction; import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesSubSampleImportAction; @@ -60,6 +61,7 @@ import fr.ifremer.echobase.services.service.importdata.configurations.ImportData import fr.ifremer.echobase.services.service.importdata.configurations.MooringAcousticsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsMooringImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; 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; @@ -70,6 +72,7 @@ import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataContex import fr.ifremer.echobase.services.service.importdata.contexts.MooringAcousticsImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommonsAncillaryInstrumentationImportDataContext; import fr.ifremer.echobase.services.service.importdata.contexts.MooringCommonsMooringImportDataContext; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; 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; @@ -209,11 +212,15 @@ public class ImportDataService extends EchoBaseServiceSupport { } public ImportDataResult<MooringAcousticsImportConfiguration> doImportMooringAcoustics(MooringAcousticsImportConfiguration configuration, EchoBaseUser user) throws ImportException { - MooringAcousticsImportDataContext importDataContext = newMooringAcousticsImportContext(configuration, user); Set<MooringAcousticsImportAction> importActions = Collections.singleton(new MooringAcousticsImportAction(importDataContext)); return doImport(importDataContext, importActions); - + } + + public ImportDataResult<MooringResultsImportConfiguration> doImportMooringResults(MooringResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { + MooringResultsImportDataContext importDataContext = newMooringResultsImportContext(configuration, user); + Set<MooringResultsEchotypeImportAction> importActions = Collections.singleton(new MooringResultsEchotypeImportAction(importDataContext)); + return doImport(importDataContext, importActions); } public ImportDataResult<VoyageResultsImportConfiguration> doImportVoyageResults(VoyageResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { @@ -345,6 +352,10 @@ public class ImportDataService extends EchoBaseServiceSupport { return new MooringAcousticsImportDataContext(persistenceService, getLocale(), getCsvSeparator(), configuration, user, newDate()); } + private MooringResultsImportDataContext newMooringResultsImportContext(MooringResultsImportConfiguration configuration, EchoBaseUser user) { + return new MooringResultsImportDataContext(persistenceService, getLocale(), getCsvSeparator(), configuration, user, newDate()); + } + protected <M extends ImportDataConfigurationSupport, C extends ImportDataContextSupport<M>, A extends ImportDataActionSupport> ImportDataResult<M> doImport(C importDataContext, Collection<A> importActions) throws ImportException { long s0 = TimeLog.getTime(); @@ -482,4 +493,11 @@ public class ImportDataService extends EchoBaseServiceSupport { } } + public static class MooringResultsImportDataAction implements ImportDataAction<MooringResultsImportConfiguration> { + @Override + public ImportDataResult<MooringResultsImportConfiguration> doImport(ImportDataService service, MooringResultsImportConfiguration configuration, EchoBaseUser user) throws ImportException { + return service.doImportMooringResults(configuration, user); + } + } + } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEchotypeImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEchotypeImportAction.java new file mode 100644 index 0000000..092287b --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/MooringResultsEchotypeImportAction.java @@ -0,0 +1,67 @@ +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.Echotype; +import fr.ifremer.echobase.entities.references.Species; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEchotypeImportExportModel; +import fr.ifremer.echobase.services.service.importdata.csv.MooringResultsEchotypeImportRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsEchotypeImportAction extends ImportResultsEchotypeActionSupport<MooringResultsImportConfiguration, MooringResultsImportDataContext, MooringResultsEchotypeImportRow> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(MooringResultsEchotypeImportAction.class); + + public MooringResultsEchotypeImportAction(MooringResultsImportDataContext importDataContext) { + super(importDataContext, importDataContext.getConfiguration().getEchotypeFile()); + } + + @Override + protected MooringResultsEchotypeImportExportModel createCsvImportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEchotypeImportExportModel.forImport(importDataContext); + } + + @Override + protected MooringResultsEchotypeImportExportModel createCsvExportModel(MooringResultsImportDataContext importDataContext) { + return MooringResultsEchotypeImportExportModel.forExport(importDataContext); + } + + @Override + protected DataAcousticProvider getDataProvider(MooringResultsImportDataContext importDataContext) { + return importDataContext.getMooring(); + } + + @Override + protected MooringResultsEchotypeImportRow newImportedRow(DataAcousticProvider mooring, Echotype echotype, Species species) { + return MooringResultsEchotypeImportRow.of(mooring, echotype, species); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsVoyageEchotypeImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsVoyageEchotypeImportAction.java index d890141..7704f59 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsVoyageEchotypeImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageResultsVoyageEchotypeImportAction.java @@ -58,7 +58,7 @@ public class VoyageResultsVoyageEchotypeImportAction extends ImportResultsEchoty @Override protected DataAcousticProvider getDataProvider(VoyageResultsImportDataContext importDataContext) { - return (DataAcousticProvider) importDataContext.getVoyage(); + return importDataContext.getVoyage(); } @Override diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/MooringResultsImportConfiguration.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/MooringResultsImportConfiguration.java new file mode 100644 index 0000000..a1929b4 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/MooringResultsImportConfiguration.java @@ -0,0 +1,91 @@ +/* + * #%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.io.InputFile; + +import java.util.Locale; + +import static org.nuiton.i18n.I18n.l; + +/** + * Configuration of a "results" import for mooring. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsImportConfiguration extends ImportResultsConfigurationSupport { + + private static final long serialVersionUID = 1L; + /** Acoustic result by echotype import. */ + protected final InputFile esduByEchotypeFile; + /** Acoustic result by echotype and species category import. */ + protected final InputFile esduByEchotypeAndSpeciesCategoryFile; + /** Echotype file to import. */ + protected final InputFile echotypeFile; + /** Selected mooring id where to import datas. */ + protected String mooringId; + + public MooringResultsImportConfiguration(Locale locale) { + echotypeFile = InputFile.newFile(l(locale, "echobase.common.echotypeFile")); + esduByEchotypeFile = InputFile.newFile(l(locale, "echobase.common.esduByEchotypeFile")); + esduByEchotypeAndSpeciesCategoryFile = InputFile.newFile(l(locale, "echobase.common.esduByEchotypeAndSpeciesCategoryFile")); + } + + public String getMooringId() { + return mooringId; + } + + public void setMooringId(String mooringId) { + this.mooringId = mooringId; + } + public InputFile getEchotypeFile() { + return echotypeFile; + } + + public InputFile getEsduByEchotypeFile() { + return esduByEchotypeFile; + } + + public InputFile getEsduByEchotypeAndSpeciesCategoryFile() { + return esduByEchotypeAndSpeciesCategoryFile; + } + + public boolean isOneEsduImportFile() { + return esduByEchotypeFile.hasFile() + || esduByEchotypeAndSpeciesCategoryFile.hasFile(); + + } + + public boolean isOneMooringImportFile() { + return echotypeFile.hasFile(); + + } + + @Override + public InputFile[] getInputFiles() { + return new InputFile[]{ + echotypeFile, + esduByEchotypeFile, + esduByEchotypeAndSpeciesCategoryFile, + }; + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/MooringResultsImportDataContext.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/MooringResultsImportDataContext.java new file mode 100644 index 0000000..146483e --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/MooringResultsImportDataContext.java @@ -0,0 +1,81 @@ +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.Cell; +import fr.ifremer.echobase.entities.data.Cells; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Echotypes; +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.MooringResultsImportConfiguration; +import java.util.Collections; + +import java.util.Date; +import java.util.Locale; +import java.util.Map; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + */ +public class MooringResultsImportDataContext extends ImportResultsDataContext<MooringResultsImportConfiguration> { + + private Mooring mooring; + private Map<String, Mooring> mooringsByCode; + private Map<String, Echotype> mooringEchotypesByName; + + public MooringResultsImportDataContext(UserDbPersistenceService persistenceService, Locale locale, char csvSeparator, MooringResultsImportConfiguration configuration, EchoBaseUser user, Date importDate) { + super(persistenceService, locale, csvSeparator, configuration, user, importDate); + } + + public final Mooring getMooring() { + if (mooring == null) { + mooring = persistenceService.getMooring(configuration.getMooringId()); + } + return mooring; + } + + @Override + public String getEntityId() { + return configuration.getMooringId(); + } + + public final Map<String, Echotype> getMooringEchotypesByName() { + if (mooringEchotypesByName == null) { + mooringEchotypesByName = Maps.uniqueIndex(getMooring().getEchotype(), Echotypes.ECHOTYPE_NAME); + } + return mooringEchotypesByName; + } + + public final Map<String, Mooring> getMooringsByCode() { + if (mooringsByCode == null) { + mooringsByCode = Maps.uniqueIndex(Collections.singletonList(getMooring()), Moorings.MOORING_CODE); + } + return mooringsByCode; + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportExportModel.java similarity index 55% copy from echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java copy to echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportExportModel.java index 8689524..4ff8f67 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportExportModel.java @@ -21,45 +21,45 @@ package fr.ifremer.echobase.services.service.importdata.csv; import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; import fr.ifremer.echobase.entities.data.Voyage; import fr.ifremer.echobase.entities.references.DepthStratum; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; -import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.contexts.MooringResultsImportDataContext; +import static fr.ifremer.echobase.services.service.importdata.csv.ResultsEchotypeImportRow.HEADER_ECHOTYPE_NAME; +import static fr.ifremer.echobase.services.service.importdata.csv.ResultsEchotypeImportRow.HEADER_SPECIES; /** * Model to import echotypes. * - * @author Tony Chemit - chemit@codelutin.com - * @since 0.3 + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 */ -public class VoyageResultsVoyageEchotypeImportExportModel extends EchoBaseImportExportModelSupport<VoyageResultsVoyageEchotypeImportRow> { +public class MooringResultsEchotypeImportExportModel extends EchoBaseImportExportModelSupport<MooringResultsEchotypeImportRow> { - public static final String HEADER_ECHOTYPE_NAME = "echotypeName"; - protected static final String HEADER_SPECIES = "baracoudaCode"; - - private VoyageResultsVoyageEchotypeImportExportModel(char separator) { + private MooringResultsEchotypeImportExportModel(char separator) { super(separator); } - public static VoyageResultsVoyageEchotypeImportExportModel forImport(VoyageResultsImportDataContext importDataContext) { + public static MooringResultsEchotypeImportExportModel forImport(MooringResultsImportDataContext importDataContext) { - VoyageResultsVoyageEchotypeImportExportModel model = new VoyageResultsVoyageEchotypeImportExportModel(importDataContext.getCsvSeparator()); + MooringResultsEchotypeImportExportModel model = new MooringResultsEchotypeImportExportModel(importDataContext.getCsvSeparator()); model.newMandatoryColumn(HEADER_ECHOTYPE_NAME, Echotype.PROPERTY_NAME); - model.newMandatoryColumn(VoyageResultsVoyageEchotypeImportRow.PROPERTY_MEANING, Echotype.PROPERTY_MEANING); - model.newForeignKeyColumn(VoyageResultsVoyageEchotypeImportRow.PROPERTY_VOYAGE, Voyage.class, Voyage.PROPERTY_NAME, importDataContext.getVoyagesByName()); + model.newMandatoryColumn(MooringResultsEchotypeImportRow.PROPERTY_MEANING, Echotype.PROPERTY_MEANING); + model.newForeignKeyColumn(MooringResultsEchotypeImportRow.PROPERTY_MOORING, Mooring.class, Mooring.PROPERTY_CODE, importDataContext.getMooringsByCode()); model.newForeignKeyColumn(EchoBaseCsvUtil.DEPTH_STRATUM_ID, Echotype.PROPERTY_DEPTH_STRATUM, DepthStratum.class, DepthStratum.PROPERTY_ID, importDataContext.getDepthStratumsById()); model.newForeignKeyColumn(HEADER_SPECIES, Echotype.PROPERTY_SPECIES, Species.class, Species.PROPERTY_BARACOUDA_CODE, importDataContext.getSpeciesByBaracoudaCode()); return model; } - public static VoyageResultsVoyageEchotypeImportExportModel forExport(VoyageResultsImportDataContext importDataContext) { + public static MooringResultsEchotypeImportExportModel forExport(MooringResultsImportDataContext importDataContext) { - VoyageResultsVoyageEchotypeImportExportModel model = new VoyageResultsVoyageEchotypeImportExportModel(importDataContext.getCsvSeparator()); + MooringResultsEchotypeImportExportModel model = new MooringResultsEchotypeImportExportModel(importDataContext.getCsvSeparator()); model.newColumnForExport(HEADER_ECHOTYPE_NAME, Echotype.PROPERTY_NAME); - model.newColumnForExport(VoyageResultsVoyageEchotypeImportRow.PROPERTY_MEANING, Echotype.PROPERTY_MEANING); - model.newColumnForExport(VoyageResultsVoyageEchotypeImportRow.PROPERTY_VOYAGE, EchoBaseCsvUtil.VOYAGE_FORMATTER); + model.newColumnForExport(MooringResultsEchotypeImportRow.PROPERTY_MEANING, Echotype.PROPERTY_MEANING); + model.newColumnForExport(MooringResultsEchotypeImportRow.PROPERTY_MOORING, EchoBaseCsvUtil.MOORING_FORMATTER); model.newColumnForExport(EchoBaseCsvUtil.DEPTH_STRATUM_ID, Echotype.PROPERTY_DEPTH_STRATUM, EchoBaseCsvUtil.DEPTH_STRATUM_FORMATTER); model.newColumnForExport(HEADER_SPECIES, Echotype.PROPERTY_SPECIES, EchoBaseCsvUtil.SPECIES_FORMATTER); return model; @@ -67,7 +67,7 @@ public class VoyageResultsVoyageEchotypeImportExportModel extends EchoBaseImport } @Override - public VoyageResultsVoyageEchotypeImportRow newEmptyInstance() { - return new VoyageResultsVoyageEchotypeImportRow(); + public MooringResultsEchotypeImportRow newEmptyInstance() { + return new MooringResultsEchotypeImportRow(); } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportRow.java new file mode 100644 index 0000000..16f7053 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/MooringResultsEchotypeImportRow.java @@ -0,0 +1,73 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2012 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ +package fr.ifremer.echobase.services.service.importdata.csv; + +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.data.Mooring; +import fr.ifremer.echobase.entities.references.Species; + +/** + * Bean used as a row for import of {@link MooringResultsEchotypeImportExportModel}. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsEchotypeImportRow extends ResultsEchotypeImportRow<Mooring> { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_MOORING = "mooring"; + protected Mooring mooring; + + public static MooringResultsEchotypeImportRow of(DataAcousticProvider provider, Echotype echotype, Species species) { + MooringResultsEchotypeImportRow row = new MooringResultsEchotypeImportRow(echotype); + row.setProvider(provider); + row.setSpecies(species); + return row; + } + + public MooringResultsEchotypeImportRow() { + super(); + } + + public MooringResultsEchotypeImportRow(Echotype echotype) { + super(echotype); + } + + public Mooring getMooring() { + return mooring; + } + + public void setMooring(Mooring mooring) { + this.mooring = mooring; + } + + @Override + public DataAcousticProvider<Mooring> getProvider() { + return mooring; + } + + @Override + public void setProvider(DataAcousticProvider<Mooring> provider) { + this.mooring = provider.getEntity(); + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/ResultsEchotypeImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/ResultsEchotypeImportRow.java index d34999f..ec88750 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/ResultsEchotypeImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/ResultsEchotypeImportRow.java @@ -38,7 +38,9 @@ public abstract class ResultsEchotypeImportRow<E extends TopiaEntity> implements private static final long serialVersionUID = 1L; public static final String PROPERTY_MEANING = Echotype.PROPERTY_MEANING; - + public static final String HEADER_ECHOTYPE_NAME = "echotypeName"; + protected static final String HEADER_SPECIES = "baracoudaCode"; + protected final Echotype echotype; protected Species species; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java index 8689524..dfde0c4 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageResultsVoyageEchotypeImportExportModel.java @@ -26,6 +26,8 @@ import fr.ifremer.echobase.entities.references.DepthStratum; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImportDataContext; +import static fr.ifremer.echobase.services.service.importdata.csv.ResultsEchotypeImportRow.HEADER_ECHOTYPE_NAME; +import static fr.ifremer.echobase.services.service.importdata.csv.ResultsEchotypeImportRow.HEADER_SPECIES; /** * Model to import echotypes. @@ -35,9 +37,6 @@ import fr.ifremer.echobase.services.service.importdata.contexts.VoyageResultsImp */ public class VoyageResultsVoyageEchotypeImportExportModel extends EchoBaseImportExportModelSupport<VoyageResultsVoyageEchotypeImportRow> { - public static final String HEADER_ECHOTYPE_NAME = "echotypeName"; - protected static final String HEADER_SPECIES = "baracoudaCode"; - private VoyageResultsVoyageEchotypeImportExportModel(char separator) { super(separator); } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java index 7cb66df..99853a7 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/RemoveDataService.java @@ -66,6 +66,7 @@ import java.util.Set; import fr.ifremer.echobase.entities.data.DataAcousticProvider; import fr.ifremer.echobase.services.service.removedata.strategy.CommonAncillaryInstrumentationRemoveDataStrategy; import fr.ifremer.echobase.services.service.removedata.strategy.MooringAncillaryInstrumentationRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.MooringResultsRemoveDataStrategy; /** * Service to remove an import data. @@ -296,7 +297,7 @@ public class RemoveDataService extends EchoBaseServiceSupport { strategies.put(ImportType.MOORING_COMMONS, MooringRemoveDataStrategy.class); strategies.put(ImportType.MOORING_ANCILLARY_INSTRUMENTATION, MooringAncillaryInstrumentationRemoveDataStrategy.class); strategies.put(ImportType.MOORING_ACOUSTIC, MooringAcousticRemoveDataStrategy.class); - strategies.put(ImportType.RESULT_MOORING, DummyRemoveDataStrategy.class); + strategies.put(ImportType.RESULT_MOORING, MooringResultsRemoveDataStrategy.class); strategies.put(ImportType.RESULT_MOORING_ESDU, DummyRemoveDataStrategy.class); Preconditions.checkState( ImportType.values().length == strategies.size(), diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/MooringResultsRemoveDataStrategy.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/MooringResultsRemoveDataStrategy.java new file mode 100644 index 0000000..20485d6 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/MooringResultsRemoveDataStrategy.java @@ -0,0 +1,105 @@ +package fr.ifremer.echobase.services.service.removedata.strategy; + +/* + * #%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% + */ + +import com.google.common.collect.Sets; +import fr.ifremer.echobase.entities.ImportLog; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Echotype; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.TopiaException; + +import java.util.List; +import java.util.Set; +import fr.ifremer.echobase.entities.data.DataAcousticProvider; +import fr.ifremer.echobase.entities.data.Mooring; + +/** + * Remove a {@link ImportType#RESULT_MOORING} import. + * + * Can remove only {@link Echotype}. + * + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsRemoveDataStrategy extends AbstractRemoveDataStrategy<Mooring> { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(MooringResultsRemoveDataStrategy.class); + + @Override + public long computeNbSteps(DataAcousticProvider<Mooring> provider, ImportLog importLog) { + Mooring mooring = provider.getEntity(); + + long result = getImportFileIdsCount(importLog); + + // add all cell results + result += persistenceService.countMooringCellResults(mooring); + + return result; + } + + @Override + protected void removePreData(DataAcousticProvider<Mooring> provider) throws TopiaException { + Mooring mooring = provider.getEntity(); + removeMooringCellResults(mooring); + } + + @Override + protected void removeImportData(DataAcousticProvider<Mooring> provider, String id) throws TopiaException { + Mooring mooring = provider.getEntity(); + + if (id.startsWith(Echotype.class.getName())) { + + // remove echotype + Echotype echotype = persistenceService.getEchotype(id); + + // delete all categories using this echotype + List<Category> allByEchotype = persistenceService.getCategorysByEchotype(echotype); + persistenceService.deleteCategories(allByEchotype); + + if (mooring != null) { + // remove it from the voyage + mooring.removeEchotype(echotype); + } + + // delete echotype + persistenceService.deleteEchotype(echotype); + + incrementOp("Remove echotype " + echotype.getTopiaId()); + + if (log.isDebugEnabled()) { + log.debug(echotype.getTopiaId() + " was removed"); + } + } else { + canNotDealWithId(id); + } + } + + @Override + public Set<ImportType> getPossibleSubImportType() { + return Sets.newHashSet(ImportType.RESULT_MOORING_ESDU); + } +} diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsImportServiceIT.java new file mode 100644 index 0000000..0999527 --- /dev/null +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/MooringResultsImportServiceIT.java @@ -0,0 +1,72 @@ +/* + * #%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; + +import com.google.common.collect.Iterables; +import fr.ifremer.echobase.entities.ImportType; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.services.ImportDataFixtures; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; + +import java.io.IOException; + +/** + * @author Julien Ruchaud - ruchaud@codelutin.com + * @since 4.0 + */ +public class MooringResultsImportServiceIT extends AbstractImportDataServiceIT<MooringResultsImportConfiguration> { + + public MooringResultsImportServiceIT() { + super(1); + } + + @Override + public ImportDataFixtures getImportDataFixture() { + return ImportDataFixtures.IMPORT_DATA_ECHOBASE_MOORING; + } + + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "result", "mooring", filename}; + } + + @Override + protected MooringResultsImportConfiguration createConfiguration() throws IOException { + MooringResultsImportConfiguration configuration = new MooringResultsImportConfiguration(getLocale()); + configuration.setImportType(ImportType.RESULT_MOORING); + configuration.setMooringId(getMooringId()); + prepareInputFile(configuration.getEchotypeFile(), getImportPath("echotype.csv.gz")); + return configuration; + } + + @Override + protected ImportDataService.MooringResultsImportDataAction newAction() throws IOException { + return new ImportDataService.MooringResultsImportDataAction(); + } + + @Override + protected void assertAfertImport(ImportDataResult<MooringResultsImportConfiguration> result) throws IOException { + int nbEchotype = fixtures.NB_ECHOTYPE(); + ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); + assertCsvImportResultPerEntity(importDataFileResult, Echotype.class, nbEchotype, 0, nbEchotype); + assertCsvImportResult0(importDataFileResult, nbEchotype); + } + +} diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java index b48ecf2..fc94f50 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/AbstractRemoveDataServiceTest.java @@ -89,6 +89,7 @@ import fr.ifremer.echobase.services.service.importdata.configurations.ImportData import fr.ifremer.echobase.services.service.importdata.configurations.MooringAcousticsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsMooringImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.configurations.MooringResultsImportConfiguration; 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; @@ -153,6 +154,8 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS protected String importMooringAncillaryInstrumentationId; + protected String importMooringResultsId; + protected static final String voyage1Id = "fr.ifremer.echobase.entities.data.Voyage#1#1"; protected static final String transit1Id = "fr.ifremer.echobase.entities.data.Transit#1#1"; @@ -194,6 +197,8 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS protected static final String resultEsdu1_2Id = "fr.ifremer.echobase.entities.data.Result#1#esdu2"; protected static final String echotype1Id = "fr.ifremer.echobase.entities.data.Echotype#1#1"; + + protected static final String echotype2Id = "fr.ifremer.echobase.entities.data.Echotype#1#2"; protected static final String lengthAgeKey1Id = "fr.ifremer.echobase.entities.data.LengthAgeKey#1#1"; @@ -331,6 +336,7 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS createMooringImport(); createMooringAcousticImport(); createMooringAncillaryInstrumentationImport(); + createMooringResultsImport(); } protected void removeImport(String importId, String... shoudDeleteIds) throws TopiaException { @@ -354,6 +360,7 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS importMooringAcousticId, importVoyageAncillaryInstrumentationId, importMooringAncillaryInstrumentationId, + importMooringResultsId, voyage1Id, transit1Id, transect1Id, transect1_2Id, operation1Id, totalSample1Id, subSample1Id, biometrySample1Id, @@ -364,7 +371,8 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS echotype1Id, lengthAgeKey1Id, lengthWeightKey1Id, voyage2Id, transit2Id, transect2Id, transect2_2Id, mooringId, - dataAcquisition2Id, cellEsdu2Id, cellElementary2Id + dataAcquisition2Id, cellEsdu2Id, cellElementary2Id, + echotype2Id ); List<String> deletedId = Lists.newArrayList(); @@ -972,6 +980,23 @@ public abstract class AbstractRemoveDataServiceTest extends EchoBaseTestServiceS mooringId, mooring); } + + private void createMooringResultsImport() throws TopiaException { + + Mooring mooring = getEntity(mooringId); + + // create echotype + Echotype echotype = echotypeDAO.create(TopiaEntity.PROPERTY_TOPIA_ID, echotype2Id, + Echotype.PROPERTY_NAME, "echotype2Name"); + mooring.addEchotype(echotype); + + importMooringResultsId = createImport( + new MooringResultsImportConfiguration(getLocale()), + ImportType.RESULT_MOORING, + "MooringResults", + mooringId, + echotype); + } private <C extends ImportDataConfigurationSupport> String createImport(C importConf, ImportType importType, diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java index 78dd901..ed54a25 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java @@ -43,9 +43,11 @@ public class MooringRemoveDataServiceTest extends AbstractRemoveDataServiceTest // data that should be removed mooringId, dataAcquisition2Id, cellEsdu2Id, cellElementary2Id, + echotype2Id, // importLog that should be removed importMooringId, + importMooringResultsId, importMooringAcousticId, importMooringAncillaryInstrumentationId); } diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringResultsRemoveDataServiceTest.java similarity index 66% copy from echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java copy to echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringResultsRemoveDataServiceTest.java index 78dd901..64e720d 100644 --- a/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringRemoveDataServiceTest.java +++ b/echobase-services/src/test/java/fr/ifremer/echobase/ui/actions/removedata/MooringResultsRemoveDataServiceTest.java @@ -4,7 +4,7 @@ package fr.ifremer.echobase.ui.actions.removedata; * #%L * EchoBase :: Services * %% - * Copyright (C) 2011 - 2013 Ifremer, Codelutin + * 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 @@ -22,34 +22,26 @@ package fr.ifremer.echobase.ui.actions.removedata; */ import fr.ifremer.echobase.services.service.removedata.RemoveDataService; -import fr.ifremer.echobase.services.service.removedata.strategy.MooringRemoveDataStrategy; +import fr.ifremer.echobase.services.service.removedata.strategy.MooringResultsRemoveDataStrategy; import org.junit.Test; import org.nuiton.topia.persistence.TopiaException; /** - * Test{@link RemoveDataService} with {@link MooringRemoveDataStrategy}. + * Test{@link RemoveDataService} with {@link MooringResultsRemoveDataStrategy}. * * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 */ -public class MooringRemoveDataServiceTest extends AbstractRemoveDataServiceTest { +public class MooringResultsRemoveDataServiceTest extends AbstractRemoveDataServiceTest { @Test - public void removeImport() throws TopiaException { + public void removeEchotypeImport() throws TopiaException { removeImport(// import to remove - importMooringId, - + importMooringResultsId, // data that should be removed - mooringId, - dataAcquisition2Id, cellEsdu2Id, cellElementary2Id, - + echotype2Id, // importLog that should be removed - importMooringId, - importMooringAcousticId, - importMooringAncillaryInstrumentationId); + importMooringResultsId); } } - - - diff --git a/echobase-services/src/test/resources/import-data/result/mooring/echotype.csv.gz b/echobase-services/src/test/resources/import-data/result/mooring/echotype.csv.gz new file mode 100644 index 0000000..9a2e327 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/result/mooring/echotype.csv.gz differ -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.