Revision 53 branches/v1_9_0/libGPE-GML/src/org/gvsig/gpe/gml/parser/v2/geometries/PointTypeBinding.java
PointTypeBinding.java | ||
---|---|---|
5 | 5 |
import javax.xml.namespace.QName; |
6 | 6 |
|
7 | 7 |
import org.gvsig.gpe.gml.parser.GPEDefaultGmlParser; |
8 |
import org.gvsig.gpe.gml.parser.profiles.IBindingProfile; |
|
8 | 9 |
import org.gvsig.gpe.gml.parser.v2.coordinates.CoordTypeIterator; |
9 | 10 |
import org.gvsig.gpe.gml.parser.v2.coordinates.CoordinatesTypeIterator; |
10 | 11 |
import org.gvsig.gpe.gml.utils.GMLTags; |
12 |
import org.gvsig.gpe.parser.IGPEContentHandler; |
|
13 |
import org.gvsig.gpe.xml.stream.EventType; |
|
11 | 14 |
import org.gvsig.gpe.xml.stream.IXmlStreamReader; |
12 | 15 |
import org.gvsig.gpe.xml.stream.XmlStreamException; |
13 | 16 |
import org.gvsig.gpe.xml.utils.CompareUtils; |
14 | 17 |
|
18 |
import com.sun.corba.se.impl.orb.ParserTable; |
|
19 |
|
|
15 | 20 |
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana |
16 | 21 |
* |
17 | 22 |
* Copyright (C) 2004 IVER T.I. and Generalitat Valenciana. |
... | ... | |
107 | 112 |
* @throws IOException |
108 | 113 |
*/ |
109 | 114 |
public Object parse(IXmlStreamReader parser,GPEDefaultGmlParser handler) throws XmlStreamException, IOException { |
110 |
boolean endFeature = false; |
|
111 |
int currentTag; |
|
112 |
Object point = null; |
|
113 |
|
|
115 |
|
|
116 |
parser.require(EventType.START_ELEMENT, GMLTags.GML_POINT); |
|
117 |
|
|
114 | 118 |
super.setAtributtes(parser, handler.getErrorHandler()); |
115 | 119 |
|
116 |
QName tag = parser.getName(); |
|
117 |
currentTag = parser.getEventType(); |
|
120 |
parser.nextTag(); |
|
118 | 121 |
|
119 |
while (!endFeature){ |
|
120 |
switch(currentTag){ |
|
121 |
case IXmlStreamReader.START_ELEMENT: |
|
122 |
point = parseTag(parser, handler, tag, id, srsName); |
|
123 |
//The parser pointer is in the </gml:Point> tag |
|
124 |
if (point != null){ |
|
125 |
return point; |
|
126 |
} |
|
127 |
break; |
|
128 |
case IXmlStreamReader.END_ELEMENT: |
|
129 |
if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_POINT)) |
|
130 |
{ |
|
131 |
endFeature = true; |
|
132 |
handler.getContentHandler().endPoint(point); |
|
133 |
} |
|
134 |
break; |
|
135 |
case IXmlStreamReader.CHARACTERS: |
|
136 |
|
|
137 |
break; |
|
138 |
} |
|
139 |
if (!endFeature){ |
|
140 |
currentTag = parser.next(); |
|
141 |
tag = parser.getName(); |
|
142 |
} |
|
143 |
} |
|
122 |
Object point = parseTag(parser, handler, id, srsName); |
|
123 |
|
|
124 |
parser.require(EventType.END_ELEMENT, null, null); |
|
125 |
if(!GMLTags.GML_POINT.equals(parser.getElementName())){ |
|
126 |
parser.nextTag(); |
|
127 |
parser.require(EventType.END_ELEMENT, GMLTags.GML_POINT); |
|
128 |
} |
|
129 |
|
|
144 | 130 |
return point; |
145 | 131 |
} |
146 | 132 |
|
... | ... | |
155 | 141 |
* @throws XmlStreamException |
156 | 142 |
* @throws IOException |
157 | 143 |
*/ |
158 |
protected Object parseTag(IXmlStreamReader parser,GPEDefaultGmlParser handler, QName tag, String id, String srsName) throws XmlStreamException, IOException{ |
|
144 |
protected Object parseTag(IXmlStreamReader parser,GPEDefaultGmlParser handler, String id, String srsName) throws XmlStreamException, IOException{ |
|
145 |
parser.require(EventType.START_ELEMENT, null, null); |
|
146 |
final QName coordinatesTag = parser.getElementName(); |
|
159 | 147 |
Object point = null; |
160 |
//GR: esto lo agregu? yo pero a ciegas, no s? si es correcto, lo comento |
|
161 |
// if(CompareUtils.compareWithNamespace(GMLTags.GML_POINT, tag)){ |
|
162 |
// parser.nextTag(); |
|
163 |
// tag = parser.getName(); |
|
164 |
// } |
|
165 |
if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_COORDINATES)){ |
|
166 |
CoordinatesTypeIterator coordinatesIterator = handler.getProfile().getCoordinatesTypeBinding(); |
|
167 |
coordinatesIterator.initialize(parser, handler,GMLTags.GML_POINT); |
|
168 |
point = handler.getContentHandler().startPoint(id, |
|
169 |
coordinatesIterator, |
|
170 |
srsName); |
|
171 |
}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_COORD)){ |
|
172 |
CoordTypeIterator coordinatesIterator = handler.getProfile().getCoordTypeBinding(); |
|
173 |
coordinatesIterator.initialize(parser, handler,GMLTags.GML_POINT); |
|
174 |
point = handler.getContentHandler().startPoint(id, |
|
175 |
coordinatesIterator, |
|
176 |
srsName); |
|
177 |
} |
|
148 |
|
|
149 |
final IBindingProfile profile = handler.getProfile(); |
|
150 |
final IGPEContentHandler contentHandler = handler.getContentHandler(); |
|
151 |
if (CompareUtils.compareWithNamespace(coordinatesTag, GMLTags.GML_COORDINATES)) { |
|
152 |
|
|
153 |
CoordinatesTypeIterator coordinatesIterator = profile.getCoordinatesTypeBinding(); |
|
154 |
coordinatesIterator.initialize(parser, handler, GMLTags.GML_POINT); |
|
155 |
point = contentHandler.startPoint(id, coordinatesIterator, srsName); |
|
156 |
|
|
157 |
parser.require(EventType.END_ELEMENT, GMLTags.GML_COORDINATES); |
|
158 |
|
|
159 |
} else if (CompareUtils.compareWithNamespace(coordinatesTag, GMLTags.GML_COORD)) { |
|
160 |
CoordTypeIterator coordinatesIterator = profile.getCoordTypeBinding(); |
|
161 |
coordinatesIterator.initialize(parser, handler, GMLTags.GML_POINT); |
|
162 |
|
|
163 |
parser.require(EventType.START_ELEMENT, GMLTags.GML_COORD); |
|
164 |
|
|
165 |
point = contentHandler.startPoint(id, coordinatesIterator, srsName); |
|
166 |
|
|
167 |
QName elementName = parser.getElementName(); |
|
168 |
EventType eventType = parser.getEventType(); |
|
169 |
|
|
170 |
parser.require(EventType.END_ELEMENT, GMLTags.GML_COORD); |
|
171 |
}else{ |
|
172 |
throw new IllegalArgumentException("Unknown coordinates tag, expected one of gml:coordinates, gml:coords"); |
|
173 |
} |
|
174 |
|
|
175 |
parser.require(EventType.END_ELEMENT, coordinatesTag); |
|
176 |
|
|
178 | 177 |
return point; |
179 | 178 |
} |
180 | 179 |
} |
Also available in: Unified diff