Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2020 / libraries / libRemoteServices / src / org / gvsig / remoteclient / wcs / wcs_1_0_0 / WCSProtocolHandler1_0_0.java @ 33910

History | View | Annotate | Download (14.1 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package org.gvsig.remoteclient.wcs.wcs_1_0_0;
42

    
43
import java.io.File;
44
import java.io.IOException;
45

    
46
import org.kxml2.io.KXmlParser;
47
import org.xmlpull.v1.XmlPullParserException;
48

    
49
import org.gvsig.remoteclient.utils.CapabilitiesTags;
50
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
51
import org.gvsig.remoteclient.utils.EncodingXMLParser;
52
import org.gvsig.remoteclient.wcs.CoverageOfferingBrief;
53
import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
54
import org.gvsig.remoteclient.wcs.WCSStatus;
55
import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
56
import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
57
import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSDescribeCoverageRequest1_0_0;
58
import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSGetCoverageRequest1_0_0;
59

    
60
/**
61
 * @author jaume
62
 *
63
 */
64
public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
65

    
66
        public WCSProtocolHandler1_0_0() {
67
                super();
68
                this.version = "1.0.0";
69
                this.name = "WCS1.0.0";
70
        }
71

    
72
    /* (non-Javadoc)
73
     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
74
     */
75
    /**
76
     * <p>Parse the xml data retrieved from the WCS, it will parse the WCS Capabilities</p>
77
     *
78
     */
79
    public boolean parseCapabilities(File f)
80
    {
81
            int tag;
82
            EncodingXMLParser parser = null;
83
              parser = new EncodingXMLParser();
84
            try
85
            {
86
                    parser.setInput(f);
87
                    parser.nextTag();
88

    
89
            if ( parser.getEventType() != KXmlParser.END_DOCUMENT )
90
            {
91
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0);
92
                tag = parser.nextTag();
93
                while(tag != KXmlParser.END_DOCUMENT)
94
                {
95
                    switch(tag)
96
                    {
97
                        case KXmlParser.START_TAG:
98
                            if (parser.getName().compareTo(CapabilitiesTags.SERVICE)==0)
99
                            {
100
                                parseServiceTag(parser);
101
                            }
102
                            else if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
103
                            {
104
                                parseCapabilityTag(parser);
105
                            }
106
                            else if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA)==0)
107
                            {
108
                                    parseContentMetadataTag(parser);
109
                            }
110
                            break;
111
                        case KXmlParser.END_TAG:
112
                            break;
113
                        case KXmlParser.TEXT:
114
                                if (parser.getName()!=null)
115
                                        System.out.println("[TEXT]["+parser.getText().trim()+"]");
116
                            break;
117
                    }
118
                    tag = parser.next();
119
                }
120
                parser.require(KXmlParser.END_DOCUMENT, null, null);
121
            }
122
        }
123
        catch(XmlPullParserException parser_ex){
124
            System.out.println(parser_ex.getMessage());
125
            parser_ex.printStackTrace();
126
            return false;
127
        }
128
        catch (IOException ioe) {
129
            ioe.printStackTrace();
130
            return false;
131
        }
132
        return true;
133
    }
134

    
135
    /* (non-Javadoc)
136
     * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#parseDescribeCoverage(java.io.File)
137
     */
138
    public boolean parseDescribeCoverage(File f) {
139
            int tag;
140
            EncodingXMLParser parser = null;
141
              parser = new EncodingXMLParser();
142
            try
143
            {
144
                    parser.setInput(f);
145
                    parser.nextTag();
146
            if (parser.getEventType() != KXmlParser.END_DOCUMENT){
147
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_DESCRIPTION);
148
                tag = parser.nextTag();
149
                while (tag != KXmlParser.END_DOCUMENT){
150
                    switch (tag){
151
                        case KXmlParser.START_TAG:
152
                            if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING)==0){
153
                                WCSCoverage1_0_0 lyr = new WCSCoverage1_0_0();
154
                                lyr.parse(parser);
155
                                if (lyr!=null){
156
                                    layerPool.put(lyr.getName(), lyr);
157
                                }
158
                            }
159
                            break;
160
                    }
161
                    tag = parser.next();
162
                }
163
                parser.require(KXmlParser.END_DOCUMENT, null, null);
164
            }
165
        } catch (XmlPullParserException e) {
166
            System.out.println(e.getMessage());
167
            e.printStackTrace();
168
            return false;
169
        }
170
        catch (IOException ioe) {
171
            ioe.printStackTrace();
172
            return false;
173
        }
174
        return true;
175
    }
176

    
177

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

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

    
189
        while (!end)
190
        {
191
             switch(currentTag)
192
             {
193
                case KXmlParser.START_TAG:
194
                    if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
195
                    {
196
                        parseRequestTag(parser);
197
                    }
198
                    else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
199
                    {
200
                        //TODO Parse exception tags...
201
                            parser.skipSubTree();
202
                    }
203
                    else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
204
                            (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
205
                    {
206
                        parser.skipSubTree();
207
                    }
208
                    break;
209
                case KXmlParser.END_TAG:
210
                    if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
211
                        end = true;
212
                    break;
213
                case KXmlParser.TEXT:
214
                break;
215
             }
216
             currentTag = parser.next();
217
        }
218
    }
219

    
220

    
221
    /**
222
     * <p>Parses the Service Information </p>
223
     */
224
    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException
