Revision 34026 branches/v2_0_0_prep/libraries/libRemoteServices/src/org/gvsig/remoteclient/wfs/wfs_1_1_0/WFSProtocolHandler1_1_0.java

View differences:

WFSProtocolHandler1_1_0.java
3 3
import java.io.File;
4 4
import java.io.FileNotFoundException;
5 5
import java.io.IOException;
6
import java.util.Vector;
7 6

  
8 7
import org.kxml2.io.KXmlParser;
9 8
import org.xmlpull.v1.XmlPullParserException;
......
23 22
import org.gvsig.remoteclient.wfs.request.WFSGetFeatureRequest;
24 23
import org.gvsig.remoteclient.wfs.request.WFSGetFeatureRequestInformation;
25 24
import org.gvsig.remoteclient.wfs.request.WFSTLockFeatureRequest;
26
import org.gvsig.remoteclient.wfs.schema.XMLElement;
27
import org.gvsig.remoteclient.wfs.schema.XMLElementsFactory;
28 25
import org.gvsig.remoteclient.wfs.schema.XMLSchemaParser;
29 26
import org.gvsig.remoteclient.wfs.wfs_1_1_0.request.WFSDescribeFeatureTypeRequest1_1_0;
30 27
import org.gvsig.remoteclient.wfs.wfs_1_1_0.request.WFSGetFeatureRequest1_1_0;
......
83 80
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
84 81
 */
85 82
public class WFSProtocolHandler1_1_0 extends WFSProtocolHandler{
86
	
83

  
87 84
    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
88
    
89
	public WFSProtocolHandler1_1_0(){
90
		this.version = "1.1.0";
91
		this.name = "WFS1.1.0";		
92
	}	
93
	
94
	/*
95
	 * (non-Javadoc)
96
	 * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
97
	 */
98
	public boolean parseCapabilities(File f) {
99
		int tag;
100
		XMLSchemaParser parser = null;
101
      	parser = new XMLSchemaParser();
102
    	try
103
    	{
104
    		parser.setInput(f);
105
    		parser.nextTag();
106
    		
107
			if ( parser.getEventType() != KXmlParser.END_DOCUMENT ) 
108
			{     	
109
				parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WFS_CAPABILITIES_ROOT1_0_0);             
110
				//Parses the Namespaces...
111
				parseNamespaces(parser);	
112
				tag = parser.nextTag();
113
				while(tag != KXmlParser.END_DOCUMENT)
114
				{
115
					switch(tag)
116
					{
117
					case KXmlParser.START_TAG:
118
						if (parser.getName().compareTo(CapabilitiesTags.SERVICE_IDENTIFICATION)==0)
119
						{
120
							parseServiceIdentification(parser);
121
						} 
122
						else if (parser.getName().compareTo(CapabilitiesTags.SERVICE_PROVIDER)==0)
123
						{
124
							parseServiceProvider(parser);
125
						} 
126
						else if (parser.getName().compareTo(CapabilitiesTags.OPERATIONS_METADATA)==0)
127
						{
128
							parseOperationsMetadata(parser);
129
						} 
130
						else if (parser.getName().compareTo(CapabilitiesTags.FEATURE_TYPE_LIST)==0)
131
						{
132
							parseFeatureTypeList(parser);
133
						} 
134
						else if (parser.getName().compareTo(CapabilitiesTags.FILTER_CAPABILITIES)==0)
135
						{
136
							parseFilterCapabilities(parser);
137
						} 
138
						break;
139
					case KXmlParser.END_TAG:                            
140
						break;
141
					case KXmlParser.TEXT:
142
						if (parser.getName()!=null)
143
							                         
144
						break;
145
					}
146
					tag = parser.next();
147
				}
148
				parser.require(KXmlParser.END_DOCUMENT, null, null);                
149
			}
150
		}
151
		catch(XmlPullParserException parser_ex){
152
			parser_ex.printStackTrace();
153
			return false;
154
		}
155
		catch (IOException ioe) {           
156
			ioe.printStackTrace();
157
			return false;
158
		}
159
		return true;
160
	}
161
	
