# 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.