225
    {
226
        int currentTag;
227
        boolean end = false;
228

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

    
232
        while (!end)
233
        {
234
             switch(currentTag)
235
             {
236
                case KXmlParser.START_TAG:
237
                    if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME)==0)
238
                    {
239
                        serviceInfo.name = parser.nextText();
240
                    }
241
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0)
242
                    {
243
                        serviceInfo.title = parser.nextText();
244
                    }
245
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_DESCRIPTION)==0)
246
                    {
247
                        serviceInfo.abstr = parser.nextText();
248
                    }
249
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_KEYWORDS)==0)
250
                    {
251
                        parser.skipSubTree();
252
                    }
253
                    else if (parser.getName().compareTo(CapabilitiesTags.ACCESSCONSTRAINTS)==0)
254
                    {
255
                        parser.skipSubTree();
256
                    }
257
                    else if (parser.getName().compareTo(CapabilitiesTags.FEES)==0)
258
                    {
259
                        parser.skipSubTree();
260
                    }
261

    
262
                    break;
263
                case KXmlParser.END_TAG:
264
                    if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
265
                        end = true;
266
                    break;
267
                case KXmlParser.TEXT:
268
                break;
269
             }
270
             currentTag = parser.next();
271
        }
272
//      parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.SERVICE);
273
    }
274

    
275
    /**
276
     * <p>Parses the Request tag </p>
277
     */
278
    private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException
279
    {
280
            int currentTag;
281
            boolean end = false;
282

    
283
            parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
284
            currentTag = parser.next();
285

    
286
            while (!end)
287
            {
288
                    switch(currentTag)
289
                    {
290
                    case KXmlParser.START_TAG:
291
                            if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES)==0)
292
                            {
293
                                    currentTag = parser.nextTag();
294
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
295
                                    {
296
                                                currentTag = parser.nextTag();
297
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
298
                                                {
299
                                                        currentTag = parser.nextTag();
300
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
301
                                                        {
302
                                                                currentTag = parser.nextTag();
303
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
304
                                                                {
305
                                                                        String value = new String();
306
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
307
                                                                        if (value != null){
308
                                                                                serviceInfo.operations.put(value, null);
309
                                                                        }
310
                                                                }
311
                                                        }
312
                                                }
313
                                        }
314

    
315
                            }
316
                            else if (parser.getName().compareTo(CapabilitiesTags.DESCRIBECOVERAGE)==0)
317
                            {
318
                                    currentTag = parser.nextTag();
319
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
320
                                    {
321
                                                currentTag = parser.nextTag();
322
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
323
                                                {
324
                                                        currentTag = parser.nextTag();
325
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
326
                                                        {
327
                                                                currentTag = parser.nextTag();
328
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
329
                                                                {
330
                                                                        String value = new String();
331
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
332
                                                                        if (value != null){
333
                                                                                serviceInfo.operations.put(value, null);
334
                                                                        }
335
                                                                }
336
                                                        }
337
                                                }
338
                                        }
339
                            }
340
                            else if (parser.getName().compareTo(CapabilitiesTags.GETCOVERAGE)==0)
341
                            {
342
                                    currentTag = parser.nextTag();
343
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
344
                                    {
345
                                                currentTag = parser.nextTag();
346
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
347
                                                {
348
                                                        currentTag = parser.nextTag();
349
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
350
                                                        {
351
                                                                currentTag = parser.nextTag();
352
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
353
                                                                {
354
                                                                        String value = new String();
355
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
356
                                                                        if (value != null){
357
                                                                                serviceInfo.operations.put(value, null);
358
                                                                        }
359
                                                                }
360
                                                        }
361
                                                }
362
                                        }
363
                            }
364
                            break;
365
                    case KXmlParser.END_TAG:
366
                            if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0)
367
                                    end = true;
368
                            break;
369
                    case KXmlParser.TEXT:
370
                            break;
371
                    }
372
                    currentTag = parser.next();
373
            }
374
            // TODO: does not get such a tag when arrives here!!!!!!
375
            //parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
376
    }
377

    
378
    private void parseContentMetadataTag(KXmlParser parser) throws XmlPullParserException, IOException {
379
            int currentTag;
380
            boolean end = false;
381

    
382
            parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CONTENTMETADATA);
383
            currentTag = parser.next();
384

    
385
            while (!end)
386
            {
387
                    switch(currentTag)
388
                    {
389
                    case KXmlParser.START_TAG:
390
                            if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF)==0) {
391
                                    CoverageOfferingBrief cob = new CoverageOfferingBrief();
392
                                    cob.parse(parser);
393
                                    layerPool.put(cob.getName(), cob);
394
                            }
395
                            break;
396
                    case KXmlParser.END_TAG:
397
                            if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA) == 0)
398
                                    end = true;
399
                            break;
400
                    case KXmlParser.TEXT:
401
                            break;
402
                    }
403
                    currentTag = parser.next();
404
            }
405
            // TODO: does not get such a tag when arrives here!!!!!!
406
            //parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
407
    }
408

    
409
        /*
410
         * (non-Javadoc)
411
         * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createDescribeCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
412
         */
413
        public WCSDescribeCoverageRequest createDescribeCoverageRequest(
414
                        WCSStatus status) {
415
                return new WCSDescribeCoverageRequest1_0_0(status, this);
416
        }
417

    
418
        /*
419
         * (non-Javadoc)
420
         * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createGetCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
421
         */
422
        public WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status) {
423
                return new WCSGetCoverageRequest1_0_0(status, this);
424
        }
425
}
426