162
	/**
163
	 * <p>Parses the Service Identification </p>
164
	 */    
165
	private void parseServiceIdentification(KXmlParser parser) throws IOException, XmlPullParserException {
166
		int currentTag;
167
		boolean end = false;		
168
		
169
		currentTag = parser.next();
170
		
171
		while (!end) 
172
		{
173
			switch(currentTag)
174
			{
175
			case KXmlParser.START_TAG:
176
				if (parser.getName().compareTo(CapabilitiesTags.WFS_TITLE)==0)
177
				{
178
					serviceInfo.title = parser.nextText(); 
179
				}
180
				else if (parser.getName().compareTo(CapabilitiesTags.WFS_ABSTRACT)==0)
181
				{
182
					serviceInfo.abstr = parser.nextText(); 
183
				} 			                       
184
				break;
185
			case KXmlParser.END_TAG:
186
				if (parser.getName().compareTo(CapabilitiesTags.SERVICE_IDENTIFICATION) == 0)
187
					end = true;
188
				break;
189
			case KXmlParser.TEXT:                   
190
				break;
191
			}
192
			if (!end){
193
				currentTag = parser.next();
194
			}
195
		}     
196
	}	
197
	
198
	/**
199
	 * <p>Parses the Service Provider </p>
200
	 */    
201
	private void parseServiceProvider(KXmlParser parser) throws IOException, XmlPullParserException {
202
		int currentTag;
203
		boolean end = false;		
204
		
205
		currentTag = parser.next();
206
		
207
		while (!end) 
208
		{
209
			switch(currentTag)
210
			{
211
			case KXmlParser.START_TAG:
212
						                       
213
				break;
214
			case KXmlParser.END_TAG:
215
				if (parser.getName().compareTo(CapabilitiesTags.SERVICE_PROVIDER) == 0)
216
					end = true;
217
				break;
218
			case KXmlParser.TEXT:                   
219
				break;
220
			}
221
			if (!end){
222
				currentTag = parser.next();
223
			}
224
		}  
225
	}	
226
	/**
227
	 * <p>Parses the Operations Metadata </p>
228
	 */    
229
	private void parseOperationsMetadata(KXmlParser parser) throws IOException, XmlPullParserException {
230
		int currentTag;
231
		boolean end = false;	
232
		
233
		currentTag = parser.next();
234
		
235
		while (!end) 
236
		{
237
			switch(currentTag)
238
			{
239
			case KXmlParser.START_TAG:
240
				if (parser.getName().compareTo(CapabilitiesTags.OPERATION)==0)
241
				{
242
					String operation = null;
243
					for (int i=0 ; i<parser.getAttributeCount() ; i++){
244
						if (parser.getAttributeName(i).compareTo(CapabilitiesTags.OPERATION_NAME)==0){
245
							operation = parser.getAttributeValue(i);
246
						}
247
					}				
248
					currentTag = parser.nextTag();
249
					if (parser.getName().compareTo(CapabilitiesTags.DCP)==0)
250
					{			
251
						currentTag = parser.nextTag();
252
						if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
253
						{
254
							currentTag = parser.nextTag();
255
							if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
256
							{
257
								String value = null;
258
								for (int i=0 ; i<parser.getAttributeCount() ; i++){
259
									if (parser.getAttributeName(i).compareTo(CapabilitiesTags.HREF) == 0){
260
						    			value = parser.getAttributeValue(i);
261
						    		}
262
								}	
263
								if (operation != null){
264
									if (value == null){
265
										serviceInfo.addOperation(operation, WFSOperation.PROTOCOL_GET);
266
									}else{
267
										serviceInfo.addOperation(operation, WFSOperation.PROTOCOL_GET, value);
268
									}	
269
								}
270
							}
271
						}
272
					}					
273
				}  				
274
				break;
275
			case KXmlParser.END_TAG:
276
				if (parser.getName().compareTo(CapabilitiesTags.OPERATIONS_METADATA) == 0)
277
					end = true;
278
				break;
279
			case KXmlParser.TEXT:                   
280
				break;
281
			}
282
			if (!end){
283
				currentTag = parser.next();
284
			}
285
		}
286
	}	
