[Suiviobsmer-commits] r983 - in trunk/wao-business/src: main/java/fr/ifremer/wao/io/csv2 main/java/fr/ifremer/wao/service main/resources/i18n test/java/fr/ifremer/wao/io/csv2
Author: bleny Date: 2011-02-04 15:01:22 +0000 (Fri, 04 Feb 2011) New Revision: 983 Log: import refactoring continuation Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java Removed: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportStrategy.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableField.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/Import.java 2011-02-04 15:01:22 UTC (rev 983) @@ -12,8 +12,11 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Set; public class Import<E> { @@ -23,66 +26,109 @@ protected CsvReader reader; + /** save once done to prevent multiple headers read leading to consider first lines as headers */ + protected ValidationResult csvValidationResult; + + protected List<ImportableColumn> getNonIgnoredHeaders() { + List<ImportableColumn> nonIgnoredHeaders = new ArrayList<ImportableColumn>(); + for (ImportableColumn field : model.getAllColumns()) { + if ( ! field.isIgnored()) { + nonIgnoredHeaders.add(field); + } + } + if (log.isTraceEnabled()) { + log.trace("all non-ignored headers are " + nonIgnoredHeaders); + } + return nonIgnoredHeaders; + } + + protected List<ImportableColumn> getAllMandatoryHeaders() { + List<ImportableColumn> allMandatoryHeaders = new ArrayList<ImportableColumn>(); + for (ImportableColumn field : model.getAllColumns()) { + if (field.isMandatory()) { + allMandatoryHeaders.add(field); + } + } + if (log.isTraceEnabled()) { + log.trace("all mandatory headers are " + allMandatoryHeaders); + } + return allMandatoryHeaders; + } + public Import(ImportModel<E> model, InputStream inputStream) { this.model = model; + validateModel(); this.reader = new CsvReader(inputStream, ';', Charset.forName("UTF-8")); reader.setTrimWhitespace(true); } + protected boolean validateModel() { + Set<String> headerNames = new HashSet<String>(); + for (ImportableColumn importableColumn : model.getAllColumns()) { + String headerName = importableColumn.getHeaderName(); + boolean alreadyUsed = ! headerNames.add(headerName); + if (alreadyUsed) { + throw new IllegalArgumentException("model contains multiple columns named '" + headerName + "'"); + } + } + return true; + } + public ValidationResult validateCsv() throws IOException { - boolean canReadHeaders = reader.readHeaders(); - if ( ! canReadHeaders) { - throw new IOException("can't read headers"); - } + if (csvValidationResult == null) { - if (log.isDebugEnabled()) { - log.debug("headers of the CSV file are : " + Arrays.toString(reader.getHeaders())); - } + boolean canReadHeaders = reader.readHeaders(); + if ( ! canReadHeaders) { + throw new IOException("can't read headers"); + } - ValidationResult validationResult = new ValidationResultImpl(); - validationResult.setSuccess(true); + if (log.isTraceEnabled()) { + log.trace("headers of the CSV file are : " + Arrays.toString(reader.getHeaders())); + } - List<String> csvHeaders = new ArrayList<String>(); - for (String header : reader.getHeaders()) { - csvHeaders.add(header); - } + model.pushCsvHeaderNames(Arrays.asList(reader.getHeaders())); - for(ImportableField field : model.getAllHeaders()) { - csvHeaders.remove(field.getName()); - } + csvValidationResult = new ValidationResultImpl(); + csvValidationResult.setSuccess(true); - if ( ! csvHeaders.isEmpty()) { - validationResult.setSuccess(false); - String validationMessage = String.format( - "Les champs %s ne sont pas reconnus. Les champs possibles sont %s", - StringUtil.join(csvHeaders, ", " ,true), - StringUtil.join(model.getAllHeaders(), ", " ,true)); - validationResult.setMessage(validationMessage); - } + List<String> csvHeaders = new ArrayList<String>(); + for (String header : reader.getHeaders()) { + csvHeaders.add(header); + } - csvHeaders = new ArrayList<String>(); - for (String header : reader.getHeaders()) { - csvHeaders.add(header); - } + for(ImportableColumn field : model.getAllColumns()) { + csvHeaders.remove(field.getHeaderName()); + } - List<String> mandatoryHeadersNames = new ArrayList<String>(); - for (ImportableField field : model.getAllMandatoryHeaders()) { - mandatoryHeadersNames.add(field.getName()); - } - for (String header : csvHeaders) { - mandatoryHeadersNames.remove(header); - } + if ( ! csvHeaders.isEmpty()) { + csvValidationResult.setSuccess(false); + String validationMessage = String.format( + "Les champs %s ne sont pas reconnus. Les champs possibles sont %s", + StringUtil.join(csvHeaders, ", " ,true), + StringUtil.join(model.getAllColumns(), ", " ,true)); + csvValidationResult.setMessage(validationMessage); + } - if ( ! mandatoryHeadersNames.isEmpty()) { - validationResult.setSuccess(false); - String validationMessage = String.format( - "Les champs obligatoires %s sont manquants", - StringUtil.join(mandatoryHeadersNames, ", " , true)); - validationResult.setMessage(validationMessage); + csvHeaders = new ArrayList<String>(); + Collections.addAll(csvHeaders, reader.getHeaders()); + + List<String> mandatoryHeadersNames = new ArrayList<String>(); + for (ImportableColumn field : getAllMandatoryHeaders()) { + mandatoryHeadersNames.add(field.getHeaderName()); + } + mandatoryHeadersNames.removeAll(csvHeaders); + + if ( ! mandatoryHeadersNames.isEmpty()) { + csvValidationResult.setSuccess(false); + String validationMessage = String.format( + "Les champs obligatoires %s sont manquants", + StringUtil.join(mandatoryHeadersNames, ", " , true)); + csvValidationResult.setMessage(validationMessage); + } } - return validationResult; + return csvValidationResult; } public Iterator<E> startImport() throws IOException { @@ -115,24 +161,21 @@ E element = model.newEmptyInstance(); - for (ImportableField field : model.getNonIgnoredHeaders()) { + for (ImportableColumn field : getNonIgnoredHeaders()) { String value; try { - value = reader.get(field.getName()); + value = reader.get(field.getHeaderName()); } catch (IOException e) { reader.close(); - throw new RuntimeException("unable to read field " + field.getName() + " at line " + lineNumber, e); + throw new RuntimeException("unable to read field " + field.getHeaderName() + " at line " + lineNumber, e); } // contravariance ftw - ImportStrategy<E, Object> strategy = field.getImportStrategy(); - if (strategy != null) { - try { - Object parsedValue = strategy.parse(value); - strategy.setValue(element, parsedValue); - } catch (Exception e) { - throw new RuntimeException("exception while reading line " + lineNumber, e); - } + try { + Object parsedValue = field.parseValue(value); + field.setValue(element, parsedValue); + } catch (Exception e) { + throw new RuntimeException("exception while reading line " + lineNumber, e); } } Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportModel.java 2011-02-04 15:01:22 UTC (rev 983) @@ -1,34 +1,13 @@ package fr.ifremer.wao.io.csv2; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.iterators.ArrayListIterator; - -import java.util.ArrayList; +import java.util.Collection; import java.util.List; -public abstract class ImportModel<E> { +public interface ImportModel<E> { - public abstract E newEmptyInstance(); + void pushCsvHeaderNames(List<String> headerNames); - public abstract List<ImportableField> getAllHeaders(); + E newEmptyInstance(); - public List<ImportableField> getNonIgnoredHeaders() { - List<ImportableField> nonIgnoredHeaders = new ArrayList<ImportableField>(); - for (ImportableField field : getAllHeaders()) { - if ( ! field.isIgnored()) { - nonIgnoredHeaders.add(field); - } - } - return nonIgnoredHeaders; - } - - public List<ImportableField> getAllMandatoryHeaders() { - List<ImportableField> allMandatoryHeaders = new ArrayList<ImportableField>(); - for (ImportableField field : getAllHeaders()) { - if (field.isMandatory()) { - allMandatoryHeaders.add(field); - } - } - return allMandatoryHeaders; - } + Collection<ImportableColumn> getAllColumns(); } Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportStrategy.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportStrategy.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportStrategy.java 2011-02-04 15:01:22 UTC (rev 983) @@ -1,8 +0,0 @@ -package fr.ifremer.wao.io.csv2; - -public interface ImportStrategy<ObjectType, FieldType> { - - FieldType parse(String value); - - void setValue(ObjectType object, FieldType value); -} Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumn.java 2011-02-04 15:01:22 UTC (rev 983) @@ -0,0 +1,13 @@ +package fr.ifremer.wao.io.csv2; + +public interface ImportableColumn<E, T> { + String getHeaderName(); + + boolean isMandatory(); + + boolean isIgnored(); + + T parseValue(String value); + + void setValue(E object, T value); +} Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java (from rev 982, trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableField.java) =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableColumnImpl.java 2011-02-04 15:01:22 UTC (rev 983) @@ -0,0 +1,71 @@ +package fr.ifremer.wao.io.csv2; + +public class ImportableColumnImpl<E, T> implements ImportableColumn<E, T> { + + protected String headerName; + + protected boolean mandatory = true; + + protected boolean ignored; + + protected ValueParser<T> valueParser; + + protected ValueSetter<E, T> valueSetter; + + /** a new <strong>ignored</strong> header */ + public ImportableColumnImpl(String headerName) { + this.headerName = headerName; + ignored = true; + } + + /** a new <strong>mandatory</strong> header */ + public ImportableColumnImpl(String headerName, ValueParser<T> valueParser, ValueSetter<E, T> valueSetter) { + this.headerName = headerName; + this.valueParser = valueParser; + this.valueSetter = valueSetter; + } + + @Override + public String getHeaderName() { + return headerName; + } + + @Override + public boolean isMandatory() { + return mandatory; + } + + @Override + public boolean isIgnored() { + return ignored; + } + + @Override + public T parseValue(String value) { + if (valueParser == null) { + throw new UnsupportedOperationException("no parser provided for " + this); + } else { + return valueParser.parse(value); + } + } + + @Override + public void setValue(E object, T value) { + if ( ! isIgnored()) { + if (valueSetter == null) { + throw new UnsupportedOperationException("no setter provided"); + } else { + valueSetter.set(object, value); + } + } + } + + @Override + public String toString() { + return "ImportableColumnImpl{" + + "headerName='" + headerName + '\'' + + ", mandatory=" + mandatory + + ", ignored=" + ignored + + '}'; + } +} Deleted: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableField.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableField.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportableField.java 2011-02-04 15:01:22 UTC (rev 983) @@ -1,40 +0,0 @@ -package fr.ifremer.wao.io.csv2; - -public class ImportableField<ObjectType, FieldType> { - - protected String name; - - protected boolean isMandatory; - - protected boolean isIgnored; - - protected ImportStrategy<ObjectType, FieldType> importStrategy; - - public ImportableField(String name, boolean isMandatory, boolean isIgnored) { - this.name = name; - this.isMandatory = isMandatory; - this.isIgnored = isIgnored; - } - - public ImportableField(String name, boolean isMandatory, boolean isIgnored, - ImportStrategy<ObjectType, FieldType> importStrategy) { - this(name, isMandatory, isIgnored); - this.importStrategy = importStrategy; - } - - public String getName() { - return name; - } - - public boolean isMandatory() { - return isMandatory; - } - - public boolean isIgnored() { - return isIgnored; - } - - public ImportStrategy<ObjectType, FieldType> getImportStrategy() { - return importStrategy; - } -} Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/SamplingPlanImportModel.java 2011-02-04 15:01:22 UTC (rev 983) @@ -0,0 +1,43 @@ +package fr.ifremer.wao.io.csv2; + +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.entity.SampleRow; +import fr.ifremer.wao.entity.SampleRowImpl; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class SamplingPlanImportModel implements ImportModel<SampleRow> { + + protected ObsProgram obsProgram; + + public SamplingPlanImportModel(ObsProgram obsProgram) { + this.obsProgram = obsProgram; + } + + @Override + public void pushCsvHeaderNames(List<String> headerNames) { + // discover months + } + + @Override + public SampleRow newEmptyInstance() { + SampleRow newSampleRow = new SampleRowImpl(); + newSampleRow.setObsProgram(obsProgram); + return newSampleRow; + } + + @Override + public Collection<ImportableColumn> getAllColumns() { + + if (obsProgram == ObsProgram.OBSMER) { + // add obsMer-only field + } + if (obsProgram == ObsProgram.OBSVENTE) { + // add obsVente-only field + } + + throw new UnsupportedOperationException("not yet implemented"); + } +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/TerrestrialLocationImportModel.java 2011-02-04 15:01:22 UTC (rev 983) @@ -8,24 +8,28 @@ import java.util.ArrayList; import java.util.List; -public class TerrestrialLocationImportModel extends ImportModel<TerrestrialLocation> { +public class TerrestrialLocationImportModel implements ImportModel<TerrestrialLocation> { - protected List<ImportableField> allHeaders; + protected List<ImportableColumn> allHeaders; - static abstract class UnParsedField<ObjectType> implements ImportStrategy<ObjectType, String> { + @Override + public void pushCsvHeaderNames(List<String> headerNames) { + // nothing to do + } + + @Override + public TerrestrialLocation newEmptyInstance() { + return new TerrestrialLocationImpl(); + } + + static class StringValueParser implements ValueParser<String> { @Override public String parse(String value) { return value; } } - protected <ObjectType> void addHeader(String name, ImportStrategy<TerrestrialLocation, ObjectType> strategy) { - boolean ignored = false; - if ("TLIEU_LIB".equals(name)) { - ignored = true; - } - allHeaders.add(new ImportableField<TerrestrialLocation, ObjectType>(name, true, ignored, strategy)); - } + protected StringValueParser stringValueParser = new StringValueParser(); protected String getCode(String value) { String code = null; @@ -47,118 +51,138 @@ public TerrestrialLocationImportModel() { - allHeaders = new ArrayList<ImportableField>(); + allHeaders = new ArrayList<ImportableColumn>(); - ImportStrategy<TerrestrialLocation, LocationType> locationTypeStrategy = new ImportStrategy<TerrestrialLocation, LocationType>() { - @Override - public LocationType parse(String value) { - if ("6".equals(value)) { - return LocationType.PORT; - } else if ("7".equals(value)) { - return LocationType.AUCTION; + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, LocationType>("TLIEU_COD", + new ValueParser<LocationType>() { + @Override + public LocationType parse(String value) { + if ("6".equals(value)) { + return LocationType.PORT; + } else if ("7".equals(value)) { + return LocationType.AUCTION; + } + throw new IllegalArgumentException(value + " is not a good location code"); } - throw new IllegalArgumentException(value + " is not a good location code"); + }, + new ValueSetter<TerrestrialLocation, LocationType>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, LocationType value) { + terrestrialLocation.setLocationType(value); + } } - - @Override - public void setValue(TerrestrialLocation object, LocationType value) { - object.setLocationType(value); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("TLIEU_LIB")); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("LIEU_COD", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setCode(value); + } } - }; - - addHeader("TLIEU_COD", locationTypeStrategy); - addHeader("TLIEU_LIB", null); - addHeader("LIEU_COD", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setCode(value); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("LIEU_LIB", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setName(value); + } } - }); - addHeader("LIEU_LIB", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setName(value); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Port", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setPortCode(getCode(value)); + terrestrialLocation.setPortName(getName(value)); + } } - }); - addHeader("Port", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setPortCode(getCode(value)); - object.setPortName(getName(value)); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Quartier maritime", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setDistrictCode(getCode(value)); + terrestrialLocation.setDistrictName(getName(value)); + } } - }); - addHeader("Quartier maritime", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setDistrictCode(getCode(value)); - object.setDistrictName(getName(value)); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Département INSEE", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setDepartmentCode(getCode(value)); + terrestrialLocation.setDepartmentName(getName(value)); + } } - }); - addHeader("Département INSEE", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setDepartmentCode(getCode(value)); - object.setDepartmentName(getName(value)); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Sous-région IFREMER", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setSubRegionIfremerCode(getCode(value)); + terrestrialLocation.setSubRegionIfremerName(getName(value)); + } } - }); - addHeader("Sous-région IFREMER", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setSubRegionIfremerCode(getCode(value)); - object.setSubRegionIfremerName(getName(value)); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Région Ifremer", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setRegionIfremerCode(getCode(value)); + terrestrialLocation.setRegionIfremerName(getName(value)); + } } - }); - addHeader("Région Ifremer", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setRegionIfremerCode(getCode(value)); - object.setRegionIfremerName(getName(value)); + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Région INSEE", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setRegionCode(getCode(value)); + terrestrialLocation.setRegionName(getName(value)); + } + } + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Façade maritime", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setSeaboardCode(getCode(value)); + terrestrialLocation.setSeaboardName(getName(value)); + } + } + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Type de Région", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setRegionTypeCode(getCode(value)); + terrestrialLocation.setRegionTypeName(getName(value)); + } + } + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("Littoral FAO", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setCoastFAOCode(getCode(value)); + terrestrialLocation.setCoastFAOName(getName(value)); + } + } + )); + allHeaders.add(new ImportableColumnImpl<TerrestrialLocation, String>("PAYS", stringValueParser, + new ValueSetter<TerrestrialLocation, String>() { + @Override + public void set(TerrestrialLocation terrestrialLocation, String value) { + terrestrialLocation.setCountryCode(getCode(value)); + terrestrialLocation.setCountryName(getName(value)); + } } - }); - addHeader("Région INSEE", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setRegionCode(getCode(value)); - object.setRegionName(getName(value)); - } - }); - addHeader("Façade maritime", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setSeaboardCode(getCode(value)); - object.setSeaboardName(getName(value)); - } - }); - addHeader("Type de Région", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setRegionTypeCode(getCode(value)); - object.setRegionTypeName(getName(value)); - } - }); - addHeader("Littoral FAO", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setCoastFAOCode(getCode(value)); - object.setCoastFAOName(getName(value)); - } - }); - addHeader("PAYS", new UnParsedField<TerrestrialLocation>() { - @Override - public void setValue(TerrestrialLocation object, String value) { - object.setCountryCode(getCode(value)); - object.setCountryName(getName(value)); - } - }); + )); } @Override - public TerrestrialLocation newEmptyInstance() { - return new TerrestrialLocationImpl(); - } - - @Override - public List<ImportableField> getAllHeaders() { + public List<ImportableColumn> getAllColumns() { return allHeaders; } } Copied: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java (from rev 982, trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ImportStrategy.java) =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueParser.java 2011-02-04 15:01:22 UTC (rev 983) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.io.csv2; + +public interface ValueParser<T> { + + T parse(String value); + +} Added: trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java (rev 0) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/io/csv2/ValueSetter.java 2011-02-04 15:01:22 UTC (rev 983) @@ -0,0 +1,7 @@ +package fr.ifremer.wao.io.csv2; + +public interface ValueSetter<E, T> { + + void set(E object, T value); + +} Modified: trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java =================================================================== --- trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/java/fr/ifremer/wao/service/ServiceContactImpl.java 2011-02-04 15:01:22 UTC (rev 983) @@ -501,7 +501,7 @@ && StringUtils.isEmpty(contact.getCommentAdmin())) { success = false; message = WaoUtils.translate(n_("wao.business.contact.validation.commentAdminNecessaryForDataReliability"), - contact.getContactState().toString()); + contact.getDataReliability().toString()); } } } Modified: trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/resources/i18n/wao-business_en_GB.properties 2011-02-04 15:01:22 UTC (rev 983) @@ -99,8 +99,8 @@ fr.ifremer.wao.entity.FishingGearDCF.TMS=Shrimp trawls fr.ifremer.wao.entity.FishingGearDCF.TX=Other trawls (not specified) fr.ifremer.wao.entity.TargetSpeciesDCF.=Not specified -wao.business.contact.validation.commentAdminNecessaryForDataReliability=You must fill admin comment field for contact state %s -wao.business.contact.validation.dataReliabilityMissing=You need to provide data reliability before validate +wao.business.contact.validation.commentAdminNecessaryForDataReliability=You must precise in admin comment why data reliability is '%s' +wao.business.contact.validation.dataReliabilityMissingForValidation=You must provide data reliability before validating wao.business.entity.UserProfile.description=%s on %s%s wao.business.other=Other wao.business.readOnly=(read-only) Modified: trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties =================================================================== --- trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/main/resources/i18n/wao-business_fr_FR.properties 2011-02-04 15:01:22 UTC (rev 983) @@ -111,7 +111,7 @@ fr.ifremer.wao.entity.TargetSpeciesDCF.LPF=Grands p\u00e9lagiques fr.ifremer.wao.entity.TargetSpeciesDCF.MOL=Mollusques fr.ifremer.wao.entity.TargetSpeciesDCF.SPF=Petits p\u00e9lagiques -wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut pr\u00e9ciser dans le commentaire administrateur pourquoi la donn\u00e9e n'est pas exploitable pour l'\u00e9tat '%s' +wao.business.contact.validation.commentAdminNecessaryForDataReliability=Il faut pr\u00e9ciser dans le commentaire administrateur pourquoi la donn\u00e9e est '%s' wao.business.contact.validation.dataReliabilityMissingForValidation=Il faut pr\u00e9ciser la qualit\u00e9 de la donn\u00e9e avant de valider wao.business.entity.UserProfile.description=%s sur %s%s wao.business.other=Autre Modified: trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java =================================================================== --- trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-02-03 16:11:17 UTC (rev 982) +++ trunk/wao-business/src/test/java/fr/ifremer/wao/io/csv2/ImportTest.java 2011-02-04 15:01:22 UTC (rev 983) @@ -1,21 +1,27 @@ package fr.ifremer.wao.io.csv2; +import fr.ifremer.wao.bean.ObsProgram; +import fr.ifremer.wao.bean.ValidationResult; +import fr.ifremer.wao.entity.SampleRow; import fr.ifremer.wao.entity.TerrestrialLocation; import org.apache.commons.io.IOUtils; import org.junit.Assert; -import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; -import org.nuiton.topia.persistence.EntityVisitor; -import org.nuiton.topia.persistence.TopiaEntity; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ImportTest { + private static final Logger log = LoggerFactory.getLogger(ImportTest.class); + @Test - public void testStartImport() throws Exception { + public void testImportTerrestrialLocations() throws Exception { String csv = "TLIEU_COD;TLIEU_LIB;LIEU_COD;LIEU_LIB;Port;Quartier maritime;Département INSEE;Sous-région IFREMER;Région Ifremer;Région INSEE;Façade maritime;Type de Région;Littoral FAO;PAYS\n" + "7;Criée;AAY;Quiberon;AAY Quiberon;AY Auray;56 Morbihan;SB Sud Bretagne;BR Bretagne;53 Bretagne;03 Bretagne sud;01 France métropolitaine;27B Atlantique nord-est;FRA France\n" + @@ -26,15 +32,19 @@ ImportModel<TerrestrialLocation> model = new TerrestrialLocationImportModel(); - - List<TerrestrialLocation> locations = new ArrayList<TerrestrialLocation>(); - List<String> locationsCodes = new ArrayList<String>(); - Import<TerrestrialLocation> terrestrialLocationImport = new Import<TerrestrialLocation>(model, IOUtils.toInputStream(csv)); + ValidationResult validationResult = terrestrialLocationImport.validateCsv(); + if (log.isDebugEnabled()) { + log.debug("validation result message : " + validationResult.getMessage()); + } + Assert.assertTrue(validationResult.isSuccess()); + Iterator<TerrestrialLocation> it = terrestrialLocationImport.startImport(); + List<TerrestrialLocation> locations = new ArrayList<TerrestrialLocation>(); + List<String> locationsCodes = new ArrayList<String>(); while (it.hasNext()) { TerrestrialLocation location = it.next(); locations.add(location); @@ -46,4 +56,31 @@ Assert.assertTrue(locationsCodes.contains("XPY")); Assert.assertTrue(locationsCodes.contains("TJA")); } + + @Test + @Ignore("not yet implemented") + public void testImportSamplingPlan() throws IOException { + + String csv = ""; + + ImportModel<SampleRow> model = new SamplingPlanImportModel(ObsProgram.OBSMER); + + Import<SampleRow> samplingPlanImport = + new Import<SampleRow>(model, IOUtils.toInputStream(csv)); + + ValidationResult validationResult = samplingPlanImport.validateCsv(); + if (log.isDebugEnabled()) { + log.debug("validation result message : " + validationResult.getMessage()); + } + Assert.assertTrue(validationResult.isSuccess()); + + Iterator<SampleRow> it = samplingPlanImport.startImport(); + + List<SampleRow> sampleRows = new ArrayList<SampleRow>(); + while (it.hasNext()) { + SampleRow sampleRow = it.next(); + sampleRows.add(sampleRow); + } + + } }
participants (1)
-
bleny@users.labs.libre-entreprise.org