Author: kmorin Date: 2013-06-03 15:06:15 +0200 (Mon, 03 Jun 2013) New Revision: 1071 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1071 Log: fixes #2534 [CAPTURE] import des lots sur les diff?\195?\169rents onglet : vide les champs en haut des tableaux... Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRow.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -0,0 +1,44 @@ +package fr.ifremer.tutti.service.catches.multipost; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.3 + */ +public class CatchWeightsRow { + + public static final String TOTAL_SORTED_WEIGHT = "totalSortedWeight"; + + public static final String INERT_WEIGHT = "inertWeight"; + + public static final String LIVING_NOT_ITEMIZED_WEIGHT = "livingNotItemizedWeight"; + + protected Float totalSortedWeight; + + protected Float inertWeight; + + protected Float livingNotItemizedWeight; + + public Float getTotalSortedWeight() { + return totalSortedWeight; + } + + public void setTotalSortedWeight(Float totalSortedWeight) { + this.totalSortedWeight = totalSortedWeight; + } + + public Float getInertWeight() { + return inertWeight; + } + + public void setInertWeight(Float inertWeight) { + this.inertWeight = inertWeight; + } + + public Float getLivingNotItemizedWeight() { + return livingNotItemizedWeight; + } + + public void setLivingNotItemizedWeight(Float livingNotItemizedWeight) { + this.livingNotItemizedWeight = livingNotItemizedWeight; + } +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/CatchWeightsRowModel.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -0,0 +1,23 @@ +package fr.ifremer.tutti.service.catches.multipost; + +import fr.ifremer.tutti.service.TuttiCsvUtil; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.3 + */ +public class CatchWeightsRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CatchWeightsRow> { + + public CatchWeightsRowModel(char separator) { + super(separator); + + newColumnForImportExport(CatchWeightsRow.TOTAL_SORTED_WEIGHT, TuttiCsvUtil.FLOAT); + newColumnForImportExport(CatchWeightsRow.INERT_WEIGHT, TuttiCsvUtil.FLOAT); + newColumnForImportExport(CatchWeightsRow.LIVING_NOT_ITEMIZED_WEIGHT, TuttiCsvUtil.FLOAT); + } + + @Override + public CatchWeightsRow newEmptyInstance() { + return new CatchWeightsRow(); + } +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRow.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -0,0 +1,20 @@ +package fr.ifremer.tutti.service.catches.multipost; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.3 + */ +public class MarineLitterWeightRow { + + public static final String TOTAL_WEIGHT = "totalWeight"; + + protected Float totalWeight; + + public Float getTotalWeight() { + return totalWeight; + } + + public void setTotalWeight(Float totalWeight) { + this.totalWeight = totalWeight; + } +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/MarineLitterWeightRowModel.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -0,0 +1,21 @@ +package fr.ifremer.tutti.service.catches.multipost; + +import fr.ifremer.tutti.service.TuttiCsvUtil; + +/** + * @author kmorin <kmorin@codelutin.com> + * @since 2.3 + */ +public class MarineLitterWeightRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<MarineLitterWeightRow> { + + public MarineLitterWeightRowModel(char separator) { + super(separator); + + newColumnForImportExport(MarineLitterWeightRow.TOTAL_WEIGHT, TuttiCsvUtil.FLOAT); + } + + @Override + public MarineLitterWeightRow newEmptyInstance() { + return new MarineLitterWeightRow(); + } +} Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -36,18 +36,7 @@ import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.persistence.entities.data.BatchContainer; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; -import fr.ifremer.tutti.persistence.entities.data.BenthosBatchFrequency; -import fr.ifremer.tutti.persistence.entities.data.FishingOperation; -import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; -import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; -import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; +import fr.ifremer.tutti.persistence.entities.data.*; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -73,10 +62,7 @@ import java.io.Reader; import java.io.Serializable; import java.io.Writer; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import static org.nuiton.i18n.I18n._; @@ -91,6 +77,8 @@ private static final Log log = LogFactory.getLog(TuttiMultiPostImportExportService.class); + public static final String BATCHES_KEY = "batchesKey"; + protected static final String ATTACHMENTS_DIRECTORY = "attachments"; protected static final String ATTACHMENTS_FILE = "attachments.csv"; @@ -109,6 +97,8 @@ protected static final String CARACTERISTIC_FILE = "caracteristics.csv"; + protected static final String WEIGHTS_FILE = "weights.csv"; + protected PersistenceService persistenceService; protected DecoratorService decoratorService; @@ -148,18 +138,29 @@ */ public void exportSpecies(File file, FishingOperation operation) { - BatchContainer<SpeciesBatch> speciesBatchContainer = - persistenceService.getRootSpeciesBatch(operation.getId()); + String operationId = operation.getId(); + if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - List<CatchRow> rows = Lists.newArrayList(); - List<CatchFrequencyRow> frequencyRows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); + BatchContainer<SpeciesBatch> speciesBatchContainer = + persistenceService.getRootSpeciesBatch(operationId); - for (SpeciesBatch batch : speciesBatchContainer.getChildren()) { - createSpeciesRow(batch, null, rows, frequencyRows, attachmentRows); + List<CatchRow> rows = Lists.newArrayList(); + List<CatchFrequencyRow> frequencyRows = Lists.newArrayList(); + List<AttachmentRow> attachmentRows = Lists.newArrayList(); + + for (SpeciesBatch batch : speciesBatchContainer.getChildren()) { + createSpeciesRow(batch, null, rows, frequencyRows, attachmentRows); + } + + // export weights + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + CatchWeightsRow weights = new CatchWeightsRow(); + weights.setTotalSortedWeight(catchBatch.getSpeciesTotalSortedWeight()); + weights.setInertWeight(catchBatch.getSpeciesTotalInertWeight()); + weights.setLivingNotItemizedWeight(catchBatch.getSpeciesTotalLivingNotItemizedWeight()); + + exportCatches(file, SPECIES_FILE, weights, rows, frequencyRows, attachmentRows); } - - exportCatches(file, SPECIES_FILE, rows, frequencyRows, attachmentRows); } /** @@ -169,18 +170,30 @@ * @param operation the operation to export */ public void exportBenthos(File file, FishingOperation operation) { - BatchContainer<BenthosBatch> benthosBatchContainer = - persistenceService.getRootBenthosBatch(operation.getId()); - List<CatchRow> rows = Lists.newArrayList(); - List<CatchFrequencyRow> frequencyRows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); + String operationId = operation.getId(); + if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - for (BenthosBatch batch : benthosBatchContainer.getChildren()) { - createBenthosRow(batch, null, rows, frequencyRows, attachmentRows); + BatchContainer<BenthosBatch> benthosBatchContainer = + persistenceService.getRootBenthosBatch(operationId); + + List<CatchRow> rows = Lists.newArrayList(); + List<CatchFrequencyRow> frequencyRows = Lists.newArrayList(); + List<AttachmentRow> attachmentRows = Lists.newArrayList(); + + for (BenthosBatch batch : benthosBatchContainer.getChildren()) { + createBenthosRow(batch, null, rows, frequencyRows, attachmentRows); + } + + // export weights + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + CatchWeightsRow weights = new CatchWeightsRow(); + weights.setTotalSortedWeight(catchBatch.getBenthosTotalSortedWeight()); + weights.setInertWeight(catchBatch.getBenthosTotalInertWeight()); + weights.setLivingNotItemizedWeight(catchBatch.getBenthosTotalLivingNotItemizedWeight()); + + exportCatches(file, BENTHOS_FILE, weights, rows, frequencyRows, attachmentRows); } - - exportCatches(file, BENTHOS_FILE, rows, frequencyRows, attachmentRows); } /** @@ -191,58 +204,82 @@ */ public void exportMarineLitter(File file, FishingOperation operation) { - BatchContainer<MarineLitterBatch> marineLitterBatchContainer = - persistenceService.getRootMarineLitterBatch(operation.getId()); + String operationId = operation.getId(); + if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - List<MarineLitterRow> rows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); + BatchContainer<MarineLitterBatch> marineLitterBatchContainer = + persistenceService.getRootMarineLitterBatch(operationId); - for (MarineLitterBatch batch : marineLitterBatchContainer.getChildren()) { - MarineLitterRow row = new MarineLitterRow(); + List<MarineLitterRow> rows = Lists.newArrayList(); + List<AttachmentRow> attachmentRows = Lists.newArrayList(); - String id = UUID.randomUUID().toString(); - row.setBatchId(id); + for (MarineLitterBatch batch : marineLitterBatchContainer.getChildren()) { + MarineLitterRow row = new MarineLitterRow(); - row.setCategory(batch.getMarineLitterCategory()); - row.setSizeCategory(batch.getMarineLitterSizeCategory()); - row.setNumber(batch.getNumber()); - row.setWeight(batch.getWeight()); - row.setComment(batch.getComment()); + String id = UUID.randomUUID().toString(); + row.setBatchId(id); - rows.add(row); + row.setCategory(batch.getMarineLitterCategory()); + row.setSizeCategory(batch.getMarineLitterSizeCategory()); + row.setNumber(batch.getNumber()); + row.setWeight(batch.getWeight()); + row.setComment(batch.getComment()); - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows); - } + rows.add(row); - MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator); + addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows); + } - BufferedWriter writer = null; - File directory = Files.createTempDir(); - List<File> file2zip = Lists.newArrayList(); + MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator); - File speciesFile = new File(directory, MARINE_LITTER_FILE); - file2zip.add(speciesFile); - try { - writer = Files.newWriter(speciesFile, Charsets.UTF_8); - Export export = Export.newExport(csvModel, rows); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", speciesFile), e); - } finally { - IOUtils.closeQuietly(writer); - } + BufferedWriter writer = null; + File directory = Files.createTempDir(); + List<File> file2zip = Lists.newArrayList(); - exportAttachments(directory, file2zip, attachmentRows); + File speciesFile = new File(directory, MARINE_LITTER_FILE); + file2zip.add(speciesFile); + try { + writer = Files.newWriter(speciesFile, Charsets.UTF_8); + Export export = Export.newExport(csvModel, rows); + export.write(writer); + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", speciesFile), e); + } finally { + IOUtils.closeQuietly(writer); + } - try { - ZipUtil.compressFiles(file, directory, file2zip); + // export weight + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + MarineLitterWeightRow weight = new MarineLitterWeightRow(); + weight.setTotalWeight(catchBatch.getMarineLitterTotalWeight()); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e); + MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(csvSeparator); - } finally { - TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file)); + File weightFile = new File(directory, WEIGHTS_FILE); + file2zip.add(weightFile); + try { + writer = Files.newWriter(weightFile, Charsets.UTF_8); + Export export = Export.newExport(weightModel, Lists.newArrayList(weight)); + export.write(writer); + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.export.weight.error", weightFile), e); + } finally { + IOUtils.closeQuietly(writer); + } + + exportAttachments(directory, file2zip, attachmentRows); + + try { + ZipUtil.compressFiles(file, directory, file2zip); + + } catch (IOException e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.export.error", file), e); + + } finally { + TuttiIOUtil.deleteDirectory(directory, _("tutti.service.multipost.export.deleteTempDirectory.error", file)); + } } } @@ -429,8 +466,9 @@ * @param operation the operation in which to add the batches * @return the list of the species which have not been imported, because there were concurrent batches */ - public Collection<SpeciesBatch> importSpecies(File file, FishingOperation operation) { + public Map<String, Object> importSpecies(File file, FishingOperation operation) { + Map<String, Object> notImportedData = Maps.newHashMap(); final Map<String, SpeciesBatch> notImportedBatches = Maps.newLinkedHashMap(); BatchContainer<SpeciesBatch> speciesBatches = @@ -581,7 +619,50 @@ }; importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - return notImportedBatches.values(); + // import weights + File weightsFile = new File(tempDir, WEIGHTS_FILE); + try { + reader = Files.newReader(weightsFile, Charsets.UTF_8); + + } catch (FileNotFoundException e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.import.weights.error", weightsFile), e); + } + + CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(csvSeparator); + Import<CatchWeightsRow> weights = Import.newImport(weightsModel, reader); + + Iterator<CatchWeightsRow> iterator = weights.iterator(); + if (iterator.hasNext()) { + CatchWeightsRow row = iterator.next(); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + if (catchBatch.getSpeciesTotalSortedWeight() == null) { + catchBatch.setSpeciesTotalSortedWeight(row.getTotalSortedWeight()); + + } else if (row.getTotalSortedWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT, row.getTotalSortedWeight()); + } + + if (catchBatch.getSpeciesTotalInertWeight() == null) { + catchBatch.setSpeciesTotalInertWeight(row.getInertWeight()); + + } else if (row.getInertWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT, row.getInertWeight()); + } + + if (catchBatch.getSpeciesTotalLivingNotItemizedWeight() == null) { + catchBatch.setSpeciesTotalLivingNotItemizedWeight(row.getLivingNotItemizedWeight()); + + } else if (row.getLivingNotItemizedWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, + row.getLivingNotItemizedWeight()); + } + persistenceService.saveCatchBatch(catchBatch); + } + + notImportedData.put(BATCHES_KEY, notImportedBatches.values()); + return notImportedData; } /** @@ -591,8 +672,9 @@ * @param operation the operation in which to add the batches * @return the list of the benthos which have not been imported, because there were concurrent batches */ - public Collection<BenthosBatch> importBenthos(File file, FishingOperation operation) { + public Map<String, Object> importBenthos(File file, FishingOperation operation) { + Map<String, Object> notImportedData = Maps.newHashMap(); final Map<String, BenthosBatch> notImportedBatches = Maps.newLinkedHashMap(); BatchContainer<BenthosBatch> benthosBatches = @@ -743,7 +825,51 @@ }; importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - return notImportedBatches.values(); + // import weights + File weightsFile = new File(tempDir, WEIGHTS_FILE); + try { + reader = Files.newReader(weightsFile, Charsets.UTF_8); + + } catch (FileNotFoundException e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.import.weights.error", weightsFile), e); + } + + CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(csvSeparator); + Import<CatchWeightsRow> weights = Import.newImport(weightsModel, reader); + + Iterator<CatchWeightsRow> iterator = weights.iterator(); + if (iterator.hasNext()) { + CatchWeightsRow row = iterator.next(); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operation.getId()); + catchBatch.setFishingOperation(operation); + + if (catchBatch.getBenthosTotalSortedWeight() == null) { + catchBatch.setBenthosTotalSortedWeight(row.getTotalSortedWeight()); + + } else if (row.getTotalSortedWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT, row.getTotalSortedWeight()); + } + + if (catchBatch.getBenthosTotalInertWeight() == null) { + catchBatch.setBenthosTotalInertWeight(row.getInertWeight()); + + } else if (row.getInertWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT, row.getInertWeight()); + } + + if (catchBatch.getBenthosTotalLivingNotItemizedWeight() == null) { + catchBatch.setBenthosTotalLivingNotItemizedWeight(row.getLivingNotItemizedWeight()); + + } else if (row.getLivingNotItemizedWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT, + row.getLivingNotItemizedWeight()); + } + + persistenceService.saveCatchBatch(catchBatch); + } + + notImportedData.put(BATCHES_KEY, notImportedBatches.values()); + return notImportedData; } /** @@ -753,12 +879,15 @@ * @param operation the operation in which to add the batches * @return the list of the marine litter which have not been imported, because there were concurrent batches */ - public Collection<MarineLitterBatch> importMarineLitter(File file, FishingOperation operation) { + public Map<String, Object> importMarineLitter(File file, FishingOperation operation) { + String operationId = operation.getId(); + + Map<String, Object> notImportedData = Maps.newHashMap(); final Map<String, MarineLitterBatch> notImportedBatches = Maps.newLinkedHashMap(); BatchContainer<MarineLitterBatch> marineLitterBatches = - persistenceService.getRootMarineLitterBatch(operation.getId()); + persistenceService.getRootMarineLitterBatch(operationId); // map containing the batches by their persistence id final Map<String, MarineLitterBatch> batches = Maps.newHashMap(); @@ -847,7 +976,36 @@ }; importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - return notImportedBatches.values(); + // import weights + File weightsFile = new File(tempDir, WEIGHTS_FILE); + try { + reader = Files.newReader(weightsFile, Charsets.UTF_8); + + } catch (FileNotFoundException e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.import.weights.error", weightsFile), e); + } + + MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(csvSeparator); + Import<MarineLitterWeightRow> weight = Import.newImport(weightModel, reader); + + Iterator<MarineLitterWeightRow> iterator = weight.iterator(); + if (iterator.hasNext()) { + MarineLitterWeightRow row = iterator.next(); + CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); + catchBatch.setFishingOperation(operation); + + if (catchBatch.getMarineLitterTotalWeight() == null) { + catchBatch.setMarineLitterTotalWeight(row.getTotalWeight()); + + } else if (row.getTotalWeight() != null) { + notImportedData.put(CatchBatch.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, row.getTotalWeight()); + } + + persistenceService.saveCatchBatch(catchBatch); + } + + notImportedData.put(BATCHES_KEY, notImportedBatches.values()); + return notImportedData; } /** @@ -1084,17 +1242,31 @@ protected void exportCatches(File file, String batchFile, + CatchWeightsRow weights, List<CatchRow> rows, List<CatchFrequencyRow> frequencyRows, List<AttachmentRow> attachmentRows) { CatchRowModel csvModel = new CatchRowModel(csvSeparator); CatchFrequencyRowModel csvFrequencyModel = new CatchFrequencyRowModel(csvSeparator); - AttachmentRowModel csvAttachmentModel = new AttachmentRowModel(csvSeparator); + CatchWeightsRowModel catchWeightsModel = new CatchWeightsRowModel(csvSeparator); BufferedWriter writer = null; File directory = Files.createTempDir(); List<File> file2zip = Lists.newArrayList(); + File weightsFile = new File(directory, WEIGHTS_FILE); + file2zip.add(weightsFile); + try { + writer = Files.newWriter(weightsFile, Charsets.UTF_8); + Export export = Export.newExport(catchWeightsModel, Lists.newArrayList(weights)); + export.write(writer); + writer.close(); + } catch (Exception e) { + throw new TuttiTechnicalException(_("tutti.service.multipost.export.weights.error", weightsFile), e); + } finally { + IOUtils.closeQuietly(writer); + } + File speciesFile = new File(directory, batchFile); file2zip.add(speciesFile); try { Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-06-03 13:06:15 UTC (rev 1071) @@ -94,11 +94,14 @@ tutti.service.multipost.export.error= tutti.service.multipost.export.frequencies.error= tutti.service.multipost.export.species.error= +tutti.service.multipost.export.weight.error= +tutti.service.multipost.export.weights.error= tutti.service.multipost.import.attachments.error= tutti.service.multipost.import.batches.error= tutti.service.multipost.import.caracteristics.error= tutti.service.multipost.import.frequencies.error= tutti.service.multipost.import.species.error= +tutti.service.multipost.import.weights.error= tutti.service.multipost.resolveArchive.error= tutti.service.operations.accidental.error.species.required= tutti.service.operations.computeWeights.benthos.error.incoherentCategoryWeight= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-06-03 13:06:15 UTC (rev 1071) @@ -90,10 +90,13 @@ tutti.service.multipost.export.deleteTempDirectory.error=Erreur lors de la suppression du dossier temporaire tutti.service.multipost.export.error=Erreur lors de la création du fichier d'export tutti.service.multipost.export.frequencies.error=Erreur lors de l'export des mensurations +tutti.service.multipost.export.weight.error=Erreur lors de l'export des poids +tutti.service.multipost.export.weights.error=Erreur lors de l'export des poids tutti.service.multipost.import.attachments.error=Erreur lors de l'import des pièces-jointes tutti.service.multipost.import.batches.error=Erreur lors de l'import des lots tutti.service.multipost.import.caracteristics.error=Erreur lors de l'import des caractéristiques tutti.service.multipost.import.frequencies.error=Erreur lors de l'import des mensurations +tutti.service.multipost.import.weights.error=Erreur lors de l'import des poids tutti.service.multipost.resolveArchive.error=Erreur lors de l'ouverture de l'archive tutti.service.operations.computeWeights.error.benthos.incoherentCategoryWeight=Benthos - Le poids total des mensurations du lot de %s/%s - %s (%skg) est supérieur au poids de la catégorie (%skg) tutti.service.operations.computeWeights.error.benthos.incoherentParentCategoryWeight=Benthos - Le poids du lot de %s/%s - %s (%skg) est inférieur à la somme des poids de ses sous-catégories (%skg) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -25,13 +25,17 @@ */ import fr.ifremer.tutti.persistence.entities.data.BenthosBatch; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; import javax.swing.JTextArea; import java.awt.Dialog; import java.util.Collection; +import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -41,7 +45,7 @@ */ public class ImportMultiPostAction extends AbstractImportMultiPostAction<BenthosBatchUIModel, BenthosBatchUI, BenthosBatchUIHandler> { - protected Collection<BenthosBatch> notImportedBenthosBatches; + protected Map<String, Object> notImportedData; public ImportMultiPostAction(BenthosBatchUIHandler handler) { super(handler); @@ -69,23 +73,43 @@ @Override protected void releaseAction() { - notImportedBenthosBatches = null; + notImportedData = null; super.releaseAction(); } @Override protected void importBatches(FishingOperation operation) { - notImportedBenthosBatches = multiPostImportExportService.importBenthos(file, operation); + notImportedData = multiPostImportExportService.importBenthos(file, operation); } @Override public void postSuccessAction() { super.postSuccessAction(); - if (!notImportedBenthosBatches.isEmpty()) { + if (!notImportedData.isEmpty()) { MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); + Collection<BenthosBatch> notImportedBenthosBatches = + (Collection<BenthosBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + JTextArea batchList = dialog.getBatchList(); + + Float totalSortedWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT); + if (totalSortedWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.totalSortedWeight", totalSortedWeight) + "\n"); + } + + Float inertWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_BENTHOS_TOTAL_INERT_WEIGHT); + if (inertWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.inertWeight", inertWeight) + "\n"); + } + + Float livingNotItemizedWeight = + (Float) notImportedData.get(CatchBatch.PROPERTY_BENTHOS_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT); + if (livingNotItemizedWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.livingNotItemizedWeight", livingNotItemizedWeight) + "\n"); + } + for (BenthosBatch sb : notImportedBenthosBatches) { batchList.append("- " + decorate(sb.getSpecies()) + " / " + decorate(sb.getSampleCategoryValue()) + "\n"); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -24,14 +24,17 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.MarineLitterBatch; +import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; import javax.swing.JTextArea; import java.awt.Dialog; import java.util.Collection; +import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -41,7 +44,7 @@ */ public class ImportMultiPostAction extends AbstractImportMultiPostAction<MarineLitterBatchUIModel, MarineLitterBatchUI, MarineLitterBatchUIHandler> { - protected Collection<MarineLitterBatch> notImportedMarineLitterBatches; + protected Map<String, Object> notImportedData; public ImportMultiPostAction(MarineLitterBatchUIHandler handler) { super(handler); @@ -69,23 +72,32 @@ @Override protected void releaseAction() { - notImportedMarineLitterBatches = null; + notImportedData = null; super.releaseAction(); } @Override protected void importBatches(FishingOperation operation) { - notImportedMarineLitterBatches = multiPostImportExportService.importMarineLitter(file, operation); + notImportedData = multiPostImportExportService.importMarineLitter(file, operation); } @Override public void postSuccessAction() { super.postSuccessAction(); - if (!notImportedMarineLitterBatches.isEmpty()) { + if (!notImportedData.isEmpty()) { MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); + Collection<MarineLitterBatch> notImportedMarineLitterBatches = + (Collection<MarineLitterBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + JTextArea batchList = dialog.getBatchList(); + + Float totalWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT); + if (totalWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.totalWeight", totalWeight) + "\n"); + } + for (MarineLitterBatch mlb : notImportedMarineLitterBatches) { batchList.append("- " + decorate(mlb.getMarineLitterCategory()) + " / " + decorate(mlb.getMarineLitterSizeCategory()) + "\n"); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java 2013-06-03 13:06:15 UTC (rev 1071) @@ -24,14 +24,17 @@ * #L% */ +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; +import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportExportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; import javax.swing.JTextArea; import java.awt.Dialog; import java.util.Collection; +import java.util.Map; import static org.nuiton.i18n.I18n._; @@ -41,7 +44,7 @@ */ public class ImportMultiPostAction extends AbstractImportMultiPostAction<SpeciesBatchUIModel, SpeciesBatchUI, SpeciesBatchUIHandler> { - protected Collection<SpeciesBatch> notImportedSpeciesBatches; + protected Map<String, Object> notImportedData; public ImportMultiPostAction(SpeciesBatchUIHandler handler) { super(handler); @@ -69,23 +72,43 @@ @Override protected void releaseAction() { - notImportedSpeciesBatches = null; + notImportedData = null; super.releaseAction(); } @Override protected void importBatches(FishingOperation operation) { - notImportedSpeciesBatches = multiPostImportExportService.importSpecies(file, operation); + notImportedData = multiPostImportExportService.importSpecies(file, operation); } @Override public void postSuccessAction() { super.postSuccessAction(); - if (!notImportedSpeciesBatches.isEmpty()) { + if (!notImportedData.isEmpty()) { MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); + Collection<SpeciesBatch> notImportedSpeciesBatches = + (Collection<SpeciesBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + JTextArea batchList = dialog.getBatchList(); + + Float totalSortedWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT); + if (totalSortedWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.totalSortedWeight", totalSortedWeight) + "\n"); + } + + Float inertWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_SPECIES_TOTAL_INERT_WEIGHT); + if (inertWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.inertWeight", inertWeight) + "\n"); + } + + Float livingNotItemizedWeight = + (Float) notImportedData.get(CatchBatch.PROPERTY_SPECIES_TOTAL_LIVING_NOT_ITEMIZED_WEIGHT); + if (livingNotItemizedWeight != null) { + batchList.append("- " + _("tutti.multiPostImportLog.livingNotItemizedWeight", livingNotItemizedWeight) + "\n"); + } + for (SpeciesBatch sb : notImportedSpeciesBatches) { batchList.append("- " + decorate(sb.getSpecies()) + " / " + decorate(sb.getSampleCategoryValue()) + "\n"); } Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-06-03 13:06:15 UTC (rev 1071) @@ -1200,8 +1200,12 @@ tutti.multiPostImportLog.close= tutti.multiPostImportLog.close.mnemonic= tutti.multiPostImportLog.close.tip= +tutti.multiPostImportLog.inertWeight= +tutti.multiPostImportLog.livingNotItemizedWeight= tutti.multiPostImportLog.message= tutti.multiPostImportLog.title= +tutti.multiPostImportLog.totalSortedWeight= +tutti.multiPostImportLog.totalWeight= tutti.property.= tutti.property.get.error= tutti.property.set.error= Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-06-02 20:20:45 UTC (rev 1070) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-06-03 13:06:15 UTC (rev 1071) @@ -1157,8 +1157,12 @@ tutti.multiPostImportLog.close=Fermer tutti.multiPostImportLog.close.mnemonic=F tutti.multiPostImportLog.close.tip=Fermer la popup -tutti.multiPostImportLog.message=Des lots n'ont pas été importés car des lots existants avaient déjà les mêmes espèces et catégorie de tri +tutti.multiPostImportLog.inertWeight=Poids inerte trié \: %s kg +tutti.multiPostImportLog.livingNotItemizedWeight=Poids vivant non détaillé \: %s kg +tutti.multiPostImportLog.message=Des données n'ont pas été importées car ces données avaient déjà été saisies \: tutti.multiPostImportLog.title=Lots non importés +tutti.multiPostImportLog.totalSortedWeight=Poids total trié \: %s kg +tutti.multiPostImportLog.totalWeight=Poids total \: %s kg tutti.property.get.error=Propriété %1s non trouvée sur l'objet de type %2s tutti.property.set.error=Propriété %1s non trouvée sur l'objet de type %2s tutti.sampleOrder.caracteristicNotFound=La caractéristique d'id %s n'est pas prévue pour l’échantillonnage