287
	/**
288
	 * <p>Parses the Feature Type List </p>
289
	 */    
290
	private void parseFeatureTypeList(KXmlParser parser) throws IOException, XmlPullParserException {
291
		int currentTag;
292
		boolean end = false;
293 85

  
294
		currentTag = parser.next();
295
		
296
		while (!end) 
297
		{
298
			switch(currentTag)
299
			{
300
			case KXmlParser.START_TAG:
301
				if (parser.getName().compareToIgnoreCase(CapabilitiesTags.WFS_FEATURETYPE)==0)
302
				{
303
					//Parse the namespaces...
304
					parseNamespaces(parser);	
305
					WFSFeature1_1_0 feature = new WFSFeature1_1_0();
306
					feature.parse(parser);	
307
					features.put(feature.getName(),feature);
308
				} 				         
309
				break;
310
			case KXmlParser.END_TAG:
311
				if (parser.getName().compareTo(CapabilitiesTags.FEATURE_TYPE_LIST) == 0)
312
					end = true;
313
				break;
314
			case KXmlParser.TEXT:                   
315
				break;
316
			}
317
			if (!end){
318
				currentTag = parser.next();
319
			}
320
		}     
321
	}	
322
	/**
323
	 * <p>Parses the Filter Capabilities </p>
324
	 */    
325
	private void parseFilterCapabilities(KXmlParser parser) throws IOException, XmlPullParserException {
326
		int currentTag;
327
		boolean end = false;		
328
		
329
		currentTag = parser.next();
330
		
331
		while (!end) 
332
		{
333
			switch(currentTag)
334
			{
335
			case KXmlParser.START_TAG:
336
						                       
337
				break;
338
			case KXmlParser.END_TAG:
339
				if (parser.getName().compareTo(CapabilitiesTags.FILTER_CAPABILITIES) == 0)
340
					end = true;
341
				break;
342
			case KXmlParser.TEXT:                   
343
				break;
344
			}
345
			if (!end){
346
				currentTag = parser.next();
347
			}
348
		}  
349
	}	
350
	
351
	protected boolean parseDescribeFeatureType(File f,String nameSpace) {
352
		XMLSchemaParser schemaParser = new XMLSchemaParser();
353
		try {
354
			schemaParser.parse(f,nameSpace);
355
		} catch (XmlPullParserException e) {
356
			// TODO Auto-generated catch block
357
			e.printStackTrace();
358
		} catch (IOException e) {
359
			// TODO Auto-generated catch block
360
			e.printStackTrace();
361
		}
362
		
363
		String layerName = getCurrentFeature();
364
		if (stringUtils.split(getCurrentFeature(), ":").length>1){
365
			layerName = stringUtils.split(getCurrentFeature(), ":")[1];
366
		}
367
		XMLElement entity = XMLElementsFactory.getElement(layerName);
368
		if (entity != null){
369
			Vector vector = new Vector();
370
			vector.add(entity);
371
			setFields(vector);
372
		}
373
		return true;
374
	}
86
    public WFSProtocolHandler1_1_0(){
87
        this.version = "1.1.0";
88
        this.name = "WFS1.1.0";		
89
    }	
375 90

  
376
	/*
377
	 *  (non-Javadoc)
378
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseGetFeature(java.io.File, java.lang.String)
379
	 */
