Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libRemoteServices / src / org / gvsig / remoteClient / wcs / wcs_1_0_0 / WCSProtocolHandler1_0_0.java @ 14705

History | View | Annotate | Download (13.4 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.BufferedReader;
44
import java.io.File;
45
import java.io.FileInputStream;
46
import java.io.FileNotFoundException;
47
import java.io.FileReader;
48
import java.io.IOException;
49

    
50
import org.gvsig.remoteClient.utils.CapabilitiesTags;
51
import org.gvsig.remoteClient.utils.DescribeCoverageTags;
52
import org.gvsig.remoteClient.utils.EncodingXMLParser;
53
import org.gvsig.remoteClient.wcs.CoverageOfferingBrief;
54
import org.gvsig.remoteClient.wcs.WCSProtocolHandler;
55
import org.kxml2.io.KXmlParser;
56
import org.xmlpull.v1.XmlPullParserException;
57

    
58
/**
59
 * @author jaume
60
 *
61
 */
62
public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
63

    
64
        public WCSProtocolHandler1_0_0() {
65
                this.version = "1.0.0";
66
                this.name = "WCS1.0.0";
67
                this.serviceInfo = new ServiceInformation();
68

    
69
        }
70

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

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

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

    
176

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

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

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

    
219

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

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

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

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

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

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

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

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

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

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

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