This is an automated email from the git hooks/post-receive script. New commit to branch feature/5954 in repository tutti. See http://git.codelutin.com/tutti.git commit 3347a47dc99a99fd069dedb4998930fe7d24cc5d Author: Kevin Morin <morin@codelutin.com> Date: Thu Dec 11 16:01:05 2014 +0100 fix imports --- .../protocol/ProtocolImportExportService.java | 58 ++++++++++----- ...perationCaracteristicsFromColumnFileAction.java | 86 +++++++++------------- 2 files changed, 75 insertions(+), 69 deletions(-) diff --git a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java index 442f8e9..f9a3a79 100644 --- a/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java +++ b/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java @@ -31,6 +31,7 @@ import com.google.common.collect.Multimap; import com.google.common.collect.TreeMultimap; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRow; +import fr.ifremer.tutti.persistence.entities.protocol.CaracteristicMappingRowBean; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocol; import fr.ifremer.tutti.persistence.entities.protocol.SpeciesProtocols; import fr.ifremer.tutti.persistence.entities.protocol.TuttiProtocol; @@ -129,22 +130,27 @@ public class ProtocolImportExportService extends AbstractTuttiService { ids.get(CaracteristicType.LENGTH_STEP)) ); - //FIXME -// protocol.setVesselUseFeaturePmfmId( -// mergeIds(protocol.getVesselUseFeaturePmfmId(), -// ids.get(CaracteristicType.VESSEL_USE_FEATURE)) -// ); -// -// protocol.setGearUseFeaturePmfmId( -// mergeIds(protocol.getGearUseFeaturePmfmId(), -// ids.get(CaracteristicType.GEAR_USE_FEATURE)) -// ); - protocol.setIndividualObservationPmfmId( mergeIds(protocol.getIndividualObservationPmfmId(), ids.get(CaracteristicType.INDIVIDUAL_OBSERVATION)) ); + List<CaracteristicMappingRow> caracteristicMapping = protocol.getCaracteristicMapping(); + if (caracteristicMapping == null) { + caracteristicMapping = new ArrayList<CaracteristicMappingRow>(); + } + Map<String, CaracteristicMappingRow> rowsByCaracteristicId = + Maps.uniqueIndex(caracteristicMapping, + new Function<CaracteristicMappingRow, String>() { + @Override + public String apply(CaracteristicMappingRow caracteristicMappingRow) { + return caracteristicMappingRow.getPmfmId(); + } + }); + + mergeCaracteristicMappingRows(ids, rowsByCaracteristicId, CaracteristicType.GEAR_USE_FEATURE); + mergeCaracteristicMappingRows(ids, rowsByCaracteristicId, CaracteristicType.VESSEL_USE_FEATURE); + } public void exportAllCaracteristic(File file, @@ -196,14 +202,14 @@ public class ProtocolImportExportService extends AbstractTuttiService { rows.addAll(Lists.transform(protocol.getLengthClassesPmfmId(), function)); } - //FIXME - if (!protocol.isCaracteristicMappingEmpty()) { - function.setType(CaracteristicType.VESSEL_USE_FEATURE); - for (CaracteristicMappingRow mappingRow : protocol.getCaracteristicMapping()) { - function.setType(CaracteristicType.valueOf(mappingRow.getTab())); - rows.add(function.apply(mappingRow.getPmfmId())); - } - } + //FIXME kmorin do export +// if (!protocol.isCaracteristicMappingEmpty()) { +// function.setType(CaracteristicType.VESSEL_USE_FEATURE); +// for (CaracteristicMappingRow mappingRow : protocol.getCaracteristicMapping()) { +// function.setType(CaracteristicType.valueOf(mappingRow.getTab())); +// rows.add(function.apply(mappingRow.getPmfmId())); +// } +// } if (!protocol.isIndividualObservationPmfmIdEmpty()) { @@ -514,6 +520,20 @@ public class ProtocolImportExportService extends AbstractTuttiService { return result; } + + protected void mergeCaracteristicMappingRows(Multimap<CaracteristicType, String> ids, + Map<String, CaracteristicMappingRow> rowsByCaracteristicId, + CaracteristicType type) { + for (String id : ids.get(type)) { + CaracteristicMappingRow row = rowsByCaracteristicId.get(id); + if (row == null) { + row = new CaracteristicMappingRowBean(); + row.setPmfmId(id); + } + row.setTab(type.name()); + } + } + private static class PmfmIdToCaracteristicRowFunction implements Function<String, CaracteristicRow> { private CaracteristicType type; diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFishingOperationCaracteristicsFromColumnFileAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFishingOperationCaracteristicsFromColumnFileAction.java index b1eadc7..d5dd486 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFishingOperationCaracteristicsFromColumnFileAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/action/ImportFishingOperationCaracteristicsFromColumnFileAction.java @@ -1,6 +1,7 @@ package fr.ifremer.tutti.ui.swing.action; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; +import fr.ifremer.tutti.persistence.entities.data.FishingOperations; import fr.ifremer.tutti.service.operationimport.FishingOperationImportService; import fr.ifremer.tutti.service.operationimport.ImportFromColumnFileFishingOperationNotFoundException; import fr.ifremer.tutti.service.operationimport.ImportFromColumnFileInvalidRowException; @@ -12,6 +13,8 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.csv.AbstractImportErrorInfo; import org.nuiton.jaxx.application.ApplicationBusinessException; +import org.nuiton.util.beans.Binder; +import org.nuiton.util.beans.BinderFactory; import java.io.File; @@ -61,16 +64,42 @@ public class ImportFishingOperationCaracteristicsFromColumnFileAction extends Ab // Create a copy of the ui model to use in the import // this bean will be merged back after import into ui model - fishingOperationToMerge = model.toEntity(); - - //FIXME Check we don't need this ? -// fishingOperationToMerge = FishingOperations.newFishingOperation(); -// Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); -// toBeanBinder.copy(model, fishingOperationToMerge); + // use the binder, cause EditFishingOperationUIModel.newEntity() returns always the same instance + fishingOperationToMerge = FishingOperations.newFishingOperation(); + Binder<EditFishingOperationUIModel, FishingOperation> toBeanBinder = + BinderFactory.newBinder(EditFishingOperationUIModel.class, FishingOperation.class); + toBeanBinder.copy(model, fishingOperationToMerge); FishingOperationImportService importService = getContext().getFishingOperationImportService(); - importService.importCaracteristicsFromColumnFile(importFile, fishingOperationToMerge); + String errorMessage = null; + try { + importService.importCaracteristicsFromColumnFile(importFile, fishingOperationToMerge); + + } catch (ImportFromColumnFileInvalidRowException error) { + // matching row is not valid + ImportFromColumnFileInvalidRowException importFromColumnFileInvalidRowException = (ImportFromColumnFileInvalidRowException) error; + + errorMessage = ""; + for (AbstractImportErrorInfo<FishingOperation> errorInfo : importFromColumnFileInvalidRowException.getErrors()) { + if (log.isErrorEnabled()) { + log.error(errorInfo.getCause().getLocalizedMessage()); + } + errorMessage += "<li>" + errorInfo.getCause().getLocalizedMessage().replaceAll("\\s+", " ") + "</li>"; + } + + } catch (ImportFromColumnFileFishingOperationNotFoundException error) { + // no matching fishing operation + errorMessage = "<li>" + t("tutti.editFishingOperation.action.importColumns.operationNotFound") + "</li>"; + + } catch (ImportFromColumnFileMissingHeaderException error) { + ImportFromColumnFileMissingHeaderException importFromColumnFileMissingHeaderException = (ImportFromColumnFileMissingHeaderException) error; + errorMessage = t("tutti.editFishingOperation.action.importColumns.missingHeader", importFromColumnFileMissingHeaderException.getImportColumn()); + } + + if (errorMessage != null) { + throw new ApplicationBusinessException(t("tutti.editFishingOperation.action.importColumns.error", errorMessage)); + } } @Override @@ -96,47 +125,4 @@ public class ImportFishingOperationCaracteristicsFromColumnFileAction extends Ab } - @Override - public void postFailedAction(Throwable error) { - - String errorMessage = null; - - if (error instanceof ImportFromColumnFileMissingHeaderException) { - ImportFromColumnFileMissingHeaderException importFromColumnFileMissingHeaderException = (ImportFromColumnFileMissingHeaderException) error; - - errorMessage = t("tutti.editFishingOperation.action.importColumns.missingHeader", importFromColumnFileMissingHeaderException.getImportColumn()); - - } else if (error instanceof ImportFromColumnFileFishingOperationNotFoundException) { - - // no matching fishing operation - errorMessage = "<li>" + t("tutti.editFishingOperation.action.importColumns.operationNotFound") + "</li>"; - - } else if (error instanceof ImportFromColumnFileInvalidRowException) { - - // matching row is not valid - ImportFromColumnFileInvalidRowException importFromColumnFileInvalidRowException = (ImportFromColumnFileInvalidRowException) error; - - errorMessage = ""; - for (AbstractImportErrorInfo<FishingOperation> errorInfo : importFromColumnFileInvalidRowException.getErrors()) { - if (log.isErrorEnabled()) { - log.error(errorInfo.getCause().getLocalizedMessage()); - } - errorMessage += "<li>" + errorInfo.getCause().getLocalizedMessage().replaceAll("\\s+", " ") + "</li>"; - } - - } - - //TODO Check this is ok, otherwise use below code - throw new ApplicationBusinessException(t("tutti.editFishingOperation.action.importColumns.error", errorMessage)); - -// if (errorMessage != null) { -// -// displayErrorMessage(t("tutti.editFishingOperation.action.importColumns.error.title"), -// "<html><body>" + -// t("tutti.editFishingOperation.action.importColumns.error", errorMessage) -// + "</body></html>"); -// -// } - - } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.