380
	protected boolean parseGetFeature(File f, String nameSpace) throws WFSException{
381
		XMLSchemaParser parser = null;
382
      	parser = new XMLSchemaParser();
383
    	try
384
    	{
385
    		parser.setInput(f);
386
    		parser.nextTag();				
387
			if (parser.getName().equals(CapabilitiesTags.SERVICE_EXCEPTION_REPORT)){
388
				throw ExceptionsFactory.parseExceptionReport(parser);
389
			}	
390
			if (parser.getName().equals(CapabilitiesTags.WFS_FEATURE_COLLECTION)){
391
				WFSGetFeatureRequestInformation requestInformation = 
392
					(WFSGetFeatureRequestInformation)getLastWfsRequestInformation();
393
				for (int i=0 ; i<parser.getAttributeCount() ; i++){
394
					String attName = parser.getAttributeName(i);
395
					if (WFSTTags.WFS_NUMBER_OF_FEATURES.equals(attName)){
396
						requestInformation.setNumberOfFeatures(new Integer(parser.getAttributeValue(i)).intValue());
397
					}else if (WFSTTags.WFS_TIME_STAMP.equals(attName)){
398
						requestInformation.setTimeStamp(parser.getAttributeValue(i));
399
					}
400
				}
401
			}
402
		} catch (FileNotFoundException e) {
403
			e.printStackTrace();
404
			throw new WFSGetFeatureException(e);
405
		} catch (XmlPullParserException e) {
406
			e.printStackTrace();
407
			throw new WFSGetFeatureException(e);
408
		} catch (IOException e) {
409
			e.printStackTrace();
410
			throw new WFSGetFeatureException(e);
411
		}        
412
		
413
		return true;
414
	}
91
    /*
92
     * (non-Javadoc)
93
     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
94
     */
95
    public boolean parseCapabilities(File f) {
96
        int tag;
97
        XMLSchemaParser parser = null;
98
        parser = new XMLSchemaParser();
99
        try
100
        {
101
            parser.setInput(f);
102
            parser.nextTag();
415 103

  
416
	/*
417
	 * (non-Javadoc)
418
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseTransaction(java.io.File, java.lang.String)
419
	 */
420
	protected boolean parseTransaction(File f, String nameSpace, WFSTTransaction transaction) {
421
		return false;
422
	}
104
            if ( parser.getEventType() != KXmlParser.END_DOCUMENT ) 
105
            {     	
106
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WFS_CAPABILITIES_ROOT1_0_0);             
107
                //Parses the Namespaces...
108
                parseNamespaces(parser);	
109
                tag = parser.nextTag();
110
                while(tag != KXmlParser.END_DOCUMENT)
111
                {
112
                    switch(tag)
113
                    {
114
                    case KXmlParser.START_TAG:
115
                        if (parser.getName().compareTo(CapabilitiesTags.SERVICE_IDENTIFICATION)==0)
116
                        {
117
                            parseServiceIdentification(parser);
118
                        } 
119
                        else if (parser.getName().compareTo(CapabilitiesTags.SERVICE_PROVIDER)==0)
120
                        {
121
                            parseServiceProvider(parser);
122
                        } 
123
                        else if (parser.getName().compareTo(CapabilitiesTags.OPERATIONS_METADATA)==0)
124
                        {
125
                            parseOperationsMetadata(parser);
126
                        } 
127
                        else if (parser.getName().compareTo(CapabilitiesTags.FEATURE_TYPE_LIST)==0)
128
                        {
129
                            parseFeatureTypeList(parser);
130
                        } 
131
                        else if (parser.getName().compareTo(CapabilitiesTags.FILTER_CAPABILITIES)==0)
132
                        {
133
                            parseFilterCapabilities(parser);
134
                        } 
135
                        break;
136
                    case KXmlParser.END_TAG:                            
137
                        break;
138
                    case KXmlParser.TEXT:
139
                        if (parser.getName()!=null)
423 140

  
424
	/*
425
	 * (non-Javadoc)
426
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseLockFeature(java.io.File, java.lang.String)
427
	 */
428
	protected boolean parseLockFeature(File f, String nameSpace, WFSStatus status) throws WFSException {
429
		return false;
430
	}
431
	
432
	/*
433
	 * (non-Javadoc)
434
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createDescribeFeatureTypeRequest(org.gvsig.remoteClient.wfs.WFSStatus)
435
	 */
436
	protected WFSDescribeFeatureTypeRequest createDescribeFeatureTypeRequest(
437
			WFSStatus status) {
438
		return new WFSDescribeFeatureTypeRequest1_1_0(status, this);
439
	}
141
                            break;
142
                    }
143
                    tag = parser.next();
144
                }
145
                parser.require(KXmlParser.END_DOCUMENT, null, null);                
146
            }
147
        }
148
        catch(XmlPullParserException parser_ex){
149
            parser_ex.printStackTrace();
150
            return false;
151
        }
