branch develop updated (6143050 -> 919567b)
This is an automated email from the git hooks/post-receive script. New change to branch develop in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git from 6143050 [jgitflow-maven-plugin]Updating develop poms back to pre merge state new 392701e fixes #8329 new 919567b fixes #8335 The 2 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 919567bb552e259bc94180a16209b5d23a97b799 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Wed Jun 15 18:41:59 2016 +0200 fixes #8335 commit 392701e464df81fd20ea0fad0cdb8fcd2ffd8f37 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Wed Jun 15 15:27:32 2016 +0200 fixes #8329 Summary of changes: .../GenericFormatImportOperationContext.java | 21 +++++- .../GenericFormatImportOperationResult.java | 12 +++- .../GenericformatImportPersistenceHelper.java | 3 +- .../ImportIndividualObservationAction.java | 45 ++++++++----- .../resources/ftl/genericFormatImportReport_fr.ftl | 7 +- .../actions/ApplySpeciesFrequencyRafaleAction.java | 75 +++++++++++++++++++--- 6 files changed, 129 insertions(+), 34 deletions(-) -- 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 tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 392701e464df81fd20ea0fad0cdb8fcd2ffd8f37 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Wed Jun 15 15:27:32 2016 +0200 fixes #8329 --- .../actions/ApplySpeciesFrequencyRafaleAction.java | 75 +++++++++++++++++++--- 1 file changed, 65 insertions(+), 10 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index e4bfb39..ab68c61 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -34,13 +34,14 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.Spe import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; import fr.ifremer.tutti.ui.swing.util.SoundEngine; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.Date; +import javax.swing.SwingUtilities; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; -import javax.swing.SwingUtilities; -import java.util.Date; - import static org.nuiton.i18n.I18n.t; /** @@ -96,28 +97,50 @@ public class ApplySpeciesFrequencyRafaleAction { if (model.isAddIndividualObservationOnRafale()) { IndividualObservationBatchTableModel obsTableModel = (IndividualObservationBatchTableModel) ui.getObsTable().getModel(); + // need for https://forge.codelutin.com/issues/8329 + int oldHeight = ui.getObsTable().getHeight(); + if (log.isDebugEnabled()) { + log.debug(String.format( + "DEBUG before **** rowCount: %s oldHeight: %s", + obsTableModel.getRowCount(), oldHeight)); + } + IndividualObservationBatchRowModel obsRow = obsTableModel.addRafaleRow(step); newLogRow.setObsRow(obsRow); int rowIndex = obsTableModel.getRowIndex(obsRow); + SwingUtilities.invokeLater(() -> { + int newHeight = ui.getObsTable().getHeight(); - model.getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(true); + if (log.isDebugEnabled()) { + log.debug(String.format( + "DEBUG invokeLater **** rowCount: %s newHeight: %s", + obsTableModel.getRowCount(), newHeight)); + } - try { + // try to detect too early call (table not yet graphicaly modified) + // see https://forge.codelutin.com/issues/8329 + if (oldHeight != newHeight) { + model.getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(true); - selectRow(ui.getObsTable(), rowIndex); + try { - } finally { + selectRow(ui.getObsTable(), rowIndex); - model.getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(false); + } finally { - } + model.getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(false); + } + } else { + log.error("Scroll to added line is not possible, try to use fallback method"); + // fallback to early call, wait JComponent size change + selectRowWhenTableResized(ui.getObsTable(), rowIndex); + } }); - } if (fromIchtyometer) { @@ -135,6 +158,38 @@ public class ApplySpeciesFrequencyRafaleAction { table.setRowSelectionInterval(rowIndex, rowIndex); table.scrollRowToVisible(rowIndex); + + } + + protected void selectRowWhenTableResized(JXTable table, int rowIndex) { + table.addComponentListener(new ComponentAdapter() { + @Override + public void componentResized(ComponentEvent e) { + log.error(String.format("DEBUG ### remove listener: ", this.getClass().getName())); + table.removeComponentListener(this); + ui.getModel().getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(true); + + try { + table.setRowSelectionInterval(rowIndex, rowIndex); + table.scrollRowToVisible(rowIndex); +// table.scrollRectToVisible(table.getCellRect(rowIndex, 0, true)); + table.removeComponentListener(this); + + int newHeight = ui.getObsTable().getHeight(); + log.error(String.format( + "DEBUG in selectRowWhenTableResized resized ****" + + " rowCount: %s" + + " newHeight: %s", + table.getRowCount(), + newHeight) + ); + + } finally { + ui.getModel().getIndividualObservationModel().getSamplingNotificationZoneModel().setValueAdjusting(false); + } + + } + }); } } -- 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 tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 919567bb552e259bc94180a16209b5d23a97b799 Author: Benjamin POUSSIN <poussin@codelutin.com> Date: Wed Jun 15 18:41:59 2016 +0200 fixes #8335 --- .../GenericFormatImportOperationContext.java | 21 ++++++++-- .../GenericFormatImportOperationResult.java | 12 ++++-- .../GenericformatImportPersistenceHelper.java | 3 +- .../ImportIndividualObservationAction.java | 45 ++++++++++++++-------- .../resources/ftl/genericFormatImportReport_fr.ftl | 7 +++- 5 files changed, 64 insertions(+), 24 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java index b262a20..0b23063 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationContext.java @@ -39,19 +39,19 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchs; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.persistence.model.OperationDataModel; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.collections4.MapUtils; - import java.io.Closeable; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeMap; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; /** * Created on 2/20/15. @@ -75,8 +75,12 @@ public class GenericFormatImportOperationContext implements Closeable { private final Map<Integer, AccidentalBatch> accidentalBatchesById; + /** all observation available in imported file */ private final Map<Integer, IndividualObservationBatch> individualObservationBatchesById; + /** valid observation realy imported in database */ + private List<IndividualObservationBatch> individualObservationBatchImported; + private final Map<Integer, SpeciesBatch> vracSpeciesBatches; private final Map<Integer, SpeciesBatch> horsVracSpeciesBatches; @@ -119,6 +123,7 @@ public class GenericFormatImportOperationContext implements Closeable { this.marineLitterBatches = new ArrayList<>(); this.accidentalBatchesById = new TreeMap<>(); this.individualObservationBatchesById = new TreeMap<>(); + this.individualObservationBatchImported = Collections.emptyList(); this.vracSpeciesBatches = new TreeMap<>(); this.horsVracSpeciesBatches = new TreeMap<>(); this.speciesFrequencies = ArrayListMultimap.create(); @@ -249,6 +254,14 @@ public class GenericFormatImportOperationContext implements Closeable { return ImmutableList.copyOf(individualObservationBatchesById.values()); } + public List<IndividualObservationBatch> getIndividualObservationBatchImported() { + return individualObservationBatchImported; + } + + public void setIndividualObservationBatchImported(List<IndividualObservationBatch> imported) { + individualObservationBatchImported = imported; + } + public int getNbSpeciesTaxon() { Set<Species> speciesSet = new HashSet<>(); SpeciesBatchs.grabSpeciesChildBatchs(vracSpeciesBatches.values(), speciesSet); @@ -306,6 +319,7 @@ public class GenericFormatImportOperationContext implements Closeable { vesselUseFeatures.clear(); marineLitterBatches.clear(); individualObservationBatchesById.clear(); + individualObservationBatchImported.clear(); accidentalBatchesById.clear(); benthosFrequencies.clear(); vracBenthosBatches.clear(); @@ -344,5 +358,6 @@ public class GenericFormatImportOperationContext implements Closeable { public boolean isWeightsDeleted() { return weightsDeleted; } + } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java index 034c8c6..c1ad783 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericFormatImportOperationResult.java @@ -26,11 +26,10 @@ package fr.ifremer.tutti.service.genericformat; import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.BooleanUtils; - import java.io.Serializable; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.BooleanUtils; /** * Created on 2/22/15. @@ -62,6 +61,8 @@ public class GenericFormatImportOperationResult implements Serializable { private int nbIndividualObservations; + private int nbIndividualObservationsImported; + private int nbSpeciesTaxon; private int nbBenthosTaxon; @@ -157,6 +158,10 @@ public class GenericFormatImportOperationResult implements Serializable { return nbIndividualObservations; } + public int getNbIndividualObservationsImported() { + return nbIndividualObservationsImported; + } + public int getNbSpeciesTaxon() { return nbSpeciesTaxon; } @@ -182,6 +187,7 @@ public class GenericFormatImportOperationResult implements Serializable { } if (operationContext.withIndividualObservationBatches()) { nbIndividualObservations = operationContext.getIndividualObservationBatches().size(); + nbIndividualObservationsImported = operationContext.getIndividualObservationBatchImported().size(); } if (operationContext.withSpeciesBatches(true)) { diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java index 507ec87..44ecb2f 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/GenericformatImportPersistenceHelper.java @@ -24,7 +24,6 @@ package fr.ifremer.tutti.service.genericformat; * #L% */ -import com.google.common.collect.ImmutableList; import com.google.common.collect.Sets; import fr.ifremer.adagio.core.dao.referential.ObjectTypeCode; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; @@ -292,7 +291,7 @@ public class GenericformatImportPersistenceHelper { persistenceService.deleteAllIndividualObservationsForFishingOperation(fishingOperationId); } - public List<IndividualObservationBatch> createIndividualObservationBatch(FishingOperation fishingOperation, ImmutableList<IndividualObservationBatch> individualObservationBatch) { + public List<IndividualObservationBatch> createIndividualObservationBatch(FishingOperation fishingOperation, List<IndividualObservationBatch> individualObservationBatch) { return persistenceService.createIndividualObservationBatches(fishingOperation, individualObservationBatch); } diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java index 5d4a3ec..4d84aee 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/genericformat/importactions/ImportIndividualObservationAction.java @@ -37,17 +37,16 @@ import fr.ifremer.tutti.service.genericformat.GenericformatImportPersistenceHelp import fr.ifremer.tutti.service.genericformat.consumer.CsvConsumerForIndividualObservation; import fr.ifremer.tutti.service.genericformat.csv.AttachmentRow; import fr.ifremer.tutti.service.genericformat.csv.IndividualObservationRow; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.ImportRow; import org.nuiton.csv.ImportRuntimeException; import org.nuiton.jaxx.application.ApplicationTechnicalException; -import java.io.IOException; -import java.util.Collection; -import java.util.List; -import java.util.Objects; - import static org.nuiton.i18n.I18n.t; /** @@ -153,8 +152,8 @@ public class ImportIndividualObservationAction extends ImportActionSupport { if (log.isInfoEnabled()) { log.info("Persist " + individualObservationBatches.size() + " individual observation(s) of " + operationStr + " for cruise: " + cruiseStr); } - persistIndividualObservationBatches(fishingOperationContext, individualObservationBatches); - + List<IndividualObservationBatch> imported = persistIndividualObservationBatches(fishingOperationContext, individualObservationBatches); + fishingOperationContext.setIndividualObservationBatchImported(imported); } } @@ -168,29 +167,45 @@ public class ImportIndividualObservationAction extends ImportActionSupport { } - private void persistIndividualObservationBatches(GenericFormatImportOperationContext fishingOperationContext, ImmutableList<IndividualObservationBatch> batches) { + private List<IndividualObservationBatch> persistIndividualObservationBatches(GenericFormatImportOperationContext fishingOperationContext, ImmutableList<IndividualObservationBatch> batches) { + + // https://forge.codelutin.com/issues/8335 + // Certain observation individuelle ne sont pas retrouvee dans + // le fichier "catch" importer, cela est du a un autre bug + // qui fait que certaine observation reste dans le system + // au lieu d'etre effacee (?) + // On ne peut donc pas les importer, on les ignores simplement + // (car pour pouvoir les importer il faut absolument un speciesBatchId + // valide) au lieu de lever une exception. + List<IndividualObservationBatch> goodBatches = new ArrayList<IndividualObservationBatch>(batches.size()); for (IndividualObservationBatch individualObservation : batches) { Integer batchId = individualObservation.getBatchId(); Integer speciesBatchId = fishingOperationContext.getSpeciesBatchId(batchId); - Objects.requireNonNull(speciesBatchId, "Persisted Species batch id not found for import species batch id: " + batchId); - individualObservation.setBatchId(speciesBatchId); - + if (speciesBatchId == null) { + if (log.isErrorEnabled()) { + log.error("Persisted Species batch id not found for import species batch id: " + batchId); + } + } else { + // Objects.requireNonNull(speciesBatchId, "Persisted Species batch id not found for import species batch id: " + batchId); + individualObservation.setBatchId(speciesBatchId); + goodBatches.add(individualObservation); + } } // On conserve l'ordre des ids d'imports qui vont servir ensuite pour persister les pièces jointes ImmutableList.Builder<Integer> idsBuilder = ImmutableList.builder(); - batches.forEach(batch -> idsBuilder.add(batch.getIdAsInt())); + goodBatches.forEach(batch -> idsBuilder.add(batch.getIdAsInt())); ImmutableList<Integer> importIds = idsBuilder.build(); // on enlève les ids pour la persistence - batches.forEach(batch -> batch.setId((String) null)); + goodBatches.forEach(batch -> batch.setId((String) null)); FishingOperation fishingOperation = fishingOperationContext.getFishingOperation(); - List<IndividualObservationBatch> savedBatches = persistenceHelper.createIndividualObservationBatch(fishingOperation, batches); + List<IndividualObservationBatch> savedBatches = persistenceHelper.createIndividualObservationBatch(fishingOperation, goodBatches); // Persistence des pièces-jointes associées aux observations individuelles int index = 0; @@ -200,7 +215,7 @@ public class ImportIndividualObservationAction extends ImportActionSupport { Collection<AttachmentRow> attachmentRows = importContext.popAttachmentRows(ObjectTypeCode.SAMPLE, importId); persistenceHelper.persistAttachments(savedBatch.getIdAsInt(), attachmentRows); } - + return goodBatches; } }); diff --git a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl index 9c3e628..224c503 100644 --- a/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl +++ b/tutti-service/src/main/resources/ftl/genericFormatImportReport_fr.ftl @@ -532,7 +532,12 @@ <td class="small"><#if importBenthos> ${operationResult.benthosTotalSortedWeight!'NA'}<#else> - </#if></td> <td class="small"><#if importSpecies> ${operationResult.nbSpeciesTaxon}<#else> - </#if></td> <td class="small"><#if importBenthos> ${operationResult.nbBenthosTaxon}<#else> - </#if></td> - <td class="small"><#if importIndividualObservation> ${operationResult.nbIndividualObservations}<#else> - </#if></td> + <td class="small"> + <#if importIndividualObservation> + <#if operationResult.nbIndividualObservations == operationResult.nbIndividualObservationsImported> ${operationResult.nbIndividualObservations} + <#else> ${operationResult.nbIndividualObservationsImported}/${operationResult.nbIndividualObservations} </#if> + <#else> - </#if> + </td> <td class="small"><#if importAccidentalCatch> ${operationResult.withAccidentalCatches?string('Oui', 'Non')}<#else> - </#if></td> <td class="small"><#if importMarineLitter> ${operationResult.withMarineLitter?string('Oui', 'Non')}<#else> - </#if></td> </tr> -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm