Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libRemoteServices / src / org / gvsig / remoteclient / wfs / wfs_1_0_0 / WFSProtocolHandler1_0_0.java @ 34026

History | View | Annotate | Download (17.1 KB)

1
package org.gvsig.remoteclient.wfs.wfs_1_0_0;
2

    
3
import java.io.File;
4
import java.io.FileNotFoundException;
5
import java.io.IOException;
6

    
7
import org.kxml2.io.KXmlParser;
8
import org.xmlpull.v1.XmlPullParserException;
9

    
10
import org.gvsig.compat.CompatLocator;
11
import org.gvsig.compat.lang.StringUtils;
12
import org.gvsig.remoteclient.utils.CapabilitiesTags;
13
import org.gvsig.remoteclient.wfs.WFSProtocolHandler;
14
import org.gvsig.remoteclient.wfs.WFSStatus;
15
import org.gvsig.remoteclient.wfs.edition.WFSTTags;
16
import org.gvsig.remoteclient.wfs.edition.WFSTTransaction;
17
import org.gvsig.remoteclient.wfs.exceptions.ExceptionsFactory;
18
import org.gvsig.remoteclient.wfs.exceptions.WFSException;
19
import org.gvsig.remoteclient.wfs.exceptions.WFSGetFeatureException;
20
import org.gvsig.remoteclient.wfs.request.WFSDescribeFeatureTypeRequest;
21
import org.gvsig.remoteclient.wfs.request.WFSGetFeatureRequest;
22
import org.gvsig.remoteclient.wfs.request.WFSTLockFeatureRequest;
23
import org.gvsig.remoteclient.wfs.schema.XMLSchemaParser;
24
import org.gvsig.remoteclient.wfs.wfs_1_0_0.request.WFSDescribeFeatureTypeRequest1_0_0;
25
import org.gvsig.remoteclient.wfs.wfs_1_0_0.request.WFSGetFeatureRequest1_0_0;
26
import org.gvsig.remoteclient.wfs.wfs_1_0_0.request.WFSTLockFeatureRequest1_0_0;
27

    
28
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
29
 *
30
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
31
 *
32
 * This program is free software; you can redistribute it and/or
33
 * modify it under the terms of the GNU General Public License
34
 * as published by the Free Software Foundation; either version 2
35
 * of the License, or (at your option) any later version.
36
 *
37
 * This program is distributed in the hope that it will be useful,
38
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
39
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
40
 * GNU General Public License for more details.
41
 *
42
 * You should have received a copy of the GNU General Public License
43
 * along with this program; if not, write to the Free Software
44
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
45
 *
46
 * For more information, contact:
47
 *
48
 *  Generalitat Valenciana
49
 *   Conselleria d'Infraestructures i Transport
50
 *   Av. Blasco Ib??ez, 50
51
 *   46010 VALENCIA
52
 *   SPAIN
53
 *
54
 *      +34 963862235
55
 *   gvsig@gva.es
56
 *      www.gvsig.gva.es
57
 *
58
 *    or
59
 *
60
 *   IVER T.I. S.A
61
 *   Salamanca 50
62
 *   46005 Valencia
63
 *   Spain
64
 *
65
 *   +34 963163400
66
 *   dac@iver.es
67
 */
68
/* CVS MESSAGES:
69
 *
70
 * $Id: WFSProtocolHandler1_0_0.java 34026 2010-11-08 13:06:02Z jpiera $
71
 * $Log$
72
 * Revision 1.12  2007-02-19 11:43:10  jorpiell
73
 * A?adidos los filtros por ?rea
74
 *
75
 * Revision 1.11  2007/02/09 14:11:01  jorpiell
76
 * Primer piloto del soporte para WFS 1.1 y para WFS-T
77
 *
78
 * Revision 1.10  2007/01/16 08:30:22  csanchez
79
 * Sistema de Warnings y Excepciones adaptado a BasicException
80
 *
81
 * Revision 1.9  2006/12/22 11:31:01  jorpiell
82
 * Cambio del parser 2.x
83
 *
84
 * Revision 1.8  2006/10/31 09:36:51  jorpiell
85
 * Se devuelve el tipo de la entidad completo, y no sus hijos
86
 *
87
 * Revision 1.7  2006/10/10 12:52:28  jorpiell
88
 * Soporte para features complejas.
89
 *
90
 * Revision 1.6  2006/06/14 07:54:18  jorpiell
91
 * Se parsea el online resource que antes se ignoraba
92
 *
93
 * Revision 1.5  2006/05/25 10:20:57  jorpiell
94
 * Se ha cambiado el nombre de la clase WFSField por la clase WFSAttribute, porque resultaba confuso
95
 *
96
 * Revision 1.4  2006/05/23 13:23:22  jorpiell
97
 * Se ha cambiado el final del bucle de parseado y se tiene en cuenta el online resource
98
 *
99
 * Revision 1.2  2006/04/20 16:39:16  jorpiell
100
 * A?adida la operacion de describeFeatureType y el parser correspondiente.
101
 *
102
 * Revision 1.1  2006/04/19 12:51:35  jorpiell
103
 * A?adidas algunas de las clases del servicio WFS
104
 *
105
 *
106
 */