152
        catch (IOException ioe) {           
153
            ioe.printStackTrace();
154
            return false;
155
        }
156
        return true;
157
    }
440 158

  
441
	/*
442
	 * (non-Javadoc)
443
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createGetFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
444
	 */
445
	protected WFSGetFeatureRequest createGetFeatureRequest(WFSStatus status) {
446
		return new WFSGetFeatureRequest1_1_0(status, this);
447
	}
159
    /**
160
     * <p>Parses the Service Identification </p>
161
     */    
162
    private void parseServiceIdentification(KXmlParser parser) throws IOException, XmlPullParserException {
163
        int currentTag;
164
        boolean end = false;		
448 165

  
449
	/*
450
	 * (non-Javadoc)
451
	 * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createLockFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
452
	 */
453
	protected WFSTLockFeatureRequest createLockFeatureRequest(WFSStatus status) {
454
		return new WFSTLockFeatureRequest1_1_0(status, this);
455
	}
166
        currentTag = parser.next();
167

  
168
        while (!end) 
169
        {
170
            switch(currentTag)
171
            {
172
            case KXmlParser.START_TAG:
173
                if (parser.getName().compareTo(CapabilitiesTags.WFS_TITLE)==0)
174
                {
175
                    serviceInfo.title = parser.nextText(); 
176
                }
177
                else if (parser.getName().compareTo(CapabilitiesTags.WFS_ABSTRACT)==0)
178
                {
179
                    serviceInfo.abstr = parser.nextText(); 
180
                } 			                       
181
                break;
182
            case KXmlParser.END_TAG:
183
                if (parser.getName().compareTo(CapabilitiesTags.SERVICE_IDENTIFICATION) == 0)
184
                    end = true;
185
                break;
186
            case KXmlParser.TEXT:                   
187
                break;
188
            }
189
            if (!end){
190
                currentTag = parser.next();
191
            }
192
        }     
193
    }	
194

  
195
    /**
196
     * <p>Parses the Service Provider </p>
197
     */    
198
    private void parseServiceProvider(KXmlParser parser) throws IOException, XmlPullParserException {
199
        int currentTag;
200
        boolean end = false;		
201

  
202
        currentTag = parser.next();
203

  
204
        while (!end) 
205
        {
206
            switch(currentTag)
207
            {
208
            case KXmlParser.START_TAG:
209

  
210
                break;
211
            case KXmlParser.END_TAG:
212
                if (parser.getName().compareTo(CapabilitiesTags.SERVICE_PROVIDER) == 0)
213
                    end = true;
214
                break;
215
            case KXmlParser.TEXT:                   
216
                break;
217
            }
218
            if (!end){
219
                currentTag = parser.next();
220
            }
221
        }  
222
    }	
223
    /**
224
     * <p>Parses the Operations Metadata </p>
225
     */    
226
    private void parseOperationsMetadata(KXmlParser parser) throws IOException, XmlPullParserException {
227
        int currentTag;
228
        boolean end = false;	
229

  
230
        currentTag = parser.next();
231

  
232
        while (!end) 
233
        {
234
            switch(currentTag)
235
            {
236
            case KXmlParser.START_TAG:
237
                if (parser.getName().compareTo(CapabilitiesTags.OPERATION)==0)
238
                {					
239
                    parseOperation(parser);				
240
                }  				
241
                break;
242
            case KXmlParser.END_TAG:
243
                if (parser.getName().compareTo(CapabilitiesTags.OPERATIONS_METADATA) == 0)
244
                    end = true;
245
                break;
246
            case KXmlParser.TEXT:                   
247
                break;
248
            }
249
            if (!end){
250
                currentTag = parser.next();
251
            }
252
        }
253
    }	
