This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 9999f750ef347b88243db6f5012508ed5f380fb5 Author: jcouteau <couteau@codelutin.com> Date: Wed Jan 8 17:49:43 2020 +0100 J'aime pas les gros commits comme ça, mais tout est imbriqué :( fixes #9739 - Champs non valués dans la table "DataProcessing" d'EB (et donc dans le chapitre "DataProcessing" de l'export acoustic) fixes #9731 - Le "sampleDataType" des sampleData "numberSampled" devrait être "NumberAtLength" dans l'import des subsamples fixes #9742 - Ajouter un menu pour importer les calibrations Transformation de l'id d'échotype de int -> string --- .../echobase/entities/data/EchotypeTopiaDao.java | 2 +- .../WorkingDbMigrationCallBackForVersion3_915.java | 48 ++++++++ .../h2/3.915-0-dataAcquisition-dataProcessing.sql | 7 ++ .../migration/workingDb/h2/3.915-1-echotypeId.sql | 1 + .../pg/3.915-0-dataAcquisition-dataProcessing.sql | 6 + .../migration/workingDb/pg/3.915-1-echotypeId.sql | 1 + echobase-domain/src/main/xmi/echobase.properties | 2 +- echobase-domain/src/main/xmi/echobase.zargo | Bin 100662 -> 100570 bytes .../echobase/services/csv/EchoBaseCsvUtil.java | 3 +- .../services/service/UserDbPersistenceService.java | 31 +++++ .../service/atlantos/xml/VocabularyExport.java | 2 +- .../service/atlantos/xml/XmlAccousticExport.java | 6 +- .../service/importdata/ImportDataService.java | 39 ++----- .../actions/ImportAcousticsActionSupport.java | 38 ++++--- .../actions/ImportCalibrationActionSupport.java | 44 ++++++++ .../VoyageAcousticsCalibrationImportAction.java | 113 +++++++++++++++++++ .../actions/VoyageAcousticsImportAction.java | 2 + .../ImportAcousticsConfiguration.java | 9 +- .../service/importdata/csv/AcousticImportRow.java | 2 + .../csv/CalibrationImportExportModel.java | 75 +++++++++++++ .../importdata/csv/CalibrationImportRow.java | 125 +++++++++++++++++++++ .../importdata/csv/ResultsEchotypeImportRow.java | 4 +- .../VoyageCatchesSubSampleImportExportModel.java | 5 +- .../csv/VoyageCatchesSubSampleImportRow.java | 2 - .../strategy/AcousticRemoveDataStrategy.java | 10 ++ .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + .../VoyageAcousticCalibrationImportServiceIT.java | 121 ++++++++++++++++++++ .../import-data/acoustic/calibrations_small.csv.gz | Bin 0 -> 231 bytes .../import-data/acoustic/movies_small.csv.gz | Bin 7963 -> 7976 bytes .../importData/ConfigureAcousticImport.java | 12 ++ .../resources/i18n/echobase-ui_en_GB.properties | 1 + .../resources/i18n/echobase-ui_fr_FR.properties | 1 + .../jsp/importData/configureAcousticImport.jsp | 3 + 34 files changed, 651 insertions(+), 66 deletions(-) diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/EchotypeTopiaDao.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/EchotypeTopiaDao.java index 85f9b579..bdac4356 100644 --- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/EchotypeTopiaDao.java +++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/data/EchotypeTopiaDao.java @@ -33,7 +33,7 @@ import java.util.List; */ public class EchotypeTopiaDao extends GeneratedEchotypeTopiaDao<Echotype> { - public Echotype findByIdAndSpecies(Integer id, + public Echotype findByIdAndSpecies(String id, Species species) throws TopiaException { List<Echotype> allById = forIdEquals(id).findAll(); Echotype result = null; diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/WorkingDbMigrationCallBackForVersion3_915.java b/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/WorkingDbMigrationCallBackForVersion3_915.java new file mode 100644 index 00000000..c20d0f7e --- /dev/null +++ b/echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/WorkingDbMigrationCallBackForVersion3_915.java @@ -0,0 +1,48 @@ +package fr.ifremer.echobase.persistence.migration.workingDb; + +/*- + * #%L + * EchoBase :: Domain + * %% + * Copyright (C) 2011 - 2018 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 org.nuiton.topia.persistence.TopiaException; +import org.nuiton.topia.persistence.support.TopiaSqlSupport; +import org.nuiton.version.Version; +import org.nuiton.version.Versions; + +import java.util.List; + +public class WorkingDbMigrationCallBackForVersion3_915 extends WorkingDbMigrationCallBackForVersionSupport { + + @Override + public Version getVersion() { + return Versions.valueOf("3.915"); + } + + @Override + protected void prepareMigrationScript(TopiaSqlSupport sqlSupport, + List<String> queries, + boolean showSql, + boolean showProgression) throws TopiaException { + + addSpecificScript("3.915-0-dataAcquisition-dataProcessing.sql", queries); + addSpecificScript("3.915-1-echotypeId.sql", queries); + } + +} diff --git a/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-0-dataAcquisition-dataProcessing.sql b/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-0-dataAcquisition-dataProcessing.sql new file mode 100644 index 00000000..f8ceb188 --- /dev/null +++ b/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-0-dataAcquisition-dataProcessing.sql @@ -0,0 +1,7 @@ +alter table dataProcessing drop column transceiverPower; +alter table dataProcessing drop column transmitPulseLength; +alter table dataProcessing drop column transceiverGainUnits; +alter table dataProcessing alter column bandWith rename to bandwidth; + +alter table dataAcquisition add column bandwidth real; +UPDATE dataAcquisition SET bandwidth = 0; \ No newline at end of file diff --git a/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-1-echotypeId.sql b/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-1-echotypeId.sql new file mode 100644 index 00000000..fd66cc28 --- /dev/null +++ b/echobase-domain/src/main/resources/migration/workingDb/h2/3.915-1-echotypeId.sql @@ -0,0 +1 @@ +alter table echotype alter column id VARCHAR(255); diff --git a/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-0-dataAcquisition-dataProcessing.sql b/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-0-dataAcquisition-dataProcessing.sql new file mode 100644 index 00000000..b4cbdcfb --- /dev/null +++ b/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-0-dataAcquisition-dataProcessing.sql @@ -0,0 +1,6 @@ +alter table dataProcessing drop column transceiverPower; +alter table dataProcessing drop column transmitPulseLength; +alter table dataProcessing drop column transceiverGainUnits; +alter table dataProcessing rename column bandWith to bandwidth; + +alter table dataAcquisition add column bandwidth real; diff --git a/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-1-echotypeId.sql b/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-1-echotypeId.sql new file mode 100644 index 00000000..fd66cc28 --- /dev/null +++ b/echobase-domain/src/main/resources/migration/workingDb/pg/3.915-1-echotypeId.sql @@ -0,0 +1 @@ +alter table echotype alter column id VARCHAR(255); diff --git a/echobase-domain/src/main/xmi/echobase.properties b/echobase-domain/src/main/xmi/echobase.properties index bc827666..5217375b 100644 --- a/echobase-domain/src/main/xmi/echobase.properties +++ b/echobase-domain/src/main/xmi/echobase.properties @@ -23,7 +23,7 @@ model.tagValue.notGenerateToString=true model.tagValue.generateOperatorForDAOHelper=true -model.tagValue.version=3.914 +model.tagValue.version=3.915 model.tagValue.generatePropertyChangeSupport=false model.tagValue.generateBooleanGetMethods=false model.tagValue.indexForeignKeys=true diff --git a/echobase-domain/src/main/xmi/echobase.zargo b/echobase-domain/src/main/xmi/echobase.zargo index c5ee64c8..679a9603 100644 Binary files a/echobase-domain/src/main/xmi/echobase.zargo and b/echobase-domain/src/main/xmi/echobase.zargo differ diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseCsvUtil.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseCsvUtil.java index 0954ba52..53ce55e0 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseCsvUtil.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/csv/EchoBaseCsvUtil.java @@ -387,8 +387,9 @@ public class EchoBaseCsvUtil extends TopiaCsvCommons { }; - public static final ValueParser<Date> DATE_TIME_VALUE_PARSER = new ChainValueParser<>(Arrays.<ValueParser<Date>>asList(TopiaCsvCommons.DAY_TIME_SECOND_WITH_TIMESTAMP, + public static final ValueParser<Date> DATE_TIME_VALUE_PARSER = new ChainValueParser<>(Arrays.asList(TopiaCsvCommons.DAY_TIME_SECOND_WITH_TIMESTAMP, TopiaCsvCommons.DAY_TIME_SECOND, + new DateValue("yyyy-MM-dd HH:mm:ss"), TopiaCsvCommons.DAY_TIME, TopiaCsvCommons.DAY)); 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 63f3dc0a..b7dce83f 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 @@ -65,6 +65,7 @@ import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.AgeCategory; import fr.ifremer.echobase.entities.references.AncillaryInstrumentation; import fr.ifremer.echobase.entities.references.AreaOfOperation; +import fr.ifremer.echobase.entities.references.Calibration; import fr.ifremer.echobase.entities.references.CellType; import fr.ifremer.echobase.entities.references.CellTypeImpl; import fr.ifremer.echobase.entities.references.CellTypes; @@ -180,6 +181,36 @@ public class UserDbPersistenceService extends EchoBaseServiceSupport { return persistenceContext.getAncillaryInstrumentationDao().forTopiaIdEquals(id).findUnique(); } + //------------------------------------------------------------------------// + //--- Calibration --------------------------------------------------------// + //------------------------------------------------------------------------// + + public Calibration getCalibration(String id) { + return persistenceContext.getCalibrationDao().forTopiaIdEquals(id).findUnique(); + } + + public Calibration createCalibration(String accuracyEstimate, + AcousticInstrument accousticInstrument, + String acquisitionMethod, + String comments, + Date date, + String processingMethod, + String report) { + return persistenceContext.getCalibrationDao().create( + Calibration.PROPERTY_ACCURACY_ESTIMATE, accuracyEstimate, + Calibration.PROPERTY_ACOUSTIC_INSTRUMENT, accousticInstrument, + Calibration.PROPERTY_AQUISITION_METHOD, acquisitionMethod, + Calibration.PROPERTY_COMMENTS, comments, + Calibration.PROPERTY_DATE, date, + Calibration.PROPERTY_PROCESSING_METHOD, processingMethod, + Calibration.PROPERTY_REPORT, report + ); + } + + public void deleteCalibration(Calibration calibration) { + persistenceContext.getCalibrationDao().delete(calibration); + } + //------------------------------------------------------------------------// //--- Category -----------------------------------------------------------// //------------------------------------------------------------------------// diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/VocabularyExport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/VocabularyExport.java index 25b91434..9ed58ff9 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/VocabularyExport.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/VocabularyExport.java @@ -219,7 +219,7 @@ public class VocabularyExport implements EchoBaseService { this.writer.close("EchoType"); } - public void exportSpecies(Species species, int speciesCategoryName) throws IOException { + public void exportSpecies(Species species, String speciesCategoryName) throws IOException { this.writer.open("Species"); this.writer.create("SpeciesCode", "IDREF", getVocabularyCode("SpecWoRMS_" + species.getWormsCode())); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlAccousticExport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlAccousticExport.java index 658d4a62..8e2d64b0 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlAccousticExport.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlAccousticExport.java @@ -275,13 +275,9 @@ public class XmlAccousticExport implements EchoBaseService { xml.create("ChannelID", dataProcessing.getChannelId()); xml.create("Bandwidth", - dataProcessing.getBandWith()); + dataProcessing.getBandwidth()); xml.create("Frequency", dataProcessing.getFrequency()); - xml.create("TransceiverPower", - dataProcessing.getTransceiverPower()); - xml.create("TransmitPulseLength", - dataProcessing.getTransmitPulseLength()); xml.create("OnAxisGain", dataProcessing.getTransceiverProcessingGain()); xml.create("OnAxisGainUnit", "IDREF", 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 2b0038cd..e71db7c1 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 @@ -29,36 +29,7 @@ import fr.ifremer.echobase.entities.ImportType; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.EchoBaseServiceSupport; import fr.ifremer.echobase.services.service.UserDbPersistenceService; -import fr.ifremer.echobase.services.service.importdata.actions.ImportDataActionSupport; -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.MooringResultsEsduByEchotypeAndSpeciesCategoryCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.MooringResultsEsduByEchotypeCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageAcousticsImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesBiometrySampleImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageCatchesSubSampleImportAction; -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; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageOperationsGearMetadataImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageOperationsOperationImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageOperationsOperationMetadataImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsEsduByEchotypeAndSpeciesCategoryCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsEsduByEchotypeCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsEsduSpeciesAndAgeCategoryCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsEsduByEchotypeAndSpeciesCategoryAndLengthCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsMapFishCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsMapOtherCellImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsRegionAssociationImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsRegionImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsRegionResultsImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsVoyageEchotypeImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsVoyageLengthAgeKeyImportAction; -import fr.ifremer.echobase.services.service.importdata.actions.VoyageResultsVoyageLengthWeightKeyImportAction; +import fr.ifremer.echobase.services.service.importdata.actions.*; import fr.ifremer.echobase.services.service.importdata.configurations.ImportDataConfigurationSupport; import fr.ifremer.echobase.services.service.importdata.configurations.MooringAcousticsImportConfiguration; import fr.ifremer.echobase.services.service.importdata.configurations.MooringCommonsAncillaryInstrumentationImportConfiguration; @@ -190,7 +161,13 @@ 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)); + Collection<ImportDataActionSupport> importActions = new LinkedHashSet<>(); + importActions.add(new VoyageAcousticsImportAction(importDataContext)); + + if (configuration.getCalibrationsFile().hasFile()) { + importActions.add(new VoyageAcousticsCalibrationImportAction(importDataContext)); + } + return doImport(importDataContext, importActions); } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAcousticsActionSupport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAcousticsActionSupport.java index c54296d6..e272f4d5 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAcousticsActionSupport.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportAcousticsActionSupport.java @@ -132,8 +132,7 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf if (dataProcessingId == null) { // compute once for all the common dataprocessing id used - // for hole the movies file - + // for all the movies file dataProcessingId = row.getEiLayer() + processingTemplate; } @@ -144,7 +143,9 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf AcousticInstrument instrument = row.getAcousticInstrument(); boolean isME70 = AcousticInstruments.IS_ACOUSTIC_INSTRUMENT_ME70.apply(instrument); - if (dataAcquisition == null || !instrument.equals(dataAcquisition.getAcousticInstrument())) { + float frequency = row.getFrequency(); + + if (dataProcessing == null || !instrument.equals(dataAcquisition.getAcousticInstrument()) || frequency != dataProcessing.getFrequency()) { // need to use another data acquisition @@ -164,7 +165,7 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf String soundSpeedCalculations = getSoundSpeedCalculations(isME70); // try to get existing data acquisition - dataAcquisition = getDataAcquisition(dataProvider, instrument, addDataAcquisition); + dataAcquisition = getDataAcquisition(dataProvider, instrument, frequency, addDataAcquisition); if (dataAcquisition == null) { @@ -176,8 +177,8 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf createdDataAcquisitions.add(dataAcquisition.getTopiaId()); // add dataAcquisition to mooring - dataProvider.addDataAcquisition(dataAcquisition); - + dataProvider.getDataAcquisition(); + if (log.isDebugEnabled()) { log.debug("[row " + rowNumber + "] New dataAquisition to use (number: " + result.getNumberCreated(EchoBaseUserEntityEnum.DataAcquisition) + ")"); } @@ -293,21 +294,26 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf protected abstract DataAcousticProvider getDataProvider(C importDataContext, E row, int rowNumber); - private DataAcquisition getDataAcquisition(DataAcousticProvider provider, AcousticInstrument instrument, boolean addDataAcquisition) { + private DataAcquisition getDataAcquisition(DataAcousticProvider provider, AcousticInstrument instrument, float frequency, boolean addDataAcquisition) { DataAcquisition result = null; if (!addDataAcquisition && !provider.isDataAcquisitionEmpty()) { - // try to obtain an existing data acquisiton - + // try to obtain an existing data acquisition Collection<DataAcquisition> dataAcquisition = provider.getDataAcquisition(); for (DataAcquisition acquisition : dataAcquisition) { - if (instrument.equals(acquisition.getAcousticInstrument())) { + if (instrument.equals(acquisition.getAcousticInstrument()) ) { - // found a matching dataAcquisition from his acoustic instrument - result = acquisition; - break; + for (DataProcessing processing : acquisition.getDataProcessing()) { + + if (frequency == processing.getFrequency()) { + + // found a matching dataAcquisition from this acoustic instrument and frequency + result = acquisition; + break; + } + } } } } @@ -737,8 +743,6 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf float transceiverAcquisitionSacorrection = row.getTransceiverAcquisitionSacorrection(); int eIThresholdLow = row.geteIThresholdLow(); int eIThresholdHigh = row.geteIThresholdHigh(); - float pulseLength = row.getTransceiverAcquisitionPulseLength(); - float transceiverPower = row.getTransceiverAcquisitionPower(); String channelId = row.getAcousticInstrument().getId(); float bandwidth = row.getBandwidth(); float frequency = row.getFrequency(); @@ -751,10 +755,8 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf dataProcessing.setTransducerProcessingPsi(transducerAcquisitionPsi); dataProcessing.setTransducerProcessingBeamAngleAthwartship(transducerAcquisitionBeamAngleAthwartship); dataProcessing.setTransducerProcessingBeamAngleAlongship(transducerAcquisitionBeamAngleAlongship); - dataProcessing.setTransmitPulseLength(pulseLength); - dataProcessing.setTransceiverPower(transceiverPower); dataProcessing.setChannelId(channelId); - dataProcessing.setBandWith(bandwidth); + dataProcessing.setBandwidth(bandwidth); dataProcessing.setFrequency(frequency); return dataProcessing; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportCalibrationActionSupport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportCalibrationActionSupport.java new file mode 100644 index 00000000..16eb1f02 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/ImportCalibrationActionSupport.java @@ -0,0 +1,44 @@ +package fr.ifremer.echobase.services.service.importdata.actions; +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2019 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.services.service.importdata.configurations.ImportAcousticsConfiguration; +import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataContextSupport; +import fr.ifremer.echobase.services.service.importdata.csv.CalibrationImportRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +/** + * Created on 05/12/19. + * + * @author Jean Couteau - couteau@codelutin.com + * @since 4.2 + */ +public abstract class ImportCalibrationActionSupport <M extends ImportAcousticsConfiguration, C extends ImportDataContextSupport<M>, E extends CalibrationImportRow> extends ImportDataActionSupport<M, C, E> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(VoyageAcousticsCalibrationImportAction.class); + + public ImportCalibrationActionSupport(C importDataContext) { + super(importDataContext, importDataContext.getConfiguration().getCalibrationsFile()); + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsCalibrationImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsCalibrationImportAction.java new file mode 100644 index 00000000..d612a9c1 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsCalibrationImportAction.java @@ -0,0 +1,113 @@ +package fr.ifremer.echobase.services.service.importdata.actions; + +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2019 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.EchoBaseUserEntityEnum; +import fr.ifremer.echobase.entities.references.Calibration; +import fr.ifremer.echobase.io.InputFile; +import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageAcousticsImportConfiguration; +import fr.ifremer.echobase.services.service.importdata.contexts.VoyageAcousticsImportDataContext; +import fr.ifremer.echobase.services.service.importdata.csv.CalibrationImportExportModel; +import fr.ifremer.echobase.services.service.importdata.csv.CalibrationImportRow; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.csv.Import; + + +/** + * Created on 05/12/19. + * + * @author Jean Couteau - couteau@codelutin.com + * @since 4.2 + */ +public class VoyageAcousticsCalibrationImportAction extends ImportCalibrationActionSupport<VoyageAcousticsImportConfiguration, VoyageAcousticsImportDataContext, CalibrationImportRow> { + + /** Logger. */ + private static final Log log = LogFactory.getLog(VoyageAcousticsCalibrationImportAction.class); + + public VoyageAcousticsCalibrationImportAction(VoyageAcousticsImportDataContext importDataContext) { + super(importDataContext); + } + + @Override + protected CalibrationImportExportModel createCsvImportModel(VoyageAcousticsImportDataContext importDataContext) { + return CalibrationImportExportModel.forImport(importDataContext); + } + + @Override + protected CalibrationImportExportModel createCsvExportModel(VoyageAcousticsImportDataContext importDataContext) { + return CalibrationImportExportModel.forExport(importDataContext); + } + + @Override + protected void performImport(VoyageAcousticsImportDataContext importDataContext, InputFile inputFile, ImportDataFileResult result) { + + if (log.isInfoEnabled()) { + log.info("Starts import of calibrations from file " + inputFile.getFileName()); + } + + try (Import<CalibrationImportRow> importer = open()) { + + incrementsProgress(); + + int rowNumber = 0; + + for (CalibrationImportRow row : importer) { + + doFlushTransaction(++rowNumber); + + Calibration createdCalibration = persistenceService.createCalibration(row.getAccuracyEstimate(), + row.getAcousticInstrument(), + row.getAcquisitionMethod(), + row.getComments(), + row.getDate(), + row.getProcessingMethod(), + row.getReport()); + + addProcessedRow(result, row); + addId(result, EchoBaseUserEntityEnum.Calibration, createdCalibration, rowNumber); + + } + + } + + } + + @Override + protected void computeImportedExport(VoyageAcousticsImportDataContext importDataContext, ImportDataFileResult result) { + + for (Calibration calibration : getImportedEntities(Calibration.class, result)) { + + String calibrationId = calibration.getTopiaId(); + if (log.isInfoEnabled()) { + log.info("Adding calibration: " + calibrationId + " to imported export."); + } + + CalibrationImportRow importedRow = CalibrationImportRow.of(calibration); + addImportedRow(result, importedRow); + + } + + } + +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsImportAction.java index fbf50a5b..823be68b 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsImportAction.java @@ -85,6 +85,8 @@ public class VoyageAcousticsImportAction extends ImportAcousticsActionSupport<Vo // can not find correct transect throw new TransectNotFoundException(locale, voyage, vessel, startDate, rowNumber); } + //XXX to prevent future lazy initialisation error + transect.getDataAcquisition(); return transect; } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/ImportAcousticsConfiguration.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/ImportAcousticsConfiguration.java index db6a7d1a..0313e523 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/ImportAcousticsConfiguration.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/configurations/ImportAcousticsConfiguration.java @@ -39,6 +39,8 @@ public class ImportAcousticsConfiguration extends ImportDataConfigurationSupport private static final long serialVersionUID = 1L; /** Movies file to import. */ protected final InputFile moviesFile; + /** Calibrations file to import. */ + protected final InputFile calibrationsFile; /** Flag to always add new dataAcquisition when a new instrument is found in movies file. */ protected boolean addDataAcquisition = true; /** Manual transceiverAcquisitionAbsorptionDescription. */ @@ -80,6 +82,7 @@ public class ImportAcousticsConfiguration extends ImportDataConfigurationSupport public ImportAcousticsConfiguration(Locale locale) { moviesFile = InputFile.newFile(l(locale, "echobase.common.moviesFile")); + calibrationsFile = InputFile.newFile(l(locale, "echobase.common.calibrationsFile")); } public boolean isAddDataAcquisition() { @@ -190,6 +193,10 @@ public class ImportAcousticsConfiguration extends ImportDataConfigurationSupport return moviesFile; } + public InputFile getCalibrationsFile() { + return calibrationsFile; + } + public String getProcessingTemplate() { return processingTemplate; } @@ -240,6 +247,6 @@ public class ImportAcousticsConfiguration extends ImportDataConfigurationSupport @Override public InputFile[] getInputFiles() { - return new InputFile[]{moviesFile}; + return new InputFile[]{moviesFile, calibrationsFile}; } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java index b36e37f7..ab2359a8 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportRow.java @@ -245,6 +245,8 @@ public class AcousticImportRow { // dataProcessing row.seteIThresholdLow(dataProcessing.geteIThresholdLow()); row.seteIThresholdHigh(dataProcessing.geteIThresholdHigh()); + row.setBandwidth(dataProcessing.getBandwidth()); + row.setFrequency(dataProcessing.getFrequency()); row.setTransceiverAcquisitionSacorrection(dataProcessing.getTransceiverProcessingSacorrection()); row.setTransceiverAcquisitionAbsorption(dataProcessing.getTransceiverProcessingAbsorption()); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportExportModel.java new file mode 100644 index 00000000..4bab9705 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportExportModel.java @@ -0,0 +1,75 @@ +/* + * #%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.references.AcousticInstrument; +import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataContextSupport; + +/** + * To import calibration datas ({@link fr.ifremer.echobase.entities.references.Calibration}). + * + * @author Jean Couteau - couteau@codelutin.com + * @since 4.2 + */ +public class CalibrationImportExportModel extends EchoBaseImportExportModelSupport<CalibrationImportRow> { + + private CalibrationImportExportModel(char separator) { + super(separator); + } + + public static CalibrationImportExportModel forImport(ImportDataContextSupport importDataContext) { + + CalibrationImportExportModel model = new CalibrationImportExportModel(importDataContext.getCsvSeparator()); + + model.newIgnoredColumn("topiaId");//A + model.newMandatoryColumn("accuracyEstimate", CalibrationImportRow.PROPERTY_ACCURACY_ESTIMATE, EchoBaseCsvUtil.STRING);//B + model.newMandatoryColumn("aquisitionMethod", CalibrationImportRow.PROPERTY_ACQUISITION_METHOD, EchoBaseCsvUtil.STRING);//C + model.newMandatoryColumn("comments", CalibrationImportRow.PROPERTY_COMMENTS, EchoBaseCsvUtil.STRING); //D + model.newMandatoryColumn("date", CalibrationImportRow.PROPERTY_DATE, EchoBaseCsvUtil.DATE_TIME_VALUE_PARSER);//E + model.newMandatoryColumn("processingMethod", CalibrationImportRow.PROPERTY_PROCESSING_METHOD, EchoBaseCsvUtil.STRING);//F + model.newMandatoryColumn("report", CalibrationImportRow.PROPERTY_REPORT, EchoBaseCsvUtil.STRING);//G + model.newForeignKeyColumn("acousticinstrument", CalibrationImportRow.PROPERTY_ACOUSTIC_INSTRUMENT, AcousticInstrument.class, AcousticInstrument.PROPERTY_ID, importDataContext.getInstrumentsById());//H + + return model; + } + + public static CalibrationImportExportModel forExport(ImportDataContextSupport importDataContext) { + + CalibrationImportExportModel model = new CalibrationImportExportModel(importDataContext.getCsvSeparator()); + + //model.newIgnoredColumn("topiaId");//A + model.newColumnForExport("accuracyEstimate", CalibrationImportRow.PROPERTY_ACCURACY_ESTIMATE, EchoBaseCsvUtil.STRING);//B + model.newColumnForExport("aquisitionMethod", CalibrationImportRow.PROPERTY_ACQUISITION_METHOD, EchoBaseCsvUtil.STRING);//C + model.newColumnForExport("comments", CalibrationImportRow.PROPERTY_COMMENTS, EchoBaseCsvUtil.STRING); //D + model.newColumnForExport("date", CalibrationImportRow.PROPERTY_DATE, EchoBaseCsvUtil.ISO8611_DATETIME_FORMATTER);//E + model.newColumnForExport("processingMethod", CalibrationImportRow.PROPERTY_PROCESSING_METHOD, EchoBaseCsvUtil.STRING);//F + model.newColumnForExport("report", CalibrationImportRow.PROPERTY_REPORT, EchoBaseCsvUtil.STRING);//G + model.newForeignKeyColumn("acousticinstrument", CalibrationImportRow.PROPERTY_ACOUSTIC_INSTRUMENT, AcousticInstrument.class, AcousticInstrument.PROPERTY_ID, importDataContext.getInstrumentsById());//H + + return model; + } + + @Override + public CalibrationImportRow newEmptyInstance() { + return new CalibrationImportRow(); + } +} diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportRow.java new file mode 100644 index 00000000..c908e512 --- /dev/null +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportRow.java @@ -0,0 +1,125 @@ +/* + * #%L + * EchoBase :: Services + * %% + * Copyright (C) 2011 - 2019 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.references.AcousticInstrument; +import fr.ifremer.echobase.entities.references.Calibration; + +import java.util.Date; + +/** + * Bean of a row for {@link CalibrationImportExportModel} import. + * + * @author Jean Couteau - couteau@codelutin.com + * @since 4.2 + */ +public class CalibrationImportRow { + + public static final String PROPERTY_ACOUSTIC_INSTRUMENT = "acousticInstrument"; + public static final String PROPERTY_ACQUISITION_METHOD = "acquisitionMethod"; + public static final String PROPERTY_COMMENTS = "comments"; + public static final String PROPERTY_DATE = "date"; + public static final String PROPERTY_PROCESSING_METHOD = "processingMethod"; + public static final String PROPERTY_REPORT = "report"; + public static final String PROPERTY_ACCURACY_ESTIMATE = "accuracyEstimate"; + + protected String accuracyEstimate; + + protected String acquisitionMethod; + + protected String comments; + + protected Date date; + + protected String processingMethod; + + protected String report; + + protected AcousticInstrument acousticInstrument; + + public static CalibrationImportRow of(Calibration calibration) { + CalibrationImportRow row = new CalibrationImportRow(); + row.setAcousticInstrument(calibration.getAcousticInstrument()); + row.setAccuracyEstimate(calibration.getAccuracyEstimate()); + row.setAcquisitionMethod(calibration.getAquisitionMethod()); + row.setComments(calibration.getComments()); + row.setDate(calibration.getDate()); + row.setProcessingMethod(calibration.getProcessingMethod()); + row.setReport(calibration.getReport()); + return row; + } + + public String getAccuracyEstimate() { + return accuracyEstimate; + } + + public void setAccuracyEstimate(String accuracyEstimate) { + this.accuracyEstimate = accuracyEstimate; + } + + public String getAcquisitionMethod() { + return acquisitionMethod; + } + + public void setAcquisitionMethod(String acquisitionMethod) { + this.acquisitionMethod = acquisitionMethod; + } + + public String getComments() { + return comments; + } + + public void setComments(String comments) { + this.comments = comments; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } + + public String getProcessingMethod() { + return processingMethod; + } + + public void setProcessingMethod(String processingMethod) { + this.processingMethod = processingMethod; + } + + public String getReport() { + return report; + } + + public void setReport(String report) { + this.report = report; + } + + public AcousticInstrument getAcousticInstrument() { + return acousticInstrument; + } + + public void setAcousticInstrument(AcousticInstrument acousticInstrument) { + this.acousticInstrument = acousticInstrument; + } +} 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 80d0e7ae..98c15e3b 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 @@ -89,11 +89,11 @@ public abstract class ResultsEchotypeImportRow<E extends TopiaEntity> implements echotype.setDepthStratum(depthStratum); } - public int getId() { + public String getId() { return echotype.getId(); } - public void setId(int id) { + public void setId(String id) { echotype.setId(id); } } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportExportModel.java index 376ae8b9..724fd32b 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportExportModel.java @@ -54,8 +54,7 @@ public class VoyageCatchesSubSampleImportExportModel extends EchoBaseImportExpor model.newMandatoryColumn(Sample.PROPERTY_NUMBER_SAMPLED, EchoBaseCsvUtil.PRIMITIVE_INTEGER); model.newMandatoryColumn(VoyageCatchesSubSampleImportRow.PROPERTY_NUMBER_AT_LENGTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT); model.newMandatoryColumn(VoyageCatchesSubSampleImportRow.PROPERTY_WEIGHT_AT_LENGTH, EchoBaseCsvUtil.NA_TO_FLOAT_PARSER_FORMATTER); - - model.newMandatoryColumn(VoyageCatchesSubSampleImportRow.PROPERTY_ROUND, EchoBaseCsvUtil.NA_TO_INTEGER_PARSER_FORMATTER); + model.newIgnoredColumn("round"); return model; } @@ -72,7 +71,7 @@ public class VoyageCatchesSubSampleImportExportModel extends EchoBaseImportExpor model.newColumnForExport(Sample.PROPERTY_NUMBER_SAMPLED, EchoBaseCsvUtil.PRIMITIVE_INTEGER); model.newColumnForExport(VoyageCatchesSubSampleImportRow.PROPERTY_NUMBER_AT_LENGTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT); model.newColumnForExport(VoyageCatchesSubSampleImportRow.PROPERTY_WEIGHT_AT_LENGTH, EchoBaseCsvUtil.NA_TO_FLOAT_PARSER_FORMATTER); - model.newColumnForExport(VoyageCatchesSubSampleImportRow.PROPERTY_ROUND, EchoBaseCsvUtil.NA_TO_INTEGER_PARSER_FORMATTER); + //model.newColumnForExport(VoyageCatchesSubSampleImportRow.PROPERTY_ROUND, EchoBaseCsvUtil.NA_TO_INTEGER_PARSER_FORMATTER); return model; } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportRow.java index ab2e1ae8..67eb8c43 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageCatchesSubSampleImportRow.java @@ -49,8 +49,6 @@ public class VoyageCatchesSubSampleImportRow { public static final String PROPERTY_LENGTH_CLASS = "lengthClass"; - public static final String PROPERTY_ROUND = "round"; - protected final Sample sample; protected Operation operation; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java index 5bdc9252..b25570dd 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/removedata/strategy/AcousticRemoveDataStrategy.java @@ -29,6 +29,7 @@ import fr.ifremer.echobase.entities.data.DataAcquisition; import fr.ifremer.echobase.entities.data.DataProcessing; import fr.ifremer.echobase.entities.data.Transect; import fr.ifremer.echobase.entities.data.Voyage; +import fr.ifremer.echobase.entities.references.Calibration; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.topia.persistence.TopiaException; @@ -120,6 +121,15 @@ public class AcousticRemoveDataStrategy extends AbstractRemoveDataStrategy<Voyag if (log.isDebugEnabled()) { log.debug(cell.getTopiaId() + " was removed"); } + } else if (id.startsWith(Calibration.class.getName())) { + Calibration calibration = persistenceService.getCalibration(id); + + persistenceService.deleteCalibration(calibration); + + if (log.isDebugEnabled()) { + log.debug(calibration.getTopiaId() + " was removed"); + } + } else { canNotDealWithId(id); } diff --git a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties index 970fef53..8406d205 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_en_GB.properties @@ -1,6 +1,7 @@ echobase.acousticImport.cellNotImported=List of not imported esdu cells \:\n%s echobase.common.ancillaryInstrumentationFile= echobase.common.biometrySampleFile=BiometrySample file +echobase.common.calibrationsFile=Calibrations file echobase.common.cellMapsFile=Map cells file echobase.common.cellPositionReference.end=End echobase.common.cellPositionReference.mid=Midpoint diff --git a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties index f69568e5..33dd93b6 100644 --- a/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties +++ b/echobase-services/src/main/resources/i18n/echobase-services_fr_FR.properties @@ -1,6 +1,7 @@ echobase.acousticImport.cellNotImported=Liste des cellules ESDU non importées \:\n%s echobase.common.ancillaryInstrumentationFile= echobase.common.biometrySampleFile=Fichier de biométries (BiometrySample) +echobase.common.calibrationsFile=Fichier des calibrations echobase.common.cellMapsFile=Fichier des cellules Cartes echobase.common.cellPositionReference.end=Fin echobase.common.cellPositionReference.mid=Milieu diff --git a/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageAcousticCalibrationImportServiceIT.java b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageAcousticCalibrationImportServiceIT.java new file mode 100644 index 00000000..dc98561c --- /dev/null +++ b/echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/VoyageAcousticCalibrationImportServiceIT.java @@ -0,0 +1,121 @@ +/* + * #%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.data.Cell; +import fr.ifremer.echobase.entities.data.Data; +import fr.ifremer.echobase.entities.data.DataAcquisition; +import fr.ifremer.echobase.entities.data.DataProcessing; +import fr.ifremer.echobase.entities.references.Calibration; +import fr.ifremer.echobase.entities.references.DataMetadataImpl; +import fr.ifremer.echobase.services.ImportDataFixtures; +import fr.ifremer.echobase.services.service.importdata.configurations.VoyageAcousticsImportConfiguration; + +import java.io.IOException; + +/** + * @author Jean Couteau - couteau@codelutin.com + * @since 4.2 + */ +public class VoyageAcousticCalibrationImportServiceIT extends AbstractImportDataServiceIT<VoyageAcousticsImportConfiguration> { + + public VoyageAcousticCalibrationImportServiceIT() { + super(2); + } + + @Override + public ImportDataFixtures getImportDataFixture() { + return ImportDataFixtures.IMPORT_DATA_ECHOBASE_CATCHES; + } + + @Override + protected String[] getImportPath(String filename) { + return new String[]{"/import-data", "acoustic", filename}; + } + + @Override + protected VoyageAcousticsImportConfiguration createConfiguration() throws IOException { + VoyageAcousticsImportConfiguration conf = new VoyageAcousticsImportConfiguration(getLocale()); + conf.setVoyageId(getVoyageId()); + conf.setVesselId(fixtures.VESSEL_ID()); + conf.setAcousticDensityUnit("acousticDensityUnit"); + conf.setAcquisitionSoftwareVersionER60("acquisitionSoftwareVersionER60"); + conf.setAcquisitionSoftwareVersionME70("acquisitionSoftwareVersionME70"); + conf.setAddDataAcquisition(false); + conf.setTransceiverAcquisitionAbsorptionDescription("transceiverAcquisitionAbsorptionDescription"); + conf.setCellPositionReference(CellPositionReference.START); + conf.setDigitThreshold(1.5f); + conf.setLoggedDataDatatype("loggedDataDatatype"); + conf.setLoggedDataFormat("loggedDataFormat"); + conf.setNotes("notes"); + conf.setPingDutyCycle("pingDutyCycle"); + conf.setProcessingDescription("processingDescription"); + conf.setProcessingTemplate("processingTemplate"); + conf.setSoundSpeedCalculationsER60("soundSpeedCalculationsER60"); + conf.setSoundSpeedCalculationsME70("soundSpeedCalculationsME70"); + conf.setTransceiverAcquisitionAbsorptionDescription("transceiverAcquisitionAbsorptionDescription"); + prepareInputFile(conf.getMoviesFile(), getImportPath("movies_small.csv.gz")); + prepareInputFile(conf.getCalibrationsFile(), getImportPath("calibrations_small.csv.gz")); + return conf; + } + + @Override + protected ImportDataService.VoyageAcousticsImportDataAction newAction() { + return new ImportDataService.VoyageAcousticsImportDataAction(); + } + + @Override + protected void assertBeforeImport() { + super.assertBeforeImport(); + + addMissingDataMetadata(DataMetadataImpl.RADIAL_NUMBER); + } + + @Override + protected void assertAfertImport(ImportDataResult<VoyageAcousticsImportConfiguration> result) throws IOException { + + int nbDataAcquisition = fixtures.NB_DATA_ACQUISITION(); + int nbDataProcessing = fixtures.NB_DATA_PROCESSING(); + + int nbCell = 289; + int nbData = 3154; + + // Movies file + ImportDataFileResult importDataFileResult = Iterables.get(result.getImportResults(), 0); + + assertCsvImportResult0(importDataFileResult, nbDataAcquisition + nbDataProcessing + nbCell); + + assertCsvImportResultPerEntity(importDataFileResult, DataAcquisition.class, nbDataAcquisition, 0, nbDataAcquisition); + assertCsvImportResultPerEntity(importDataFileResult, DataProcessing.class, nbDataProcessing, 0, nbDataProcessing); + assertCsvImportResultPerEntity(importDataFileResult, Cell.class, nbCell, 0, nbCell); + assertCsvImportResultPerEntity(importDataFileResult, Data.class, nbData, 0, nbData); + + + //Calibration file + importDataFileResult = Iterables.get(result.getImportResults(), 1); + + assertCsvImportResult0(importDataFileResult, 1); + + assertCsvImportResultPerEntity(importDataFileResult, Calibration.class, 1, 0, 1); + } + +} diff --git a/echobase-services/src/test/resources/import-data/acoustic/calibrations_small.csv.gz b/echobase-services/src/test/resources/import-data/acoustic/calibrations_small.csv.gz new file mode 100644 index 00000000..db6b11a0 Binary files /dev/null and b/echobase-services/src/test/resources/import-data/acoustic/calibrations_small.csv.gz differ diff --git a/echobase-services/src/test/resources/import-data/acoustic/movies_small.csv.gz b/echobase-services/src/test/resources/import-data/acoustic/movies_small.csv.gz index 16b00833..121ff8d2 100644 Binary files a/echobase-services/src/test/resources/import-data/acoustic/movies_small.csv.gz and b/echobase-services/src/test/resources/import-data/acoustic/movies_small.csv.gz differ diff --git a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java index 48efac2e..9d5094e9 100644 --- a/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java +++ b/echobase-ui/src/main/java/fr/ifremer/echobase/ui/actions/importData/ConfigureAcousticImport.java @@ -80,4 +80,16 @@ public class ConfigureAcousticImport extends AbstractConfigureImport<VoyageAcous public void setMoviesFileFileName(String fileName) { getModel().getMoviesFile().setFileName(fileName); } + + public void setCalibrationsFile(File file) { + getModel().getCalibrationsFile().setFile(file); + } + + public void setCalibrationsFileContentType(String contentType) { + getModel().getCalibrationsFile().setContentType(contentType); + } + + public void setCalibrationsFileFileName(String fileName) { + getModel().getCalibrationsFile().setFileName(fileName); + } } diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties index eee6b6b8..26aff15b 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties @@ -65,6 +65,7 @@ echobase.common.areaOfOperation=AreaOfOperation echobase.common.author=Author echobase.common.authorEmail=Author email echobase.common.biometrySampleFile=Biometry sample file +echobase.common.calibrationsFile=Calibrations file echobase.common.cellMapsFishFile=Map cells file (Fishes) echobase.common.cellMapsOtherFile=Map cells file (Other) echobase.common.cellPositionReference=Reference position for cell of echo-integration diff --git a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties index a82622b7..6cd42d94 100644 --- a/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties +++ b/echobase-ui/src/main/resources/i18n/echobase-ui_fr_FR.properties @@ -65,6 +65,7 @@ echobase.common.areaOfOperation=Zone d'activités echobase.common.author=Auteur echobase.common.authorEmail=Courriel de l'auteur echobase.common.biometrySampleFile= +echobase.common.calibrationsFile=Fichier des calibrations echobase.common.cellMapsFishFile=Fichier des cellules Cartes (Poisson) echobase.common.cellMapsOtherFile=Fichier des cellules Cartes (Autre) echobase.common.cellPositionReference=Référentiel géographique des cellules d'écho-intégration diff --git a/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAcousticImport.jsp b/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAcousticImport.jsp index 81c7775a..6ad23291 100644 --- a/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAcousticImport.jsp +++ b/echobase-ui/src/main/webapp/WEB-INF/jsp/importData/configureAcousticImport.jsp @@ -133,6 +133,9 @@ <s:file key="moviesFile" requiredLabel="true" label='%{getText("echobase.common.moviesFile")}'/> + <s:file key="calibrationsFile" + label='%{getText("echobase.common.calibrationsFile")}'/> + <s:textarea key="model.importNotes" cols="80" rows="5" label='%{getText("echobase.common.importNotes")}'/> </fieldset> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.