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

View differences:

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

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

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

  
8 7
import org.gvsig.gpe.gml.parser.GPEDefaultGmlParser;
8
import org.gvsig.gpe.gml.parser.profiles.IBindingProfile;
9 9
import org.gvsig.gpe.gml.utils.GMLObject;
10 10
import org.gvsig.gpe.gml.utils.GMLTags;
11
import org.gvsig.gpe.gml.utils.GMLUtilsParser;
11
import org.gvsig.gpe.parser.IGPEContentHandler;
12
import org.gvsig.gpe.xml.stream.EventType;
12 13
import org.gvsig.gpe.xml.stream.IXmlStreamReader;
13 14
import org.gvsig.gpe.xml.stream.XmlStreamException;
14 15
import org.gvsig.gpe.xml.utils.CompareUtils;
......
67 68
 *
68 69
 */
69 70
/**
70
 * This class parses the gml objects that has a 
71
 * gml:FeatureCollection type. Example:
71
 * This class parses the gml objects that has a gml:FeatureCollection type. Example:
72 72
 * <p>
73
 * 
73 74
 * <pre>
74
 * <code>
75
 * &lt;code&gt;
75 76
 * &lt;gml:featureCollection&gt;
76 77
 * &lt;gml:featureMember&gt; 
77 78
 * &lt;/gml:featureMember&gt;
78 79
 * &lt;gml:featureMember&gt; 
79 80
 * &lt;/gml:featureMember&gt;
80 81
 * &lt;/gml:featureCollection&gt;
81
 * </code>
82
 * &lt;/code&gt;
82 83
 * </pre>
84
 * 
83 85
 * </p>
86
 * 
84 87
 * @author Jorge Piera LLodr? (jorge.piera@iver.es)
85 88
 */
86 89
public class FeatureCollectionBinding {
87
	/**
88
	 * It parses a feature collection
89
	 * @param parser
90
	 * The XML parser
91
	 * @param handler
92
	 * The GPE parser that contains the content handler and
93
	 * the error handler
94
	 * @return
95
	 * A feature
96
	 * @throws XmlStreamException
97
	 * @throws IOException
98
	 */
99
	public Object parse(IXmlStreamReader parser,GPEDefaultGmlParser handler) throws XmlStreamException, IOException {
100
		boolean endCollection = false;
101
		int currentTag;		
102
		Object layer = null;	
103
		//Used to finish to parse the current feature collection
104
		while(parser.getEventType()!= IXmlStreamReader.START_ELEMENT){
105
			parser.next();			
106
		}
107
		QName layerRootType = parser.getName();		
108
		
109
		XMLAttributesIterator attributesIterator = new XMLAttributesIterator(parser);		
110
		String fid = handler.getProfile().getFeatureTypeBinding().getID(attributesIterator.getAttributes());
90
    /**
91
     * It parses a feature collection
92
     * 
93
     * @param parser
94
     *            The XML parser
95
     * @param handler
96
     *            The GPE parser that contains the content handler and the error handler
97
     * @return A feature
98
     * @throws XmlStreamException
99
     * @throws IOException
100
     */
101
    public Object parse(IXmlStreamReader parser, GPEDefaultGmlParser handler)
102
            throws XmlStreamException, IOException {
111 103

  
112
		layer = handler.getContentHandler().startLayer(fid, parser.getName().getNamespaceURI(), null, null, null, attributesIterator, null, null);
104
        if(!parser.getEventType().isTag()){
105
            parser.nextTag();
106
        }
107
        
108
        boolean endCollection = false;
109
        EventType currentTag;
110
        Object layer = null;
113 111

  
114
		QName tag = parser.getName();
115
		currentTag = parser.getEventType();
112
        final QName layerRootType = parser.getElementName();
116 113

  
117
		while (!endCollection){
118
			switch(currentTag){
119
			case IXmlStreamReader.START_ELEMENT:
120
				if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_NAME)){
121
					parser.next();
122
					handler.getContentHandler().addNameToLayer(parser.getText(), layer);
123
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_DESCRIPTION)){
124
					parser.next();
125
					handler.getContentHandler().addDescriptionToLayer(parser.getText(), layer);
126
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_BOUNDEDBY)){
127
					Object bbox = handler.getProfile().getBoundedByTypeBinding().
128
							parse(parser, handler);
129
					handler.getContentHandler().addBboxToLayer(bbox, layer);
130
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_FEATUREMEMBER)){
131
					GMLObject object = (GMLObject)handler.getProfile().getFeatureMemberTypeBinding().
132
							parse(parser, handler);
133
				
134
					if (object != null){
135
						if (GMLObject.FEATURE == object.getType()){
136
							handler.getContentHandler().addFeatureToLayer(object.getObject(), layer);
137
						}else{
138
							handler.getContentHandler().addParentLayerToLayer(layer, object.getObject());
139
						}
140
					}
141
				}else if (CompareUtils.compareWithNamespace(tag,GMLTags.GML_FEATUREMEMBERS)){
142
					handler.getProfile().getFeatureMembersTypeBinding().
143
					parse(parser, handler, layer);
144
				}else{
145
					if (!(CompareUtils.compareWithNamespace(layerRootType,tag))){						
146
						//Feature members
147
						GMLObject object =(GMLObject)handler.getProfile().getFeatureTypeBinding().parse(parser, handler);
148
						handler.getContentHandler().addFeatureToLayer(object.getObject(), layer);
149
					}
150
				}
