Revision 53 branches/v1_9_0/libGPE-GML/src/org/gvsig/gpe/gml/parser/v2/geometries/PointTypeBinding.java

View differences:

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