107
/**
108
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
109
 */
110
public class WFSProtocolHandler1_0_0 extends WFSProtocolHandler{
111
    
112
    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
113
    
114
    public WFSProtocolHandler1_0_0(){
115
                this.version = "1.0.0";
116
                this.name = "WFS1.0.0";                
117
        }        
118
        
119
        /*
120
         * (non-Javadoc)
121
         * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
122
         */
123
        public boolean parseCapabilities(File f) {
124
                int tag;
125
                XMLSchemaParser parser = null;
126
                parser = new XMLSchemaParser();
127
                try
128
                {
129
                        parser.setInput(f);
130
                        parser.nextTag();
131

    
132
                        if ( parser.getEventType() != KXmlParser.END_DOCUMENT ) 
133
                        {     
134
                                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WFS_CAPABILITIES_ROOT1_0_0);             
135
                                //Parses the Namespaces...
136
                                parseNamespaces(parser);        
137
                                //Parse the capabilities document
138
                                tag = parser.nextTag();
139
                                while(tag != KXmlParser.END_DOCUMENT)
140
                                {
141
                                        switch(tag)
142
                                        {
143
                                        case KXmlParser.START_TAG:
144
                                                if (parser.getName().compareTo(CapabilitiesTags.SERVICE)==0)
145
                                                {
146
                                                        parseServiceTag(parser);
147
                                                } 
148
                                                else if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
149
                                                {
150
                                                        parseCapabilityTag(parser);
151
                                                } 
152
                                                else if (parser.getName().compareTo(CapabilitiesTags.WFS_FEATURETYPELIST)==0)
153
                                                {
154
                                                        parseFeatureTypeListTag(parser);
155
                                                } 
156
                                                break;
157
                                        case KXmlParser.END_TAG:                            
158
                                                break;
159
                                        case KXmlParser.TEXT:                                                                                                 
160
                                                break;
161
                                        }
162
                                        tag = parser.next();
163
                                }
164
                                parser.require(KXmlParser.END_DOCUMENT, null, null);                
165
                        }
166
                }
167
                catch(XmlPullParserException parser_ex){
168
                        parser_ex.printStackTrace();
169
                        return false;
170
                }
171
                catch (IOException ioe) {           
172
                        ioe.printStackTrace();
173
                        return false;
174
                }
175
                return true;
176
        }
177

    
178
        /**
179
         * <p>Parses the Service Information </p>
180
         */    
181
        private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException 
182
        {
183
                int currentTag;
184
                boolean end = false;
185

    
186
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
187
                currentTag = parser.next();
188

    
189
                while (!end) 
190
                {
191
                        switch(currentTag)
192
                        {
193
                        case KXmlParser.START_TAG:
194
                                if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME)==0)
195
                                {
196
                                        serviceInfo.name = parser.nextText(); 
197
                                }   
198
                                else if (parser.getName().compareTo(CapabilitiesTags.WFS_TITLE)==0)
199
                                {
200
                                        serviceInfo.title = parser.nextText(); 
201
                                }
202
                                else if (parser.getName().compareTo(CapabilitiesTags.WFS_ABSTRACT)==0)
203
                                {
204
                                        serviceInfo.abstr = parser.nextText(); 
205
                                } 
206
                                else if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
207
                                {
208
                                        serviceInfo.online_resource = parser.nextText();
209

    
210
                                }                               
211
                                break;
212
                        case KXmlParser.END_TAG:
213
                                if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
214
                                        end = true;
215
                                break;
216
                        case KXmlParser.TEXT:                   
217
                                break;
218
                        }
219
                        if (!end){
220
                                currentTag = parser.next();
221
                        }
222
                }     
223
        }
224

    
225
        private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException
