# This patch file was generated by NetBeans IDE # Following Index: paths are relative to: /home/jjdelcerro/datos/devel/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process. Index: src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java --- src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java Base (BASE) +++ src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreParameters.java Locally Modified (Based On LOCAL) @@ -65,6 +65,7 @@ private static final String FIRST_LINE_HEADER = "firstLineHeader"; private static final String HEADER = "header"; private static final String SURROUNDINGSPACESNEEDQUOTES = "surroundingSpacesNeedQuotes"; + private static final String ACCEPTDUPLICATES = "acceptDuplicates"; //private static final String IGNOREEMPTYLINES = "ignoreEmptyLines"; private static final String CRS = "CRS"; @@ -368,6 +369,11 @@ // return fieldSizes; // } + static boolean acceptDuplicates(DynObject dynobj) { + Boolean b = (Boolean) dynobj.getDynValue(ACCEPTDUPLICATES); + return BooleanUtils.isTrue(b); + } + static String getRawFieldTypes(DynObject dynobj) { String s = (String) dynobj.getDynValue(FIELDTYPES); if ( StringUtils.isBlank(s) ) { Index: src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java --- src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java Base (BASE) +++ src/main/java/org/gvsig/fmap/dal/store/csv/CSVStoreProvider.java Locally Modified (Based On LOCAL) @@ -37,6 +37,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.function.Function; import javax.json.JsonArray; import javax.json.JsonObject; import javax.json.JsonValue; @@ -113,6 +114,7 @@ import org.slf4j.LoggerFactory; import org.supercsv.prefs.CsvPreference; import org.gvsig.tools.dataTypes.CoercionContext; +import org.gvsig.tools.namestranslator.NamesTranslator; @SuppressWarnings("UseSpecificCatch") public class CSVStoreProvider extends AbstractMemoryStoreProvider implements @@ -669,7 +671,17 @@ // Una vez ya sabemos los tipos de datos rellenamos el feature-type // for (FieldTypeParser fieldType : fieldTypes) { - EditableFeatureAttributeDescriptor fad = fType.add(fieldType.name, fieldType.type); + String name = fieldType.name; + if( fType.get(fieldType.name)!=null ) { + // Campo duplicado. + if( !CSVStoreParameters.acceptDuplicates(this.getParameters()) ) { + throw new RuntimeException("Column name '"+name+"' duplicated."); + } + NamesTranslator translator = NamesTranslator.createBaseTranslator(); + translator.updateSourceNames(fType, (Object t) -> ((FeatureAttributeDescriptor)t).getName()); + name = translator.getSuggestion(name); + } + EditableFeatureAttributeDescriptor fad = fType.add(name, fieldType.type); if( fieldType.detectedValue!=null ) { fad.setDisplaySize(Math.max(fieldType.detectedValue.getDisplaySize(), fieldType.size)); fad.setSize(Math.max(fieldType.detectedValue.getDisplaySize(), fieldType.size)); Index: src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml --- src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml Base (BASE) +++ src/main/resources/org/gvsig/fmap/dal/store/csv/CSVParameters.xml Locally Modified (Based On LOCAL) @@ -63,6 +63,9 @@ Sets the comment start marker of the format to the specified character. + + + This flag activate the autodetection of types in the CSV. Can be slow.