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 eb5d1aa7b917a8698b7825ec2373a422b0541f89 Author: Julien Ruchaud <julien.ruchaud@debux.org> Date: Thu Jun 30 17:25:35 2016 +0200 Handle duplication on elementary cell (refs #2246) --- .../actions/VoyageAcousticsImportAction.java | 61 +++------------------ .../importdata/csv/VoyageAcousticImportRow.java | 19 +++++-- .../strategy/AcousticRemoveDataStrategy.java | 4 +- .../import-data/acoustic/movies_small.csv.gz | Bin 7963 -> 7963 bytes .../resources/i18n/echobase-ui_en_GB.properties | 2 +- .../resources/i18n/echobase-ui_fr_FR.properties | 2 +- .../src/main/webapp/WEB-INF/includes/footer.jsp | 2 +- 7 files changed, 27 insertions(+), 63 deletions(-) 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 4642df2..3b0cc0b 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 @@ -45,6 +45,7 @@ import fr.ifremer.echobase.entities.references.DataQuality; import fr.ifremer.echobase.entities.references.Vessel; import fr.ifremer.echobase.io.InputFile; import fr.ifremer.echobase.services.csv.EchoBaseCsvUtil; +import fr.ifremer.echobase.services.service.importdata.DuplicatedElementaryCellException; import fr.ifremer.echobase.services.service.importdata.DuplicatedEsduCellException; import fr.ifremer.echobase.services.service.importdata.ElementaryCellWithoutDepthEndException; import fr.ifremer.echobase.services.service.importdata.EsduCellNotFoundException; @@ -53,7 +54,6 @@ import fr.ifremer.echobase.services.service.importdata.ImportDataFileResult; import fr.ifremer.echobase.services.service.importdata.TransectNotFoundException; import fr.ifremer.echobase.services.service.importdata.TransitNotFoundException; import fr.ifremer.echobase.services.service.importdata.configurations.VoyageAcousticsImportConfiguration; -import fr.ifremer.echobase.services.service.importdata.contexts.ImportDataContextSupport; import fr.ifremer.echobase.services.service.importdata.contexts.VoyageAcousticsImportDataContext; import fr.ifremer.echobase.services.service.importdata.csv.VoyageAcousticImportExportModel; import fr.ifremer.echobase.services.service.importdata.csv.VoyageAcousticImportRow; @@ -87,8 +87,6 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction private final DateFormat cellDateFormat; private final DataMetadataProvider dataMetadataProvider; - private String lastEsduId; - public VoyageAcousticsImportAction(VoyageAcousticsImportDataContext importDataContext) { super(importDataContext, importDataContext.getConfiguration().getMoviesFile()); this.cellDateFormat = new SimpleDateFormat(EchoBaseCsvUtil.CELLULE_DATE_FORMAT); @@ -229,35 +227,9 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction int cellType = row.getCellType(); - String esduCellId = cellDateFormat.format(endDate); - - String previousLastEsduId = lastEsduId; - - if (lastEsduId == null || !lastEsduId.equals(esduCellId)) { - - lastEsduId = esduCellId; - // find a new esdu cell id - if (log.isDebugEnabled()) { - log.debug("row: " + rowNumber + " - detects new esduCellId:" + lastEsduId); - } - - } - - boolean isEsduCell = cellType == 4; - - if (isEsduCell) { - - if (!esduCellId.equals(previousLastEsduId)) { - - // This should not happen ? - if (log.isWarnEnabled()) { - log.warn("row: " + rowNumber + " A previous esduCellId was detected (" + previousLastEsduId + "); but the esdu id was never found."); - } - } - if (log.isDebugEnabled()) { - log.debug("row: " + rowNumber + " - found esdu cell:" + lastEsduId); - } - } + int cellNum = row.getCellNum(); + String cellDate = cellDateFormat.format(endDate); + String esduCellId = cellDate + "_" + cellNum; if (row.getCellNasc() == null) { @@ -277,6 +249,7 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction DataQuality dataQuality = row.getDataQuality(); + boolean isEsduCell = cellType == 4; if (isEsduCell) { if (log.isDebugEnabled()) { @@ -315,23 +288,15 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction createEsduCellData(esduCell, row, dataQuality, result, rowNumber); } else { - // this is a elementary cell row - - int cellNum = row.getCellNum(); - boolean surface = cellType == 0; - String elementaryCellId = cellNum + (surface ? "S" : "B"); + String elementaryCellId = cellDate + "_" + cellNum + "_" + (surface ? "S" : "B"); // check name does not exist boolean exists = persistenceService.containsCellByName(elementaryCellId); if (exists) { - //FIXME Revoir ça (See #2246) - if (log.isErrorEnabled()) { - log.error("Duplicated ElementaryCellException: " + rowNumber + " → " + elementaryCellId); - } -// throw new DuplicatedElementaryCellException(getLocale(), rowNumber, elementaryCellId, voyage.getName()); + throw new DuplicatedElementaryCellException(getLocale(), rowNumber, elementaryCellId, voyage.getName()); } if (log.isTraceEnabled()) { log.trace("[row " + rowNumber + "] elementary cell (" + elementaryCellId + ")"); @@ -353,11 +318,8 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction createElementaryCellData(elementaryCell, surface, row, dataQuality, result, rowNumber); } - } - } - } @Override @@ -485,10 +447,7 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction } } - int esduRowCellNum = 0; - for (Cell elementaryCell : elementaryCells) { - VoyageAcousticImportRow elementaryRow = VoyageAcousticImportRow.ofElementaryCell(processingTemplate, dataAcquisition, dataProcessing, elementaryCell, radialNumberDataMetadata); ImmutableMap<DataMetadata, Data> elementaryCellDataByMeta = Maps.uniqueIndex(elementaryCell.getData(), Datas.TO_DATA_METADATA); @@ -561,15 +520,9 @@ public class VoyageAcousticsImportAction extends VoyageAcousticsImportDataAction elementaryRow.setEsduCellDataDepth(esduRow.getEsduCellDataDepth()); addImportedRow(result, elementaryRow); - - esduRowCellNum = elementaryRow.getCellNum() + 1; - } - esduRow.setCellNum(esduRowCellNum); - addImportedRow(result, esduRow); - } private DataAcquisition getDataAcquisition(Transect transect, AcousticInstrument instrument, boolean addDataAcquisition) { diff --git a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageAcousticImportRow.java b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageAcousticImportRow.java index cd526a8..1b78abe 100644 --- a/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageAcousticImportRow.java +++ b/echobase-services/src/main/java/fr/ifremer/echobase/services/service/importdata/csv/VoyageAcousticImportRow.java @@ -162,6 +162,12 @@ public class VoyageAcousticImportRow { */ protected String label; + // Format: <date> <integer>( [S|B])? + public static Integer getCellNum(String cellName) { + String[] splited = cellName.split("_"); + return Integer.valueOf(splited[1]); + } + public static VoyageAcousticImportRow ofEsduCell(String processingTemplate, DataAcquisition dataAcquisition, DataProcessing dataProcessing, @@ -171,6 +177,10 @@ public class VoyageAcousticImportRow { VoyageAcousticImportRow row = of(processingTemplate, dataAcquisition, dataProcessing, esduCell, radialNumberDataMetadata); // esdu cell + String cellName = esduCell.getName(); + Integer cellNum = getCellNum(cellName); + row.setCellNum(cellNum); + row.setCellType(4); row.setDataQuality(esduCell.getDataQuality()); @@ -185,20 +195,19 @@ public class VoyageAcousticImportRow { VoyageAcousticImportRow row = of(processingTemplate, dataAcquisition, dataProcessing, elementaryCell, radialNumberDataMetadata); // elementary cell - String elementaryCellName = elementaryCell.getName(); + String cellName = elementaryCell.getName(); + Integer cellNum = getCellNum(cellName); + row.setCellNum(cellNum); int cellType; - if (elementaryCellName.endsWith("S")) { - + if (cellName.endsWith("S")) { // surface cellType = 0; } else { - // bottom cellType = 1; } - Integer cellNum = Integer.valueOf(elementaryCellName.substring(0, elementaryCellName.length() - 1)); row.setCellType(cellType); row.setCellNum(cellNum); row.setDataQuality(elementaryCell.getDataQuality()); 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 cfce8d2..a73c0a6 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 @@ -109,7 +109,9 @@ public class AcousticRemoveDataStrategy extends AbstractRemoveDataStrategy { } // remove it from the dataAcquisition DataProcessing dataProcessing = persistenceService.getDataProcessingContainsCell(cell); - dataProcessing.removeCell(cell); + if (dataProcessing != null) { + dataProcessing.removeCell(cell); + } // remove cell persistenceService.deleteCell(cell); 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 bd26598..16b0083 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/resources/i18n/echobase-ui_en_GB.properties b/echobase-ui/src/main/resources/i18n/echobase-ui_en_GB.properties index a993625..85968b5 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 @@ -62,7 +62,7 @@ echobase.common.authorEmail=Author email echobase.common.biometrySampleFile= echobase.common.cellMapsFishFile=Map cells file (Fishes) echobase.common.cellMapsOtherFile=Map cells file (Other) -echobase.common.cellPositionReference=cellPositionReference +echobase.common.cellPositionReference=Reference position for cell of echo-integration echobase.common.cellRegionAssociationFile= echobase.common.cellRegionResultFile= echobase.common.cellRegionsFile= 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 06a8fd6..ee9d915 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 @@ -62,7 +62,7 @@ echobase.common.authorEmail=Courriel de l'auteur echobase.common.biometrySampleFile= 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 des cartes +echobase.common.cellPositionReference=Référentiel géographique des cellules d'écho-intégration echobase.common.cellRegionAssociationFile= echobase.common.cellRegionResultFile= echobase.common.cellRegionsFile= diff --git a/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp b/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp index 6df67f2..226d9b4 100644 --- a/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp +++ b/echobase-ui/src/main/webapp/WEB-INF/includes/footer.jsp @@ -29,7 +29,7 @@ <li> <span style="font-size: 140%"> EchoBase <s:property value="#application.echobaseApplicationContext.configuration.applicationVersion"/> - © 2011-2012 + © 2011-2016 </span> <a href="http://www.ifremer.fr">Ifremer</a> <a href="http://www.codelutin.com" title="Code Lutin" target="_blank">Code -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.