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

View differences:

FeatureTypeBinding.java
1 1
package org.gvsig.gpe.gml.parser.v2.features;
2 2

  
3 3
import java.io.IOException;
4
import java.util.Iterator;
4 5
import java.util.Map;
5 6

  
6 7
import javax.xml.namespace.QName;
7 8

  
8 9
import org.gvsig.gpe.gml.parser.GPEDefaultGmlParser;
10
import org.gvsig.gpe.gml.parser.profiles.IBindingProfile;
11
import org.gvsig.gpe.gml.parser.v2.geometries.GeometryBinding;
9 12
import org.gvsig.gpe.gml.utils.GMLGeometries;
10 13
import org.gvsig.gpe.gml.utils.GMLObject;
11 14
import org.gvsig.gpe.gml.utils.GMLTags;
12 15
import org.gvsig.gpe.gml.utils.GMLUtilsParser;
16
import org.gvsig.gpe.parser.IGPEContentHandler;
17
import org.gvsig.gpe.xml.stream.EventType;
13 18
import org.gvsig.gpe.xml.stream.IXmlStreamReader;
14 19
import org.gvsig.gpe.xml.stream.XmlStreamException;
15 20
import org.gvsig.gpe.xml.utils.CompareUtils;
......
122 127
	 * @throws IOException
123 128
	 */
124 129
	public Object parse(IXmlStreamReader parser,GPEDefaultGmlParser handler) throws XmlStreamException, IOException {
130

  
131
        parser.require(EventType.START_ELEMENT, null, null);
132
        
125 133
		boolean endFeature = false;
126
		int currentTag;		
134
		EventType currentTag;		
127 135
		Object feature = null;	
128 136
		//Used to finish to parse the current feature member
129
		QName featureRootType = parser.getName();
137
		QName featureRootType = parser.getElementName();
130 138

  
131 139
		XMLAttributesIterator attributesIterator = new XMLAttributesIterator(parser);		
132 140
		String fid = getID(attributesIterator.getAttributes());
......
144 152
//			}
145 153
//			elementName = featureElement.getTypeName();
146 154
//		}
147
		feature = handler.getContentHandler().startFeature(fid, 
148
				featureRootType.getNamespaceURI(),
149
				GMLUtilsParser.removeBlancSymbol(featureRootType.getLocalPart()),
150
				attributesIterator,
151
				null);
155
        final IGPEContentHandler contentHandler = handler.getContentHandler();
156
        String namespaceURI = featureRootType.getNamespaceURI();
157
        String typeName = GMLUtilsParser.removeBlancSymbol(featureRootType.getLocalPart());
158
        feature = contentHandler
159
                .startFeature(fid, namespaceURI, typeName, attributesIterator, null);
152 160
		
153
		QName tag = parser.getName();
161
		QName tag = parser.getElementName();
154 162
		currentTag = parser.getEventType();
155 163

  
156 164
		while (!endFeature){
157
			switch(currentTag){
158
			case IXmlStreamReader.START_ELEMENT:
165
			switch(currentTag.getCode()){
166
			case EventType.START_ELEMENT_CODE:
159 167
				if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_NAME)){
160 168
					parser.next();
161
					handler.getContentHandler().addNameToFeature(parser.getText(), feature);
169
					contentHandler.addNameToFeature(parser.getText(), feature);
162 170
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_DESCRIPTION)){
163 171
					parser.next();
164 172
					String description = parser.getText();
165
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_BOUNDEDBY)){
166
					Object bbox = handler.getProfile().getBoundedByTypeBinding().parse(parser, handler);
167
					handler.getContentHandler().addBboxToFeature(bbox, feature);
168
				}else{
169
					//If is not a GML...
170
					if (!(CompareUtils.compareWithNamespace(featureRootType,tag))){						
171
						if (GMLGeometries.isGML(tag)){
172
							Object geometry = handler.getProfile().getGeometryBinding().parse(parser, handler);
173
							handler.getContentHandler().addGeometryToFeature(geometry, feature);
174
						}else{
175
						//Elements (elements or features)
176
							Object element = handler.getProfile().getElementTypeBinding().parse(parser, handler, feature, null, null);
177
							handler.getContentHandler().addElementToFeature(element, feature);
178
						}
179
					}
180
				}
173
				} else {
174
                    final IBindingProfile profile = handler.getProfile();
175
                    if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_BOUNDEDBY)){
176
                    	Object bbox = profile.getBoundedByTypeBinding().parse(parser, handler);
177
                    	contentHandler.addBboxToFeature(bbox, feature);
178
                    }else{
179
                    	//If is not a GML...
180
                    	if (!(CompareUtils.compareWithNamespace(featureRootType,tag))){						
181
                    		if (GMLGeometries.isGML(tag)){
182
                    			GeometryBinding geometryBinding = profile.getGeometryBinding();
183
                                Object geometry = geometryBinding.parse(parser, handler);
184
                    			contentHandler.addGeometryToFeature(geometry, feature);
185
                    		}else{
186
                    		//Elements (elements or features)
187
                    			ElementTypeBinding elementTypeBinding = profile.getElementTypeBinding();
188
                                Object element = elementTypeBinding.parse(parser, handler, feature, null, null);
189
                    			contentHandler.addElementToFeature(element, feature);
190
                    		}
191
                    	}
192
                    }
193
                }
181 194
				break;
182
			case IXmlStreamReader.END_ELEMENT:
195
			case EventType.END_ELEMENT_CODE:
183 196
				if (CompareUtils.compareWithNamespace(featureRootType, tag)){						
184 197
					endFeature = true;
185
					handler.getContentHandler().endFeature(feature);
198
					contentHandler.endFeature(feature);
186 199
				}
187 200
				break;
188
			case IXmlStreamReader.CHARACTERS:					
189

  
190
				break;
191 201
			}
192 202
			if (!endFeature){					
193
				currentTag = parser.next();
194
				tag = parser.getName();
203
				currentTag = parser.nextTag();
204
				tag = parser.getElementName();
195 205
			}
196 206
		}			
197 207
		return new GMLObject(feature,GMLObject.FEATURE);		
......
205 215
	 * The id
206 216
	 */
207 217
	public String getID(Map hash){
208
		if (hash.containsKey(GMLTags.GML_FID)){
209
			return (String)hash.get(GMLTags.GML_FID);
210
		}
211
		String id = GMLTags.GML_NAMESPACE_PREFIX + ":" + GMLTags.GML_ID;
212
		if (hash.containsKey(id)){
213
			return (String)hash.get(id);
214
		}
215
		return null;
218
        if (hash.size() == 0) {
219
            return null;
220
        }
221
        Map.Entry e;
222
        QName name;
223
        for (Iterator it = hash.entrySet().iterator(); it.hasNext();) {
224
            e = (Map.Entry) it.next();
225
            name = (QName) e.getKey();
226
            if (GMLTags.GML_FID.getLocalPart().equals(name.getLocalPart())
227
                    || GMLTags.GML_ID.getLocalPart().equals(name.getLocalPart())) {
228
                return (String) e.getValue();
229
            }
230
        }
231
        return null;
216 232
	}
217 233
}

Also available in: Unified diff