226
        {   
227
                int currentTag;
228
                boolean end = false;
229

    
230
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
231
                currentTag = parser.next();
232

    
233
                while (!end) 
234
                {
235
                        switch(currentTag)
236
                        {
237
                        case KXmlParser.START_TAG:
238
                                if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
239
                                {
240
                                        parseRequestTag(parser); 
241
                                }   
242
                                else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
243
                                {
244
                                        //TODO Parse exception tags...
245
                                        parser.skipSubTree();
246
                                }
247
                                else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
248
                                                (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
249
                                {
250
                                        parser.skipSubTree();
251
                                }                   
252
                                break;
253
                        case KXmlParser.END_TAG:
254
                                if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
255
                                        end = true;
256
                                break;
257
                        case KXmlParser.TEXT:                   
258
                                break;
259
                        }
260
                        if (!end){
261
                                currentTag = parser.next();
262
                        }
263
                }
264
        }
265

    
266
        /**
267
         * <p>Parses the Request tag </p>
268
         */ 
269
        private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException
270
        {   
271
                int currentTag;
272
                boolean end = false;
273

    
274
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
275
                currentTag = parser.next();
276

    
277
                while (!end) 
278
                {
279
                        switch(currentTag)
280
                        {
281
                        case KXmlParser.START_TAG:
282
                                if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES)==0){
283
                                        parserDcpType(parser, CapabilitiesTags.GETCAPABILITIES);                                        
284
                                } else if (parser.getName().compareTo(CapabilitiesTags.WFS_DESCRIBEFEATURETYPE)==0)        {
285
                                        parserDcpType(parser, CapabilitiesTags.WFS_DESCRIBEFEATURETYPE);                                                             
286
                                }else if (parser.getName().compareTo(CapabilitiesTags.WFS_GETFEATURE)==0){
287
                                        parserDcpType(parser, CapabilitiesTags.WFS_GETFEATURE);
288
                                }else if (parser.getName().compareTo(CapabilitiesTags.WFS_LOCKFEATURE)==0){
289
                                        parserDcpType(parser, CapabilitiesTags.WFS_LOCKFEATURE);
290
                                }else if (parser.getName().compareTo(CapabilitiesTags.WFS_TRANSACTION)==0){
291
                                        parserDcpType(parser, CapabilitiesTags.WFS_TRANSACTION);
292
                                }               
293
                                break;
294
                        case KXmlParser.END_TAG:
295
                                if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0)
296
                                        end = true;
297
                                break;
298
                        case KXmlParser.TEXT:                   
299
                                break;
300
                        }
301
                        if (!end){
302
                                currentTag = parser.next();
303
                        }
304
                }    
305
        }
306

    
307
        /**
308
         * It parses the feature typelist tag
309
         * @param parser
310
         * @throws IOException
311
         * @throws XmlPullParserException
312
         */
313
        private void parseFeatureTypeListTag(KXmlParser parser) throws IOException, XmlPullParserException{
314
                int currentTag;
315
                boolean end = false;
316

    
317
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WFS_FEATURETYPELIST);
318
                currentTag = parser.next();
319

    
320
                while (!end) 
321
                {
322
                        switch(currentTag)
323
                        {
324
                        case KXmlParser.START_TAG:
325
                                if (parser.getName().compareToIgnoreCase(CapabilitiesTags.WFS_FEATURETYPE)==0){
326
                                        //Parse the namespaces...
327
                                        parseNamespaces(parser);        
328
                                        WFSFeature1_0_0 feature = new WFSFeature1_0_0(serviceInfo);
329
                                        feature.parse(parser);        
330
                                        features.put(feature.getName(),feature);
331
                                }                                          
332
                                break;
333
                        case KXmlParser.END_TAG:
334
                                if (parser.getName().compareTo(CapabilitiesTags.WFS_FEATURETYPELIST) == 0)
335
                                        end = true;
336
                                break;
337
                        case KXmlParser.TEXT:                   
338
                                break;
339
                        }
340
                        if (!end){
341
                                currentTag = parser.next();
342
                        }
343
                }     
344
        }        
345

    
346
        /*
347
         *  (non-Javadoc)
348
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseGetFeature(java.io.File, java.lang.String)
349
         */
350
        protected boolean parseGetFeature(File f, String nameSpace) throws WFSException {
351
                XMLSchemaParser parser = null;
352
                parser = new XMLSchemaParser();
353
                try
354
                {
355
                        parser.setInput(f);
356
                        parser.nextTag();                                
357
                        if (parser.getName().compareTo(CapabilitiesTags.SERVICE_EXCEPTION_REPORT)==0){
358
                                throw ExceptionsFactory.parseExceptionReport(parser);
359
                        }                        
360
                } catch (FileNotFoundException e) {
361
                        e.printStackTrace();
362
                        throw new WFSGetFeatureException(e);
363
                } catch (XmlPullParserException e) {
364
                        e.printStackTrace();
365
                        throw new WFSGetFeatureException(e);
366
                } catch (IOException e) {
367
                        e.printStackTrace();
368
                        throw new WFSGetFeatureException(e);
369
                }        
370

    
371
                return true;
372
        }
