Revision 11205 trunk/libraries/libGPE-KML/src/org/gvsig/gpe/kml/bindings/PlaceMarketBinding.java

View differences:

PlaceMarketBinding.java
1 1
package org.gvsig.gpe.kml.bindings;
2 2

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

  
6
import org.gvsig.exceptions.BaseException;
7
import org.gvsig.gpe.gml.factories.IGeometriesFactory;
8
import org.gvsig.gpe.kml.KmlAttributesMap;
9
import org.gvsig.gpe.kml.KmlFeaturesIterator;
5
import org.gvsig.gpe.kml.GPEKmlParser;
10 6
import org.gvsig.gpe.kml.KmlTags;
11
import org.gvsig.gpe.kml.binfings.geometries.LineStringTypeBinding;
12
import org.gvsig.gpe.kml.binfings.geometries.PointTypeBinding;
13
import org.gvsig.gpe.kml.binfings.geometries.PolygonTypeBinding;
14
import org.gvsig.gpe.kml.engine.IReaderFile;
7
import org.gvsig.gpe.kml.bindings.geometries.LineStringTypeBinding;
8
import org.gvsig.gpe.kml.bindings.geometries.PointTypeBinding;
9
import org.gvsig.gpe.kml.bindings.geometries.PolygonTypeBinding;
15 10
import org.gvsig.gpe.kml.exceptions.KmlBodyParseException;
16 11
import org.kxml2.io.KXmlParser;
12
import org.xmlpull.v1.XmlPullParser;
17 13
import org.xmlpull.v1.XmlPullParserException;
18 14

  
19 15
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
......
60 56
 *
61 57
 * $Id$
62 58
 * $Log$
63
 * Revision 1.1  2007-03-07 08:19:10  jorpiell
59
 * Revision 1.2  2007-04-13 13:16:21  jorpiell
60
 * Add KML reading support
61
 *
62
 * Revision 1.1  2007/03/07 08:19:10  jorpiell
64 63
 * Pasadas las clases de KML de libGPE-GML a libGPE-KML
65 64
 *
66 65
 * Revision 1.1  2007/02/28 11:48:31  csanchez
......
77 76
/**
78 77
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
79 78
 */
