Revision 47644

View differences:

trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.geometry/org.gvsig.fmap.geometry.jts/src/main/java/org/gvsig/fmap/geom/jts/gml/GeometryStrategiesGML3.java
14 14
import com.vividsolutions.jts.geom.MultiPolygon;
15 15
import com.vividsolutions.jts.geom.Polygon;
16 16
import com.vividsolutions.jts.io.gml2.GMLConstants;
17
import com.vividsolutions.jts.operation.linemerge.LineMerger;
17 18
import java.util.HashMap;
18 19
import java.util.List;
20
import org.apache.commons.collections4.CollectionUtils;
19 21
import org.apache.commons.lang3.StringUtils;
20 22
import org.apache.commons.lang3.tuple.ImmutablePair;
21 23
import org.apache.commons.lang3.tuple.Pair;
22
import org.gvsig.fmap.geom.aggregate.MultiLine;
23 24
import static org.gvsig.fmap.geom.jts.gml.GeometryStrategies.getSrid;
24 25
import org.xml.sax.SAXException;
25 26

  
......
34 35
        
35 36
        GeometryStrategies.ParseStrategy oneChild = new GeometryStrategies.ParseStrategy() {
36 37

  
38
            @Override
37 39
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
38 40
                if (arg.children.size() != 1) {
39 41
                    throw new SAXException("Geometry Members may only contain one geometry.");
......
47 49

  
48 50
        GeometryStrategies.ParseStrategy manyChilds = new GeometryStrategies.ParseStrategy() {
49 51

  
52
            @Override
50 53
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
51 54
                return arg.children;
52 55
            }
......
71 74

  
72 75
        strats.put("posList".toLowerCase(), new GeometryStrategies.ParseStrategy() {
73 76

  
77
            @Override
74 78
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
75 79
                if (arg.text == null || "".equals(arg.text)) {
76 80
                    throw new SAXException("Cannot create a coordinate sequence without text to parse");
......
113 117

  
114 118
        strats.put("PolygonPatch".toLowerCase(), new GeometryStrategies.ParseStrategy() {
115 119

  
120
            @Override
116 121
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
117 122
                Object exterior = arg.children.get(0);
118 123
                Object interior = null;
......
125 130

  
126 131
        strats.put("patches".toLowerCase(), new GeometryStrategies.ParseStrategy() {
127 132

  
133
            @Override
128 134
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
129 135
                return arg.children;
130 136
            }
......
132 138

  
133 139
        strats.put("Surface".toLowerCase(), new GeometryStrategies.ParseStrategy() {
134 140

  
141
            @Override
135 142
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
136 143

  
137 144
                List<Pair<LinearRing,List<LinearRing>>> patches = (List<Pair<LinearRing,List<LinearRing>>>) arg.children.get(0);
......
159 166
        
160 167
        strats.put("MultiSurface".toLowerCase(), new GeometryStrategies.ParseStrategy() {
161 168

  
169
            @Override
162 170
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
163 171

  
164 172
                List<Polygon> polygons = arg.children;
......
176 184

  
177 185
        strats.put("MultiCurve".toLowerCase(), new GeometryStrategies.ParseStrategy() {
178 186

  
187
            @Override
179 188
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
180 189

  
181 190
                List<LineString> curves = arg.children;
......
189 198
            }
190 199
        });
191 200

  
201
        
202
        strats.put("segments".toLowerCase(), manyChilds);
203
        strats.put("LineStringSegment".toLowerCase(), oneChild);
204
        
205
        strats.put("Curve".toLowerCase(), new GeometryStrategies.ParseStrategy() {
192 206

  
207
            @Override
208
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
209
                
210
                //Curve/segments/LineStringSegment/posList
211

  
212
                LineString curve = null;
213
                List<CoordinateSequence> segments = (List<CoordinateSequence>) arg.children.get(0);
214
                if (CollectionUtils.isNotEmpty(segments)) {
215
                    CoordinateSequence segment = segments.get(0);
216
                    if (segment != null) {
217
                        curve = gf.createLineString(segment);
218
                    }
219
                }
220
                return curve;
221
            }
222
        });
223

  
224
        strats.put("Ring".toLowerCase(), new GeometryStrategies.ParseStrategy() {
225

  
226
            @Override
227
            public Object parse(GMLHandler.Handler arg, GeometryFactory gf) throws SAXException {
228
                
229
                //Ring/curveMember/LineString/posList
230

  
231
                LineMerger merger = new LineMerger();
232
                List<LineString> segments = (List<LineString>) arg.children;//.get(0);
233
                for (LineString segment : segments) {
234
                    merger.add(segment);
235
                }
236
                List<LineString> merged = (List<LineString>) merger.getMergedLineStrings();
237
                return gf.createLinearRing(merged.get(0).getCoordinateSequence());
238
            }
239
        });
240

  
193 241
        return strats;
194 242

  
195 243
    }

Also available in: Unified diff