Revision 53 branches/v1_9_0/libGPE-GML/src/org/gvsig/gpe/gml/parser/v2/features/ElementTypeBinding.java
ElementTypeBinding.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.utils.GMLGeometries; |
10 |
import org.gvsig.gpe.gml.utils.GMLTags; |
|
9 | 11 |
import org.gvsig.gpe.gml.utils.GMLUtilsParser; |
12 |
import org.gvsig.gpe.parser.IGPEContentHandler; |
|
13 |
import org.gvsig.gpe.xml.stream.EventType; |
|
10 | 14 |
import org.gvsig.gpe.xml.stream.IXmlStreamReader; |
11 | 15 |
import org.gvsig.gpe.xml.stream.XmlStreamException; |
12 | 16 |
import org.gvsig.gpe.xml.utils.CompareUtils; |
... | ... | |
109 | 113 |
* @throws IOException |
110 | 114 |
*/ |
111 | 115 |
public Object parse(IXmlStreamReader parser,GPEDefaultGmlParser handler, Object feature, Object parentElement, IXSElementDeclaration parentType) throws XmlStreamException, IOException { |
116 |
|
|
117 |
parser.require(EventType.START_ELEMENT, null, null); |
|
118 |
|
|
112 | 119 |
boolean endFeature = false; |
113 | 120 |
boolean isGeometryTag = false; |
114 |
int currentTag;
|
|
121 |
EventType currentEvent;
|
|
115 | 122 |
Object element = null; |
116 | 123 |
Object value = null; |
117 | 124 |
Object geometry = null; |
118 | 125 |
boolean isInitialized = false; |
119 | 126 |
//Used to finish to parse the current element |
120 |
QName elementRootType = parser.getName();
|
|
127 |
final QName elementRootType = parser.getElementName();
|
|
121 | 128 |
String type = null; |
122 | 129 |
|
123 | 130 |
XMLAttributesIterator attributesIterator = new XMLAttributesIterator(parser); |
... | ... | |
135 | 142 |
type = TypeUtils.getXSType(String.class); |
136 | 143 |
} |
137 | 144 |
|
138 |
QName tag = parser.getName(); |
|
139 |
currentTag = parser.getEventType();
|
|
145 |
QName tag = parser.getElementName();
|
|
146 |
currentEvent = parser.getEventType();
|
|
140 | 147 |
|
148 |
final IGPEContentHandler contentHandler = handler.getContentHandler(); |
|
149 |
final IBindingProfile profile = handler.getProfile(); |
|
150 |
final String namespaceURI = elementRootType.getNamespaceURI(); |
|
151 |
final String localName = GMLUtilsParser.removeBlancSymbol(elementRootType.getLocalPart()); |
|
141 | 152 |
while (!endFeature){ |
142 |
switch(currentTag){
|
|
143 |
case IXmlStreamReader.START_ELEMENT:
|
|
153 |
switch(currentEvent.getCode()){
|
|
154 |
case EventType.START_ELEMENT_CODE:
|
|
144 | 155 |
if (!(CompareUtils.compareWithNamespace(tag,elementRootType))){ |
145 | 156 |
//If is a geometry |
146 |
if (GMLGeometries.isGML(tag)){ |
|
147 |
geometry = handler.getProfile().getGeometryBinding(). |
|
148 |
parse(parser, handler); |
|
149 |
handler.getContentHandler().addGeometryToFeature(geometry, feature); |
|
150 |
if (geometry==null){ |
|
151 |
System.out.println("\t\t\tGEOMETRIA VACIA"); |
|
152 |
//Warning geometria vacia |
|
153 |
} |
|
154 |
isGeometryTag=true; |
|
157 |
if (GMLGeometries.isGML(tag)){ |
|
158 |
geometry = profile.getGeometryBinding().parse(parser, handler); |
|
159 |
contentHandler.addGeometryToFeature(geometry, feature); |
|
160 |
if (geometry == null) { |
|
161 |
System.out.println("\t\t\tGEOMETRIA VACIA"); |
|
162 |
// Warning geometria vacia |
|
163 |
} |
|
164 |
isGeometryTag = true; |
|
155 | 165 |
}else { |
156 | 166 |
//If is not a geometry could be a complex feature |
157 | 167 |
if (!isInitialized){ |
158 |
element = handler.getContentHandler().startElement(elementRootType.getNamespaceURI(), |
|
159 |
GMLUtilsParser.removeBlancSymbol(elementRootType.getLocalPart()), |
|
160 |
null, |
|
161 |
attributesIterator, |
|
162 |
parentElement); |
|
163 |
isInitialized = true; |
|
168 |
element = contentHandler.startElement(namespaceURI, localName, null, |
|
169 |
attributesIterator, parentElement); |
|
170 |
isInitialized = true; |
|
164 | 171 |
} |
165 |
handler.getProfile().getElementTypeBinding(). |
|
166 |
parse(parser, handler, feature, element, null); |
|
172 |
final ElementTypeBinding elementTypeBinding = profile |
|
173 |
.getElementTypeBinding(); |
|
174 |
elementTypeBinding.parse(parser, handler, feature, element, null); |
|
167 | 175 |
} |
168 | 176 |
} |
169 | 177 |
break; |
170 |
case IXmlStreamReader.END_ELEMENT:
|
|
178 |
case EventType.END_ELEMENT_CODE:
|
|
171 | 179 |
if (CompareUtils.compareWithNamespace(tag,elementRootType)){ |
172 | 180 |
endFeature = true; |
173 | 181 |
//If not is complex the element has not been created yet |
174 | 182 |
if (!isInitialized){ |
175 |
element = handler.getContentHandler().startElement( |
|
176 |
elementRootType.getNamespaceURI(), |
|
177 |
GMLUtilsParser.removeBlancSymbol(elementRootType.getLocalPart()), |
|
178 |
value, |
|
179 |
attributesIterator, |
|
180 |
parentElement); |
|
183 |
element = contentHandler.startElement(namespaceURI, localName, value, |
|
184 |
attributesIterator, parentElement); |
|
181 | 185 |
isInitialized = true; |
182 | 186 |
} |
183 |
handler.getContentHandler().endElement(element);
|
|
187 |
contentHandler.endElement(element);
|
|
184 | 188 |
} |
185 | 189 |
break; |
186 |
case IXmlStreamReader.CHARACTERS: |
|
187 |
if (geometry == null){ |
|
188 |
value = TypeUtils.getValue(elementType, parser.getText()); |
|
189 |
} |
|
190 |
default: |
|
191 |
if (currentEvent.isValue()) { |
|
192 |
if (geometry == null) { |
|
193 |
switch (currentEvent.getCode()) { |
|
194 |
case EventType.VALUE_BOOL_CODE: |
|
195 |
value = Boolean.valueOf(parser.getBooleanValue()); |
|
196 |
break; |
|
197 |
case EventType.VALUE_BYTE_CODE: |
|
198 |
value = new Integer(parser.getByteValue()); |
|
199 |
break; |
|
200 |
case EventType.VALUE_DOUBLE_CODE: |
|
201 |
value = new Double(parser.getDoubleValue()); |
|
202 |
break; |
|
203 |
case EventType.VALUE_FLOAT_CODE: |
|
204 |
value = new Float(parser.getFloatValue()); |
|
205 |
break; |
|
206 |
case EventType.VALUE_INT_CODE: |
|
207 |
value = new Integer(parser.getIntValue()); |
|
208 |
break; |
|
209 |
case EventType.VALUE_LONG_CODE: |
|
210 |
value = new Long(parser.getLongValue()); |
|
211 |
break; |
|
212 |
default: |
|
213 |
value = TypeUtils.getValue(elementType, parser.getText()); |
|
214 |
break; |
|
215 |
} |
|
216 |
} |
|
217 |
} |
|
190 | 218 |
break; |
191 | 219 |
} |
192 | 220 |
if (!endFeature){ |
193 |
currentTag = parser.next(); |
|
194 |
tag = parser.getName(); |
|
221 |
currentEvent = parser.next(); |
|
222 |
if(currentEvent.isTag()){ |
|
223 |
tag = parser.getElementName(); |
|
224 |
} |
|
195 | 225 |
} |
196 |
} |
|
226 |
} |
|
227 |
|
|
228 |
parser.require(EventType.END_ELEMENT, elementRootType); |
|
197 | 229 |
return element; |
198 | 230 |
} |
199 | 231 |
} |
Also available in: Unified diff