r380 - in trunk/tutti-service/src/main/java/fr/ifremer/tutti/service: . referential
Author: tchemit Date: 2013-02-10 15:57:21 +0100 (Sun, 10 Feb 2013) New Revision: 380 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/380 Log: add check in referential import Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java 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-02-10 13:41:29 UTC (rev 379) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/TuttiCsvUtil.java 2013-02-10 14:57:21 UTC (rev 380) @@ -32,6 +32,7 @@ import java.text.ParseException; import java.util.Map; +import java.util.Set; /** * Helper around csv import / export in Tutti. @@ -58,6 +59,14 @@ public <E extends IdAware> ForeignKeyValue<E> newForeignKeyValue(Class<E> type, String propertyName, Map<String, E> universe) { return new ForeignKeyValue<E>(type, propertyName, universe); } + + public void newNotExistingValueColumn(String propertyName, Set<String> universe) { + newNotExistingValueColumn(propertyName, propertyName, universe); + } + + public void newNotExistingValueColumn(String headerName, String propertyName, Set<String> universe) { + newMandatoryColumn(headerName, propertyName, new NotExistingKeyValue(propertyName, universe)); + } } public static class StringParserFormatter extends Common.NullableParserFormatter<String> { @@ -84,7 +93,7 @@ /** * @param <E> * @author tchemit <chemit@codelutin.com> - * @since 2.6.12 + * @since 1.0 */ public static class ForeignKeyValue<E extends IdAware> implements ValueParserFormatter<E> { @@ -132,6 +141,44 @@ } } + /** + * @author tchemit <chemit@codelutin.com> + * @since 1.0 + */ + public static class NotExistingKeyValue implements ValueParserFormatter<String> { + + protected final String propertyName; + + protected final Set<String> existingValues; + + public NotExistingKeyValue( + String propertyName, + Set<String> universe) { + this.propertyName = propertyName; + this.existingValues = universe; + } + + @Override + public String parse(String value) throws ParseException { + if (StringUtils.isNotBlank(value)) { + + if (existingValues.contains(value)) { + + // can not find entity this is a big problem for us... + throw new RuntimeException( + "Property '" + + propertyName + "' with value " + value + " is already defined."); + } + } + return value; + } + + @Override + public String format(String e) { + return e; + } + } + protected TuttiCsvUtil() { // no instance } Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java 2013-02-10 13:41:29 UTC (rev 379) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/GearModel.java 2013-02-10 14:57:21 UTC (rev 380) @@ -28,6 +28,8 @@ import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.util.csv.Common; +import java.util.Set; + /** * Model to import / export {@link Gear} in csv format. * @@ -36,12 +38,12 @@ */ public class GearModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Gear> { - public GearModel(char separator) { + public GearModel(char separator, Set<String> existingGearName) { super(separator); // import definition - newMandatoryColumn(Gear.PROPERTY_NAME); + newNotExistingValueColumn(Gear.PROPERTY_NAME, existingGearName); newMandatoryColumn(Gear.PROPERTY_LABEL); newMandatoryColumn(Gear.PROPERTY_SCIENTIFIC_GEAR, Common.PRIMITIVE_BOOLEAN); Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java 2013-02-10 13:41:29 UTC (rev 379) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/SpeciesModel.java 2013-02-10 14:57:21 UTC (rev 380) @@ -27,6 +27,8 @@ import fr.ifremer.tutti.persistence.entities.referential.Species; import fr.ifremer.tutti.service.TuttiCsvUtil; +import java.util.Set; + /** * Model to import / export {@link Species} in csv format. * @@ -35,12 +37,12 @@ */ public class SpeciesModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Species> { - public SpeciesModel(char separator) { + public SpeciesModel(char separator, Set<String> existingSpeciesName) { super(separator); // import definition - newMandatoryColumn(Species.PROPERTY_NAME); + newNotExistingValueColumn(Species.PROPERTY_NAME, existingSpeciesName); // export definition 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-02-10 13:41:29 UTC (rev 379) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/TuttiReferentialImportExportService.java 2013-02-10 14:57:21 UTC (rev 380) @@ -25,7 +25,10 @@ */ import com.google.common.base.Charsets; +import com.google.common.base.Function; +import com.google.common.collect.Iterables; import com.google.common.collect.Lists; +import com.google.common.collect.Sets; import com.google.common.io.Closeables; import com.google.common.io.Files; import fr.ifremer.tutti.persistence.entities.referential.Gear; @@ -46,6 +49,7 @@ import java.io.IOException; import java.io.Reader; import java.util.List; +import java.util.Set; /** * Service to import or export referential. @@ -73,11 +77,19 @@ log.info("Will import species from file: " + file); } + // get all species names + Set<String> existingSpeciesName = Sets.newHashSet(Iterables.transform(persistenceService.getAllSpecies(), new Function<Species, String>() { + @Override + public String apply(Species input) { + return input.getName(); + } + })); + List<Species> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); try { - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), existingSpeciesName); Import<Species> importer = Import.newImport(csvModel, reader); try { @@ -107,11 +119,26 @@ log.info("Will import vessels from file: " + file); } + // get all vessel names + Set<String> existingVesselName = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingVessel(), new Function<Vessel, String>() { + @Override + public String apply(Vessel input) { + return input.getName(); + } + })); + + existingVesselName.addAll(Lists.transform(persistenceService.getAllScientificVessel(), new Function<Vessel, String>() { + @Override + public String apply(Vessel input) { + return input.getName(); + } + })); + List<Vessel> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); try { - VesselModel csvModel = new VesselModel(getCsvSeparator()); + VesselModel csvModel = new VesselModel(getCsvSeparator(), existingVesselName); Import<Vessel> importer = Import.newImport(csvModel, reader); try { @@ -173,11 +200,26 @@ log.info("Will import gears from file: " + file); } + // get all vessel names + Set<String> existingGearName = Sets.newHashSet(Iterables.transform(persistenceService.getAllFishingGear(), new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getName(); + } + })); + + existingGearName.addAll(Lists.transform(persistenceService.getAllScientificGear(), new Function<Gear, String>() { + @Override + public String apply(Gear input) { + return input.getName(); + } + })); + List<Gear> toImport = Lists.newArrayList(); Reader reader = Files.newReader(file, Charsets.UTF_8); try { - GearModel csvModel = new GearModel(getCsvSeparator()); + GearModel csvModel = new GearModel(getCsvSeparator(), existingGearName); Import<Gear> importer = Import.newImport(csvModel, reader); try { @@ -196,8 +238,7 @@ Closeables.closeQuietly(reader); } - List<Gear> result = - persistenceService.importTemporaryGear(toImport); + List<Gear> result = persistenceService.importTemporaryGear(toImport); return result; } @@ -219,7 +260,7 @@ s.setName("Temporary Species name 3"); toExport.add(s); - SpeciesModel csvModel = new SpeciesModel(getCsvSeparator()); + SpeciesModel csvModel = new SpeciesModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); try { @@ -265,7 +306,7 @@ v.setScientificVessel(true); toExport.add(v); - VesselModel csvModel = new VesselModel(getCsvSeparator()); + VesselModel csvModel = new VesselModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); try { @@ -345,7 +386,7 @@ g.setScientificGear(true); toExport.add(g); - GearModel csvModel = new GearModel(getCsvSeparator()); + GearModel csvModel = new GearModel(getCsvSeparator(), null); BufferedWriter writer = Files.newWriter(file, Charsets.UTF_8); try { Modified: trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java =================================================================== --- trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java 2013-02-10 13:41:29 UTC (rev 379) +++ trunk/tutti-service/src/main/java/fr/ifremer/tutti/service/referential/VesselModel.java 2013-02-10 14:57:21 UTC (rev 380) @@ -28,6 +28,8 @@ import fr.ifremer.tutti.service.TuttiCsvUtil; import org.nuiton.util.csv.Common; +import java.util.Set; + /** * Model to import / export {@link Vessel} in csv format. * @@ -36,12 +38,12 @@ */ public class VesselModel extends TuttiCsvUtil.AbstractTuttiImportExportModel<Vessel> { - public VesselModel(char separator) { + public VesselModel(char separator, Set<String> existingVesselName) { super(separator); // import definition - newMandatoryColumn(Vessel.PROPERTY_NAME); + newNotExistingValueColumn(Vessel.PROPERTY_NAME, existingVesselName); newMandatoryColumn(Vessel.PROPERTY_INTERNATIONAL_REGISTRATION_CODE); newMandatoryColumn(Vessel.PROPERTY_SCIENTIFIC_VESSEL, Common.PRIMITIVE_BOOLEAN);
participants (1)
-
tchemit@users.forge.codelutin.com