Author: tchemit Date: 2013-09-21 16:47:57 +0200 (Sat, 21 Sep 2013) New Revision: 1198 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1198 Log: refs #3297: [DONNEES INDIVIDUELLES] g?\195?\169rer les colonnes du tableau dans le protocole (tableau dynamique ok) fixes #3304: [DONNEES INDIVIDUELLES] Utilisation du code campagne sur les esp?\195?\168ces fixes #3303: [DONNEES INDIVIDUELLES] liste des esp?\195?\168ces possibles. Saisie au km Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicColumnIdentifier.java Removed: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 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/individualobservation/IndividualObservationBatchRowModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.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/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.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 Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/PersistenceService.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -485,17 +485,17 @@ return driver.getDeadOrAliveCaracteristic(); } - @Override - public Caracteristic getSampleIdCaracteristic() { - return driver.getSampleIdCaracteristic(); - } +// @Override +// public Caracteristic getSampleIdCaracteristic() { +// return driver.getSampleIdCaracteristic(); +// } +// +// @Override +// public Caracteristic getOtolitheIdCaracteristic() { +// return driver.getOtolitheIdCaracteristic(); +// } @Override - public Caracteristic getOtolitheIdCaracteristic() { - return driver.getOtolitheIdCaracteristic(); - } - - @Override public Caracteristic getPmfmIdCaracteristic() { return driver.getPmfmIdCaracteristic(); } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiDataContext.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -154,6 +154,8 @@ protected List<Gear> scientificGears; + protected List<Caracteristic> defaultIndividualObservationCaracteristics; + protected PersistenceService service; TuttiDataContext() { @@ -684,6 +686,31 @@ return scientificGears; } + public List<Caracteristic> getDefaultIndividualObservationCaracteristics() { + if (defaultIndividualObservationCaracteristics == null) { + + if (log.isInfoEnabled()) { + log.info("Loading defaultIndividualObservationCaracteristics"); + } + List<Caracteristic> list ; + if (isProtocolFilled()) { + List<String> individualObservationPmfmId = getProtocol().getIndividualObservationPmfmId(); + list = Lists.newArrayListWithCapacity(individualObservationPmfmId.size()); + for (String id : individualObservationPmfmId) { + Caracteristic caracteristic = service.getCaracteristic(Integer.valueOf(id)); + list.add(caracteristic); + } + } else { + // no default caracteristics to use + list = Lists.newArrayList(); + } + + defaultIndividualObservationCaracteristics = + Collections.unmodifiableList(list); + } + return defaultIndividualObservationCaracteristics; + } + public void resetCruise() { cruise = null; } @@ -691,6 +718,7 @@ public void resetProtocol() { protocol = null; lengthStepCaracteristics = null; + defaultIndividualObservationCaracteristics=null; } public void resetGears() { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRow.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -47,10 +47,10 @@ public static final String LENGTH_STEP_CARACTERISTIC = "lengthStepCaracteristic"; - public static final String SAMPLING_CODE = "samplingCode"; +// public static final String SAMPLING_CODE = "samplingCode"; +// +// public static final String CALCIFIED_PIECE_SAMPLING_CODE = "calcifiedPieceSamplingCode"; - public static final String CALCIFIED_PIECE_SAMPLING_CODE = "calcifiedPieceSamplingCode"; - public static final String COMMENT = "comment"; protected String batchId; @@ -63,10 +63,10 @@ protected Caracteristic lengthStepCaracteristic; - protected String samplingCode; +// protected String samplingCode; +// +// protected String calcifiedPieceSamplingCode; - protected String calcifiedPieceSamplingCode; - protected String comment; public String getBatchId() { @@ -109,22 +109,22 @@ this.lengthStepCaracteristic = lengthStepCaracteristic; } - public String getSamplingCode() { - return samplingCode; - } +// public String getSamplingCode() { +// return samplingCode; +// } +// +// public void setSamplingCode(String samplingCode) { +// this.samplingCode = samplingCode; +// } +// +// public String getCalcifiedPieceSamplingCode() { +// return calcifiedPieceSamplingCode; +// } +// +// public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) { +// this.calcifiedPieceSamplingCode = calcifiedPieceSamplingCode; +// } - public void setSamplingCode(String samplingCode) { - this.samplingCode = samplingCode; - } - - public String getCalcifiedPieceSamplingCode() { - return calcifiedPieceSamplingCode; - } - - public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) { - this.calcifiedPieceSamplingCode = calcifiedPieceSamplingCode; - } - public String getComment() { return comment; } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/IndividualObservationRowModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -92,10 +92,10 @@ Caracteristic.PROPERTY_ID, caracteristicMap); - newColumnForImportExport(IndividualObservationRow.SAMPLING_CODE); +// newColumnForImportExport(IndividualObservationRow.SAMPLING_CODE); +// +// newColumnForImportExport(IndividualObservationRow.CALCIFIED_PIECE_SAMPLING_CODE); - newColumnForImportExport(IndividualObservationRow.CALCIFIED_PIECE_SAMPLING_CODE); - newColumnForImportExport(IndividualObservationRow.COMMENT); } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportService.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostExportService.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -318,8 +318,8 @@ row.setWeight(batch.getWeight()); row.setSize(batch.getSize()); row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic()); - row.setSamplingCode(batch.getSamplingCode()); - row.setCalcifiedPieceSamplingCode(batch.getCalcifiedPieceSamplingCode()); +// row.setSamplingCode(batch.getSamplingCode()); +// row.setCalcifiedPieceSamplingCode(batch.getCalcifiedPieceSamplingCode()); row.setComment(batch.getComment()); rows.add(row); Deleted: 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportExportService.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -1,1647 +0,0 @@ -package fr.ifremer.tutti.service.catches.multipost; - -/* - * #%L - * Tutti :: Service - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.google.common.base.Charsets; -import com.google.common.base.Function; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ListMultimap; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.io.Files; -import fr.ifremer.tutti.TuttiBusinessException; -import fr.ifremer.tutti.TuttiIOUtil; -import fr.ifremer.tutti.TuttiTechnicalException; -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.CatchBatch; -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.SpeciesBatch; -import fr.ifremer.tutti.persistence.entities.data.SpeciesBatchFrequency; -import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; -import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; -import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.service.AbstractTuttiService; -import fr.ifremer.tutti.service.DecoratorService; -import fr.ifremer.tutti.service.PersistenceService; -import fr.ifremer.tutti.service.TuttiDataContext; -import fr.ifremer.tutti.service.TuttiServiceContext; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang3.ObjectUtils; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; -import org.nuiton.csv.Export; -import org.nuiton.csv.Import; -import org.nuiton.util.ZipUtil; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.Reader; -import java.io.Serializable; -import java.io.Writer; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import static org.nuiton.i18n.I18n._; - -/** - * Service to export batches from a satellite post or import batches into a master post. - * - * @author kmorin <kmorin@codelutin.com> - * @since 2.2 - * @deprecated since 2.5, too long, too bad :( - */ -@Deprecated -public class TuttiMultiPostImportExportService extends AbstractTuttiService { - -// 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"; - - protected static final String SPECIES_FILE = "species.csv"; - - protected static final String BENTHOS_FILE = "benthos.csv"; - - protected static final String MARINE_LITTER_FILE = "marineLitter.csv"; - - protected static final String INDIVIDUAL_OBSERVATION_FILE = "individualObservation.csv"; - - protected static final String ACCIDENTAL_CATCHES_FILE = "accidentalCatches.csv"; - - protected static final String FREQUENCIES_FILE = "frequencies.csv"; - - protected static final String CARACTERISTIC_FILE = "caracteristics.csv"; - - protected static final String WEIGHTS_FILE = "weights.csv"; - - protected PersistenceService persistenceService; - - protected DecoratorService decoratorService; - - protected char csvSeparator; - -// protected List<SampleCategoryEnum> samplingOrder; - - @Override - public void setServiceContext(TuttiServiceContext context) { - super.setServiceContext(context); - persistenceService = getService(PersistenceService.class); - decoratorService = getService(DecoratorService.class); - - csvSeparator = context.getConfig().getCsvSeparator(); - -// Map<Integer, SampleCategoryEnum> idMapping = SampleCategoryEnum.toIdMapping(); -// -// samplingOrder = Lists.newArrayList(); -// -// // always first sampling category -// samplingOrder.add(SampleCategoryEnum.sortedUnsorted); -// -// for (Integer categoryId : context.getConfig().getSamplingOrderIds()) { -// SampleCategoryEnum categoryEnum = idMapping.get(categoryId); -// if (SampleCategoryEnum.sortedUnsorted != categoryEnum) { -// samplingOrder.add(categoryEnum); -// } -// } - } - - /** - * Export species batches. - * - * @param file the file to export the batches into - * @param operation the operation to export - */ - public void exportSpecies(File file, FishingOperation operation) { - - String operationId = operation.getId(); - if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - - BatchContainer<SpeciesBatch> speciesBatchContainer = - persistenceService.getRootSpeciesBatch(operationId, null); - - 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()); - exportOperation(weights, operation); - - exportCatches(file, SPECIES_FILE, weights, rows, frequencyRows, attachmentRows); - } - } - - /** - * Export benthos batches. - * - * @param file the file to export the batches into - * @param operation the operation to export - */ - public void exportBenthos(File file, FishingOperation operation) { - - String operationId = operation.getId(); - if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - - BatchContainer<BenthosBatch> benthosBatchContainer = - persistenceService.getRootBenthosBatch(operationId, null); - - 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()); - exportOperation(weights, operation); - - exportCatches(file, BENTHOS_FILE, weights, rows, frequencyRows, attachmentRows); - } - } - - /** - * Export marine litter batches. - * - * @param file the file to export the batches into - * @param operation the operation to export - */ - public void exportMarineLitter(File file, FishingOperation operation) { - - String operationId = operation.getId(); - if (persistenceService.isFishingOperationWithCatchBatch(operationId)) { - - BatchContainer<MarineLitterBatch> marineLitterBatchContainer = - persistenceService.getRootMarineLitterBatch(operationId); - - List<MarineLitterRow> rows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); - - for (MarineLitterBatch batch : marineLitterBatchContainer.getChildren()) { - MarineLitterRow row = new MarineLitterRow(); - - String id = UUID.randomUUID().toString(); - row.setBatchId(id); - - row.setCategory(batch.getMarineLitterCategory()); - row.setSizeCategory(batch.getMarineLitterSizeCategory()); - row.setNumber(batch.getNumber()); - row.setWeight(batch.getWeight()); - row.setComment(batch.getComment()); - - rows.add(row); - - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows); - } - - MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator); - - BufferedWriter writer = null; - File directory = Files.createTempDir(); - List<File> file2zip = Lists.newArrayList(); - - 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); - } - - // export weight - CatchBatch catchBatch = persistenceService.getCatchBatchFromFishingOperation(operationId); - MarineLitterWeightRow weight = new MarineLitterWeightRow(); - weight.setTotalWeight(catchBatch.getMarineLitterTotalWeight()); - exportOperation(weight, operation); - - MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(csvSeparator); - - 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)); - } - } - } - - /** - * Export individual observation batches. - * - * @param file the file to export the batches into - * @param operation the operation to export - */ - public void exportIndividualObservation(File file, FishingOperation operation) { - List<IndividualObservationBatch> individualObservations = - persistenceService.getAllIndividualObservationBatch(operation.getId()); - - List<IndividualObservationRow> rows = Lists.newArrayList(); - List<CaracteristicRow> caracteristicRows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); - - for (IndividualObservationBatch batch : individualObservations) { - IndividualObservationRow row = new IndividualObservationRow(); - - String id = UUID.randomUUID().toString(); - row.setBatchId(id); - - row.setSpecies(batch.getSpecies()); - row.setWeight(batch.getWeight()); - row.setSize(batch.getSize()); - row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic()); - row.setSamplingCode(batch.getSamplingCode()); - row.setCalcifiedPieceSamplingCode(batch.getCalcifiedPieceSamplingCode()); - row.setComment(batch.getComment()); - - rows.add(row); - - CaracteristicMap caracteristicMap = batch.getCaracteristics(); - for (Caracteristic caracteristic : caracteristicMap.keySet()) { - CaracteristicRow caracteristicRow = new CaracteristicRow(); - caracteristicRow.setBatchId(id); - caracteristicRow.setCaracteristic(caracteristic); - caracteristicRow.setValue(caracteristicMap.get(caracteristic)); - caracteristicRows.add(caracteristicRow); - } - - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.SAMPLE, attachmentRows); - } - - IndividualObservationRowModel csvModel = new IndividualObservationRowModel(csvSeparator); - - BufferedWriter writer = null; - File directory = Files.createTempDir(); - List<File> file2zip = Lists.newArrayList(); - - File individualObservationFile = new File(directory, INDIVIDUAL_OBSERVATION_FILE); - file2zip.add(individualObservationFile); - try { - writer = Files.newWriter(individualObservationFile, 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", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - - CaracteristicRowModel caracteristicCsvModel = new CaracteristicRowModel(csvSeparator); - File caracteristicFile = new File(directory, CARACTERISTIC_FILE); - file2zip.add(caracteristicFile); - try { - writer = Files.newWriter(caracteristicFile, Charsets.UTF_8); - Export export = Export.newExport(caracteristicCsvModel, caracteristicRows); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", caracteristicFile), e); - } finally { - IOUtils.closeQuietly(writer); - } - - // export operation - FishingOperationRow foRow = new FishingOperationRow(); - exportOperation(foRow, operation); - - FishingOperationRowModel foRowModel = new FishingOperationRowModel(csvSeparator); - - File weightFile = new File(directory, WEIGHTS_FILE); - file2zip.add(weightFile); - try { - writer = Files.newWriter(weightFile, Charsets.UTF_8); - Export export = Export.newExport(foRowModel, Lists.newArrayList(foRow)); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.operation.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)); - } - } - - /** - * Export accidental catch batches. - * - * @param file the file to export the batches into - * @param operation the operation to export - */ - public void exportAccidentalCatch(File file, FishingOperation operation) { - List<AccidentalBatch> accidentalCatches = - persistenceService.getAllAccidentalBatch(operation.getId()); - - List<AccidentalCatchRow> rows = Lists.newArrayList(); - List<CaracteristicRow> caracteristicRows = Lists.newArrayList(); - List<AttachmentRow> attachmentRows = Lists.newArrayList(); - - for (AccidentalBatch batch : accidentalCatches) { - AccidentalCatchRow row = new AccidentalCatchRow(); - - String id = UUID.randomUUID().toString(); - row.setBatchId(id); - - row.setSpecies(batch.getSpecies()); - row.setGender(batch.getGender()); - row.setWeight(batch.getWeight()); - row.setSize(batch.getSize()); - row.setLengthStepCaracteristic(batch.getLengthStepCaracteristic()); - row.setDeadOrAlive(batch.getDeadOrAlive()); - row.setComment(batch.getComment()); - - rows.add(row); - - CaracteristicMap caracteristicMap = batch.getCaracteristics(); - for (Caracteristic caracteristic : caracteristicMap.keySet()) { - CaracteristicRow caracteristicRow = new CaracteristicRow(); - caracteristicRow.setBatchId(id); - caracteristicRow.setCaracteristic(caracteristic); - caracteristicRow.setValue(caracteristicMap.get(caracteristic)); - caracteristicRows.add(caracteristicRow); - } - - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.SAMPLE, attachmentRows); - } - - AccidentalCatchRowModel csvModel = new AccidentalCatchRowModel(csvSeparator); - - BufferedWriter writer = null; - File directory = Files.createTempDir(); - List<File> file2zip = Lists.newArrayList(); - - File accidentalCatchesFile = new File(directory, ACCIDENTAL_CATCHES_FILE); - file2zip.add(accidentalCatchesFile); - try { - writer = Files.newWriter(accidentalCatchesFile, 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", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - - CaracteristicRowModel caracteristicCsvModel = new CaracteristicRowModel(csvSeparator); - File caracteristicFile = new File(directory, CARACTERISTIC_FILE); - file2zip.add(caracteristicFile); - try { - writer = Files.newWriter(caracteristicFile, Charsets.UTF_8); - Export export = Export.newExport(caracteristicCsvModel, caracteristicRows); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.batches.error", caracteristicFile), e); - } finally { - IOUtils.closeQuietly(writer); - } - - // export operation - FishingOperationRow foRow = new FishingOperationRow(); - exportOperation(foRow, operation); - - FishingOperationRowModel foRowModel = new FishingOperationRowModel(csvSeparator); - - File weightFile = new File(directory, WEIGHTS_FILE); - file2zip.add(weightFile); - try { - writer = Files.newWriter(weightFile, Charsets.UTF_8); - Export export = Export.newExport(foRowModel, Lists.newArrayList(foRow)); - export.write(writer); - writer.close(); - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.operation.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)); - } - } - - /** - * Import species batches from a satellite post - * - * @param file the file to import the batches from - * @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 Map<String, Object> importSpecies(File file, FishingOperation operation) { - - Map<String, Object> notImportedData = Maps.newHashMap(); - final Map<String, SpeciesBatch> notImportedBatches = Maps.newLinkedHashMap(); - - BatchContainer<SpeciesBatch> speciesBatches = - persistenceService.getRootSpeciesBatch(operation.getId(), null); - - TuttiDataContext dataContext = context.getDataContext(); - List<Species> speciesList = dataContext.getReferentSpecies(); - - // map containing the batches by their persistence id - final Map<String, SpeciesBatch> batches = Maps.newHashMap(); - - File tempDir = Files.createTempDir(); - - try { - ZipUtil.uncompress(file, tempDir); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.uncompress.error", file)); - } - - //check operation - CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(csvSeparator); - checkSameOperation(tempDir, weightsModel, operation); - - // Import batches - - File speciesFile = new File(tempDir, SPECIES_FILE); - - Reader reader = null; - try { - reader = Files.newReader(speciesFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", speciesFile), e); - } - - CatchRowModel csvModel = new CatchRowModel(csvSeparator, - speciesList); - - Import<CatchRow> importer = Import.newImport(csvModel, reader); - - for (CatchRow row : importer) { - - // create batch - SpeciesBatch batch = TuttiBeanFactory.newSpeciesBatch(); - batch.setFishingOperation(operation); - - Species species = row.getSpecies(); - batch.setSpecies(row.getSpecies()); - batch.setWeight(row.getWeight()); - batch.setNumber(row.getNumber()); - batch.setComment(row.getComment()); - batch.setSpeciesToConfirm(row.isToConfirm()); - - Pair<Integer, Serializable> valueAndCategoryType = getValueAndCategoryType(row); - Integer categoryId = valueAndCategoryType.getKey(); - Serializable value = valueAndCategoryType.getValue(); - - batch.setSampleCategoryId(categoryId); - batch.setSampleCategoryValue(value); - batch.setSampleCategoryWeight(row.getCategoryWeight()); - - // get parent batch - String parentId = row.getParentId(); - String parentPersistedId = null; - SpeciesBatch parent = null; - if (StringUtils.isNotEmpty(parentId)) { - parent = batches.get(parentId); - parentPersistedId = parent.getId(); - } - - SpeciesBatch existingBatch = null; - List<SpeciesBatch> batchesToBrowse; - if (parent == null) { - batchesToBrowse = speciesBatches.getChildren(); - } else { - batchesToBrowse = parent.getChildBatchs(); - } - - // check if the parent has already a batch with the caracteristic value - // and if the children batch are categorized with the same caracterstic - if (batchesToBrowse != null) { - for (SpeciesBatch sb : batchesToBrowse) { - if (sb.getSpecies().equals(species) - && (!sb.getSampleCategoryId().equals(batch.getSampleCategoryId()) - || sb.getSampleCategoryValue().equals(value))) { - - existingBatch = sb; - batches.put(row.getId(), sb); - notImportedBatches.put(row.getId(), batch); - break; - } - } - } - - if (existingBatch == null) { - batch = persistenceService.createSpeciesBatch(batch, parentPersistedId); - batches.put(row.getId(), batch); - } - } - - // Import frequencies - - File frequencyFile = new File(tempDir, FREQUENCIES_FILE); - try { - reader = Files.newReader(frequencyFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.frequencies.error", frequencyFile), e); - } - - CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(csvSeparator, - dataContext.getCaracteristics()); - - Import<CatchFrequencyRow> frequencyImporter = Import.newImport(frequencyModel, reader); - - ListMultimap<String, SpeciesBatchFrequency> frequencyMap = ArrayListMultimap.create(); - - for (CatchFrequencyRow frequencyRow : frequencyImporter) { - if (notImportedBatches.get(frequencyRow.getBatchId()) == null) { - SpeciesBatch batch = batches.get(frequencyRow.getBatchId()); - if (batch != null) { - SpeciesBatchFrequency frequency = TuttiBeanFactory.newSpeciesBatchFrequency(); - frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); - frequency.setLengthStep(frequencyRow.getLengthStep()); - frequency.setNumber(frequencyRow.getNumber()); - frequency.setWeight(frequencyRow.getWeight()); - frequency.setBatch(batch); - frequencyMap.put(batch.getId(), frequency); - } - } - } - for (String batchId : frequencyMap.keySet()) { - List<SpeciesBatchFrequency> frequencies = frequencyMap.get(batchId); - persistenceService.saveSpeciesBatchFrequency(batchId, frequencies); - } - - // Import attachments - Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() { - @Override - public Integer apply(AttachmentRow input) { - Integer result = null; - if (notImportedBatches.get(input.getBatchId()) == null) { - SpeciesBatch batch = batches.get(input.getBatchId()); - if (batch != null) { - result = batch.getIdAsInt(); - } - } - return result; - } - }; - importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - - // 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); - } - - 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; - } - - /** - * Import benthos batches from a satellite post - * - * @param file the file to import the batches from - * @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 Map<String, Object> importBenthos(File file, FishingOperation operation) { - - Map<String, Object> notImportedData = Maps.newHashMap(); - final Map<String, BenthosBatch> notImportedBatches = Maps.newLinkedHashMap(); - - BatchContainer<BenthosBatch> benthosBatches = - persistenceService.getRootBenthosBatch(operation.getId(), null); - - TuttiDataContext dataContext = context.getDataContext(); - List<Species> speciesList = dataContext.getReferentSpecies(); - - // map containing the batches by their persistence id - final Map<String, BenthosBatch> batches = Maps.newHashMap(); - - File tempDir = Files.createTempDir(); - try { - ZipUtil.uncompress(file, tempDir); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.uncompress.error", file)); - } - - //check operation - CatchWeightsRowModel weightsModel = new CatchWeightsRowModel(csvSeparator); - checkSameOperation(tempDir, weightsModel, operation); - - // Import batches - - File benthosFile = new File(tempDir, BENTHOS_FILE); - - Reader reader = null; - try { - reader = Files.newReader(benthosFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", benthosFile), e); - } - - CatchRowModel csvModel = new CatchRowModel(csvSeparator, - speciesList); - - Import<CatchRow> importer = Import.newImport(csvModel, reader); - - for (CatchRow row : importer) { - - // create batch - BenthosBatch batch = TuttiBeanFactory.newBenthosBatch(); - batch.setFishingOperation(operation); - - Species species = row.getSpecies(); - batch.setSpecies(row.getSpecies()); - batch.setWeight(row.getWeight()); - batch.setNumber(row.getNumber()); - batch.setComment(row.getComment()); - batch.setSpeciesToConfirm(row.isToConfirm()); - - Pair<Integer, Serializable> valueAndCategoryType = getValueAndCategoryType(row); - Integer categoryId = valueAndCategoryType.getKey(); - Serializable value = valueAndCategoryType.getValue(); - - batch.setSampleCategoryId(categoryId); -// batch.setSampleCategoryType(categoryType); - batch.setSampleCategoryValue(value); - batch.setSampleCategoryWeight(row.getCategoryWeight()); - - // get parent batch - String parentId = row.getParentId(); - String parentPersistedId = null; - BenthosBatch parent = null; - if (StringUtils.isNotEmpty(parentId)) { - parent = batches.get(parentId); - parentPersistedId = parent.getId(); - } - - BenthosBatch existingBatch = null; - List<BenthosBatch> batchesToBrowse; - if (parent == null) { - batchesToBrowse = benthosBatches.getChildren(); - } else { - batchesToBrowse = parent.getChildBatchs(); - } - - // check if the parent has already a batch with the caracteristic value - // and if the children batch are categorized with the same caracterstic - if (batchesToBrowse != null) { - for (BenthosBatch bb : batchesToBrowse) { - if (bb.getSpecies().equals(species) - && (!bb.getSampleCategoryId().equals(batch.getSampleCategoryId()) - || bb.getSampleCategoryValue().equals(value))) { - - existingBatch = bb; - batches.put(row.getId(), bb); - notImportedBatches.put(row.getId(), batch); - break; - } - } - } - - if (existingBatch == null) { - batch = persistenceService.createBenthosBatch(batch, parentPersistedId); - batches.put(row.getId(), batch); - } - } - - // Import frequencies - - File frequencyFile = new File(tempDir, FREQUENCIES_FILE); - try { - reader = Files.newReader(frequencyFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.frequencies.error", frequencyFile), e); - } - - CatchFrequencyRowModel frequencyModel = new CatchFrequencyRowModel(csvSeparator, - dataContext.getCaracteristics()); - - Import<CatchFrequencyRow> frequencyImporter = Import.newImport(frequencyModel, reader); - - ListMultimap<String, BenthosBatchFrequency> frequencyMap = ArrayListMultimap.create(); - - for (CatchFrequencyRow frequencyRow : frequencyImporter) { - if (notImportedBatches.get(frequencyRow.getBatchId()) == null) { - BenthosBatch batch = batches.get(frequencyRow.getBatchId()); - if (batch != null) { - BenthosBatchFrequency frequency = TuttiBeanFactory.newBenthosBatchFrequency(); - frequency.setLengthStepCaracteristic(frequencyRow.getLengthStepCaracteristic()); - frequency.setLengthStep(frequencyRow.getLengthStep()); - frequency.setNumber(frequencyRow.getNumber()); - frequency.setWeight(frequencyRow.getWeight()); - frequency.setBatch(batch); - frequencyMap.put(batch.getId(), frequency); - } - } - } - for (String batchId : frequencyMap.keySet()) { - List<BenthosBatchFrequency> frequencies = frequencyMap.get(batchId); - persistenceService.saveBenthosBatchFrequency(batchId, frequencies); - } - - // Import attachments - Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() { - @Override - public Integer apply(AttachmentRow input) { - Integer result = null; - if (notImportedBatches.get(input.getBatchId()) == null) { - BenthosBatch batch = batches.get(input.getBatchId()); - if (batch != null) { - result = batch.getIdAsInt(); - } - } - return result; - } - }; - importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - - // 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); - } - - 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; - } - - /** - * Import marine litter batches from a satellite post - * - * @param file the file to import the batches from - * @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 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(operationId); - - // map containing the batches by their persistence id - final Map<String, MarineLitterBatch> batches = Maps.newHashMap(); - - File tempDir = Files.createTempDir(); - try { - ZipUtil.uncompress(file, tempDir); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.uncompress.error", file)); - } - - //check operation - MarineLitterWeightRowModel weightModel = new MarineLitterWeightRowModel(csvSeparator); - checkSameOperation(tempDir, weightModel, operation); - - // Import batches - - File marineLitterFile = new File(tempDir, MARINE_LITTER_FILE); - - Reader reader = null; - try { - reader = Files.newReader(marineLitterFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", marineLitterFile), e); - } - - List<CaracteristicQualitativeValue> categoryValues = - persistenceService.getMarineLitterCategoryCaracteristic().getQualitativeValue(); - List<CaracteristicQualitativeValue> sizeCategoryValues = - persistenceService.getMarineLitterSizeCategoryCaracteristic().getQualitativeValue(); - - MarineLitterRowModel csvModel = new MarineLitterRowModel(csvSeparator, - categoryValues, - sizeCategoryValues); - - Import<MarineLitterRow> importer = Import.newImport(csvModel, reader); - - for (MarineLitterRow row : importer) { - - // create batch - MarineLitterBatch batch = TuttiBeanFactory.newMarineLitterBatch(); - batch.setFishingOperation(operation); - - batch.setWeight(row.getWeight()); - batch.setNumber(row.getNumber()); - batch.setComment(row.getComment()); - batch.setMarineLitterCategory(row.getCategory()); - batch.setMarineLitterSizeCategory(row.getSizeCategory()); - - MarineLitterBatch existingBatch = null; - List<MarineLitterBatch> batchesToBrowse = marineLitterBatches.getChildren(); - - // check if the parent has already a batch with the caracteristic value - // and if the children batch are categorized with the same caracterstic - if (batchesToBrowse != null) { - for (MarineLitterBatch mlb : batchesToBrowse) { - if (mlb.getMarineLitterCategory().equals(batch.getMarineLitterCategory()) - && mlb.getMarineLitterSizeCategory().equals(batch.getMarineLitterSizeCategory())) { - - existingBatch = mlb; - batches.put(row.getBatchId(), mlb); - notImportedBatches.put(row.getBatchId(), batch); - break; - } - } - } - - if (existingBatch == null) { - batch = persistenceService.createMarineLitterBatch(batch); - batches.put(row.getBatchId(), batch); - } - } - - // Import attachments - Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() { - @Override - public Integer apply(AttachmentRow input) { - Integer result = null; - if (notImportedBatches.get(input.getBatchId()) == null) { - MarineLitterBatch batch = batches.get(input.getBatchId()); - if (batch != null) { - result = batch.getIdAsInt(); - } - } - return result; - } - }; - importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.BATCH); - - // 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); - } - - 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; - } - - /** - * Import individual observation batches from a satellite post - * - * @param file the file to import the batches from - * @param operation the operation in which to add the batches - */ - public void importIndividualObservation(File file, FishingOperation operation) { - - // map containing the batches by their persistence id - final Map<String, IndividualObservationBatch> batches = Maps.newLinkedHashMap(); - - File tempDir = Files.createTempDir(); - try { - ZipUtil.uncompress(file, tempDir); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.uncompress.error", file)); - } - - //check operation - FishingOperationRowModel operationModel = new FishingOperationRowModel(csvSeparator); - checkSameOperation(tempDir, operationModel, operation); - - // Import batches - - File observationFile = new File(tempDir, INDIVIDUAL_OBSERVATION_FILE); - - Reader reader = null; - try { - reader = Files.newReader(observationFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", observationFile), e); - } - - TuttiDataContext dataContext = context.getDataContext(); - List<Species> speciesList = dataContext.getReferentSpecies(); - List<Caracteristic> caracteristics = dataContext.getCaracteristicWithProtected(); - - IndividualObservationRowModel csvModel = new IndividualObservationRowModel(csvSeparator, - speciesList, - caracteristics); - Import<IndividualObservationRow> importer = Import.newImport(csvModel, reader); - - for (IndividualObservationRow row : importer) { - - // create batch - IndividualObservationBatch batch = TuttiBeanFactory.newIndividualObservationBatch(); - batch.setFishingOperation(operation); - - batch.setSpecies(row.getSpecies()); - batch.setWeight(row.getWeight()); - batch.setSize(row.getSize()); - batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); - batch.setSamplingCode(row.getSamplingCode()); - batch.setCalcifiedPieceSamplingCode(row.getCalcifiedPieceSamplingCode()); - batch.setComment(row.getComment()); - batch.setCaracteristics(new CaracteristicMap()); - - batches.put(row.getBatchId(), batch); - } - - // Import caracteristics - - File caracteristicFile = new File(tempDir, CARACTERISTIC_FILE); - try { - reader = Files.newReader(caracteristicFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.caracteristics.error", caracteristicFile), e); - } - - CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(csvSeparator, - caracteristics); - - Import<CaracteristicRow> caracteristicImporter = Import.newImport(caracteristicModel, reader); - - for (CaracteristicRow caracteristicRow : caracteristicImporter) { - IndividualObservationBatch batch = batches.get(caracteristicRow.getBatchId()); - if (batch != null) { - Caracteristic caracteristic = caracteristicRow.getCaracteristic(); - Serializable value = caracteristicRow.getValue(); - - switch (caracteristic.getCaracteristicType()) { - case QUALITATIVE: - value = TuttiEntities.getQualitativeValue(caracteristic, Integer.parseInt(value.toString())); - break; - - case NUMBER: - value = Float.parseFloat(value.toString()); - break; - } - CaracteristicMap map = batch.getCaracteristics(); - map.put(caracteristic, value); - } - } - for (IndividualObservationBatch batch : batches.values()) { - persistenceService.createIndividualObservationBatch(batch); - } - - // Import attachments - Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() { - @Override - public Integer apply(AttachmentRow input) { - Integer result = null; - IndividualObservationBatch batch = batches.get(input.getBatchId()); - if (batch != null) { - result = batch.getIdAsInt(); - } - return result; - } - }; - importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.SAMPLE); - } - - /** - * Import accidental catches batches from a satellite post - * - * @param file the file to import the batches from - * @param operation the operation in which to add the batches - */ - public void importAccidentalCatches(File file, FishingOperation operation) { - - // map containing the batches by their persistence id - final Map<String, AccidentalBatch> batches = Maps.newLinkedHashMap(); - - File tempDir = Files.createTempDir(); - try { - ZipUtil.uncompress(file, tempDir); - } catch (IOException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.uncompress.error", file)); - } - - //check operation - FishingOperationRowModel operationModel = new FishingOperationRowModel(csvSeparator); - checkSameOperation(tempDir, operationModel, operation); - - // Import batches - - File accidentalFile = new File(tempDir, ACCIDENTAL_CATCHES_FILE); - - Reader reader = null; - try { - reader = Files.newReader(accidentalFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.batches.error", accidentalFile), e); - } - - TuttiDataContext dataContext = context.getDataContext(); - List<Species> speciesList = dataContext.getReferentSpecies(); - List<CaracteristicQualitativeValue> genderValues = dataContext.getGenderValues(); - List<Caracteristic> caracteristics = dataContext.getCaracteristicWithProtected(); - List<CaracteristicQualitativeValue> dedOrAliveValues = dataContext.getDeadOrAliveValues(); - - AccidentalCatchRowModel csvModel = new AccidentalCatchRowModel(csvSeparator, - speciesList, - genderValues, - caracteristics, - dedOrAliveValues); - Import<AccidentalCatchRow> importer = Import.newImport(csvModel, reader); - - for (AccidentalCatchRow row : importer) { - - // create batch - AccidentalBatch batch = TuttiBeanFactory.newAccidentalBatch(); - batch.setFishingOperation(operation); - - batch.setSpecies(row.getSpecies()); - batch.setGender(row.getGender()); - batch.setWeight(row.getWeight()); - batch.setSize(row.getSize()); - batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); - batch.setDeadOrAlive(row.getDeadOrAlive()); - batch.setComment(row.getComment()); - batch.setCaracteristics(new CaracteristicMap()); - - batches.put(row.getBatchId(), batch); - } - - // Import caracteristics - - File caracteristicFile = new File(tempDir, CARACTERISTIC_FILE); - try { - reader = Files.newReader(caracteristicFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.caracteristics.error", caracteristicFile), e); - } - - CaracteristicRowModel caracteristicModel = new CaracteristicRowModel(csvSeparator, - caracteristics); - - Import<CaracteristicRow> caracteristicImporter = Import.newImport(caracteristicModel, reader); - - for (CaracteristicRow caracteristicRow : caracteristicImporter) { - AccidentalBatch batch = batches.get(caracteristicRow.getBatchId()); - if (batch != null) { - Caracteristic caracteristic = caracteristicRow.getCaracteristic(); - Serializable value = caracteristicRow.getValue(); - - switch (caracteristic.getCaracteristicType()) { - case QUALITATIVE: - value = TuttiEntities.getQualitativeValue(caracteristic, Integer.parseInt(value.toString())); - break; - - case NUMBER: - value = Float.parseFloat(value.toString()); - break; - } - CaracteristicMap map = batch.getCaracteristics(); - map.put(caracteristic, value); - } - } - for (AccidentalBatch batch : batches.values()) { - persistenceService.createAccidentalBatch(batch); - } - - // Import attachments - Function<AttachmentRow, Integer> getObjetcIdFunction = new Function<AttachmentRow, Integer>() { - @Override - public Integer apply(AttachmentRow input) { - Integer result = null; - AccidentalBatch batch = batches.get(input.getBatchId()); - if (batch != null) { - result = batch.getIdAsInt(); - } - return result; - } - }; - importAttachments(tempDir, getObjetcIdFunction, AttachementObjectTypeEnum.SAMPLE); - } - - /* - * Protected methods - */ - - 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); - 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 { - 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", file), e); - } finally { - IOUtils.closeQuietly(writer); - } - - File frequencyFile = new File(directory, FREQUENCIES_FILE); - file2zip.add(frequencyFile); - try { - writer = Files.newWriter(frequencyFile, Charsets.UTF_8); - Export export = Export.newExport(csvFrequencyModel, frequencyRows); - export.write(writer); - writer.close(); - - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.frequencies.error", frequencyFile), 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)); - } - } - - protected void createSpeciesRow(SpeciesBatch batch, - String parentId, - List<CatchRow> rows, - List<CatchFrequencyRow> frequencyRows, - List<AttachmentRow> attachmentRows) { - CatchRow row = new CatchRow(); - - String id = UUID.randomUUID().toString(); - row.setId(id); - row.setParentId(parentId); - row.setSpecies(batch.getSpecies()); - - row.setCategoryId(batch.getSampleCategoryId()); - row.setCategoryValue(batch.getSampleCategoryValue()); - -// switch (batch.getSampleCategoryType()) { -// case sortedUnsorted: -// row.setSortedUnsortedSampleCategory(batch.getSampleCategoryValue()); -// break; -// case sex: -// row.setSexSampleCategory(batch.getSampleCategoryValue()); -// break; -// case size: -// row.setSizeSampleCategory(batch.getSampleCategoryValue()); -// break; -// case maturity: -// row.setMaturitySampleCategory(batch.getSampleCategoryValue()); -// break; -// case age: -// row.setAgeSampleCategory(batch.getSampleCategoryValue()); -// break; -// } - row.setCategoryWeight(batch.getSampleCategoryWeight()); - row.setWeight(batch.getWeight()); - row.setNumber(batch.getNumber()); - row.setComment(batch.getComment()); - row.setToConfirm(batch.isSpeciesToConfirm()); - - rows.add(row); - - addFrequencies(id, batch.getId(), frequencyRows); - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows); - - for (SpeciesBatch child : batch.getChildBatchs()) { - createSpeciesRow(child, id, rows, frequencyRows, attachmentRows); - } - } - - protected void createBenthosRow(BenthosBatch batch, - String parentId, - List<CatchRow> rows, - List<CatchFrequencyRow> frequencyRows, - List<AttachmentRow> attachmentRows) { - CatchRow row = new CatchRow(); - - String id = UUID.randomUUID().toString(); - row.setId(id); - row.setParentId(parentId); - row.setSpecies(batch.getSpecies()); - - row.setCategoryId(batch.getSampleCategoryId()); - row.setCategoryValue(batch.getSampleCategoryValue()); - -// switch (batch.getSampleCategoryType()) { -// case sortedUnsorted: -// row.setSortedUnsortedSampleCategory(batch.getSampleCategoryValue()); -// break; -// case sex: -// row.setSexSampleCategory(batch.getSampleCategoryValue()); -// break; -// case size: -// row.setSizeSampleCategory(batch.getSampleCategoryValue()); -// break; -// case maturity: -// row.setMaturitySampleCategory(batch.getSampleCategoryValue()); -// break; -// case age: -// row.setAgeSampleCategory(batch.getSampleCategoryValue()); -// break; -// } - row.setCategoryWeight(batch.getSampleCategoryWeight()); - row.setWeight(batch.getWeight()); - row.setNumber(batch.getNumber()); - row.setComment(batch.getComment()); - row.setToConfirm(batch.isSpeciesToConfirm()); - - rows.add(row); - - addFrequencies(id, batch.getId(), frequencyRows); - addAttachments(id, batch.getIdAsInt(), AttachementObjectTypeEnum.BATCH, attachmentRows); - - for (BenthosBatch child : batch.getChildBatchs()) { - createBenthosRow(child, id, rows, frequencyRows, attachmentRows); - } - } - - protected void exportOperation(AbstractFishingOperationRow afoRow, FishingOperation operation) { - afoRow.setStationNumber(operation.getStationNumber()); - afoRow.setOperationNumber(operation.getFishingOperationNumber()); - afoRow.setMultirigAggregation(operation.getMultirigAggregation()); - afoRow.setDate(operation.getGearShootingStartDate()); - } - - protected void exportAttachments(File directory, List<File> file2zip, List<AttachmentRow> attachmentRows) { - - AttachmentRowModel csvAttachmentModel = new AttachmentRowModel(csvSeparator); - - File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY); - attachmentDirectory.mkdir(); - file2zip.add(attachmentDirectory); - for (AttachmentRow attachmentRow : attachmentRows) { - File attachmentFile = attachmentRow.getFile(); - File destFile = new File(attachmentDirectory, attachmentFile.getName()); - TuttiIOUtil.copyFile(attachmentFile, - destFile, - _("tutti.service.multipost.attachment.copy.error", attachmentFile)); - file2zip.add(destFile); - } - - File attachmentFile = new File(directory, ATTACHMENTS_FILE); - file2zip.add(attachmentFile); - Writer writer = null; - try { - writer = Files.newWriter(attachmentFile, Charsets.UTF_8); - Export export = Export.newExport(csvAttachmentModel, attachmentRows); - export.write(writer); - writer.close(); - - } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.export.attachments.error", attachmentFile), e); - } finally { - IOUtils.closeQuietly(writer); - } - } - - protected void addFrequencies(String rowId, - String batchId, - List<CatchFrequencyRow> frequencyRows) { - List<SpeciesBatchFrequency> frequencies = - persistenceService.getAllSpeciesBatchFrequency(batchId); - for (SpeciesBatchFrequency frequency : frequencies) { - CatchFrequencyRow frequencyRow = new CatchFrequencyRow(); - frequencyRow.setBatchId(rowId); - frequencyRow.setLengthStepCaracteristic(frequency.getLengthStepCaracteristic()); - frequencyRow.setLengthStep(frequency.getLengthStep()); - frequencyRow.setNumber(frequency.getNumber()); - frequencyRow.setWeight(frequency.getWeight()); - frequencyRows.add(frequencyRow); - } - } - - protected void addAttachments(String batchId, - int objectId, - AttachementObjectTypeEnum objectType, - List<AttachmentRow> attachmentRows) { - List<Attachment> attachments = - persistenceService.getAllAttachments(objectType, objectId); - for (Attachment attachment : attachments) { - AttachmentRow attachmentRow = new AttachmentRow(); - attachmentRow.setBatchId(batchId); - attachmentRow.setName(attachment.getName()); - attachmentRow.setComment(attachment.getComment()); - attachmentRow.setFile(persistenceService.getAttachmentFile(attachment.getId())); - attachmentRows.add(attachmentRow); - } - } - - protected Pair<Integer, Serializable> getValueAndCategoryType(CatchRow row) { - -// String sortedUnsortedValue = (String) row.getSortedUnsortedSampleCategory(); -// String sizeValue = (String) row.getSizeSampleCategory(); -// String sexValue = (String) row.getSexSampleCategory(); -// String maturityValue = (String) row.getMaturitySampleCategory(); -// String ageValue = (String) row.getAgeSampleCategory(); - - Serializable value = row.getCategoryValue(); - Integer categoryId = row.getCategoryId(); -// SampleCategoryEnum categoryType = null; -// -// if (StringUtils.isNotEmpty(sortedUnsortedValue)) { -// Integer id = Integer.parseInt(sortedUnsortedValue); -// Caracteristic caracteristic = persistenceService.getSortedUnsortedCaracteristic(); -// value = TuttiEntities.getQualitativeValue(caracteristic, id); -// categoryType = SampleCategoryEnum.sortedUnsorted; -// -// } else if (StringUtils.isNotEmpty(sizeValue)) { -// Integer id = Integer.parseInt(sizeValue); -// Caracteristic caracteristic = persistenceService.getSizeCategoryCaracteristic(); -// value = TuttiEntities.getQualitativeValue(caracteristic, id); -// categoryType = SampleCategoryEnum.size; -// -// } else if (StringUtils.isNotEmpty(sexValue)) { -// Integer id = Integer.parseInt(sexValue); -// Caracteristic caracteristic = persistenceService.getSexCaracteristic(); -// value = TuttiEntities.getQualitativeValue(caracteristic, id); -// categoryType = SampleCategoryEnum.sex; -// -// } else if (StringUtils.isNotEmpty(maturityValue)) { -// Integer id = Integer.parseInt(maturityValue); -// Caracteristic caracteristic = persistenceService.getMaturityCaracteristic(); -// value = TuttiEntities.getQualitativeValue(caracteristic, id); -// categoryType = SampleCategoryEnum.maturity; -// -// } else if (StringUtils.isNotEmpty(ageValue)) { -// categoryType = SampleCategoryEnum.age; -// value = Float.parseFloat(ageValue); -// } - -// return new Object[]{categoryType, value}; - return Pair.of(categoryId, value); - } - - protected void importAttachments(File directory, - Function<AttachmentRow, Integer> getObjetcIdFunction, - AttachementObjectTypeEnum objectType) { - File attachmentFile = new File(directory, ATTACHMENTS_FILE); - File attachmentDirectory = new File(directory, ATTACHMENTS_DIRECTORY); - Reader reader; - - try { - reader = Files.newReader(attachmentFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.attachments.error", attachmentFile), e); - } - - AttachmentRowModel attachmentModel = new AttachmentRowModel(csvSeparator, attachmentDirectory); - - Import<AttachmentRow> attachmentImporter = Import.newImport(attachmentModel, reader); - - for (AttachmentRow row : attachmentImporter) { - Integer objectId = getObjetcIdFunction.apply(row); - if (objectId != null) { - Attachment attachment = TuttiBeanFactory.newAttachment(); - attachment.setName(row.getName()); - attachment.setComment(row.getComment()); - attachment.setObjectType(objectType); - - attachment.setObjectId(objectId); - - persistenceService.createAttachment(attachment, row.getFile()); - } - } - } - - protected void checkSameOperation(File directory, - AbstractFishingOperationRowModel fishingOperationRowModel, - FishingOperation operation) { - File operationFile = new File(directory, WEIGHTS_FILE); - Reader reader; - - try { - reader = Files.newReader(operationFile, Charsets.UTF_8); - - } catch (FileNotFoundException e) { - throw new TuttiTechnicalException(_("tutti.service.multipost.import.operation.error", operationFile), e); - } - - Import<AbstractFishingOperationRow> fishingOperationImporter = Import.newImport(fishingOperationRowModel, reader); - - Iterator<AbstractFishingOperationRow> iterator = fishingOperationImporter.iterator(); - if (iterator.hasNext()) { - AbstractFishingOperationRow row = iterator.next(); - if (ObjectUtils.notEqual(row.getStationNumber(), operation.getStationNumber()) - || ObjectUtils.notEqual(row.getOperationNumber(), operation.getFishingOperationNumber()) - || ObjectUtils.notEqual(row.getMultirigAggregation(), operation.getMultirigAggregation()) - || ObjectUtils.notEqual(row.getDate(), operation.getGearShootingStartDate())) { - - throw new TuttiBusinessException(_("tutti.service.multipost.import.wrongOperation.error", - decoratorService.getDecoratorByType(FishingOperation.class) - .toString(operation))); - } - } - } -} Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportService.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/catches/multipost/TuttiMultiPostImportService.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -932,8 +932,8 @@ batch.setWeight(row.getWeight()); batch.setSize(row.getSize()); batch.setLengthStepCaracteristic(row.getLengthStepCaracteristic()); - batch.setSamplingCode(row.getSamplingCode()); - batch.setCalcifiedPieceSamplingCode(row.getCalcifiedPieceSamplingCode()); +// batch.setSamplingCode(row.getSamplingCode()); +// batch.setCalcifiedPieceSamplingCode(row.getCalcifiedPieceSamplingCode()); batch.setComment(row.getComment()); batch.setCaracteristics(new CaracteristicMap()); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/IndividualObservationExportModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -32,7 +32,6 @@ import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Gear; import fr.ifremer.tutti.persistence.entities.referential.Species; -import fr.ifremer.tutti.persistence.entities.referential.Vessel; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.apache.commons.collections.CollectionUtils; @@ -50,24 +49,24 @@ */ public class IndividualObservationExportModel extends TuttiCsvUtil.AbstractTuttiExportModel<IndividualObservationExportRow> { - protected final Caracteristic caracteristicSample; +// protected final Caracteristic caracteristicSample; +// +// protected final Caracteristic caracteristicOtolithe; - protected final Caracteristic caracteristicOtolithe; - protected final Caracteristic caracteristicWeight; protected final Caracteristic caracteristicPmfmId; public IndividualObservationExportModel( char separator, - Caracteristic caracteristicSample, - Caracteristic caracteristicOtolithe, +// Caracteristic caracteristicSample, +// Caracteristic caracteristicOtolithe, Caracteristic caracteristicWeight, Caracteristic caracteristicPmfmId) { super(separator); - this.caracteristicSample = caracteristicSample; - this.caracteristicOtolithe = caracteristicOtolithe; +// this.caracteristicSample = caracteristicSample; +// this.caracteristicOtolithe = caracteristicOtolithe; this.caracteristicWeight = caracteristicWeight; this.caracteristicPmfmId = caracteristicPmfmId; @@ -99,24 +98,24 @@ if (CollectionUtils.isNotEmpty(observations)) { for (IndividualObservationBatch child : observations) { - addCaracteristicRow(rows, - cruise, - operation, - child, - caracteristicSample, - child.getSamplingCode()); +// addCaracteristicRow(rows, +// cruise, +// operation, +// child, +// caracteristicSample, +// child.getSamplingCode()); +// +// addCaracteristicRow(rows, +// cruise, +// operation, +// child, +// caracteristicOtolithe, +// child.getCalcifiedPieceSamplingCode()); addCaracteristicRow(rows, cruise, operation, child, - caracteristicOtolithe, - child.getCalcifiedPieceSamplingCode()); - - addCaracteristicRow(rows, - cruise, - operation, - child, caracteristicWeight, child.getWeight()); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/export/TuttiExportService.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -103,10 +103,10 @@ protected SampleCategoryModel sampleCategoryModel; - protected Caracteristic sampleIdCaracteristic; +// protected Caracteristic sampleIdCaracteristic; +// +// protected Caracteristic otolitheIdCaracteristic; - protected Caracteristic otolitheIdCaracteristic; - protected Caracteristic deadOrAliveCaracteristic; protected Caracteristic genderCaracteristic; @@ -128,8 +128,8 @@ verticalOpeningCaracteristic = persistenceService.getVerticalOpeningCaracteristic(); horizontalOpeningWingCaracteristic = persistenceService.getHorizontalOpeningWingCaracteristic(); horizontalOpeningDoorCaracteristic = persistenceService.getHorizontalOpeningDoorCaracteristic(); - sampleIdCaracteristic = persistenceService.getSampleIdCaracteristic(); - otolitheIdCaracteristic = persistenceService.getOtolitheIdCaracteristic(); +// sampleIdCaracteristic = persistenceService.getSampleIdCaracteristic(); +// otolitheIdCaracteristic = persistenceService.getOtolitheIdCaracteristic(); weightMeasuredCaracteristic = persistenceService.getWeightMeasuredCaracteristic(); pmfmIdCaracteristic = persistenceService.getPmfmIdCaracteristic(); deadOrAliveCaracteristic = persistenceService.getDeadOrAliveCaracteristic(); @@ -233,8 +233,8 @@ verticalOpeningCaracteristic, horizontalOpeningWingCaracteristic, horizontalOpeningDoorCaracteristic, - sampleIdCaracteristic, - otolitheIdCaracteristic, +// sampleIdCaracteristic, +// otolitheIdCaracteristic, weightMeasuredCaracteristic, deadOrAliveCaracteristic, genderCaracteristic, @@ -671,8 +671,8 @@ Caracteristic verticalOpeningCaracteristic, Caracteristic horizontalOpeningWingCaracteristic, Caracteristic horizontalOpeningDoorCaracteristic, - Caracteristic sampleIdCaracteristic, - Caracteristic otolitheIdCaracteristic, +// Caracteristic sampleIdCaracteristic, +// Caracteristic otolitheIdCaracteristic, Caracteristic weightMeasuredCaracteristic, Caracteristic deadOrAliveCaracteristic, Caracteristic genderCaracteristic, @@ -743,8 +743,8 @@ pmfmIdCaracteristic); individualObservationModel = new IndividualObservationExportModel( csvSeparator, - sampleIdCaracteristic, - otolitheIdCaracteristic, +// sampleIdCaracteristic, +// otolitheIdCaracteristic, weightMeasuredCaracteristic, pmfmIdCaracteristic); Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-en.properties 2013-09-21 14:47:57 UTC (rev 1198) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Sep 20 11:03:34 CEST 2013 +#Sat Sep 21 15:16:31 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -26,6 +26,8 @@ tutti.createIndividualObservationBatch.action.addSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.cancel.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.save.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.createIndividualObservationBatch.action.saveAndClose.help= +tutti.createIndividualObservationBatch.action.saveAndContinue.help= tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSize.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesFields Modified: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-09-21 14:47:57 UTC (rev 1198) @@ -1,5 +1,5 @@ #Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo -#Fri Sep 20 11:03:34 CEST 2013 +#Sat Sep 21 15:16:31 CEST 2013 tutti.config.help=config.html tutti.createAccidentalBatch.action.cancel.help=editFishingOperation.html\#captureCapturesAccidentellesActions tutti.createAccidentalBatch.action.saveAndClose.help=editFishingOperation.html\#captureCapturesAccidentellesActions @@ -25,7 +25,8 @@ tutti.createBenthosBatch.help=editFishingOperation.html\#captureBenthos tutti.createIndividualObservationBatch.action.addSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.action.cancel.help=editFishingOperation.html\#captureObservationsIndividuellesActions -tutti.createIndividualObservationBatch.action.save.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.createIndividualObservationBatch.action.saveAndClose.help=editFishingOperation.html\#captureObservationsIndividuellesActions +tutti.createIndividualObservationBatch.action.saveAndContinue.help=editFishingOperation.html\#captureObservationsIndividuellesActions tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSize.help=editFishingOperation.html\#captureObservationsIndividuellesFields tutti.createIndividualObservationBatch.field.individualObservationSpecies.help=editFishingOperation.html\#captureObservationsIndividuellesFields Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -25,6 +25,7 @@ */ import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; import fr.ifremer.tutti.persistence.entities.data.Attachment; @@ -366,7 +367,7 @@ { // Other caracteristics column addColumnToModel(columnModel, - CaracteristicMapCellComponent.newEditor(ui), + CaracteristicMapCellComponent.newEditor(ui, Sets.<Caracteristic>newHashSet()), CaracteristicMapCellComponent.newRender(getContext()), IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/ImportMultiPostAction.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -27,7 +27,7 @@ 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.service.catches.multipost.TuttiMultiPostImportExportService; +import fr.ifremer.tutti.service.catches.multipost.TuttiMultiPostImportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; @@ -89,7 +89,7 @@ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); Collection<BenthosBatch> notImportedBenthosBatches = - (Collection<BenthosBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + (Collection<BenthosBatch>) notImportedData.get(TuttiMultiPostImportService.BATCHES_KEY); StringBuffer stringBuffer = new StringBuffer(); Float totalSortedWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_BENTHOS_TOTAL_SORTED_WEIGHT); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchRowModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -37,6 +37,7 @@ import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; +import java.io.Serializable; import java.util.Collection; import java.util.List; @@ -49,6 +50,8 @@ private static final long serialVersionUID = 1L; + public static final String PROPERTY_DEFAULT_CARACTERISTICS = "defaultCaracteristics"; + /** * Delegate edit object. * @@ -64,6 +67,13 @@ */ protected final List<Attachment> attachment = Lists.newArrayList(); + /** + * Map of default caracteristics (used if filled in the protocol. + * + * @since 2.5 + */ + protected CaracteristicMap defaultCaracteristics = new CaracteristicMap(); + protected static final Binder<IndividualObservationBatch, IndividualObservationBatchRowModel> fromBeanBinder = BinderFactory.newBinder(IndividualObservationBatch.class, IndividualObservationBatchRowModel.class); @@ -76,15 +86,41 @@ super(IndividualObservationBatch.class, fromBeanBinder, toBeanBinder); } - public IndividualObservationBatchRowModel(IndividualObservationBatch aBatch) { + public IndividualObservationBatchRowModel(IndividualObservationBatch aBatch, + Collection<Caracteristic> defaultCaracteristicsSet) { this(); fromBean(aBatch); Float weightInG = getWeight(); if (weightInG != null) { setWeight(weightInG * 1000.0f); } + if (getCaracteristics() == null) { + setCaracteristics(new CaracteristicMap()); + } + + // move default caracteristics from caracteristic map + CaracteristicMap caracteristics = getCaracteristics(); + for (Caracteristic caracteristic : defaultCaracteristicsSet) { + if (caracteristics.containsKey(caracteristic)) { + Serializable value = caracteristics.remove(caracteristic); + defaultCaracteristics.put(caracteristic, value); + } + } } + public CaracteristicMap getDefaultCaracteristics() { + return defaultCaracteristics; + } + + public void setDefaultCaracteristics(CaracteristicMap defaultCaracteristics) { + this.defaultCaracteristics = defaultCaracteristics; + firePropertyChange(PROPERTY_DEFAULT_CARACTERISTICS, null, defaultCaracteristics); + } + + //------------------------------------------------------------------------// + //-- AbstractTuttiBeanUIModel --// + //------------------------------------------------------------------------// + @Override protected IndividualObservationBatch newEntity() { return TuttiBeanFactory.newIndividualObservationBatch(); @@ -164,31 +200,31 @@ firePropertyChange(PROPERTY_CARACTERISTICS, oldValue, caracteristics); } - @Override - public String getSamplingCode() { - return editObject.getSamplingCode(); - } +// @Override +// public String getSamplingCode() { +// return editObject.getSamplingCode(); +// } +// +// @Override +// public void setSamplingCode(String samplingCode) { +// Object oldValue = getSamplingCode(); +// editObject.setSamplingCode(samplingCode); +// firePropertyChange(PROPERTY_SAMPLING_CODE, oldValue, samplingCode); +// } +// +// @Override +// public String getCalcifiedPieceSamplingCode() { +// return editObject.getCalcifiedPieceSamplingCode(); +// } +// +// @Override +// public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) { +// Object oldValue = getCalcifiedPieceSamplingCode(); +// editObject.setCalcifiedPieceSamplingCode(calcifiedPieceSamplingCode); +// firePropertyChange(PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, oldValue, calcifiedPieceSamplingCode); +// } @Override - public void setSamplingCode(String samplingCode) { - Object oldValue = getSamplingCode(); - editObject.setSamplingCode(samplingCode); - firePropertyChange(PROPERTY_SAMPLING_CODE, oldValue, samplingCode); - } - - @Override - public String getCalcifiedPieceSamplingCode() { - return editObject.getCalcifiedPieceSamplingCode(); - } - - @Override - public void setCalcifiedPieceSamplingCode(String calcifiedPieceSamplingCode) { - Object oldValue = getCalcifiedPieceSamplingCode(); - editObject.setCalcifiedPieceSamplingCode(calcifiedPieceSamplingCode); - firePropertyChange(PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, oldValue, calcifiedPieceSamplingCode); - } - - @Override public String getComment() { return editObject.getComment(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchTableModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -61,16 +61,16 @@ n_("tutti.editIndividualObservationBatch.table.header.otherCaracteristics"), n_("tutti.editIndividualObservationBatch.table.header.otherCaracteristics.tip")); - public static final ColumnIdentifier<IndividualObservationBatchRowModel> CALCIFIED_PIECE_SAMPLING_CODE = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, - n_("tutti.editIndividualObservationBatch.table.header.calcifiedPieceSamplingCode"), - n_("tutti.editIndividualObservationBatch.table.header.calcifiedPieceSamplingCode.tip")); +// public static final ColumnIdentifier<IndividualObservationBatchRowModel> CALCIFIED_PIECE_SAMPLING_CODE = ColumnIdentifier.newId( +// IndividualObservationBatchRowModel.PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, +// n_("tutti.editIndividualObservationBatch.table.header.calcifiedPieceSamplingCode"), +// n_("tutti.editIndividualObservationBatch.table.header.calcifiedPieceSamplingCode.tip")); +// +// public static final ColumnIdentifier<IndividualObservationBatchRowModel> SAMPLING_CODE = ColumnIdentifier.newId( +// IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE, +// n_("tutti.editIndividualObservationBatch.table.header.samplingCode"), +// n_("tutti.editIndividualObservationBatch.table.header.samplingCode.tip")); - public static final ColumnIdentifier<IndividualObservationBatchRowModel> SAMPLING_CODE = ColumnIdentifier.newId( - IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE, - n_("tutti.editIndividualObservationBatch.table.header.samplingCode"), - n_("tutti.editIndividualObservationBatch.table.header.samplingCode.tip")); - public static final ColumnIdentifier<IndividualObservationBatchRowModel> COMMENT = ColumnIdentifier.newId( IndividualObservationBatchRowModel.PROPERTY_COMMENT, n_("tutti.editIndividualObservationBatch.table.header.comment"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIHandler.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -23,12 +23,14 @@ */ import com.google.common.collect.Lists; -import fr.ifremer.tutti.PropagatePropertyChangeListener; +import com.google.common.collect.Sets; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.ValidationService; @@ -49,6 +51,7 @@ import fr.ifremer.tutti.ui.swing.util.comment.CommentCellEditor; import fr.ifremer.tutti.ui.swing.util.comment.CommentCellRenderer; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; +import fr.ifremer.tutti.ui.swing.util.table.CaracteristicColumnIdentifier; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; @@ -66,8 +69,12 @@ import javax.swing.JComponent; import java.awt.Color; import java.awt.Component; +import java.io.Serializable; import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.Set; /** * @author kmorin <kmorin@codelutin.com> @@ -89,8 +96,9 @@ IndividualObservationBatchRowModel.PROPERTY_SIZE, IndividualObservationBatchRowModel.PROPERTY_LENGTH_STEP_CARACTERISTIC, IndividualObservationBatchRowModel.PROPERTY_CARACTERISTICS, - IndividualObservationBatchRowModel.PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, - IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE, + IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, +// IndividualObservationBatchRowModel.PROPERTY_CALCIFIED_PIECE_SAMPLING_CODE, +// IndividualObservationBatchRowModel.PROPERTY_SAMPLING_CODE, IndividualObservationBatchRowModel.PROPERTY_COMMENT, IndividualObservationBatchRowModel.PROPERTY_ATTACHMENT); } @@ -123,6 +131,17 @@ persistenceService.getAllIndividualObservationBatch(bean.getId()); for (IndividualObservationBatch aBatch : batches) { + + // set the surveycode + if (getDataContext().isProtocolFilled()) { + // get the surveycode from the species list of the model + List<Species> speciesList = getDataContext().getReferentSpeciesWithSurveyCode(); + int i = speciesList.indexOf(aBatch.getSpecies()); + if (i > -1) { + aBatch.setSpecies(speciesList.get(i)); + } + } + IndividualObservationBatchRowModel entry = loadBatch(aBatch); rows.add(entry); } @@ -135,7 +154,8 @@ protected IndividualObservationBatchRowModel loadBatch(IndividualObservationBatch aBatch) { IndividualObservationBatchRowModel newRow = - new IndividualObservationBatchRowModel(aBatch); + new IndividualObservationBatchRowModel( + aBatch, getModel().getDefaultCaracteristic()); List<Attachment> attachments = persistenceService.getAllAttachments(newRow.getObjectType(), @@ -277,18 +297,24 @@ log.debug("beforeInit: " + ui); } + // get the default caracteristics + List<Caracteristic> defaultCaracteristic = + getDataContext().getDefaultIndividualObservationCaracteristics(); + + // create model EditCatchesUIModel catchesUIModel = ui.getContextValue(EditCatchesUIModel.class); - - IndividualObservationBatchUIModel model = new IndividualObservationBatchUIModel(catchesUIModel); + IndividualObservationBatchUIModel model = + new IndividualObservationBatchUIModel(catchesUIModel, + defaultCaracteristic); ui.setContextValue(model); - // propagate when value is changing - PropagatePropertyChangeListener.listenAndPropagate( - catchesUIModel, - model, - EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, - EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT); +// // propagate when value is changing +// PropagatePropertyChangeListener.listenAndPropagate( +// catchesUIModel, +// model, +// EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT, +// EditCatchesUIModel.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT); } @Override @@ -311,13 +337,16 @@ Decorator<Caracteristic> caracteristicDecorator = getDecorator(Caracteristic.class, null); + Decorator<CaracteristicQualitativeValue> caracteristicQualitativeDecorator = + getDecorator(CaracteristicQualitativeValue.class, null); + { // Species column Decorator<Species> speciesDecorator = getDecorator( Species.class, DecoratorService.FROM_PROTOCOL); addComboDataColumnToModel(columnModel, IndividualObservationBatchTableModel.SPECIES, - speciesDecorator, getDataContext().getReferentSpecies()); + speciesDecorator, getDataContext().getReferentSpeciesWithSurveyCode()); } { // Weight column @@ -342,27 +371,70 @@ } - { // Other caracteristics column + List<Caracteristic> defaultCaracteristic = + getModel().getDefaultCaracteristic(); - addColumnToModel(columnModel, - CaracteristicMapCellComponent.newEditor(ui), - CaracteristicMapCellComponent.newRender(getContext()), - IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); - } + for (Caracteristic caracteristic : defaultCaracteristic) { + String header = caracteristicDecorator.toString(caracteristic); - { // Calcified piece sampling code column + CaracteristicColumnIdentifier id = CaracteristicColumnIdentifier.newCaracteristicId( + caracteristic, + IndividualObservationBatchRowModel.PROPERTY_DEFAULT_CARACTERISTICS, + header, + header + ); - addColumnToModel(columnModel, - IndividualObservationBatchTableModel.CALCIFIED_PIECE_SAMPLING_CODE); + switch (caracteristic.getCaracteristicType()) { + + case NUMBER: + + addFloatColumnToModel(columnModel, + id, + TuttiUI.DECIMAL3_PATTERN); + + break; + case QUALITATIVE: + List<CaracteristicQualitativeValue> values = + caracteristic.getQualitativeValue(); + addComboDataColumnToModel( + columnModel, + id, + caracteristicQualitativeDecorator, + values); + break; + case TEXT: + + addColumnToModel(columnModel, id); + + break; + } } - { // Sampling code column + { // Other caracteristics column + Set<Caracteristic> caracteristicsToSkip = Collections.unmodifiableSet( + Sets.newHashSet(getModel().getDefaultCaracteristic())); + addColumnToModel(columnModel, - IndividualObservationBatchTableModel.SAMPLING_CODE); + CaracteristicMapCellComponent.newEditor(ui, caracteristicsToSkip), + CaracteristicMapCellComponent.newRender(getContext()), + IndividualObservationBatchTableModel.OTHER_CARACTERISTICS); + } +// { // Calcified piece sampling code column +// +// addColumnToModel(columnModel, +// IndividualObservationBatchTableModel.CALCIFIED_PIECE_SAMPLING_CODE); +// } +// +// { // Sampling code column +// +// addColumnToModel(columnModel, +// IndividualObservationBatchTableModel.SAMPLING_CODE); +// } + { // Comment column addColumnToModel(columnModel, @@ -443,6 +515,7 @@ newRow.setWeight(model.getWeight()); newRow.setSize(model.getSize()); newRow.setLengthStepCaracteristic(model.getLengthStepCaracteristic()); + newRow.getDefaultCaracteristics().putAll(model.getCaracteristics()); recomputeRowValidState(newRow); @@ -478,6 +551,19 @@ IndividualObservationBatch catchBean = row.toBean(); + // use a new instance of caracteristicMap + CaracteristicMap caracteristics = CaracteristicMap.copy(catchBean.getCaracteristics()); + catchBean.setCaracteristics(caracteristics); + + // push back default caracteristics + CaracteristicMap defaultCaracteristics = row.getDefaultCaracteristics(); + for (Map.Entry<Caracteristic, Serializable> entry : defaultCaracteristics.entrySet()) { + Serializable value = entry.getValue(); + if (value != null) { + caracteristics.put(entry.getKey(), value); + } + } + FishingOperation fishingOperation = getModel().getFishingOperation(); catchBean.setFishingOperation(fishingOperation); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/IndividualObservationBatchUIModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -22,6 +22,7 @@ * #L% */ +import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.ui.swing.content.operation.AbstractTuttiBatchUIModel; @@ -29,6 +30,8 @@ import fr.ifremer.tutti.ui.swing.util.TabContentModel; import org.apache.commons.collections.CollectionUtils; +import java.util.List; + import static org.nuiton.i18n.I18n.n_; /** @@ -45,9 +48,20 @@ /** Can user remove a selected batch? */ protected boolean removeBatchEnabled; - public IndividualObservationBatchUIModel(EditCatchesUIModel catchesUIModel) { + /** + * Default caracteristics coming from protocol. + * + * @since 2.5 + */ + protected final List<Caracteristic> defaultCaracteristic; + + public IndividualObservationBatchUIModel(EditCatchesUIModel catchesUIModel, + List<Caracteristic> defaultCaracteristic) { super(catchesUIModel, EditCatchesUIModel.PROPERTY_BATCH_UPDATED); + this.defaultCaracteristic = defaultCaracteristic == null ? + Lists.<Caracteristic>newArrayList() : + Lists.newArrayList(defaultCaracteristic); } public boolean isRemoveBatchEnabled() { @@ -60,6 +74,10 @@ firePropertyChange(PROPERTY_REMOVE_BATCH_ENABLED, oldValue, removeBatchEnabled); } + public List<Caracteristic> getDefaultCaracteristic() { + return defaultCaracteristic; + } + public Species getLastSpeciesUsed() { Species result = null; if (!rows.isEmpty()) { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.css 2013-09-21 14:47:57 UTC (rev 1198) @@ -97,15 +97,24 @@ _help: {"tutti.createIndividualObservationBatch.action.addSpecies.help"}; } -#saveButton { +#saveAndContinueButton { actionIcon: save; - text: "tutti.createIndividualObservationBatch.action.save"; - toolTipText: "tutti.createIndividualObservationBatch.action.save.tip"; - i18nMnemonic: "tutti.createIndividualObservationBatch.action.save.mnemonic"; + text: "tutti.createIndividualObservationBatch.action.saveAndContinue"; + toolTipText: "tutti.createIndividualObservationBatch.action.saveAndContinue.tip"; + i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic"; enabled: {model.isValid()}; - _help: {"tutti.createIndividualObservationBatch.action.save.help"}; + _help: {"tutti.createIndividualObservationBatch.action.saveAndContinue.help"}; } +#saveAndCloseButton { + actionIcon: save; + text: "tutti.createIndividualObservationBatch.action.saveAndClose"; + toolTipText: "tutti.createIndividualObservationBatch.action.saveAndClose.tip"; + i18nMnemonic: "tutti.createIndividualObservationBatch.action.saveAndClose.mnemonic"; + enabled: {model.isValid()}; + _help: {"tutti.createIndividualObservationBatch.action.saveAndClose.help"}; +} + #cancelButton { actionIcon: cancel; text: "tutti.createIndividualObservationBatch.action.cancel"; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUI.jaxx 2013-09-21 14:47:57 UTC (rev 1198) @@ -128,6 +128,7 @@ <!-- Form Actions --> <JPanel layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> - <JButton id='saveButton' onActionPerformed='handler.save()'/> + <JButton id='saveAndContinueButton' onActionPerformed='handler.saveAndContinue()'/> + <JButton id='saveAndCloseButton' onActionPerformed='handler.saveAndClose()'/> </JPanel> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIHandler.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -25,15 +25,20 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.Species; +import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUIHandler; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchRowModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.individualobservation.IndividualObservationBatchUIModel; +import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.Cancelable; import fr.ifremer.tutti.ui.swing.util.TuttiUI; @@ -41,6 +46,7 @@ import fr.ifremer.tutti.ui.swing.util.species.SelectSpeciesUIModel; import jaxx.runtime.SwingUtil; import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -50,6 +56,7 @@ import java.beans.PropertyChangeListener; import java.util.List; import java.util.Map; +import java.util.Set; /** * @author kmorin <kmorin@codelutin.com> @@ -72,7 +79,13 @@ @Override public void beforeInitUI() { - CreateIndividualObservationBatchUIModel model = new CreateIndividualObservationBatchUIModel(); + + // get the default caracteristics + List<Caracteristic> defaultCaracteristic = + getDataContext().getDefaultIndividualObservationCaracteristics(); + + CreateIndividualObservationBatchUIModel model = + new CreateIndividualObservationBatchUIModel(defaultCaracteristic); ui.setContextValue(model); listModelIsModify(model); } @@ -84,7 +97,8 @@ initBeanFilterableComboBox(ui.getIndividualObservationSpeciesComboBox(), Lists.newArrayList(getDataContext().getReferentSpeciesWithSurveyCode()), - null); + null, + DecoratorService.FROM_PROTOCOL); List<Caracteristic> lengthStepCaracteristics = getDataContext().getLengthStepCaracteristics(); initBeanFilterableComboBox(ui.getIndividualObservationLengthStepCaracteristicComboBox(), @@ -177,17 +191,118 @@ model.reset(); - model.setSpecies(batchModel.getLastSpeciesUsed()); + // compute list of available species + List<Species> speciesListWithSurveyCode = + getDataContext().getReferentSpeciesWithSurveyCode(); + +// Map<String, Species> speciesMap = +// TuttiEntities.splitById(speciesListWithSurveyCode); + + List<Species> speciesList; + + EditCatchesUI parent = + SwingUtil.getParentContainer(ui, EditCatchesUI.class); + List<SpeciesBatchRowModel> speciesRows = + parent.getSpeciesTabContent().getModel().getRows(); + if (CollectionUtils.isNotEmpty(speciesRows)) { + + // use species from species batch + Set<Species> speciesSet = Sets.newHashSet(); + for (SpeciesBatchRowModel row : speciesRows) { + if (row.isBatchRoot()) { + Species species = row.getSpecies(); + speciesSet.add(species); + } + } + + // plus readd the species filled here (individualObservations) + List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); + + if (CollectionUtils.isNotEmpty(rows)) { + for (IndividualObservationBatchRowModel row : rows) { + Species species = row.getSpecies(); + speciesSet.add(species); + } + } + speciesList = Lists.newArrayList(speciesSet); + if (log.isInfoEnabled()) { + log.info("Use speciesBatch + individualObservation species : " + speciesList.size()); + } + } else { + + if (getDataContext().isProtocolFilled()) { + + // using protocol species + speciesList = Lists.newArrayList(speciesListWithSurveyCode); + + // readd the species filled here (individualObservations) + List<IndividualObservationBatchRowModel> rows = batchModel.getRows(); + + if (CollectionUtils.isNotEmpty(rows)) { + for (IndividualObservationBatchRowModel row : rows) { + + Species species = row.getSpecies(); + if (!speciesList.contains(species)) { + speciesList.add(species); + } + } + } + + if (log.isInfoEnabled()) { + log.info("Use protocol + individualObservation species : " + speciesList.size()); + } + } else { + + // no species batch, no protocol use all possible species + speciesList = speciesListWithSurveyCode; + + if (log.isInfoEnabled()) { + log.info("Use all species : " + speciesList.size()); + } + } + } + model.setAvailableSpecies(speciesList); + + // set last species filled here + Species lastSpeciesUsed = batchModel.getLastSpeciesUsed(); + model.setSpecies(lastSpeciesUsed); +// if (lastSpeciesUsed != null) { +// +// // use the version with surveycode +// Species species = speciesMap.get(lastSpeciesUsed.getId()); +// if (species == null) { +// +// speciesMap = TuttiEntities.splitById(speciesList); +// species = speciesMap.get(lastSpeciesUsed.getId()); +// } +// +// model.setSpecies(lastSpeciesUsed); +// } model.setLengthStepCaracteristic(batchModel.getLastLengthStepCaracteristicUsed()); + } - model.setAvailableSpecies(getDataContext().getReferentSpeciesWithSurveyCode()); + public void saveAndContinue() { + + if (log.isDebugEnabled()) { + log.debug("Save And Continue UI " + ui); + } + + EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); + IndividualObservationBatchUI individualObservationTabContent = parent.getIndividualObservationTabContent(); + individualObservationTabContent.getHandler().addBatch(getModel()); + + // re-open dialog + openUI(individualObservationTabContent.getModel()); + + // set focus to weight field + ui.getIndividualObservationWeightField().grabFocus(); } - public void save() { + public void saveAndClose() { if (log.isDebugEnabled()) { - log.debug("Save UI " + ui); + log.debug("Save And Close UI " + ui); } EditCatchesUI parent = SwingUtil.getParentContainer(ui, EditCatchesUI.class); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/individualobservation/create/CreateIndividualObservationBatchUIModel.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -22,6 +22,8 @@ * #L% */ +import com.google.common.collect.Lists; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.TuttiBeanFactory; import fr.ifremer.tutti.persistence.entities.data.IndividualObservationBatch; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; @@ -36,7 +38,7 @@ * @author kmorin <kmorin@codelutin.com> * @since 1.4 */ -public class CreateIndividualObservationBatchUIModel extends AbstractTuttiBeanUIModel<CreateIndividualObservationBatchUIModel, CreateIndividualObservationBatchUIModel> { +public class CreateIndividualObservationBatchUIModel extends AbstractTuttiBeanUIModel<IndividualObservationBatch, CreateIndividualObservationBatchUIModel> { private static final long serialVersionUID = 1L; @@ -59,8 +61,17 @@ protected final IndividualObservationBatch editObject = TuttiBeanFactory.newIndividualObservationBatch(); - public CreateIndividualObservationBatchUIModel() { - super(CreateIndividualObservationBatchUIModel.class, null, null); + /** + * Default caracteristics coming from protocol. + * + * @since 2.5 + */ + protected final List<Caracteristic> defaultCaracteristic; + + public CreateIndividualObservationBatchUIModel(List<Caracteristic> defaultCaracteristic) { + super(IndividualObservationBatch.class, null, null); + this.defaultCaracteristic = defaultCaracteristic; + editObject.setCaracteristics(new CaracteristicMap()); } public Species getSpecies() { @@ -103,6 +114,10 @@ firePropertyChange(IndividualObservationBatch.PROPERTY_LENGTH_STEP_CARACTERISTIC, oldValue, individualObservationLengthStepCaracteristic); } + public CaracteristicMap getCaracteristics() { + return editObject.getCaracteristics(); + } + public List<Species> getAvailableSpecies() { if (log.isDebugEnabled()) { log.debug("getAvailableSpecies " + availableSpecies); @@ -115,20 +130,21 @@ if (log.isDebugEnabled()) { log.debug("setAvailableSpecies " + availableSpecies); } - Object oldValue = getAvailableSpecies(); this.availableSpecies = availableSpecies; - firePropertyChange(PROPERTY_AVAILABLE_SPECIES, oldValue, availableSpecies); + firePropertyChange(PROPERTY_AVAILABLE_SPECIES, null, availableSpecies); } @Override - protected CreateIndividualObservationBatchUIModel newEntity() { - return new CreateIndividualObservationBatchUIModel(); + protected IndividualObservationBatch newEntity() { + return TuttiBeanFactory.newIndividualObservationBatch(); } public void reset() { + setAvailableSpecies(Lists.<Species>newArrayList()); setSpecies(null); setWeight(null); setSize(null); setLengthStepCaracteristic(null); + getCaracteristics().clear(); } } 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/marinelitter/ImportMultiPostAction.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -27,7 +27,7 @@ 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.service.catches.multipost.TuttiMultiPostImportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; @@ -89,7 +89,7 @@ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); Collection<MarineLitterBatch> notImportedMarineLitterBatches = - (Collection<MarineLitterBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + (Collection<MarineLitterBatch>) notImportedData.get(TuttiMultiPostImportService.BATCHES_KEY); StringBuffer stringBuffer = new StringBuffer(); Float totalWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_MARINE_LITTER_TOTAL_WEIGHT); 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/ImportMultiPostAction.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -27,7 +27,7 @@ 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.service.catches.multipost.TuttiMultiPostImportService; import fr.ifremer.tutti.ui.swing.content.operation.catches.AbstractImportMultiPostAction; import fr.ifremer.tutti.ui.swing.content.operation.catches.MultiPostImportLogDialog; @@ -89,7 +89,7 @@ MultiPostImportLogDialog dialog = new MultiPostImportLogDialog((Dialog) getContext().getActionUI()); Collection<SpeciesBatch> notImportedSpeciesBatches = - (Collection<SpeciesBatch>) notImportedData.get(TuttiMultiPostImportExportService.BATCHES_KEY); + (Collection<SpeciesBatch>) notImportedData.get(TuttiMultiPostImportService.BATCHES_KEY); StringBuffer stringBuffer = new StringBuffer(); Float totalSortedWeight = (Float) notImportedData.get(CatchBatch.PROPERTY_SPECIES_TOTAL_SORTED_WEIGHT); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapCellComponent.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -23,6 +23,7 @@ */ import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.CaracteristicMap; import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; @@ -50,7 +51,6 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.Serializable; -import java.util.HashSet; import java.util.Set; import static org.nuiton.i18n.I18n._; @@ -127,8 +127,8 @@ return new CaracteristicMapCellRenderer(context); } - public static TableCellEditor newEditor(TuttiUI ui) { - return new CaracteristicMapCellEditor(ui); + public static TableCellEditor newEditor(TuttiUI ui, Set<Caracteristic> caracteristicsToSkip) { + return new CaracteristicMapCellEditor(ui, caracteristicsToSkip); } public static class CaracteristicMapCellEditor extends AbstractCellEditor implements TableCellEditor { @@ -147,13 +147,18 @@ protected Set<Caracteristic> caracteristicsUsed; + protected Set<Caracteristic> caracteristicsToSkip; + protected Integer rowIndex; protected Integer columnIndex; - public CaracteristicMapCellEditor(TuttiUI ui) { + public CaracteristicMapCellEditor(TuttiUI ui, + Set<Caracteristic> caracteristicsToSkip) { this.ui = ui; - component = new CaracteristicMapCellComponent(ui.getHandler().getContext()); + this.caracteristicsToSkip = caracteristicsToSkip; + component = new CaracteristicMapCellComponent(ui.getHandler().getContext() + ); component.setBorder(new LineBorder(Color.BLACK)); component.addKeyListener(new KeyAdapter() { @Override @@ -189,7 +194,7 @@ // get the caracteristics set to the other rows if (caracteristicsUsed == null) { - caracteristicsUsed = new HashSet<Caracteristic>(); + caracteristicsUsed = Sets.newHashSet(); for (CaracteristicMapColumnRowModel row : tableModel.getRows()) { CaracteristicMap map = row.getCaracteristics(); if (map != null) { @@ -197,9 +202,12 @@ } } } + caracteristicsUsed.removeAll(caracteristicsToSkip); CaracteristicMapColumnUIHandler handler = (CaracteristicMapColumnUIHandler) ui.getHandler(); CaracteristicMapEditorUI caracteristicMapEditor = handler.getCaracteristicMapEditor(); + // remove all default caracteristics (caracteristicsToSkip) + caracteristicMapEditor.getModel().getAvailableCaracteristics().removeAll(caracteristicsToSkip); caracteristicMapEditor.getHandler().editBatch(editRow, this, caracteristicsUsed); handler.showCaracteristicMapEditor(editRow.getSpecies()); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java 2013-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/caracteristics/CaracteristicMapEditorUIHandler.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -127,7 +127,7 @@ initUI(getUI()); initBeanFilterableComboBox(getKeyCombo(), Lists.<Caracteristic>newArrayList(), null); - getModel().setAvailableCaracteristics(getDataContext().getCaracteristicWithProtected()); + getModel().setAvailableCaracteristics(Lists.newArrayList(getDataContext().getCaracteristicWithProtected())); JXTable table = getTable(); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicColumnIdentifier.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicColumnIdentifier.java 2013-09-21 14:47:57 UTC (rev 1198) @@ -0,0 +1,56 @@ +package fr.ifremer.tutti.ui.swing.util.table; + +import com.google.common.base.Preconditions; +import fr.ifremer.tutti.persistence.entities.CaracteristicMap; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; + +import java.io.Serializable; + +/** + * To identify a column that represents a caracteristic. + * + * @author tchemit <chemit@codelutin.com> + * @since 2.5 + */ +public class CaracteristicColumnIdentifier<R> extends ColumnIdentifier<R> { + + private static final long serialVersionUID = 1L; + + public static <R> CaracteristicColumnIdentifier newCaracteristicId( + Caracteristic caracteristic, + String propertyName, + String headerI18nKey, + String headerTipI18nKey) { + + return new CaracteristicColumnIdentifier<R>(caracteristic, propertyName, + headerI18nKey, + headerTipI18nKey + ); + } + + protected Caracteristic caracteristic; + + protected CaracteristicColumnIdentifier(Caracteristic caracteristic, + String propertyName, + String headerI18nKey, + String headerTipI18nKey) { + super(propertyName, headerI18nKey, headerTipI18nKey); + this.caracteristic = caracteristic; + } + + @Override + public Object getValue(R entry) { + CaracteristicMap map = (CaracteristicMap) super.getValue(entry); + Serializable result = map.get(caracteristic); + return result; + } + + @Override + public void setValue(R entry, Object value) { + CaracteristicMap map = (CaracteristicMap) super.getValue(entry); + Preconditions.checkNotNull(map, "caracteristicMap (" + getPropertyName() + ") is null in " + entry); + map.put(caracteristic, (Serializable) value); + // reset the map in bean to fire property + super.setValue(entry, map); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/CaracteristicColumnIdentifier.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision Added: svn:eol-style + native 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-09-21 14:47:57 UTC (rev 1198) @@ -210,6 +210,12 @@ tutti.createIndividualObservationBatch.action.save= tutti.createIndividualObservationBatch.action.save.mnemonic= tutti.createIndividualObservationBatch.action.save.tip= +tutti.createIndividualObservationBatch.action.saveAndClose= +tutti.createIndividualObservationBatch.action.saveAndClose.mnemonic= +tutti.createIndividualObservationBatch.action.saveAndClose.tip= +tutti.createIndividualObservationBatch.action.saveAndContinue= +tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic= +tutti.createIndividualObservationBatch.action.saveAndContinue.tip= tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic= tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.tip= tutti.createIndividualObservationBatch.field.individualObservationSize= 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-09-21 14:45:35 UTC (rev 1197) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-09-21 14:47:57 UTC (rev 1198) @@ -191,9 +191,12 @@ tutti.createIndividualObservationBatch.action.cancel=Annuler tutti.createIndividualObservationBatch.action.cancel.mnemonic=A tutti.createIndividualObservationBatch.action.cancel.tip=Annuler la création de l'observation individuelle -tutti.createIndividualObservationBatch.action.save=Enregistrer -tutti.createIndividualObservationBatch.action.save.mnemonic=E -tutti.createIndividualObservationBatch.action.save.tip=Enregistrer l'observation individuelle +tutti.createIndividualObservationBatch.action.saveAndClose=Créer et Fermer +tutti.createIndividualObservationBatch.action.saveAndClose.mnemonic=F +tutti.createIndividualObservationBatch.action.saveAndClose.tip=Créer l'observation individuelle et fermer +tutti.createIndividualObservationBatch.action.saveAndContinue=Créer et Continuer +tutti.createIndividualObservationBatch.action.saveAndContinue.mnemonic=C +tutti.createIndividualObservationBatch.action.saveAndContinue.tip=Créer et saisir une nouvelle observation indidivuelle tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic=Classe de taille tutti.createIndividualObservationBatch.field.individualObservationLengthStepCaracteristic.tip=Classe de taille tutti.createIndividualObservationBatch.field.individualObservationSize=Taille