373

    
374
        /*
375
         * (non-Javadoc)
376
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseTransaction(java.io.File, java.lang.String)
377
         */
378
        protected boolean parseTransaction(File f, String nameSpace, WFSTTransaction transaction) throws WFSException {
379
                int tag;
380
                XMLSchemaParser parser = null;
381
                parser = new XMLSchemaParser();
382
                try
383
                {
384
                        parser.setInput(f);
385
                        parser.nextTag();
386
                        if (parser.getName().compareTo(CapabilitiesTags.SERVICE_EXCEPTION_REPORT)==0){
387
                                throw ExceptionsFactory.parseExceptionReport(parser);
388
                        }                
389

    
390

    
391
                        if ( parser.getEventType() != KXmlParser.END_DOCUMENT ) 
392
                        {                                           
393
                                tag = parser.nextTag();
394
                                while(tag != KXmlParser.END_DOCUMENT)
395
                                {
396
                                        switch(tag)
397
                                        {
398
                                        case KXmlParser.START_TAG:
399
                                                if (parser.getName().compareTo(WFSTTags.WFST_TRANSACTIONRESULT)==0){
400
                                                        parseTransactionResult(parser, transaction);
401
                                                }else if (parser.getName().compareTo(WFSTTags.WFST_TRANSACTIONRESPONSE)==0){
402
                                                        parseFeaturesLocked(parser);
403
                                                }                                                
404
                                                break;
405
                                        case KXmlParser.END_TAG:                            
406
                                                break;
407
                                        case KXmlParser.TEXT:
408
                                                break;
409
                                        }
410
                                        tag = parser.next();
411
                                }
412
                                parser.require(KXmlParser.END_DOCUMENT, null, null);                
413
                        }
414
                }
415
                catch(XmlPullParserException parser_ex){
416
                        parser_ex.printStackTrace();
417
                        return false;
418
                }
419
                catch (IOException ioe) {           
420
                        ioe.printStackTrace();
421
                        return false;
422
                }
423
                return true;
424
        }
425

    
426
        /**
427
         * Parse the transaction result XML sub tree
428
         * @param parser
429
         * @param transaction
430
         * @throws IOException 
431
         * @throws XmlPullParserException 
432
         */
433
        private void parseTransactionResult(XMLSchemaParser parser,
434
                        WFSTTransaction transaction) throws XmlPullParserException, IOException {
435
                int currentTag;
436
                boolean end = false;                
437

    
438
                currentTag = parser.next();
439

    
440
                while (!end) 
441
                {
442
                        switch(currentTag)
443
                        {
444
                        case KXmlParser.START_TAG:
445
                                if (parser.getName().compareTo(WFSTTags.WFST_STATUS)==0){
446
                                        parseStatus(parser, transaction);
447
                                }else if (parser.getName().compareTo(WFSTTags.WFST_TRANSACTIONMESSAGE)==0){
448
                                        parser.next();
449
                                        transaction.setMessage(parser.getText());
450
                                }
451
                                break;
452
                        case KXmlParser.END_TAG:
453
                                if (parser.getName().compareTo(WFSTTags.WFST_TRANSACTIONRESULT)==0)
454
                                        end = true;
455
                                break;
456
                        case KXmlParser.TEXT:                   
457
                                break;
458
                        }
459
                        if (!end){
460
                                currentTag = parser.next();
461
                        }
462
                }     
463
        }
464

    
465
        /**
466
         * Parser WFST Status subtree
467
         * @param parser
468
         * Teh xML parser
469
         * @param transaction
470
         * The current transaction
471
         * @throws IOException 
472
         * @throws XmlPullParserException 
473
         */
474
        private void parseStatus(XMLSchemaParser parser, WFSTTransaction transaction) throws XmlPullParserException, IOException {
475
                int currentTag;
476
                boolean end = false;                
477

    
478
                currentTag = parser.next();
479

    
480
                while (!end) 
481
                {
482
                        switch(currentTag)
483
                        {
484
                        case KXmlParser.START_TAG:
485
                                if (parser.getName().compareTo(WFSTTags.WFST_SUCCESS)==0){
486
                                        transaction.setStatus(WFSTTransaction.STATUS_SUCCESS);
487
                                }else if (parser.getName().compareTo(WFSTTags.WFST_FAILED)==0){
488
                                        transaction.setStatus(WFSTTransaction.STATUS_FAILED);
489
                                }
490
                                break;
491
                        case KXmlParser.END_TAG:
492
                                if (parser.getName().compareTo(WFSTTags.WFST_STATUS)==0)
493
                                        end = true;
494
                                break;
495
                        case KXmlParser.TEXT:                   
496
                                break;
497
                        }
498
                        if (!end){
499
                                currentTag = parser.next();
500
                        }
501
                }    
502
        }