151
				break;
152
			case IXmlStreamReader.END_ELEMENT:
153
				if (CompareUtils.compareWithNamespace(tag,layerRootType)){						
154
					endCollection = true;
155
					handler.getContentHandler().endLayer(layer);
156
				}
157
				break;
158
			case IXmlStreamReader.CHARACTERS:					
114
        XMLAttributesIterator attributesIterator = new XMLAttributesIterator(parser);
115
        final IBindingProfile profile = handler.getProfile();
116
        String fid = profile.getFeatureTypeBinding().getID(
117
                attributesIterator.getAttributes());
159 118

  
160
				break;
161
			case IXmlStreamReader.END_DOCUMENT:
162
				endCollection = true;
163
				break;
164
			}
165
			if (!endCollection){					
166
				currentTag = parser.next();
167
				tag = parser.getName();
168
			}
169
		}			
170
		return layer;	
171
	}
119
        final IGPEContentHandler contentHandler = handler.getContentHandler();
120
        layer = contentHandler.startLayer(fid, layerRootType.getNamespaceURI(),
121
                null, null, null, attributesIterator, null, null);
122

  
123
        QName tag = parser.getElementName();
124
        currentTag = parser.getEventType();
125

  
126
        while (!endCollection) {
127
            switch (currentTag.getCode()) {
128
            case EventType.START_ELEMENT_CODE:
129
                if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_NAME)) {
130
                    parser.next();
131
                    contentHandler.addNameToLayer(parser.getText(), layer);
132
                } else if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_DESCRIPTION)) {
133
                    parser.next();
134
                    contentHandler.addDescriptionToLayer(parser.getText(), layer);
135
                } else if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_BOUNDEDBY)) {
136
                    Object bbox = profile.getBoundedByTypeBinding().parse(parser,
137
                            handler);
138
                    contentHandler.addBboxToLayer(bbox, layer);
139
                } else if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_FEATUREMEMBER)) {
140
                    GMLObject object = (GMLObject) profile
141
                            .getFeatureMemberTypeBinding().parse(parser, handler);
142

  
143
                    if (object != null) {
144
                        if (GMLObject.FEATURE == object.getType()) {
145
                            contentHandler
146
                                    .addFeatureToLayer(object.getObject(), layer);
147
                        } else {
148
                            contentHandler.addParentLayerToLayer(layer,
149
                                    object.getObject());
150
                        }
151
                    }
152
                } else if (CompareUtils.compareWithNamespace(tag, GMLTags.GML_FEATUREMEMBERS)) {
153
                    profile.getFeatureMembersTypeBinding().parse(parser, handler,
154
                            layer);
155
                } else {
156
                    if (!(CompareUtils.compareWithNamespace(layerRootType, tag))) {
157
                        // Feature members
158
                        GMLObject object = (GMLObject) profile.getFeatureTypeBinding()
159
                                .parse(parser, handler);
160
                        contentHandler.addFeatureToLayer(object.getObject(), layer);
161
                    }
162
                }
163
                break;
164
            case EventType.END_ELEMENT_CODE:
165
                if (CompareUtils.compareWithNamespace(tag, layerRootType)) {
166
                    endCollection = true;
167
                    contentHandler.endLayer(layer);
168
                }
169
                break;
170
            case EventType.END_DOCUMENT_CODE:
171
                endCollection = true;
172
                break;
173
            }
174
            if (!endCollection) {
175
                currentTag = parser.nextTag();
176
                tag = parser.getElementName();
177
            }
178
        }
179
        return layer;
180
    }
172 181
}

Also available in: Unified diff