r1337 - in trunk: . tutti-service/src/main/java/fr/ifremer/tutti/service tutti-service/src/main/java/fr/ifremer/tutti/service/protocol tutti-service/src/main/resources/i18n tutti-service/src/test/java/fr/ifremer/tutti/service/protocol tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util tutti-ui-swing/src/main/resources/i18n
Author: tchemit Date: 2013-11-08 15:03:08 +0100 (Fri, 08 Nov 2013) New Revision: 1337 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1337 Log: fixes #3688: [PROTOCOLE] probleme import toutes les carct?\195?\169ristiques : ?\195?\167a marche pas Modified: trunk/README.txt trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/README.txt =================================================================== --- trunk/README.txt 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/README.txt 2013-11-08 14:03:08 UTC (rev 1337) @@ -26,5 +26,5 @@ +---------------------+------------+---------------------------+ + 2.4 + 2013.06.04 + 3.2.3 + +---------------------+------------+---------------------------+ -+ 2.5 + 2013.08.22 + 3.2.3 + ++ 2.8.1 + 2013.08.22 + 3.2.3 + +---------------------+------------+---------------------------+ Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -27,7 +27,6 @@ import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.collect.Lists; -import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.entities.TuttiEntity; import fr.ifremer.tutti.persistence.entities.referential.CaracteristicQualitativeValue; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -40,6 +39,7 @@ import org.nuiton.csv.Common; import org.nuiton.csv.ExportModel; import org.nuiton.csv.ExportableColumn; +import org.nuiton.csv.ImportRuntimeException; import org.nuiton.csv.ValueFormatter; import org.nuiton.csv.ValueGetter; import org.nuiton.csv.ValueParserFormatter; @@ -47,7 +47,6 @@ import org.nuiton.csv.ext.AbstractImportExportModel; import org.nuiton.csv.ext.RepeatableExport; import org.nuiton.decorator.Decorator; -import org.nuiton.decorator.DecoratorUtil; import java.io.Serializable; import java.io.Writer; @@ -274,7 +273,7 @@ if (result == null) { // can not find entity this is a big problem for us... - throw new TuttiTechnicalException(_("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value)); + throw new ImportRuntimeException(_("tutti.service.csv.parse.entityNotFound", entityType.getSimpleName(), propertyName, value)); } } return result; @@ -386,7 +385,7 @@ if (existingValues.contains(value)) { // entity already defined - throw new TuttiTechnicalException(_(errorMessage, propertyName, value)); + throw new ImportRuntimeException(_(errorMessage, propertyName, value)); } } return value; @@ -444,7 +443,7 @@ try { return (String) BeanUtilsBean.getInstance().getPropertyUtils().getNestedProperty(value, propertyName); } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.cvs.format.error"), e);//"Could not format value" + throw new ImportRuntimeException(_("tutti.service.cvs.format.error"), e);//"Could not format value" } } } @@ -473,7 +472,7 @@ try { return decorator.toString(value); } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.cvs.format.error", value), e); + throw new ImportRuntimeException(_("tutti.service.cvs.format.error", value), e); } } } @@ -494,6 +493,46 @@ } } + public static <E extends Enum<E>> ValueParserFormatter<E> newEnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { + return new EnumByNameParserFormatter<E>(enumType, mandatory); + } + + public static class EnumByNameParserFormatter<E extends Enum<E>> implements ValueParserFormatter<E> { + + + private final Class<E> enumType; + + private final boolean mandatory; + + public EnumByNameParserFormatter(Class<E> enumType, boolean mandatory) { + this.enumType = enumType; + this.mandatory = mandatory; + } + + @Override + public E parse(String value) throws ParseException { + E result; + if (StringUtils.isBlank(value)) { + result = null; + } else { + result = Enum.valueOf(enumType, value); + } + if (mandatory && result == null) { + throw new NullPointerException(_("tutti.service.cvs.mandatory.value")); + } + return result; + } + + @Override + public String format(E date) { + String value = ""; + if (date != null) { + value = date.name(); + } + return value; + } + } + protected static class CaracteristicValueFormatter implements ValueFormatter<Serializable> { ValueParserFormatter<Integer> integerDelegate = INTEGER; Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/CaracteristicRowModel.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -52,7 +52,7 @@ newMandatoryColumn(CaracteristicRow.PROPERTY_PMFM_TYPE, CaracteristicRow.PROPERTY_PMFM_TYPE, - Common.newEnumByNameParserFormatter(CaracteristicType.class)); + TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); newIgnoredColumn(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); @@ -62,7 +62,7 @@ // export definition newColumnForExport(CaracteristicRow.PROPERTY_PMFM_ID); - newColumnForExport(CaracteristicRow.PROPERTY_PMFM_TYPE, Common.newEnumByNameParserFormatter(CaracteristicType.class)); + newColumnForExport(CaracteristicRow.PROPERTY_PMFM_TYPE, TuttiCsvUtil.newEnumByNameParserFormatter(CaracteristicType.class, true)); newColumnForExport(CaracteristicRow.PROPERTY_PMFM_PARAMETER_NAME); newColumnForExport(CaracteristicRow.PROPERTY_PMFM_MATRIX_NAME); newColumnForExport(CaracteristicRow.PROPERTY_PMFM_FRACTION_NAME); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportService.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -130,8 +130,10 @@ IOUtils.closeQuietly(importer); } reader.close(); + } catch (ImportRuntimeException e) { + throw e; } catch (Exception e) { - throw new IOException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e); + throw new ImportRuntimeException("Could not import protocol [" + protocol.getName() + "] caracteristic from file " + file, e); } finally { IOUtils.closeQuietly(reader); @@ -175,7 +177,7 @@ export.write(writer); writer.close(); } catch (Exception e) { - throw new TuttiTechnicalException(_("tutti.service.protocol.export.caracteristics.all.error", file), e); + throw new ImportRuntimeException(_("tutti.service.protocol.export.caracteristics.all.error", file), e); } finally { IOUtils.closeQuietly(writer); } @@ -286,14 +288,7 @@ reader.close(); } catch (ImportRuntimeException e) { - String message; - if (e.getCause() != null) { - message = e.getCause().getMessage(); - } else { - message = e.getMessage(); - } - throw new TuttiTechnicalException(message, e); - + throw e; } catch (Exception e) { throw new TuttiTechnicalException(_("tutti.service.protocol.import.species.error", protocol.getName(), file), e); @@ -362,7 +357,9 @@ IOUtils.closeQuietly(importer); } reader.close(); - } catch (Exception e) { + } catch (ImportRuntimeException e) { + throw e; + }catch (Exception e) { throw new TuttiTechnicalException(_("tutti.service.protocol.import.benthos.error", protocol.getName(), file), e); } finally { IOUtils.closeQuietly(reader); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/protocol/SpeciesRowModel.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -30,6 +30,7 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.csv.Common; +import org.nuiton.csv.ImportRuntimeException; import java.text.ParseException; import java.util.Map; @@ -66,7 +67,7 @@ if (taxonIds.contains(referenceTaxonId)) { // duplicate reference taxon id used - throw new TuttiTechnicalException(_("tutti.service.protocol.import.taxonUsed.error", referenceTaxonId)); + throw new ImportRuntimeException(_("tutti.service.protocol.import.taxonUsed.error", referenceTaxonId)); } taxonIds.add(referenceTaxonId); return species; Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_en_GB.properties 2013-11-08 14:03:08 UTC (rev 1337) @@ -66,6 +66,7 @@ tutti.service.context.serviceInstanciation.error= tutti.service.csv.parse.entityNotFound= tutti.service.cvs.format.error= +tutti.service.cvs.mandatory.value= tutti.service.export.catches.error= tutti.service.export.closeContext.error= tutti.service.export.context.error= Modified: trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties =================================================================== --- trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/main/resources/i18n/tutti-service_fr_FR.properties 2013-11-08 14:03:08 UTC (rev 1337) @@ -66,6 +66,7 @@ tutti.service.context.serviceInstanciation.error=Erreur lors de l'instanciation du service %s tutti.service.csv.parse.entityNotFound=L'entité de type %1s avec la propriété %2s de valeur %3s n'a pas été trouvée tutti.service.cvs.format.error=Erreur lors du formatage de la valeur %s +tutti.service.cvs.mandatory.value=Valeur obligatoire tutti.service.export.catches.error=Erreur lors de l'export des captures tutti.service.export.closeContext.error=Erreur lors de la fermeture du contexte d'export tutti.service.export.context.error=Erreur lors de la création des fichiers pour l'export Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/protocol/ProtocolImportExportServiceTest.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -41,6 +41,7 @@ import org.junit.Before; import org.junit.ClassRule; import org.junit.Test; +import org.nuiton.csv.ImportRuntimeException; import java.io.File; import java.util.Map; @@ -135,6 +136,12 @@ "2;VESSEL_USE_FEATURE;parameterName2;matrixName2;fractionName2;methodName2;\n" + "3;GEAR_USE_FEATURE;parameterName3;matrixName3;fractionName3;methodName3;"; + public static final String PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT = + "pmfmId;pmfmType;pmfmParameterName;pmfmMatrixName;pmfmFractionName;pmfmMethodName\n" + + "1;LENGTH_STEP;parameterName1;matrixName1;fractionName1;methodName1;\n" + + "2;;parameterName2;matrixName2;fractionName2;methodName2;\n" + + "3;GEAR_USE_FEATURE;parameterName3;matrixName3;fractionName3;methodName3;"; + public static final String ALL_CARACTERISTIC_FILE_CONTENT = "pmfmId;pmfmType;pmfmParameterName;pmfmMatrixName;pmfmFractionName;pmfmMethodName\n" + "1;;parameterName1;matrixName1;fractionName1;methodName1;\n" + @@ -347,6 +354,22 @@ protocol.getGearUseFeaturePmfmId()); } + @Test(expected = ImportRuntimeException.class) + public void importProtocolCaracteristicMissingCaracteristicType() throws Exception { + + File file = new File(datadirectory, "importProtocolCaracteristicMissingCaracteristicType.csv"); + + Files.createParentDirs(file); + + Files.write(PROTOCOL_CARACTERISTIC_FILE_BAD_CONTENT, file, Charsets.UTF_8); + + TuttiProtocol protocol = TuttiProtocols.newTuttiProtocol(); + Map<String, Caracteristic> caracteristicMap = createCaracteristics(); + + service.importProtocolCaracteristic(file, + protocol, + caracteristicMap); + } @Test public void exportProtocolCaracteristic() throws Exception { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java 2013-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiErrorHelper.java 2013-11-08 14:03:08 UTC (rev 1337) @@ -29,6 +29,7 @@ import org.jdesktop.swingx.JXErrorPane; import org.jdesktop.swingx.error.ErrorInfo; import org.jdesktop.swingx.error.ErrorReporter; +import org.nuiton.csv.ImportRuntimeException; import javax.swing.JOptionPane; @@ -64,6 +65,10 @@ JOptionPane.showMessageDialog(context.getMainUI(), "<html><body>" + cause.getMessage() + "</body></html>", _("tutti.error.ui.business.error"), JOptionPane.ERROR_MESSAGE); + } else if (cause instanceof ImportRuntimeException) { + JOptionPane.showMessageDialog(context.getMainUI(), cause.getMessage(), + _("tutti.error.ui.business.error"), + JOptionPane.ERROR_MESSAGE); } else { JXErrorPane pane = new JXErrorPane(); 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-11-08 14:02:36 UTC (rev 1336) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-11-08 14:03:08 UTC (rev 1337) @@ -886,9 +886,9 @@ tutti.editProtocol.action.closeEditProtocol=Fermer tutti.editProtocol.action.closeEditProtocol.mnemonic=F tutti.editProtocol.action.closeEditProtocol.tip=Fermer l'écran d'édition du protocole -tutti.editProtocol.action.exportProtocolAllCaracteristic=Exporter toutes les caractéristiques +tutti.editProtocol.action.exportProtocolAllCaracteristic=Exporter toutes les caractéristiques du référentiel tutti.editProtocol.action.exportProtocolAllCaracteristic.mnemonic=t -tutti.editProtocol.action.exportProtocolAllCaracteristic.tip=Exporter toutes les caractéristiques (sans les affecter à un écran) +tutti.editProtocol.action.exportProtocolAllCaracteristic.tip=Exporter toutes les caractéristiques du référentiel (sans les affecter à un écran) tutti.editProtocol.action.exportProtocolBenthos=Exporter les espèces du benthos tutti.editProtocol.action.exportProtocolBenthos.mnemonic=b tutti.editProtocol.action.exportProtocolBenthos.tip=Exporter les espèce du benthos du protocole
participants (1)
-
tchemit@users.forge.codelutin.com