branch develop updated (a22b26ef -> 9999f750)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git from a22b26ef Fixes #10217 - Update Biotic export adds 96ae9105 refs #10215 refs #10216 refs #10217 adds b58e9683 fixes #10317 - La première espèce d'un echotype n'est pas liée adds ad6b0432 fixes #8748 - Erreur à l'import des données d'opération (bis) fixes #10287 - Pas de size category dans le fichier d'import des echotypes adds 29a35fb6 Update doc adds 33601cb7 fixes #9738 - Ajouter un lien vers la doc en ligne dans le pied de page de la base adds a8f74cc9 Remove deprecated code calls adds 29e69af2 fixes #10230 : Les opérations ne sont pas associées au bon transect adds a2104351 fixes #10146 : Les cellules de type "map" ne sont pas strictement reliées à un voyage dans la base adds f087fe33 fixes #9699 : les boutons pour trier les colonnes ne fonctionnent pas new ce7349df fixes #9739 : Importe les données "ChannelID", "Bandwidth", "Frequency", "TransceiverPower" et "TransmitPulseLength" new 39cff176 fixes #9731 : Suppression des sampleDataType LTcm1 et LTcm0.5 new 9999f750 J'aime pas les gros commits comme ça, mais tout est imbriqué :( The 3 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 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 commit 39cff1761a62cc902b95102c882bfb536e220294 Author: jcouteau <couteau@codelutin.com> Date: Thu Dec 5 11:16:53 2019 +0100 fixes #9731 : Suppression des sampleDataType LTcm1 et LTcm0.5 commit ce7349df6a8f0eeb06cc460d25b42ea1d8ce8299 Author: jcouteau <couteau@codelutin.com> Date: Thu Dec 5 11:00:25 2019 +0100 fixes #9739 : Importe les données "ChannelID", "Bandwidth", "Frequency", "TransceiverPower" et "TransmitPulseLength" Summary of changes: .../echobase/entities/data/EchotypeTopiaDao.java | 2 +- .../echobase/entities/data/TransitImpl.java | 15 +++ .../entities/references/SampleDataTypeImpl.java | 4 - ...WorkingDbMigrationCallBackForVersion3_914.java} | 6 +- ...WorkingDbMigrationCallBackForVersion3_915.java} | 7 +- .../workingDb/3.914-1-importlog-importtext.sql | 1 + .../workingDb/h2/3.914-1-importlog-importtext.sql | 1 + .../h2/3.915-0-dataAcquisition-dataProcessing.sql | 7 ++ .../migration/workingDb/h2/3.915-1-echotypeId.sql | 1 + .../workingDb/pg/3.914-1-importlog-importtext.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 | 3 +- echobase-domain/src/main/xmi/echobase.zargo | Bin 100538 -> 100570 bytes .../echobase/services/csv/EchoBaseCsvUtil.java | 3 +- .../echobase/services/service/DbEditorService.java | 8 ++ .../services/service/UserDbPersistenceService.java | 40 ++++++- .../service/atlantos/xml/VocabularyExport.java | 71 ++++++++++-- .../service/atlantos/xml/XmlAccousticExport.java | 36 ++---- .../service/atlantos/xml/XmlBioticExport.java | 13 +-- .../service/importdata/ImportDataService.java | 39 ++----- .../actions/ImportAcousticsActionSupport.java | 39 ++++--- ...rt.java => ImportCalibrationActionSupport.java} | 30 ++--- .../ImportResultsEchotypeActionSupport.java | 3 + .../VoyageAcousticsCalibrationImportAction.java | 113 +++++++++++++++++++ .../actions/VoyageAcousticsImportAction.java | 2 + .../VoyageCatchesSubSampleImportAction.java | 27 +---- .../VoyageOperationsOperationImportAction.java | 2 +- .../VoyageResultsMapFishCellImportAction.java | 4 +- .../VoyageResultsMapOtherCellImportAction.java | 3 +- .../ImportAcousticsConfiguration.java | 9 +- .../contexts/VoyageCatchesImportDataContext.java | 16 --- .../importdata/csv/AcousticImportExportModel.java | 8 +- .../service/importdata/csv/AcousticImportRow.java | 28 ++++- .../csv/CalibrationImportExportModel.java | 75 +++++++++++++ .../importdata/csv/CalibrationImportRow.java | 125 +++++++++++++++++++++ .../importdata/csv/ResultsEchotypeImportRow.java | 9 ++ .../VoyageCatchesSubSampleImportExportModel.java | 5 +- .../csv/VoyageCatchesSubSampleImportRow.java | 11 -- ...yageResultsVoyageEchotypeImportExportModel.java | 2 + .../strategy/AcousticRemoveDataStrategy.java | 10 ++ .../i18n/echobase-services_en_GB.properties | 1 + .../i18n/echobase-services_fr_FR.properties | 1 + ... VoyageAcousticCalibrationImportServiceIT.java} | 24 ++-- .../import-data/acoustic/calibrations_small.csv.gz | Bin 0 -> 231 bytes .../import-data/acoustic/movies_small.csv.gz | Bin 7963 -> 7976 bytes .../echobase/ui/EchoBaseApplicationContext.java | 14 +-- .../importData/ConfigureAcousticImport.java | 12 ++ .../resources/i18n/echobase-ui_en_GB.properties | 2 + .../resources/i18n/echobase-ui_fr_FR.properties | 2 + .../src/main/webapp/WEB-INF/includes/footer.jsp | 6 + .../jsp/importData/configureAcousticImport.jsp | 3 + src/site/en/rst/importData.rst | 32 +++--- 53 files changed, 667 insertions(+), 216 deletions(-) copy echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/{WorkingDbMigrationCallBackForVersion3_913.java => WorkingDbMigrationCallBackForVersion3_914.java} (86%) copy echobase-domain/src/main/java/fr/ifremer/echobase/persistence/migration/workingDb/{WorkingDbMigrationCallBackForVersion3_913.java => WorkingDbMigrationCallBackForVersion3_915.java} (82%) create mode 100644 echobase-domain/src/main/resources/migration/workingDb/3.914-1-importlog-importtext.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/h2/3.914-1-importlog-importtext.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/h2/3.915-0-dataAcquisition-dataProcessing.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/h2/3.915-1-echotypeId.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/pg/3.914-1-importlog-importtext.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/pg/3.915-0-dataAcquisition-dataProcessing.sql create mode 100644 echobase-domain/src/main/resources/migration/workingDb/pg/3.915-1-echotypeId.sql copy echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/{VoyageResultsImportDataActionSupport.java => ImportCalibrationActionSupport.java} (52%) create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageAcousticsCalibrationImportAction.java create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportExportModel.java create mode 100644 echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/CalibrationImportRow.java copy echobase-services/src/test/java/fr/ifremer/echobase/services/service/importdata/{VoyageAcousticImportServiceIT.java => VoyageAcousticCalibrationImportServiceIT.java} (86%) create mode 100644 echobase-services/src/test/resources/import-data/acoustic/calibrations_small.csv.gz -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit ce7349df6a8f0eeb06cc460d25b42ea1d8ce8299 Author: jcouteau <couteau@codelutin.com> Date: Thu Dec 5 11:00:25 2019 +0100 fixes #9739 : Importe les données "ChannelID", "Bandwidth", "Frequency", "TransceiverPower" et "TransmitPulseLength" --- .../actions/ImportAcousticsActionSupport.java | 11 ++++++++- .../importdata/csv/AcousticImportExportModel.java | 8 +++---- .../service/importdata/csv/AcousticImportRow.java | 26 +++++++++++++++++++++- 3 files changed, 39 insertions(+), 6 deletions(-) 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 cb89458d..c54296d6 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 @@ -729,7 +729,6 @@ public abstract class ImportAcousticsActionSupport<M extends ImportAcousticsConf dataProcessing.setSoundSpeedCalculations(soundSpeedCalculations); // fill from csv file - float transceiverAcquisitionAbsorption = row.getTransceiverAcquisitionAbsorption(); float transducerAcquisitionBeamAngleAthwartship = row.getTransducerAcquisitionBeamAngleAthwartship(); float transducerAcquisitionBeamAngleAlongship = row.getTransducerAcquisitionBeamAngleAlongship(); @@ -738,6 +737,11 @@ 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(); dataProcessing.seteIThresholdLow(eIThresholdLow); dataProcessing.seteIThresholdHigh(eIThresholdHigh); @@ -747,6 +751,11 @@ 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.setFrequency(frequency); return dataProcessing; } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportExportModel.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportExportModel.java index 77f8fe8a..18200e28 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportExportModel.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/AcousticImportExportModel.java @@ -54,7 +54,7 @@ public class AcousticImportExportModel extends EchoBaseImportExportModelSupport< model.newIgnoredColumn("MOVIES_EILayer\\sndset\\channelName");//F model.newIgnoredColumn("MOVIES_EILayer\\sndset\\dataType");//G model.newIgnoredColumn("MOVIES_EILayer\\sndset\\beamType");//H - model.newIgnoredColumn("MOVIES_EILayer\\sndset\\acousticFrequency");//I + model.newMandatoryColumn("MOVIES_EILayer\\sndset\\acousticFrequency", AcousticImportRow.PROPERTY_FREQUENCY, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//I model.newIgnoredColumn("MOVIES_EILayer\\sndset\\startSample");//J model.newIgnoredColumn("MOVIES_EILayer\\sndset\\mainBeamAlongSteeringAngle");//K model.newIgnoredColumn("MOVIES_EILayer\\sndset\\mainBeamAthwartSteeringAngle");//L @@ -74,7 +74,7 @@ public class AcousticImportExportModel extends EchoBaseImportExportModelSupport< model.newIgnoredColumn("MOVIES_EILayer\\sndset\\AthwartTXRXWeightId");//Z model.newIgnoredColumn("MOVIES_EILayer\\sndset\\SplitBeamAlongTXRXWeightId");//AA model.newIgnoredColumn("MOVIES_EILayer\\sndset\\SplitBeamAthwartTXRXWeightId");//AB - model.newIgnoredColumn("MOVIES_EILayer\\sndset\\bandWidth");//AC + model.newMandatoryColumn("MOVIES_EILayer\\sndset\\bandWidth", AcousticImportRow.PROPERTY_BANDWIDTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//AC model.newIgnoredColumn("MOVIES_EILayer\\sndset\\tvgminrange");//AD model.newIgnoredColumn("MOVIES_EILayer\\sndset\\tvgmaxrange");//AE model.newMandatoryColumn("MOVIES_EILayer\\sndset\\pulseduration", AcousticImportRow.PROPERTY_TRANSCEIVER_ACQUISITION_PULSE_LENGTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//AF @@ -142,7 +142,7 @@ public class AcousticImportExportModel extends EchoBaseImportExportModelSupport< // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\channelName");//F // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\dataType");//G // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\beamType");//H -// model.newIgnoredColumn("MOVIES_EILayer\\sndset\\acousticFrequency");//I + model.newColumnForExport("MOVIES_EILayer\\sndset\\acousticFrequency", AcousticImportRow.PROPERTY_FREQUENCY, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//I // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\startSample");//J // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\mainBeamAlongSteeringAngle");//K // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\mainBeamAthwartSteeringAngle");//L @@ -162,7 +162,7 @@ public class AcousticImportExportModel extends EchoBaseImportExportModelSupport< // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\AthwartTXRXWeightId");//Z // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\SplitBeamAlongTXRXWeightId");//AA // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\SplitBeamAthwartTXRXWeightId");//AB -// model.newIgnoredColumn("MOVIES_EILayer\\sndset\\bandWidth");//AC + model.newColumnForExport("MOVIES_EILayer\\sndset\\bandWidth", AcousticImportRow.PROPERTY_BANDWIDTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//AC // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\tvgminrange");//AD // model.newIgnoredColumn("MOVIES_EILayer\\sndset\\tvgmaxrange");//AE model.newColumnForExport("MOVIES_EILayer\\sndset\\pulseduration", AcousticImportRow.PROPERTY_TRANSCEIVER_ACQUISITION_PULSE_LENGTH, EchoBaseCsvUtil.PRIMITIVE_FLOAT);//AF 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 5377f1bb..b36e37f7 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 @@ -34,7 +34,7 @@ import java.util.Date; import java.util.Optional; /** - * Bean of a row for {@link MooringAcousticImportExportModel} import. + * Bean of a row for {@link AcousticImportExportModel} import. * * @author Julien Ruchaud - ruchaud@codelutin.com * @since 4.0 @@ -99,6 +99,10 @@ public class AcousticImportRow { public static final String PROPERTY_LABEL = "label"; + public static final String PROPERTY_BANDWIDTH = "bandwidth"; + + public static final String PROPERTY_FREQUENCY = "frequency"; + protected String eiLayer; protected String esduCellDataDepth; @@ -145,6 +149,10 @@ public class AcousticImportRow { protected float transducerAcquisitionPsi; + protected float bandwidth; + + protected float frequency; + protected int eIThresholdLow; protected int eIThresholdHigh; @@ -491,4 +499,20 @@ public class AcousticImportRow { public void setDataQuality(DataQuality dataQuality) { this.dataQuality = dataQuality; } + + public float getBandwidth() { + return bandwidth; + } + + public void setBandwidth(float bandwidth) { + this.bandwidth = bandwidth; + } + + public float getFrequency() { + return frequency; + } + + public void setFrequency(float frequency) { + this.frequency = frequency; + } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository echobase. See https://gitlab.nuiton.org/codelutin/echobase.git commit 39cff1761a62cc902b95102c882bfb536e220294 Author: jcouteau <couteau@codelutin.com> Date: Thu Dec 5 11:16:53 2019 +0100 fixes #9731 : Suppression des sampleDataType LTcm1 et LTcm0.5 --- .../entities/references/SampleDataTypeImpl.java | 4 --- .../service/atlantos/xml/VocabularyExport.java | 36 ++++++++++++++++------ .../service/atlantos/xml/XmlAccousticExport.java | 1 - .../service/atlantos/xml/XmlBioticExport.java | 5 +-- .../VoyageCatchesSubSampleImportAction.java | 27 +--------------- .../contexts/VoyageCatchesImportDataContext.java | 16 ---------- .../csv/VoyageCatchesSubSampleImportRow.java | 9 ------ 7 files changed, 28 insertions(+), 70 deletions(-) diff --git a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java index b1020bd4..034934c5 100644 --- a/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java +++ b/echobase-domain/src/main/java/fr/ifremer/echobase/entities/references/SampleDataTypeImpl.java @@ -35,10 +35,6 @@ public class SampleDataTypeImpl extends SampleDataTypeAbstract { public static final String WEIGHT_AT_LENGTHKG = "WeightAtLengthkg"; - public static final String L_TCM_1 = "LTcm1"; - - public static final String LTCM0_5 = "LTcm0.5"; - public static final String NUMBER_AT_LENGTH = "NumberAtLength"; private static final long serialVersionUID = 1L; 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 df15e2e3..25b91434 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 @@ -22,10 +22,14 @@ package fr.ifremer.echobase.services.service.atlantos.xml; */ import fr.ifremer.echobase.entities.data.Category; +import fr.ifremer.echobase.entities.data.Echotype; +import fr.ifremer.echobase.entities.references.SizeCategory; import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.entities.references.SpeciesCategory; import fr.ifremer.echobase.services.EchoBaseService; import fr.ifremer.echobase.services.service.UserDbPersistenceService; +import org.apache.commons.lang.StringUtils; + import java.io.IOException; import java.util.HashMap; import java.util.LinkedHashSet; @@ -146,7 +150,13 @@ public class VocabularyExport implements EchoBaseService { this.writer.close("Vocabulary"); } - + + /** + * Method to get vocabulary code from VocabularyCIEM for a key (without prefix) + * @param key key in VocabularyCIEM + * @param defaultValue used if nothing in VocabularyCIEM + * @return value from VocabularyCIEM (or default value if used) + */ public String getVocabularyCode(String key, String defaultValue) { if (key == null || key.trim().equals("")) { this.addVocabulary(defaultValue); @@ -162,7 +172,12 @@ public class VocabularyExport implements EchoBaseService { this.addVocabulary(code); return code; } - + + /** + * Method to get vocabulary CIEM value for code. Should have prefix + * @param code + * @return + */ public String getVocabularyCode(String code) { this.addVocabulary(code); return code; @@ -189,25 +204,26 @@ public class VocabularyExport implements EchoBaseService { } public void exportEchotype(Category category) throws IOException { + + Echotype echotype = category.getEchotype(); + this.writer.open("EchoType", - "ID", category.getEchotype().getName()); + "ID", echotype.getName()); this.writer.create("Stratum", "IDREF", - getVocabularyCode("AC_Stratum_" + category.getEchotype().getDepthStratum().getId())); + getVocabularyCode("AC_Stratum_" + echotype.getDepthStratum().getId())); - for (Species species:category.getEchotype().getSpecies()){ - exportSpecies(species, category.getSpeciesCategory()); + for (Species species : echotype.getSpecies()) { + exportSpecies(species, echotype.getId()); } this.writer.close("EchoType"); } - public void exportSpecies(Species species, SpeciesCategory speciesCategory) throws IOException { + public void exportSpecies(Species species, int speciesCategoryName) throws IOException { this.writer.open("Species"); this.writer.create("SpeciesCode", "IDREF", getVocabularyCode("SpecWoRMS_" + species.getWormsCode())); - if (speciesCategory != null && speciesCategory.getSizeCategory() != null) { - this.writer.create("SpeciesCategory", speciesCategory.getSizeCategory().getName()); - } + this.writer.create("SpeciesCategory", speciesCategoryName); this.writer.close("Species"); } 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 91ab855b..658d4a62 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 @@ -6,7 +6,6 @@ import com.google.common.collect.Maps; import fr.ifremer.echobase.entities.data.*; import fr.ifremer.echobase.entities.references.AcousticInstrument; import fr.ifremer.echobase.entities.references.Calibration; -import fr.ifremer.echobase.entities.references.Species; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.services.EchoBaseService; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlBioticExport.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlBioticExport.java index 5faf1ade..58a7e26e 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlBioticExport.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/atlantos/xml/XmlBioticExport.java @@ -570,13 +570,10 @@ public class XmlBioticExport implements EchoBaseService { Float value = data.getDataValue(); String label = data.getDataLabel(); - if (SampleDataTypeImpl.LTCM0_5.equals(dataName) - || SampleDataTypeImpl.L_TCM_1.equals(dataName)) { - + if (SampleDataTypeImpl.NUMBER_AT_LENGTH.equals(dataName)) { sampleDataValues.put(SampleDataTypeImpl.NUMBER_AT_LENGTH, String.valueOf(value)); sampleDataValues.put(dataName, label); sampleDataValues.put("LengthClass", label); - } else { sampleDataValues.put(dataName, String.valueOf(value)); } diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesSubSampleImportAction.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesSubSampleImportAction.java index 6eb3d25c..630a172d 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesSubSampleImportAction.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/actions/VoyageCatchesSubSampleImportAction.java @@ -86,8 +86,6 @@ public class VoyageCatchesSubSampleImportAction extends VoyageCatchesImportDataA SampleType sampleTypeSubsample = importDataContext.getSampleTypeSubsample(); SampleDataType sampleDataTypeNumberAtLength = importDataContext.getSampleDataTypeNumberAtLength(); - SampleDataType sampleDataTypeNumberAtLength05cm = importDataContext.getSampleDataTypeNumberAtLength05cm(); - SampleDataType sampleDataTypeNumberAtLength1cm = importDataContext.getSampleDataTypeNumberAtLength1cm(); SampleDataType sampleDataTypeWeightAtLength = importDataContext.getSampleDataTypeWeightAtLength(); try (Import<VoyageCatchesSubSampleImportRow> importer = open()) { @@ -135,18 +133,9 @@ public class VoyageCatchesSubSampleImportAction extends VoyageCatchesImportDataA addProcessedRow(result, row); - Integer round = row.getRound(); SampleDataType dataType; - if (round == null) { - dataType = sampleDataTypeNumberAtLength; - } else if (round == 5) { - dataType = sampleDataTypeNumberAtLength05cm; - } else if (round == 1) { - dataType = sampleDataTypeNumberAtLength1cm; - } else { - throw new IllegalStateException("Can't deal with round value: " + round); - } + dataType = sampleDataTypeNumberAtLength; { @@ -227,8 +216,6 @@ public class VoyageCatchesSubSampleImportAction extends VoyageCatchesImportDataA Set<SampleDataType> lengthSampleDataTypes = new LinkedHashSet<>(); lengthSampleDataTypes.add(importDataContext.getSampleDataTypeNumberAtLength()); - lengthSampleDataTypes.add(importDataContext.getSampleDataTypeNumberAtLength05cm()); - lengthSampleDataTypes.add(importDataContext.getSampleDataTypeNumberAtLength1cm()); Preconditions.checkState(sample.isSampleDataNotEmpty()); @@ -283,8 +270,6 @@ public class VoyageCatchesSubSampleImportAction extends VoyageCatchesImportDataA protected void addImportedSampleData(VoyageCatchesImportDataContext importDataContext, VoyageCatchesSubSampleImportRow importedRow, SampleData sampleData) { SampleDataType sampleDataTypeNumberAtLength = importDataContext.getSampleDataTypeNumberAtLength(); - SampleDataType sampleDataTypeNumberAtLength05cm = importDataContext.getSampleDataTypeNumberAtLength05cm(); - SampleDataType sampleDataTypeNumberAtLength1cm = importDataContext.getSampleDataTypeNumberAtLength1cm(); SampleDataType sampleDataTypeWeightAtLength = importDataContext.getSampleDataTypeWeightAtLength(); SampleDataType sampleDataType = sampleData.getSampleDataType(); @@ -293,16 +278,6 @@ public class VoyageCatchesSubSampleImportAction extends VoyageCatchesImportDataA importedRow.setNumberAtLength(sampleData.getDataValue()); - } else if (sampleDataTypeNumberAtLength05cm.equals(sampleDataType)) { - - importedRow.setNumberAtLength(sampleData.getDataValue()); - importedRow.setRound(5); - - } else if (sampleDataTypeNumberAtLength1cm.equals(sampleDataType)) { - - importedRow.setNumberAtLength(sampleData.getDataValue()); - importedRow.setRound(1); - } else if (sampleDataTypeWeightAtLength.equals(sampleDataType)) { importedRow.setWeightAtLength(sampleData.getDataValue()); diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java index 141fdfff..2e8ba985 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/contexts/VoyageCatchesImportDataContext.java @@ -49,8 +49,6 @@ public class VoyageCatchesImportDataContext extends VoyageImportDataContextSuppo private SampleDataType sampleDataTypeNoPerKg; private SampleDataType sampleDataTypeFishIndex; private SampleDataType sampleDataTypeNumberAtLength; - private SampleDataType sampleDataTypeNumberAtLength05cm; - private SampleDataType sampleDataTypeNumberAtLength1cm; private SampleDataType sampleDataTypeWeightAtLength; public VoyageCatchesImportDataContext(UserDbPersistenceService persistenceService, Locale locale, char csvSeparator, VoyageCatchesImportConfiguration configuration, EchoBaseUser user, Date importDate) { @@ -71,20 +69,6 @@ public class VoyageCatchesImportDataContext extends VoyageImportDataContextSuppo return sampleDataTypeNumberAtLength; } - public final SampleDataType getSampleDataTypeNumberAtLength05cm() { - if (sampleDataTypeNumberAtLength05cm == null) { - sampleDataTypeNumberAtLength05cm = persistenceService.getSampleDataTypeByName(SampleDataTypeImpl.LTCM0_5); - } - return sampleDataTypeNumberAtLength05cm; - } - - public final SampleDataType getSampleDataTypeNumberAtLength1cm() { - if (sampleDataTypeNumberAtLength1cm == null) { - sampleDataTypeNumberAtLength1cm = persistenceService.getSampleDataTypeByName(SampleDataTypeImpl.L_TCM_1); - } - return sampleDataTypeNumberAtLength1cm; - } - public final SampleDataType getSampleDataTypeWeightAtLength() { if (sampleDataTypeWeightAtLength == null) { sampleDataTypeWeightAtLength = persistenceService.getSampleDataTypeByName(SampleDataTypeImpl.WEIGHT_AT_LENGTHKG); 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 1844f282..ab2e1ae8 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 @@ -60,7 +60,6 @@ public class VoyageCatchesSubSampleImportRow { protected float numberAtLength; protected Float weightAtLength; protected String lengthClass; - protected Integer round; public static VoyageCatchesSubSampleImportRow of(Operation operation, Sample sample) { VoyageCatchesSubSampleImportRow row = new VoyageCatchesSubSampleImportRow(sample); @@ -107,14 +106,6 @@ public class VoyageCatchesSubSampleImportRow { this.sizeCategory = sizeCategory; } - public Integer getRound() { - return round; - } - - public void setRound(Integer round) { - this.round = round; - } - public Float getSampleWeight() { return sample.getSampleWeight(); } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch 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>.
participants (1)
-
codelutin.com scm