r664 - in trunk/tutti-service/src/main/java/fr/ifremer/tutti/service: . pupitri
Author: kmorin Date: 2013-03-22 19:04:43 +0100 (Fri, 22 Mar 2013) New Revision: 664 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/664 Log: refs #1868 [CAPTURE] - Import/Export PUPITRI Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/Directions.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRow.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRow.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,103 @@ + +package fr.ifremer.tutti.service.pupitri; + +import java.io.Serializable; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class CarrouselRow implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_FILE_ORIGIN = "fileOrigin"; + + public static final String PROPERTY_DATE = "date"; + + public static final String PROPERTY_TIME = "time"; + + public static final String PROPERTY_BALANCE_ID = "balanceId"; + + public static final String PROPERTY_TO_CONFIRM = "toConfirm"; + + public static final String PROPERTY_OPERATION_CODE = "operationCode"; + + public static final String PROPERTY_RIG_NUMBER = "rigNumber"; + + public static final String PROPERTY_BOX_TYPE = "boxType"; + + public static final String PROPERTY_SPECIES_ID = "speciesId"; + + public static final String PROPERTY_SIGN = "sign"; + + public static final String PROPERTY_DIRECTION = "direction"; + + public static final String PROPERTY_WEIGHT = "weight"; + + public static final String PROPERTY_EMPTY = ""; + + protected Integer operationCode; + + protected String rigNumber; + + protected String speciesId; + + protected String sign; + + protected Directions direction; + + protected Float weight; + + public CarrouselRow() { + } + + public Integer getOperationCode() { + return operationCode; + } + + public void setOperationCode(Integer operationCode) { + this.operationCode = operationCode; + } + + public String getRigNumber() { + return rigNumber; + } + + public void setRigNumber(String rigNumber) { + this.rigNumber = rigNumber; + } + + public String getSpeciesId() { + return speciesId; + } + + public void setSpeciesId(String speciesId) { + this.speciesId = speciesId; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + + public Directions getDirection() { + return direction; + } + + public void setDirection(Directions direction) { + this.direction = direction; + } + + public Float getWeight() { + return weight; + } + + public void setWeight(Float weight) { + this.weight = weight; + } + +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRowModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/CarrouselRowModel.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,71 @@ + +package fr.ifremer.tutti.service.pupitri; + +import fr.ifremer.tutti.service.TuttiCsvUtil; +import java.text.ParseException; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.csv.ValueParser; + +/** + * + * @author kmorin <kmorin@codelutin.com> + * @since + */ +public class CarrouselRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<CarrouselRow> { + + private Log log = LogFactory.getLog(CarrouselRowModel.class); + + public CarrouselRowModel(char separator) { + super(separator); + + // import definition + + newMandatoryColumn(CarrouselRow.PROPERTY_OPERATION_CODE, new ValueParser<Integer>() { + + public Integer parse(String string) throws ParseException { + String number = string.substring(1); + Integer i = Integer.parseInt(number); + return i; + } + + }); + newMandatoryColumn(CarrouselRow.PROPERTY_RIG_NUMBER); + newMandatoryColumn(CarrouselRow.PROPERTY_SPECIES_ID, new ValueParser<String>() { + + public String parse(String string) throws ParseException { + return StringUtils.remove(string, '-'); + } + }); + newMandatoryColumn(CarrouselRow.PROPERTY_SIGN); + newMandatoryColumn(CarrouselRow.PROPERTY_DIRECTION, new ValueParser<Directions>() { + + public Directions parse(String string) throws ParseException { + return Directions.valueOf(string); + } + + }); + newMandatoryColumn(CarrouselRow.PROPERTY_WEIGHT, new ValueParser<Float>() { + + public Float parse(String string) throws ParseException { + return Float.parseFloat(string); + } + + }); + + newIgnoredColumn(CarrouselRow.PROPERTY_FILE_ORIGIN); + newIgnoredColumn(CarrouselRow.PROPERTY_DATE); + newIgnoredColumn(CarrouselRow.PROPERTY_TIME); + newIgnoredColumn(CarrouselRow.PROPERTY_BALANCE_ID); + newIgnoredColumn(CarrouselRow.PROPERTY_TO_CONFIRM); + newIgnoredColumn(CarrouselRow.PROPERTY_BOX_TYPE); + newIgnoredColumn(CarrouselRow.PROPERTY_EMPTY); + + } + + public CarrouselRow newEmptyInstance() { + return new CarrouselRow(); + } + +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/Directions.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/Directions.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/Directions.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,11 @@ + +package fr.ifremer.tutti.service.pupitri; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public enum Directions { + + VAT, VNT, HOV +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRow.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRow.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRow.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,77 @@ + +package fr.ifremer.tutti.service.pupitri; + +import java.io.Serializable; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class TrunkRow implements Serializable { + + private static final long serialVersionUID = 1L; + + public static final String PROPERTY_FILE_ORIGIN = "fileOrigin"; + + public static final String PROPERTY_DATE = "date"; + + public static final String PROPERTY_TIME = "time"; + + public static final String PROPERTY_BALANCE_ID = "balanceId"; + + public static final String PROPERTY_SIGN = "sign"; + + public static final String PROPERTY_OPERATION_CODE = "operationCode"; + + public static final String PROPERTY_RIG_NUMBER = "rigNumber"; + + public static final String PROPERTY_DIRECTION = "direction"; + + public static final String PROPERTY_WEIGHT = "weight"; + + public static final String PROPERTY_EMPTY = ""; + + protected Integer operationCode; + + protected String rigNumber; + + protected Directions direction; + + protected Float weight; + + public TrunkRow() { + } + + public Integer getOperationCode() { + return operationCode; + } + + public void setOperationCode(Integer operationCode) { + this.operationCode = operationCode; + } + + public String getRigNumber() { + return rigNumber; + } + + public void setRigNumber(String rigNumber) { + this.rigNumber = rigNumber; + } + + public Directions getDirection() { + return direction; + } + + public void setDirection(Directions direction) { + this.direction = direction; + } + + public Float getWeight() { + return weight; + } + + public void setWeight(Float weight) { + this.weight = weight; + } + +} Added: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRowModel.java (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TrunkRowModel.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,62 @@ + +package fr.ifremer.tutti.service.pupitri; + +import fr.ifremer.tutti.service.TuttiCsvUtil; +import java.text.ParseException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.csv.ValueParser; + +/** + * + * @author kmorin <kmorin@codelutin.com> + * @since + */ +public class TrunkRowModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<TrunkRow> { + + private Log log = LogFactory.getLog(TrunkRowModel.class); + + public TrunkRowModel(char separator) { + super(separator); + + // import definition + + newMandatoryColumn(TrunkRow.PROPERTY_OPERATION_CODE, new ValueParser<Integer>() { + + public Integer parse(String string) throws ParseException { + String number = string.substring(1); + Integer i = Integer.parseInt(number); + return i; + } + + }); + newMandatoryColumn(TrunkRow.PROPERTY_RIG_NUMBER); + newMandatoryColumn(TrunkRow.PROPERTY_DIRECTION, new ValueParser<Directions>() { + + public Directions parse(String string) throws ParseException { + return Directions.valueOf(string); + } + + }); + newMandatoryColumn(TrunkRow.PROPERTY_WEIGHT, new ValueParser<Float>() { + + public Float parse(String string) throws ParseException { + return Float.parseFloat(string); + } + + }); + + newIgnoredColumn(TrunkRow.PROPERTY_SIGN); + newIgnoredColumn(TrunkRow.PROPERTY_FILE_ORIGIN); + newIgnoredColumn(TrunkRow.PROPERTY_DATE); + newIgnoredColumn(TrunkRow.PROPERTY_TIME); + newIgnoredColumn(TrunkRow.PROPERTY_BALANCE_ID); + newIgnoredColumn(TrunkRow.PROPERTY_EMPTY); + + } + + public TrunkRow newEmptyInstance() { + return new TrunkRow(); + } + +} Added: 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 (rev 0) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/pupitri/TuttiPupitriImportExportService.java 2013-03-22 18:04:43 UTC (rev 664) @@ -0,0 +1,201 @@ + +package fr.ifremer.tutti.service.pupitri; + +import com.google.common.base.Charsets; +import com.google.common.collect.Maps; +import com.google.common.io.Files; +import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.persistence.entities.data.CatchBatch; +import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.service.AbstractTuttiService; +import java.io.File; +import java.io.Reader; +import java.util.Collections; +import java.util.Map; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.util.csv.Import; + +/** + * + * @author kmorin <kmorin@codelutin.com> + */ +public class TuttiPupitriImportExportService extends AbstractTuttiService { + + private static final Log log = + LogFactory.getLog(TuttiPupitriImportExportService.class); + + public void importPupitriTrunk(File file, FishingOperation operation, CatchBatch catchBatch) { + + if (log.isInfoEnabled()) { + log.info("Will import pupitri operation [" + operation.toString() + + "] trunk from file: " + file); + } + + char separator = ','; + TrunkRowModel csvModel = new TrunkRowModel(separator); + + Reader reader = null; + File fileWithHeaders = null; + Import<TrunkRow> importer = null; + + try { + fileWithHeaders = new File(FileUtils.getTempDirectory(), file.getName()); + String headers = TrunkRow.PROPERTY_FILE_ORIGIN + separator + + TrunkRow.PROPERTY_DATE + separator + + TrunkRow.PROPERTY_TIME + separator + + TrunkRow.PROPERTY_BALANCE_ID + separator + + TrunkRow.PROPERTY_SIGN + separator + + TrunkRow.PROPERTY_OPERATION_CODE + separator + + TrunkRow.PROPERTY_RIG_NUMBER + separator + + TrunkRow.PROPERTY_DIRECTION + separator + + TrunkRow.PROPERTY_WEIGHT + separator + + TrunkRow.PROPERTY_EMPTY; + + FileUtils.writeLines(fileWithHeaders, Collections.singletonList(headers)); + log.info(FileUtils.readFileToString(fileWithHeaders)); + FileUtils.writeLines(fileWithHeaders, FileUtils.readLines(file), true); + log.info(FileUtils.readFileToString(fileWithHeaders)); + + reader = Files.newReader(fileWithHeaders, Charsets.UTF_8); + + importer = Import.newImport(csvModel, reader); + + Float sortedWeight = 0f; + Float rejectedWeight = 0f; + Integer operationNumber = operation.getFishingOperationNumber(); + String rigNumber = operation.getMultirigAggregation(); + + for (TrunkRow bean : importer) { + if (bean.getOperationCode().equals(operationNumber) + && bean.getRigNumber().equals(rigNumber)) { + + switch (bean.getDirection()) { + case VAT: + sortedWeight += bean.getWeight(); + break; + + case VNT: + rejectedWeight += bean.getWeight(); + } + } + + } + catchBatch.setCatchTotalSortedTremisWeight(sortedWeight); + catchBatch.setCatchTotalRejectedWeight(rejectedWeight); + + importer.close(); + reader.close(); + + } catch (Exception e) { + throw new TuttiTechnicalException("Could not import protocol [" + operation.toString() + "] caracteristic from file " + file, e); + + } finally { + IOUtils.closeQuietly(importer); + IOUtils.closeQuietly(reader); + FileUtils.deleteQuietly(fileWithHeaders); + } + + } + + public void importPupitriCarrousel(File file, + FishingOperation operation, + CatchBatch catchBatch, + Map<String, Float> sortedWeights, + Map<String, Float> unsortedWeights) { + + if (log.isInfoEnabled()) { + log.info("Will import pupitri operation [" + operation.toString() + + "] carrousel from file: " + file); + } + + char separator = ','; + CarrouselRowModel csvModel = new CarrouselRowModel(separator); + + Reader reader = null; + File fileWithHeaders = null; + Import<CarrouselRow> importer = null; + + try { + fileWithHeaders = new File(FileUtils.getTempDirectory(), file.getName()); + String headers = CarrouselRow.PROPERTY_FILE_ORIGIN + separator + + CarrouselRow.PROPERTY_DATE + separator + + CarrouselRow.PROPERTY_TIME + separator + + CarrouselRow.PROPERTY_BALANCE_ID + separator + + CarrouselRow.PROPERTY_TO_CONFIRM + separator + + CarrouselRow.PROPERTY_OPERATION_CODE + separator + + CarrouselRow.PROPERTY_RIG_NUMBER + separator + + CarrouselRow.PROPERTY_BOX_TYPE + separator + + CarrouselRow.PROPERTY_SPECIES_ID + separator + + CarrouselRow.PROPERTY_SIGN + separator + + CarrouselRow.PROPERTY_DIRECTION + separator + + CarrouselRow.PROPERTY_WEIGHT + separator + + CarrouselRow.PROPERTY_EMPTY; + + FileUtils.writeLines(fileWithHeaders, Collections.singletonList(headers)); + log.info(FileUtils.readFileToString(fileWithHeaders)); + FileUtils.writeLines(fileWithHeaders, FileUtils.readLines(file), true); + log.info(FileUtils.readFileToString(fileWithHeaders)); + + reader = Files.newReader(fileWithHeaders, Charsets.UTF_8); + + importer = Import.newImport(csvModel, reader); + + Integer operationNumber = operation.getFishingOperationNumber(); + String rigNumber = operation.getMultirigAggregation(); + + Float carrouselSortedWeight = 0f; + + for (CarrouselRow bean : importer) { + if (bean.getOperationCode().equals(operationNumber) + && bean.getRigNumber().equals(rigNumber) + && "0".equals(bean.getSign())) { + + String speciesId = bean.getSpeciesId(); + Map<String, Float> weights = null; + Float beanWeight = bean.getWeight(); + if (beanWeight < 0f) { + beanWeight = 0f; + } + + switch (bean.getDirection()) { + case VAT: + weights = sortedWeights; + carrouselSortedWeight += beanWeight; + break; + + case HOV: + weights = unsortedWeights; + } + + if (weights != null) { + Float speciesWeight = weights.get(speciesId); + + if (speciesWeight == null) { + speciesWeight = beanWeight; + + } else { + speciesWeight += beanWeight; + } + weights.put(speciesId, speciesWeight); + } + } + } + catchBatch.setCatchTotalSortedCarousselWeight(carrouselSortedWeight); + + importer.close(); + reader.close(); + + } catch (Exception e) { + throw new TuttiTechnicalException("Could not import protocol [" + operation.toString() + "] caracteristic from file " + file, e); + + } finally { + IOUtils.closeQuietly(importer); + IOUtils.closeQuietly(reader); + FileUtils.deleteQuietly(fileWithHeaders); + } + + } +}
participants (1)
-
kmorin@users.forge.codelutin.com