254

  
255
    private void parseOperation(KXmlParser parser) throws IOException, XmlPullParserException {
256
        int currentTag;
257
        boolean end = false;    
258

  
259
        currentTag = parser.getEventType();
260

  
261
        while (!end) 
262
        {
263
            switch(currentTag)
264
            {
265
            case KXmlParser.START_TAG:
266
                if (parser.getName().compareTo(CapabilitiesTags.OPERATION)==0)
267
                {
268
                    String operation = null;
269
                    for (int i=0 ; i<parser.getAttributeCount() ; i++){
270
                        if (parser.getAttributeName(i).compareTo(CapabilitiesTags.OPERATION_NAME)==0){
271
                            operation = parser.getAttributeValue(i);
272
                        }
273
                    }               
274
                    currentTag = parser.nextTag();
275
                    if (parser.getName().compareTo(CapabilitiesTags.DCP)==0)
276
                    {           
277
                        currentTag = parser.nextTag();
278
                        if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
279
                        {
280
                            currentTag = parser.nextTag();
281
                            if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
282
                            {
283
                                String value = null;
284
                                for (int i=0 ; i<parser.getAttributeCount() ; i++){
285
                                    if (parser.getAttributeName(i).compareTo(CapabilitiesTags.HREF) == 0){
286
                                        value = parser.getAttributeValue(i);
287
                                    }
288
                                }   
289
                                if (operation != null){
290
                                    if (value == null){
291
                                        serviceInfo.addOperation(operation, WFSOperation.PROTOCOL_GET);
292
                                    }else{
293
                                        serviceInfo.addOperation(operation, WFSOperation.PROTOCOL_GET, value);
294
                                    }   
295
                                }
296
                            }
297
                        }
298
                    }else if(CapabilitiesTags.CONSTRAINT.equals(parser.getName())){
299
                        for (int i=0 ; i<parser.getAttributeCount() ; i++){
300
                            if (parser.getAttributeName(i).compareTo(CapabilitiesTags.OPERATION_NAME)==0){
301
                                String constraint =  parser.getAttributeValue(i);
302
                                if (CapabilitiesTags.DEFAULTMAXFEATURES.equals(constraint)){
303
                                    currentTag = parser.nextTag();
304
                                    if(CapabilitiesTags.VALUE.equals(parser.getName())){
305
                                        try{
306
                                            Integer defaultMaxFeatures = new Integer(parser.nextText());
307
                                            this.serviceInfo.setMaxFeatures(defaultMaxFeatures);
308
                                        }catch(Exception e){
309
                                            LOG.error("Error parsing the DefaultMaxFeatures attribute", e);
310
                                        }
311
                                    }
312
                                }
313
                            }
314
                        }            
315
                    }
316
                }               
317
                break;
318
            case KXmlParser.END_TAG:
319
                if (parser.getName().compareTo(CapabilitiesTags.OPERATION) == 0)
320
                    end = true;
321
                break;
322
            case KXmlParser.TEXT:                   
323
                break;
324
            }
325
            if (!end){
326
                currentTag = parser.next();
327
            }
328
        }
329
    }
330

  
331
    /**
332
     * <p>Parses the Feature Type List </p>
333
     */    
334
    private void parseFeatureTypeList(KXmlParser parser) throws IOException, XmlPullParserException {
335
        int currentTag;
336
        boolean end = false;
337

  
338
        currentTag = parser.next();
339

  
340
        while (!end) 
341
        {
342
            switch(currentTag)
343
            {
344
            case KXmlParser.START_TAG:
345
                if (parser.getName().compareToIgnoreCase(CapabilitiesTags.WFS_FEATURETYPE)==0)
346
                {
347
                    //Parse the namespaces...
348
                    parseNamespaces(parser);	
349
                    WFSFeature1_1_0 feature = new WFSFeature1_1_0(serviceInfo);
350
                    feature.parse(parser);	
351
                    features.put(feature.getName(),feature);
352
                } 				         
353
                break;
354
            case KXmlParser.END_TAG:
355
                if (parser.getName().compareTo(CapabilitiesTags.FEATURE_TYPE_LIST) == 0)
356
                    end = true;
357
                break;
358
            case KXmlParser.TEXT:                   
359
                break;
360
            }
361
            if (!end){
362
                currentTag = parser.next();
363
            }
364
        }     
365
    }	
366
    /**
367
     * <p>Parses the Filter Capabilities </p>
368
     */    
