Author: kmorin Date: 2013-03-26 19:15:28 +0100 (Tue, 26 Mar 2013) New Revision: 685 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/685 Log: refs #1868 [CAPTURE] - Import/Export PUPITRI Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-03-26 17:14:14 UTC (rev 684) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-03-26 18:15:28 UTC (rev 685) @@ -33,11 +33,23 @@ import com.google.common.collect.Multimaps; import com.google.common.io.Files; import fr.ifremer.tutti.TuttiTechnicalException; +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.CatchBatch; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; +import fr.ifremer.tutti.persistence.entities.data.SexEnum; +import fr.ifremer.tutti.persistence.entities.data.SizeEnum; +import fr.ifremer.tutti.persistence.entities.data.SortedUnsortedEnum; +import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; +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.PersistenceService; +import fr.ifremer.tutti.service.TuttiServiceContext; import fr.ifremer.tutti.service.protocol.TuttiProtocolImportExportService; import java.io.BufferedWriter; import org.apache.commons.io.FileUtils; @@ -67,8 +79,72 @@ private static final Log log = LogFactory.getLog(TuttiPupitriImportExportService.class); - public void importPupitriTrunk(File file, FishingOperation operation, CatchBatch catchBatch) { + protected PersistenceService persistenceService; + protected CaracteristicQualitativeValue sortedCaracteristic; + + protected CaracteristicQualitativeValue unsortedCaracteristic; + + protected CaracteristicQualitativeValue maleCaracteristic; + + protected CaracteristicQualitativeValue femaleCaracteristic; + + protected CaracteristicQualitativeValue smallCaracteristic; + + protected CaracteristicQualitativeValue mediumCaracteristic; + + protected CaracteristicQualitativeValue bigCaracteristic; + + @Override + public void setServiceContext(TuttiServiceContext context) { + super.setServiceContext(context); + persistenceService = getService(PersistenceService.class); + + // get the sorted/unsorted caracteristics + Caracteristic sortedUnsortedcaracteristic = + persistenceService.getSortedUnsortedCaracteristic(); + sortedCaracteristic = SortedUnsortedEnum.SORTED.getValue(sortedUnsortedcaracteristic); + unsortedCaracteristic = SortedUnsortedEnum.UNSORTED.getValue(sortedUnsortedcaracteristic); + + Caracteristic sexCaracteristic = persistenceService.getSexCaracteristic(); + maleCaracteristic = SexEnum.MALE.getValue(sexCaracteristic); + femaleCaracteristic = SexEnum.FEMALE.getValue(sexCaracteristic); + + Caracteristic sizeCaracteristic = persistenceService.getSizeCategoryCaracteristic(); + smallCaracteristic = SizeEnum.SMALL.getValue(sizeCaracteristic); + mediumCaracteristic = SizeEnum.MEDIUM.getValue(sizeCaracteristic); + bigCaracteristic = SizeEnum.BIG.getValue(sizeCaracteristic); + } + + public void importPupitri(File trunkFile, + File carrouselFile, + File speciesFile, + FishingOperation operation, + CatchBatch catchBatch, + List<Species> referentSpecies) { + + importPupitriTrunk(trunkFile, operation, catchBatch); + + importPupitriCarrousel(carrouselFile, speciesFile, operation, catchBatch, referentSpecies); + + addFileAsAttachment(trunkFile, catchBatch); + addFileAsAttachment(carrouselFile, catchBatch); + addFileAsAttachment(speciesFile, catchBatch); + + persistenceService.saveCatchBatch(catchBatch); + } + + protected void addFileAsAttachment(File f, CatchBatch catchBatch) { + Attachment attachment = new Attachment(); + attachment.setObjectType(AttachementObjectTypeEnum.CATCH_BATCH); + attachment.setObjectId(Integer.valueOf(catchBatch.getId())); + attachment.setName(f.getName()); + attachment.setComment("import pupitri"); + persistenceService.createAttachment(attachment, f); + } + + protected void importPupitriTrunk(File file, FishingOperation operation, CatchBatch catchBatch) { + if (log.isInfoEnabled()) { log.info("Will import pupitri operation [" + operation.toString() + "] trunk from file: " + file); @@ -140,7 +216,7 @@ } - public List<PupitriCatch> importPupitriCarrousel(File carrouselFile, + protected void importPupitriCarrousel(File carrouselFile, File speciesFile, FishingOperation operation, CatchBatch catchBatch, @@ -151,7 +227,6 @@ "] carrousel from file: " + carrouselFile); } - List<PupitriCatch> result = Lists.newArrayList(); Reader reader = null; File fileWithHeaders = null; @@ -223,6 +298,7 @@ Float carrouselSortedWeight = 0f; + List<PupitriCatch> catches = Lists.newArrayList(); for (CarrouselRow bean : carrouselImporter) { // is the bean from the current operation and rig ? if (bean.getOperationCode().equals(operationNumber) @@ -248,11 +324,11 @@ if (species != null) { PupitriCatch pupitriCatch = new PupitriCatch(species, sorted); - int catchIndex = result.indexOf(pupitriCatch); + int catchIndex = catches.indexOf(pupitriCatch); if (catchIndex >= 0) { - pupitriCatch = result.get(catchIndex); + pupitriCatch = catches.get(catchIndex); } else { - result.add(pupitriCatch); + catches.add(pupitriCatch); } pupitriCatch.addToSign(bean.getSign(), beanWeight); } @@ -260,6 +336,70 @@ } catchBatch.setCatchTotalSortedCarousselWeight(carrouselSortedWeight); + BatchContainer<SpeciesBatch> rootSpeciesBatch = persistenceService.getRootSpeciesBatch(operation.getId()); + for (SpeciesBatch batch : rootSpeciesBatch.getChildren()) { + persistenceService.deleteSpeciesBatch(batch.getId()); + } + + for (PupitriCatch pupitriCatch : catches) { + + Float catchWeight = pupitriCatch.getWeightBySign().get(PupitriCatch.Signs.DEFAULT); + CaracteristicQualitativeValue cqv = pupitriCatch.isSorted() ? + sortedCaracteristic : unsortedCaracteristic; + + SpeciesBatch batch = new SpeciesBatch(); + batch.setFishingOperation(operation); + batch.setSampleCategoryType(SampleCategoryEnum.sortedUnsorted); + batch.setSampleCategoryValue(cqv); + batch.setSpecies(pupitriCatch.getSpecies()); + batch.setSampleCategoryWeight(catchWeight); + + batch = persistenceService.createSpeciesBatch(batch, null); + + // if the batch is splitted + if (catchWeight == null) { + SampleCategoryEnum category = null; + for (PupitriCatch.Signs s : pupitriCatch.getWeightBySign().keySet()) { + CaracteristicQualitativeValue splitCqv = null; + switch (s) { + case MALE: + splitCqv = maleCaracteristic; + category = SampleCategoryEnum.sex; + break; + + case FEMALE: + splitCqv = femaleCaracteristic; + category = SampleCategoryEnum.sex; + break; + + case SMALL: + splitCqv = smallCaracteristic; + category = SampleCategoryEnum.size; + break; + + case MEDIUM: + splitCqv = mediumCaracteristic; + category = SampleCategoryEnum.size; + break; + + case BIG: + splitCqv = bigCaracteristic; + category = SampleCategoryEnum.size; + break; + } + + SpeciesBatch childBatch = new SpeciesBatch(); + childBatch.setFishingOperation(operation); + childBatch.setSampleCategoryType(category); + childBatch.setSampleCategoryValue(splitCqv); + childBatch.setSpecies(pupitriCatch.getSpecies()); + childBatch.setSampleCategoryWeight(pupitriCatch.getWeightBySign().get(s)); + + persistenceService.createSpeciesBatch(childBatch, batch.getId()); + } + } + } + carrouselImporter.close(); speciesImporter.close(); reader.close(); @@ -273,8 +413,6 @@ IOUtils.closeQuietly(reader); FileUtils.deleteQuietly(fileWithHeaders); } - - return result; }