This is an automated email from the git hooks/post-receive script. New commit to branch feature/8153 in repository tutti. See https://gitlab.nuiton.org/codelutin/tutti.git commit 0f1fbe59a1cdcbc38051aa094ffbcb4dd3411bdd Author: Kevin Morin <morin@codelutin.com> Date: Wed Mar 30 17:34:17 2016 +0200 on recharge les lignes ) partir du résultat de l'import (fixes #8153) --- .../persistence/entities/CaracteristicMap.java | 2 +- .../IndividualObservationBatchTableModel.java | 12 +- .../catches/species/BenthosBatchUISupportImpl.java | 3 +- .../catches/species/SpeciesBatchUISupportImpl.java | 3 +- .../species/SpeciesOrBenthosBatchUISupport.java | 3 +- .../frequency/SpeciesFrequencyUIHandler.java | 138 +++++++++++---------- .../species/frequency/SpeciesFrequencyUIModel.java | 10 +- .../ImportMultiPostSpeciesSupportAction.java | 87 +++++++++---- .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 10 files changed, 167 insertions(+), 93 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java index 68a7c66..7bb4001 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/CaracteristicMap.java @@ -58,7 +58,7 @@ public class CaracteristicMap extends LinkedHashMap<Caracteristic, Serializable> public boolean hasNonNullValues(Collection<Caracteristic> caracteristicsToIgnore) { return keySet().stream() - .filter(caracteristic -> caracteristicsToIgnore.contains(caracteristic) && get(caracteristic) != null) + .filter(caracteristic -> !caracteristicsToIgnore.contains(caracteristic) && get(caracteristic) != null) .count() > 0; } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java index e1930d0..592cf13 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java @@ -39,6 +39,7 @@ import javax.swing.event.TableColumnModelListener; import java.io.Serializable; import java.util.Collection; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import static org.nuiton.i18n.I18n.n; @@ -163,6 +164,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab } } + public Optional<Caracteristic> getMaturityCaracteristic() { + return maturityCaracteristic; + } + public void setMaturityCaracteristic(Optional<Caracteristic> maturityCaracteristic) { this.maturityCaracteristic = maturityCaracteristic; if (rows != null) { @@ -224,9 +229,10 @@ public class IndividualObservationBatchTableModel extends AbstractApplicationTab for (int i = rows.size() - 1 ; i >= 0 ; i--) { IndividualObservationBatchRowModel row = rows.get(i); // if the row has no data set, then it could be the empty row we are looking for - defaultCaracteristicsMap.keySet().stream() - .filter(key -> defaultCaracteristicsMap.get(key) != null).collect(Collectors.toSet()); - if (row.isEmpty()) { + Set<Caracteristic> notNullCaracteristics = defaultCaracteristicsMap.keySet().stream() + .filter(key -> defaultCaracteristicsMap.get(key) != null) + .collect(Collectors.toSet()); + if (row.isEmpty(notNullCaracteristics)) { result = row; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java index 5af43d1..9cc5dec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/BenthosBatchUISupportImpl.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -236,7 +237,7 @@ public class BenthosBatchUISupportImpl extends SpeciesOrBenthosBatchUISupport { } @Override - public Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { + public MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { return context.getMultiPostImportService().importBenthosBatch(file, operation, speciesBatch, importFrequencies, importIndivudalObservations); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java index 2dee051..8bba93e 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUISupportImpl.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -226,7 +227,7 @@ public class SpeciesBatchUISupportImpl extends SpeciesOrBenthosBatchUISupport { } @Override - public Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { + public MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations) { return context.getMultiPostImportService().importSpeciesBatch(file, operation, speciesBatch, importFrequencies, importIndivudalObservations); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java index 79e88e2..d9f2de7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesOrBenthosBatchUISupport.java @@ -33,6 +33,7 @@ import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocols; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIModel; @@ -152,7 +153,7 @@ public abstract class SpeciesOrBenthosBatchUISupport { public abstract Map<String, Object> importMultiPost(File file, FishingOperation operation, boolean importFrequencies, boolean importIndivudalObservations); - public abstract Map<String, Object> importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations); + public abstract MultiPostImportResult importMultiPost(File file, FishingOperation operation, SpeciesBatch speciesBatch, boolean importFrequencies, boolean importIndivudalObservations); public abstract void exportMultiPost(File file, FishingOperation operation, boolean importFrequencies, boolean importIndivudalObservations); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 7c5dde2..e189ec7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -47,12 +47,8 @@ import fr.ifremer.tutti.type.WeightUnit; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellRenderer; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellEditor; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; -import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchTableModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.SamplingCodeCellRenderer; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.EditSpeciesBatchPanelUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; @@ -852,50 +848,32 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } + frequencyEditor = editor; SpeciesFrequencyUIModel model = getModel(); - model.setInitBatchEdition(true); + model.setNextEditableRowIndex(frequencyEditor.getNextEditableRowIndex()); - try { + List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); + List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); - FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; - FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; - model.setNextEditableRowIndex(editor.getNextEditableRowIndex()); - model.setTotalNumber(null); - model.setTotalComputedWeight(null); - model.setTotalWeight(null); - model.setSimpleCount(null); + model.setInitBatchEdition(true); + + try { + // keep batch (will be used to push back editing entry) + model.setBatch(speciesBatch); model.setMinStep(null); model.setMaxStep(null); - model.setRtp(null); model.setCopyRtpWeights(false); model.setAddIndividualObservationOnRafale(false); - frequencyEditor = editor; - - Caracteristic lengthStepCaracteristic = null; - CopyIndividualObservationMode copyIndividualObservationMode = null; - - List<SpeciesFrequencyRowModel> rows = new ArrayList<>(); - List<IndividualObservationBatchRowModel> obsRows = new ArrayList<>(); - - Species species = speciesBatch.getSpecies(); - IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); - obsTableModel.setSpecies(species); - String samplingCodeSeparator = getConfig().getSamplingCodeSeparator(); - obsTableModel.setSamplingCodePrefix(getConfig().getSamplingCodePrefix() + samplingCodeSeparator + - decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME) + samplingCodeSeparator); - - model.setTotalWeight(speciesBatch.getWeight()); - Optional<String> speciesMaturityPmfmId = Optional.empty(); // set rtps TuttiProtocol protocol = getDataContext().getProtocol(); if (protocol != null) { - Integer referenceTaxonId = species.getReferenceTaxonId(); + Integer referenceTaxonId = speciesBatch.getSpecies().getReferenceTaxonId(); Optional<SpeciesProtocol> optSpeciesProtocol = protocol.getSpecies().stream() .filter(sp -> sp.getSpeciesReferenceTaxonId().equals(referenceTaxonId)) @@ -919,14 +897,73 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } else { rtp = speciesProtocol.getRtpUndefined(); } - model.setRtp(rtp); + getModel().setRtp(rtp); speciesMaturityPmfmId = Optional.ofNullable(speciesProtocol.getMaturityPmfmId()); } + + } + + // Add maturity column if necessary + + Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); + + setMaturityCaracteristic(maturityCaracteristic); + + loadFrequenciesAndObservations(frequency, individualObservations); + + if (getContext().isIchtyometerConnected()) { + + // let's listen the ichtyometer + listenItchtyometer(); + } - List<SpeciesFrequencyRowModel> frequency = speciesBatch.getFrequency(); - List<IndividualObservationBatchRowModel> individualObservations = speciesBatch.getIndividualObservation(); + individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation()); + + model.setModify(false); + + getContext().addVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); + + } finally { + model.setInitBatchEdition(false); + //FIXME Voir si c'est nécessaire ? + model.setModify(false); + } + + } + + public void loadFrequenciesAndObservations(List<SpeciesFrequencyRowModel> frequency, List<IndividualObservationBatchRowModel> individualObservations) { + SpeciesFrequencyUIModel model = getModel(); + SpeciesBatchRowModel speciesBatch = model.getBatch(); + + model.setInitBatchEdition(true); + + try { + + FrequencyConfigurationMode mode = FrequencyConfigurationMode.FREQUENCIES; + FrequencyConfigurationMode frequenciesMode = FrequencyConfigurationMode.AUTO_GEN; + + model.setTotalNumber(null); + model.setTotalComputedWeight(null); + model.setTotalWeight(null); + model.setSimpleCount(null); + model.setRtp(null); + + Caracteristic lengthStepCaracteristic = null; + CopyIndividualObservationMode copyIndividualObservationMode = null; + + List<SpeciesFrequencyRowModel> rows = new ArrayList<>(); + List<IndividualObservationBatchRowModel> obsRows = new ArrayList<>(); + + Species species = speciesBatch.getSpecies(); + IndividualObservationBatchTableModel obsTableModel = getObsTableModel(); + obsTableModel.setSpecies(species); + String samplingCodeSeparator = getConfig().getSamplingCodeSeparator(); + obsTableModel.setSamplingCodePrefix(getConfig().getSamplingCodePrefix() + samplingCodeSeparator + + decorate(species, DecoratorService.WITH_SURVEY_CODE_NO_NAME) + samplingCodeSeparator); + + model.setTotalWeight(speciesBatch.getWeight()); // // try to load existing frequency @@ -954,12 +991,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } } - // Add maturity column if necessary - - Optional<Caracteristic> maturityCaracteristic = speciesMaturityPmfmId.map(maturityCaracteristics::get); - - setMaturityCaracteristic(maturityCaracteristic); - // // try to load existing individual observations // @@ -987,9 +1018,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci newRow.addPropertyChangeListener(obsChangedListener); newRow.setValid(true); - if (maturityCaracteristic.isPresent()) { + if (getObsTableModel().getMaturityCaracteristic().isPresent()) { - Caracteristic caracteristicKey = maturityCaracteristic.get(); + Caracteristic caracteristicKey = getObsTableModel().getMaturityCaracteristic().get(); Serializable caracteristicValue = newRow.getCaracteristics().remove(caracteristicKey); newRow.getDefaultCaracteristics().putIfAbsent(caracteristicKey, caracteristicValue); } @@ -1104,34 +1135,15 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci obsTableModel.setRows(obsRows); model.recomputeIndividualObservationRowsValidateState(); - // keep batch (will be used to push back editing entry) - model.setBatch(speciesBatch); - // let's change the copy mode (mark it in init mode to avoid user change confirmation and some recompuations) model.setCopyIndividualObservationMode(null); model.setCopyIndividualObservationMode(copyIndividualObservationMode); model.computeRowWeightWithRtp(); - if (getContext().isIchtyometerConnected()) { - - // let's listen the ichtyometer - listenItchtyometer(); - - } - - individualObservationUICache.init(ui, frequencyEditor.getEditRow(), getDataContext().getFishingOperation()); - - model.setModify(false); - - getContext().addVetoableChangeListener(TuttiUIContext.PROPERTY_SCREEN, changeScreenListener); - } finally { model.setInitBatchEdition(false); - //FIXME Voir si c'est nécessaire ? - model.setModify(false); } - } public boolean askCancelEditBeforeLeaving() { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java index 5532cad..3b3672c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIModel.java @@ -27,8 +27,8 @@ import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.persistence.entities.protocol.Rtp; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.type.WeightUnit; -import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.computable.ComputableData; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIModel; @@ -776,6 +776,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa firePropertyChange(PROPERTY_EMPTY_ROWS, null, emptyRows); } + public boolean isNonEmptyRows() { + return getRowCount() - emptyRows.size() - rowsInError.size() > 0; + } + public int computeTotalNumber() { int result = 0; if (rows != null) { @@ -942,6 +946,10 @@ public class SpeciesFrequencyUIModel extends AbstractTuttiTableUIModel<SpeciesBa isNonEmptyIndividualObservationRowsInError()); } + public boolean isNonEmptyIndividualObservationRow() { + return individualObservationRows.stream().anyMatch(row -> !row.isEmpty(defaultCaracteristic)); + } + public void recomputeRowsValidateState() { if (log.isInfoEnabled()) { diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java index b26f7f4..f608cff 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ImportMultiPostSpeciesSupportAction.java @@ -26,15 +26,16 @@ import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.catches.multipost.MultiPostImportService; +import fr.ifremer.tutti.service.catches.multipost.MultiPostImportResult; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesOrBenthosBatchUISupport; -import fr.ifremer.tutti.ui.swing.content.operation.catches.actions.ImportMultiPostActionSupport; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.edit.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; 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.actions.LongActionSupport; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; @@ -42,8 +43,6 @@ import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import javax.swing.JOptionPane; import java.io.File; import java.util.List; -import java.util.Map; -import java.util.Optional; import static org.nuiton.i18n.I18n.t; @@ -51,19 +50,39 @@ import static org.nuiton.i18n.I18n.t; * @author Tony Chemit - chemit@codelutin.com * @since 4.5 */ -public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPostActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { +public abstract class ImportMultiPostSpeciesSupportAction extends LongActionSupport<SpeciesFrequencyUIModel, SpeciesFrequencyUI, SpeciesFrequencyUIHandler> { /** Logger. */ private static final Log log = LogFactory.getLog(ImportMultiPostSpeciesSupportAction.class); + /** + * File to import. + */ + private File file; + + /** + * Optional data that were not imported. + */ + private MultiPostImportResult importResult; + protected ImportMultiPostSpeciesSupportAction(SpeciesFrequencyUIHandler handler) { - super(handler); + super(handler, false); } public abstract boolean isImportFrequencies(); public abstract boolean isImportIndivudalObservations(); + protected abstract String getSuccessMessage(File file); + + protected abstract String getFileExtension(); + + protected abstract String getFileExtensionDescription(); + + protected abstract String getFileChooserTitle(); + + protected abstract String getFileChooserButton(); + @Override public boolean prepareAction() throws Exception { boolean doAction = super.prepareAction(); @@ -72,14 +91,15 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos String message = "<ul>"; boolean ask = false; - if (isImportFrequencies() && getModel().getRowCount() > 0) { + if (isImportFrequencies() && getModel().isNonEmptyRows()) { ask = true; message = "<li>" + t("tutti.askBeforeMultiPostImport.frequencies.message") + "</li>"; } - if (isImportIndivudalObservations() && getModel().getIndividualObservationRows().size() > 0) { + if (isImportIndivudalObservations() && getModel().getIndividualObservationRows().size() > 0 + && getModel().isNonEmptyIndividualObservationRow()) { ask = true; - message += "<li>" + t("tutti.askBeforeMultiPostImport.frequencies.message") + "</li>"; + message += "<li>" + t("tutti.askBeforeMultiPostImport.observations.message") + "</li>"; } message += "</ul>"; @@ -112,8 +132,20 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos } + } + + if (doAction) { + + // choose file to import + file = chooseFile(getFileChooserTitle(), + getFileChooserButton(), + "^.*\\." + getFileExtension(), + getFileExtensionDescription()); + + doAction = file != null; } + } return doAction; @@ -121,12 +153,14 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos } @Override - protected final Map<String, Object> importBatches(MultiPostImportService multiPostImportExportService, File file, FishingOperation operation) { + public final void doAction() throws Exception { + + FishingOperation operation = getDataContext().getFishingOperation(); SpeciesOrBenthosBatchUISupport batchUISupport = getModel().getSpeciesOrBenthosBatchUISupport(); SpeciesBatch speciesBatch = getModel().getBatch().toEntity(); - return batchUISupport.importMultiPost(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); -// return multiPostImportExportService.importSpeciesBatch(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); + + importResult = batchUISupport.importMultiPost(file, operation, speciesBatch, isImportFrequencies(), isImportIndivudalObservations()); } @@ -134,27 +168,36 @@ public abstract class ImportMultiPostSpeciesSupportAction extends ImportMultiPos public final void postSuccessAction() { super.postSuccessAction(); + sendMessage(getSuccessMessage(file)); + SpeciesFrequencyCellComponent.FrequencyCellEditor frequencyEditor = getHandler().getFrequencyEditor(); SpeciesBatchRowModel editRow = frequencyEditor.getEditRow(); Integer speciesBatchId = editRow.getIdAsInt(); - PersistenceService persistenceService = getContext().getPersistenceService(); - List<SpeciesBatchFrequency> frequencies = persistenceService.getAllSpeciesBatchFrequency(speciesBatchId); + List<SpeciesBatchFrequency> frequencies = importResult.getImportedFrequencies(); if (log.isInfoEnabled()) { log.info("[SpeciesBatch: " + speciesBatchId + "] Frequencies: " + frequencies.size()); } - editRow.loadFrequencies(frequencies); - - List<IndividualObservationBatch> individualObservations = persistenceService.getAllIndividualObservationBatchsForBatch(speciesBatchId); - editRow.loadIndividualObservations(getConfig().getIndividualObservationWeightUnit(), - getDataContext().getDefaultIndividualObservationCaracteristics(), - individualObservations); + List<SpeciesFrequencyRowModel> frequencyRows = SpeciesFrequencyRowModel.fromEntity(getModel().getSpeciesOrBenthosBatchUISupport().getWeightUnit(), frequencies); + List<IndividualObservationBatch> individualObservations = importResult.getImportedObservations(); if (log.isInfoEnabled()) { log.info("[SpeciesBatch: " + speciesBatchId + "] Individual Observations: " + individualObservations.size()); } - getHandler().editBatch(frequencyEditor, Optional.empty()); + List<IndividualObservationBatchRowModel> individualObservationRows = IndividualObservationBatchRowModel.fromEntity(getConfig().getIndividualObservationWeightUnit(), + getDataContext().getDefaultIndividualObservationCaracteristics(), + individualObservations); + + getHandler().loadFrequenciesAndObservations(frequencyRows, individualObservationRows); + getModel().setModify(true); } + + @Override + public final void releaseAction() { + file = null; + importResult = null; + super.releaseAction(); + } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 25ddb67..4d28f54 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -49,6 +49,7 @@ tutti.applicationUpdater.updateDone.deleteDirectory.i18n.error= tutti.askBeforeMultiPostImport.frequencies.message= tutti.askBeforeMultiPostImport.help= tutti.askBeforeMultiPostImport.message= +tutti.askBeforeMultiPostImport.observations.message= tutti.askBeforeMultiPostImport.title= tutti.askToCancelEditFrequencies.help= tutti.askToCancelEditFrequencies.message= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 91916e8..3322d81 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -34,6 +34,7 @@ tutti.askBeforeMultiPostImport.frequencies.message=Des mensurations existent tutti.askBeforeMultiPostImport.help=Que voulez-vous faire ?<ul><li><strong>Annuler l'import</strong> pour annuler l'opération d'import</li><li><strong>Réaliser l'import</strong> pour supprimer les données existantes puis réaliser l'import</li></ul> tutti.askBeforeMultiPostImport.individualObservations.message=Des observations individuelles existent tutti.askBeforeMultiPostImport.message=%s<br/>Elles seront supprimées avant l'import. +tutti.askBeforeMultiPostImport.observations.message=Des observations existent tutti.askBeforeMultiPostImport.title=Des données existent; elles seront supprimées avant l'import \! tutti.askToCancelEditFrequencies.help=Que voulez-vous faire ?<ul><li><strong>Annuler</strong> pour rester sur l'écran</li><li><strong>Continuer</strong> pour confirmer la perte des données modifiées et le retour sur l'écran des lots</li></ul> tutti.askToCancelEditFrequencies.message=Des modifications sur les mensurations - observations individuelles ne sont pas enregistrées. -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.