369
    private void parseFilterCapabilities(KXmlParser parser) throws IOException, XmlPullParserException {
370
        int currentTag;
371
        boolean end = false;		
372

  
373
        currentTag = parser.next();
374

  
375
        while (!end) 
376
        {
377
            switch(currentTag)
378
            {
379
            case KXmlParser.START_TAG:
380

  
381
                break;
382
            case KXmlParser.END_TAG:
383
                if (parser.getName().compareTo(CapabilitiesTags.FILTER_CAPABILITIES) == 0)
384
                    end = true;
385
                break;
386
            case KXmlParser.TEXT:                   
387
                break;
388
            }
389
            if (!end){
390
                currentTag = parser.next();
391
            }
392
        }  
393
    }	
394

  
395
    /*
396
     *  (non-Javadoc)
397
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseGetFeature(java.io.File, java.lang.String)
398
     */
399
    protected boolean parseGetFeature(File f, String nameSpace) throws WFSException{
400
        XMLSchemaParser parser = null;
401
        parser = new XMLSchemaParser();
402
        try
403
        {
404
            parser.setInput(f);
405
            parser.nextTag();				
406
            if (parser.getName().equals(CapabilitiesTags.SERVICE_EXCEPTION_REPORT)){
407
                throw ExceptionsFactory.parseExceptionReport(parser);
408
            }	
409
            if (parser.getName().equals(CapabilitiesTags.WFS_FEATURE_COLLECTION)){
410
                WFSGetFeatureRequestInformation requestInformation = 
411
                    (WFSGetFeatureRequestInformation)getLastWfsRequestInformation();
412
                for (int i=0 ; i<parser.getAttributeCount() ; i++){
413
                    String attName = parser.getAttributeName(i);
414
                    if (WFSTTags.WFS_NUMBER_OF_FEATURES.equals(attName)){
415
                        requestInformation.setNumberOfFeatures(new Integer(parser.getAttributeValue(i)).intValue());
416
                    }else if (WFSTTags.WFS_TIME_STAMP.equals(attName)){
417
                        requestInformation.setTimeStamp(parser.getAttributeValue(i));
418
                    }
419
                }
420
            }
421
        } catch (FileNotFoundException e) {
422
            e.printStackTrace();
423
            throw new WFSGetFeatureException(e);
424
        } catch (XmlPullParserException e) {
425
            e.printStackTrace();
426
            throw new WFSGetFeatureException(e);
427
        } catch (IOException e) {
428
            e.printStackTrace();
429
            throw new WFSGetFeatureException(e);
430
        }        
431

  
432
        return true;
433
    }
434

  
435
    /*
436
     * (non-Javadoc)
437
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseTransaction(java.io.File, java.lang.String)
438
     */
439
    protected boolean parseTransaction(File f, String nameSpace, WFSTTransaction transaction) {
440
        return false;
441
    }
442

  
443
    /*
444
     * (non-Javadoc)
445
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseLockFeature(java.io.File, java.lang.String)
446
     */
447
    protected boolean parseLockFeature(File f, String nameSpace, WFSStatus status) throws WFSException {
448
        return false;
449
    }
450

  
451
    /*
452
     * (non-Javadoc)
453
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createDescribeFeatureTypeRequest(org.gvsig.remoteClient.wfs.WFSStatus)
454
     */
455
    protected WFSDescribeFeatureTypeRequest createDescribeFeatureTypeRequest(
456
        WFSStatus status) {
457
        return new WFSDescribeFeatureTypeRequest1_1_0(status, this);
458
    }
459

  
460
    /*
461
     * (non-Javadoc)
462
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createGetFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
463
     */
464
    protected WFSGetFeatureRequest createGetFeatureRequest(WFSStatus status) {
465
        return new WFSGetFeatureRequest1_1_0(status, this);
466
    }
467

  
468
    /*
469
     * (non-Javadoc)
470
     * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createLockFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
471
     */
472
    protected WFSTLockFeatureRequest createLockFeatureRequest(WFSStatus status) {
473
        return new WFSTLockFeatureRequest1_1_0(status, this);
474
    }
456 475
}

Also available in: Unified diff