80
public class PlaceMarketBinding extends AbstractComplexBinding{
79
public class PlaceMarketBinding {
81 80

  
82
	public PlaceMarketBinding(IGeometriesFactory gFactory) {
83
		super(gFactory);		
84
	}
85

  
86
	public Object parse(IReaderFile reader) throws BaseException {
81
	public static void parse(XmlPullParser parser,GPEKmlParser handler)  throws KmlBodyParseException {
87 82
		boolean endFeature = false;
88
		int currentTag;
89
		Object feature = null;
83
		int currentTag;		
90 84
			
91
		try {
92
			String tag = reader.getName();
93
			currentTag = reader.getEventType();
94
			
95
			while (!endFeature){
96
				switch(currentTag){
97
				case KXmlParser.START_TAG:
98
					if (tag.compareTo(KmlTags.PLACEMARK) == 0){
99
						feature = parsePlaceMarketBody(reader);
100
						endFeature = true;
101
					}
102
					break;
103
				case KXmlParser.END_TAG:
104
					if (tag.compareTo(KmlTags.PLACEMARK) == 0){						
105
						endFeature = true;
106
					}
107
					break;
108
				case KXmlParser.TEXT:					
109
					
110
					break;
111
				}
112
				if (!endFeature){					
113
					currentTag = reader.next();
114
					tag = reader.getName();
115
				}
116
			}			
117
		} catch (XmlPullParserException e) {
118
			throw new KmlBodyParseException(e);
119
		} catch (IOException e) {
120
			throw new KmlBodyParseException(e);
121
		}
122
		return feature;
123
	}
124

  
125
	private Object parsePlaceMarketBody(IReaderFile reader) throws KmlBodyParseException {
126
		boolean endFeature = false;
127
		int currentTag;
128
		Object geometry = null;
85
		Object feature = handler.getContentHandler().startFeature(null, null);
129 86
		
130
		//We have to add the default values for this feature
131
		KmlAttributesMap values = new KmlAttributesMap();	
132
		values.put(KmlTags.FOLDER_NAME,KmlFeaturesIterator.getCurrentFolder());
133
		values.put(KmlTags.NAME,"");
134
		values.put(KmlTags.DESCRIPTION,"");
135
		values.put(KmlTags.VISIBILITY,"");
136
		values.put(KmlTags.LOOKAT,new LinkedHashMap());
137
		
138
		
139 87
		try {
140
			currentTag = reader.next();
141
			String tag = reader.getName();			
88
			String tag = parser.getName();
89
			currentTag = parser.getEventType();
142 90
			
143 91
			while (!endFeature){
144 92
				switch(currentTag){
145
				case KXmlParser.START_TAG:					
93
				case KXmlParser.START_TAG:
146 94
					if (tag.compareTo(KmlTags.NAME) == 0){
147
						reader.next();
148
						values.put(KmlTags.NAME,reader.getText());
95
						parser.next();
96
						handler.getContentHandler().addNameToFeature(feature,parser.getText());
149 97
					}else if (tag.compareTo(KmlTags.DESCRIPTION) == 0){
150
						reader.next();
151
						values.put(KmlTags.DESCRIPTION,reader.getText());
98
						parser.next();
99
						String description = parser.getText();
152 100
					}else if (tag.compareTo(KmlTags.VISIBILITY) == 0){
153
						reader.next();
154
						values.put(KmlTags.VISIBILITY,reader.getText());
101
						parser.next();
102
						String visibility = parser.getText();
155 103
					}else if (tag.compareTo(KmlTags.LOOKAT) == 0){
156
						LinkedHashMap lootAtParams = (LinkedHashMap)new LookAtBinding(getGFactory()).parse(reader);
157
						values.put(KmlTags.LOOKAT,lootAtParams);
104
						LookAtBinding.parse(parser, handler);
158 105
					}else if (tag.compareTo(KmlTags.STYLEURL) == 0){
159
						
106
						parser.next();
107
						String styleURL = parser.getText();
160 108
					}else if (tag.compareTo(KmlTags.POINT) == 0){
161
						geometry = new PointTypeBinding(getGFactory()).parse(reader);
109
						PointTypeBinding.parse(parser, handler);
162 110
					}else if (tag.compareTo(KmlTags.LINESTRING) == 0){
163
						geometry = new LineStringTypeBinding(getGFactory()).parse(reader);
111
						LineStringTypeBinding.parse(parser, handler);
164 112
					}else if (tag.compareTo(KmlTags.POLYGON) == 0){
165
						geometry = new PolygonTypeBinding(getGFactory()).parse(reader);
113
						PolygonTypeBinding.parse(parser, handler);
166 114
					}
167 115
					break;
168 116
				case KXmlParser.END_TAG:
169
					if (tag.compareTo(KmlTags.PLACEMARK) == 0){
117
					if (tag.compareTo(KmlTags.PLACEMARK) == 0){						
170 118
						endFeature = true;
119
						handler.getContentHandler().endFeature(feature);
171 120
					}
172 121
					break;
173 122
				case KXmlParser.TEXT:					
......
175 124
					break;
176 125
				}
177 126
				if (!endFeature){					
178
					currentTag = reader.next();
179
					tag = reader.getName();
127
					currentTag = parser.next();
128
					tag = parser.getName();
180 129
				}
181 130
			}			
182 131
		} catch (XmlPullParserException e) {
183 132
			throw new KmlBodyParseException(e);
184 133
		} catch (IOException e) {
185 134
			throw new KmlBodyParseException(e);
186
		}	
187
		return getGFactory().createSimpleFeature("KMLFeature",null,values,geometry);
135
		}		
188 136
	}
189 137
}

Also available in: Unified diff