Revision 47643 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.file/org.gvsig.fmap.dal.file.csv/src/main/java/org/gvsig/fmap/dal/store/gml/GMLFeatureTypeLoader.java
GMLFeatureTypeLoader.java | ||
---|---|---|
5 | 5 |
*/ |
6 | 6 |
package org.gvsig.fmap.dal.store.gml; |
7 | 7 |
|
8 |
import org.gvsig.fmap.dal.store.csv.*; |
|
9 |
import org.gvsig.fmap.dal.store.simplereader.SimpleReaderPointAttributeEmulator; |
|
10 | 8 |
import java.io.IOException; |
11 | 9 |
import java.io.Reader; |
12 |
import org.apache.commons.lang3.StringUtils; |
|
13 |
import org.gvsig.fmap.dal.DataTypes; |
|
14 |
import org.gvsig.fmap.dal.feature.EditableFeatureAttributeDescriptor; |
|
15 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
|
16 |
import org.gvsig.fmap.dal.store.csv.simplereaders.CSVReaderSuperCSV; |
|
17 |
import org.gvsig.fmap.dal.store.csv.simplereaders.FixedLenReader; |
|
10 |
import org.gvsig.fmap.dal.store.gml.simplereaders.GMLReader; |
|
18 | 11 |
import org.gvsig.fmap.dal.store.simplereader.*; |
19 | 12 |
import org.gvsig.fmap.dal.store.simplereader.simplereaders.SimpleReader; |
20 |
import org.gvsig.fmap.geom.Geometry; |
|
21 |
import org.gvsig.fmap.geom.GeometryLocator; |
|
22 |
import org.gvsig.fmap.geom.GeometryManager; |
|
23 |
import org.gvsig.fmap.geom.type.GeometryType; |
|
24 |
import org.gvsig.tools.locator.LocatorException; |
|
25 |
import org.slf4j.Logger; |
|
26 |
import org.slf4j.LoggerFactory; |
|
27 | 13 |
|
28 | 14 |
/** |
29 | 15 |
* |
... | ... | |
31 | 17 |
*/ |
32 | 18 |
public class GMLFeatureTypeLoader extends SimpleReaderFeatureTypeLoader{ |
33 | 19 |
|
34 |
private static final Logger LOGGER = LoggerFactory.getLogger(GMLFeatureTypeLoader.class); |
|
35 |
|
|
36 | 20 |
public GMLFeatureTypeLoader(GMLStoreParameters parameters) { |
37 | 21 |
super(parameters); |
38 | 22 |
} |
39 | 23 |
|
40 | 24 |
protected String getProviderName() { |
41 |
return CSVStoreProvider.NAME;
|
|
25 |
return GMLStoreProvider.NAME;
|
|
42 | 26 |
} |
43 | 27 |
|
44 | 28 |
protected SimpleReader getSimpleReader(Reader in) throws IOException { |
45 |
SimpleReader reader; |
|
46 |
if (CSVStoreParameters.getRawFieldsDefinition(parameters) != null) { |
|
47 |
reader = new FixedLenReader(in, (CSVStoreParameters) parameters); |
|
48 |
} else { |
|
49 |
reader = new CSVReaderSuperCSV(in, (CSVStoreParameters) parameters); |
|
50 |
} |
|
29 |
SimpleReader reader = new GMLReader(in, parameters); |
|
51 | 30 |
return reader; |
52 | 31 |
} |
53 |
|
|
54 |
@Override |
|
55 |
protected boolean isFirstLineHeader() { |
|
56 |
return CSVStoreParameters.isFirstLineHeader(parameters); |
|
57 |
} |
|
58 |
|
|
59 |
|
|
60 |
|
|
61 |
protected String[] getHeaders(CSVStoreParameters parameters, SimpleReader reader) throws RuntimeException, IOException { |
|
62 |
String headers[]; |
|
63 |
headers = CSVStoreParameters.getHeaders(parameters); |
|
64 |
if (headers == null) { |
|
65 |
if (CSVStoreParameters.isFirstLineHeader(parameters)) { |
|
66 |
headers = reader.getHeader(); |
|
67 |
if (headers == null) { |
|
68 |
if (CSVStoreParameters.getIgnoreErrors(parameters)) { |
|
69 |
headers = getFixedHeaders(reader.getColumnsCount()); |
|
70 |
} else { |
|
71 |
String msg = "Can't retrieve header from csv file '" |
|
72 |
+ parameters.getFile() |
|
73 |
.getAbsolutePath() |
|
74 |
+ "' and not specified in the parameters."; |
|
75 |
LOGGER.warn(msg); |
|
76 |
throw new RuntimeException(msg); |
|
77 |
} |
|
78 |
} |
|
79 |
} else { |
|
80 |
headers = getFixedHeaders(reader.getColumnsCount()); |
|
81 |
} |
|
82 |
} else { |
|
83 |
if (CSVStoreParameters.isFirstLineHeader(parameters)) { |
|
84 |
reader.getHeader(); // Skip and ignore the header of file |
|
85 |
} |
|
86 |
} |
|
87 |
return headers; |
|
88 |
} |
|
89 |
|
|
90 |
|
|
91 |
|
|
92 |
public void fillFeatureType(CSVStoreParameters parameters, EditableFeatureType fType, String headers[], AutomaticDetectionOfTypes.DetectedValue automaticTypes[]) { |
|
93 |
String fullFileName = parameters.getFile()==null? "":parameters.getFile().getAbsolutePath(); |
|
94 |
String providerName = this.getProviderName(); |
|
95 |
|
|
96 |
fType.setHasOID(true); |
|
97 |
|
|
98 |
|
|
99 |
FieldTypeParser[] fieldTypes = getFieldTypes(headers, automaticTypes); |
|
100 |
|
|
101 |
fillFeatureType(fType, fieldTypes); |
|
102 |
|
|
103 |
makeGeometry(fType, providerName, fullFileName); |
|
104 |
|
|
105 |
declareGeometryType(fType, fullFileName); |
|
106 |
|
|
107 |
} |
|
108 |
|
|
109 |
private void declareGeometryType(EditableFeatureType fType, String fullFileName) throws LocatorException { |
|
110 |
String geometry_column = CSVStoreParameters.getGeometryColumn(parameters); |
|
111 |
if (!StringUtils.isEmpty(geometry_column)) { |
|
112 |
EditableFeatureAttributeDescriptor attr = (EditableFeatureAttributeDescriptor) fType.get(geometry_column); |
|
113 |
if (attr != null ) { |
|
114 |
if( attr.getType() != DataTypes.GEOMETRY ) { |
|
115 |
attr.setDataType(DataTypes.GEOMETRY); |
|
116 |
} |
|
117 |
GeometryManager geommgr = GeometryLocator.getGeometryManager(); |
|
118 |
GeometryType gt; |
|
119 |
try { |
|
120 |
gt = geommgr.getGeometryType( |
|
121 |
CSVStoreParameters.getGeometryType(parameters), |
|
122 |
CSVStoreParameters.getGeometrySubType(parameters) |
|
123 |
); |
|
124 |
attr.setGeometryType(gt); |
|
125 |
} catch (Exception e) { |
|
126 |
LOGGER.warn("Can't set geometry type for the calculated field in CSV file '" + fullFileName + "'.", e); |
|
127 |
} |
|
128 |
fType.setDefaultGeometryAttributeName(geometry_column); |
|
129 |
} |
|
130 |
} |
|
131 |
} |
|
132 |
|
|
133 |
private void makeGeometry(EditableFeatureType fType, String providerName, String fullFileName) throws LocatorException { |
|
134 |
String[] pointDimensionNames = CSVStoreParameters.getPointDimensionNames(parameters); |
|
135 |
if ( pointDimensionNames != null ) { |
|
136 |
SimpleReaderPointAttributeEmulator emulator = new SimpleReaderPointAttributeEmulator(pointDimensionNames); |
|
137 |
String columnName = CSVStoreParameters.getPointColumnName(parameters); |
|
138 |
if( StringUtils.isBlank(columnName) ) { |
|
139 |
columnName = "geom"; |
|
140 |
} |
|
141 |
EditableFeatureAttributeDescriptor attr = fType.add(columnName, DataTypes.GEOMETRY, emulator); |
|
142 |
GeometryManager geommgr = GeometryLocator.getGeometryManager(); |
|
143 |
GeometryType gt; |
|
144 |
try { |
|
145 |
if ( emulator.getFieldNames() != null && emulator.getFieldNames().length <= 2 ) { |
|
146 |
gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM2D); |
|
147 |
} else { |
|
148 |
gt = geommgr.getGeometryType(Geometry.TYPES.GEOMETRY, Geometry.SUBTYPES.GEOM3D); |
|
149 |
} |
|
150 |
attr.setGeometryType(gt); |
|
151 |
} catch (Exception e) { |
|
152 |
LOGGER.warn("Can't set geometry type for the calculated field in '"+providerName+"' file '" + fullFileName + "'.", e); |
|
153 |
} |
|
154 |
} |
|
155 |
} |
|
156 |
|
|
157 | 32 |
} |
Also available in: Unified diff