Author: tchemit Date: 2013-05-30 16:27:49 +0200 (Thu, 30 May 2013) New Revision: 1048 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1048 Log: fixes #2535: [REFERENTIEL] - Message d'erreur difficilement compr?\195?\169hensible sur import navire Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-05-30 14:27:22 UTC (rev 1047) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-05-30 14:27:49 UTC (rev 1048) @@ -141,6 +141,16 @@ List<Vessel> existingVessels = Lists.newArrayList(persistenceService.getAllFishingVessel()); existingVessels.addAll(persistenceService.getAllScientificVessel()); + Function<Vessel, String> vesselToId = new Function<Vessel, String>() { + @Override + public String apply(Vessel input) { + return input.getName()+"#"+input.getInternationalRegistrationCode(); + } + }; + + Set<String> existingIds = Sets.newHashSet( + Lists.transform(existingVessels, vesselToId)); + List<Vessel> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); @@ -151,20 +161,16 @@ try { for (final Vessel bean : importer) { - Optional<Vessel> found = Iterables.tryFind(existingVessels, new Predicate<Vessel>() { - @Override - public boolean apply(Vessel input) { - String name1 = input.getName(); - String name2 = bean.getName(); - String code1 = input.getInternationalRegistrationCode(); - String code2 = bean.getInternationalRegistrationCode(); - boolean result = StringUtils.equals(name1, name2) && StringUtils.equals(code1, code2); - return result; - } - }); - if (found.isPresent()) { - throw new TuttiTechnicalException(_("tutti.service.referential.import.vessels.existingValue.error", - bean.getName(), bean.getInternationalRegistrationCode())); + + String currentId = vesselToId.apply(bean); + + if (!existingIds.add(currentId)) { + + // id was already in universe + throw new TuttiTechnicalException( + _("tutti.service.referential.import.vessels.existingValue.error", + bean.getName(), + bean.getInternationalRegistrationCode())); } toImport.add(bean); } Modified: trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java =================================================================== --- trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-05-30 14:27:22 UTC (rev 1047) +++ trunk/tutti-service/src/test/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportServiceTest.java 2013-05-30 14:27:49 UTC (rev 1048) @@ -79,6 +79,14 @@ "Temporary scientific vessel name 3;International registration code S3;Y;\n" + "Temporary scientific vessel name 4;International registration code S4;Y;"; + public static final String DUPLICATE_VESSEL_FILE_CONTENT = + "name;internationalRegistrationCode;scientificVessel\n" + + "Temporary fishing vessel name 1;International registration code F1;N;\n" + + "Temporary fishing vessel name 1;International registration code F1;N;\n" + + "Temporary fishing vessel name 2;International registration code F2;N;\n" + + "Temporary scientific vessel name 3;International registration code S3;Y;\n" + + "Temporary scientific vessel name 4;International registration code S4;Y;"; + protected TuttiReferentialImportExportService service; @Before @@ -136,7 +144,7 @@ for (int i = 1; i <= 2; i++) { Vessel actual = result.get(i - 1); Assert.assertNotNull(actual); - Assert.assertEquals("#TEMP¿"+actual.getInternationalRegistrationCode(), actual.getId()); + Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); Assert.assertEquals("Temporary fishing vessel name " + i, actual.getName()); Assert.assertEquals("International registration code F" + i, actual.getInternationalRegistrationCode()); Assert.assertFalse(actual.isScientificVessel()); @@ -144,7 +152,7 @@ for (int i = 3; i <= 4; i++) { Vessel actual = result.get(i - 1); Assert.assertNotNull(actual); - Assert.assertEquals("#TEMP¿"+actual.getInternationalRegistrationCode(), actual.getId()); + Assert.assertEquals("#TEMP¿" + actual.getInternationalRegistrationCode(), actual.getId()); Assert.assertEquals("Temporary scientific vessel name " + i, actual.getName()); Assert.assertEquals("International registration code S" + i, actual.getInternationalRegistrationCode()); Assert.assertTrue(actual.isScientificVessel()); @@ -159,6 +167,22 @@ } @Test + public void importDuplicateTemporaryVessel() throws Exception { + File file = new File(dataDirectory, "importVessel.csv"); + + Files.createParentDirs(file); + + Files.write(DUPLICATE_VESSEL_FILE_CONTENT, file, Charsets.UTF_8); + + try { + service.importTemporaryVessel(file); + Assert.fail(); + } catch (TuttiTechnicalException e) { + // good duplicate vessel + } + } + + @Test public void importTemporaryPerson() throws Exception { File file = new File(dataDirectory, "importPerson.csv");