503

    
504
        /*
505
         * (non-Javadoc)
506
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#parseLockFeature(java.io.File, java.lang.String)
507
         */
508
        protected boolean parseLockFeature(File f, String nameSpace, WFSStatus status) throws WFSException {
509
                int tag;
510
                XMLSchemaParser parser = null;
511
                parser = new XMLSchemaParser();
512
                try
513
                {
514
                        parser.setInput(f);
515
                        parser.nextTag();
516
                        if (parser.getName().compareTo(CapabilitiesTags.SERVICE_EXCEPTION_REPORT)==0){
517
                                throw ExceptionsFactory.parseExceptionReport(parser);
518
                        }                
519

    
520

    
521
                        if ( parser.getEventType() != KXmlParser.END_DOCUMENT ) 
522
                        {                                           
523
                                tag = parser.nextTag();
524
                                while(tag != KXmlParser.END_DOCUMENT)
525
                                {
526
                                        switch(tag)
527
                                        {
528
                                        case KXmlParser.START_TAG:
529
                                                if (parser.getName().compareTo(WFSTTags.WFST_LOCKID)==0){
530
                                                        parser.next();
531
                                                        status.addFeatureLocked(parser.getText());
532
                                                }else if (parser.getName().compareTo(WFSTTags.WFST_FEATURESLOCKED)==0){
533
                                                        parseFeaturesLocked(parser);
534
                                                }                                                
535
                                                break;
536
                                        case KXmlParser.END_TAG:                            
537
                                                break;
538
                                        case KXmlParser.TEXT:
539
                                                break;
540
                                        }
541
                                        tag = parser.next();
542
                                }
543
                                parser.require(KXmlParser.END_DOCUMENT, null, null);                
544
                        }
545
                }
546
                catch(XmlPullParserException parser_ex){
547
                        parser_ex.printStackTrace();
548
                        return false;
549
                }
550
                catch (IOException ioe) {           
551
                        ioe.printStackTrace();
552
                        return false;
553
                }
554
                return true;
555
        }
556

    
557
        /**
558
         * It parses the featuresLocked tag
559
         * @param parser
560
         * @throws IOException 
561
         * @throws XmlPullParserException 
562
         */
563
        private void parseFeaturesLocked(XMLSchemaParser parser) throws XmlPullParserException, IOException {
564
                int currentTag;
565
                boolean end = false;                
566

    
567
                currentTag = parser.next();
568

    
569
                while (!end) 
570
                {
571
                        switch(currentTag)
572
                        {
573
                        case KXmlParser.START_TAG:
574
                                if (parser.getName().compareTo(WFSTTags.WFST_FEATURESID)==0){
575

    
576
                                }
577
                                break;
578
                        case KXmlParser.END_TAG:
579
                                if (parser.getName().compareTo(WFSTTags.WFST_FEATURESLOCKED)==0)
580
                                        end = true;
581
                                break;
582
                        case KXmlParser.TEXT:                   
583
                                break;
584
                        }
585
                        if (!end){
586
                                currentTag = parser.next();
587
                        }
588
                }     
589
        }
590

    
591
        /*
592
         * (non-Javadoc)
593
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createDescribeFeatureTypeRequest(org.gvsig.remoteClient.wfs.WFSStatus)
594
         */
595
        protected WFSDescribeFeatureTypeRequest createDescribeFeatureTypeRequest(
596
                        WFSStatus status) {
597
                return new WFSDescribeFeatureTypeRequest1_0_0(status, this);
598
        }
599

    
600
        /*
601
         * (non-Javadoc)
602
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createGetFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
603
         */
604
        protected WFSGetFeatureRequest createGetFeatureRequest(WFSStatus status) {
605
                return new WFSGetFeatureRequest1_0_0(status, this);
606
        }
607

    
608
        /*
609
         * (non-Javadoc)
610
         * @see org.gvsig.remoteClient.wfs.WFSProtocolHandler#createLockFeatureRequest(org.gvsig.remoteClient.wfs.WFSStatus)
611
         */
612
        protected WFSTLockFeatureRequest createLockFeatureRequest(WFSStatus status) {
613
                return new WFSTLockFeatureRequest1_0_0(status, this);
614
        }
615
}