Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.remoteclient / src / main / java / org / gvsig / remoteclient / wcs / wcs_1_0_0 / WCSProtocolHandler1_0_0.java @ 40559

History | View | Annotate | Download (13.9 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.remoteclient.wcs.wcs_1_0_0;
25

    
26
import java.io.File;
27
import java.io.IOException;
28

    
29
import org.kxml2.io.KXmlParser;
30
import org.xmlpull.v1.XmlPullParserException;
31

    
32
import org.gvsig.remoteclient.utils.CapabilitiesTags;
33
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
34
import org.gvsig.remoteclient.utils.EncodingXMLParser;
35
import org.gvsig.remoteclient.wcs.CoverageOfferingBrief;
36
import org.gvsig.remoteclient.wcs.WCSProtocolHandler;
37
import org.gvsig.remoteclient.wcs.WCSStatus;
38
import org.gvsig.remoteclient.wcs.request.WCSDescribeCoverageRequest;
39
import org.gvsig.remoteclient.wcs.request.WCSGetCoverageRequest;
40
import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSDescribeCoverageRequest1_0_0;
41
import org.gvsig.remoteclient.wcs.wcs_1_0_0.request.WCSGetCoverageRequest1_0_0;
42

    
43
/**
44
 * @author jaume
45
 *
46
 */
47
public class WCSProtocolHandler1_0_0 extends WCSProtocolHandler{
48

    
49
        public WCSProtocolHandler1_0_0() {
50
                super();
51
                this.version = "1.0.0";
52
                this.name = "WCS1.0.0";
53
        }
54

    
55
    /* (non-Javadoc)
56
     * @see org.gvsig.remoteClient.OGCProtocolHandler#parseCapabilities(java.io.File)
57
     */
58
    /**
59
     * <p>Parse the xml data retrieved from the WCS, it will parse the WCS Capabilities</p>
60
     *
61
     */
62
    public boolean parseCapabilities(File f)
63
    {
64
            int tag;
65
            EncodingXMLParser parser = null;
66
              parser = new EncodingXMLParser();
67
            try
68
            {
69
                    parser.setInput(f);
70
                    parser.nextTag();
71

    
72
            if ( parser.getEventType() != KXmlParser.END_DOCUMENT )
73
            {
74
                parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CAPABILITIES_ROOT1_0_0);
75
                tag = parser.nextTag();
76
                while(tag != KXmlParser.END_DOCUMENT)
77
                {
78
                    switch(tag)
79
                    {
80
                        case KXmlParser.START_TAG:
81
                            if (parser.getName().compareTo(CapabilitiesTags.SERVICE)==0)
82
                            {
83
                                parseServiceTag(parser);
84
                            }
85
                            else if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
86
                            {
87
                                parseCapabilityTag(parser);
88
                            }
89
                            else if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA)==0)
90
                            {
91
                                    parseContentMetadataTag(parser);
92
                            }
93
                            break;
94
                        case KXmlParser.END_TAG:
95
                            break;
96
                        case KXmlParser.TEXT:
97
                                if (parser.getName()!=null)
98
                                        System.out.println("[TEXT]["+parser.getText().trim()+"]");
99
                            break;
100
                    }
101
                    tag = parser.next();
102
                }
103
                parser.require(KXmlParser.END_DOCUMENT, null, null);
104
            }
105
        }
106
        catch(XmlPullParserException parser_ex){
107
            System.out.println(parser_ex.getMessage());
108
            parser_ex.printStackTrace();
109
            return false;
110
        }
111
        catch (IOException ioe) {
112
            ioe.printStackTrace();
113
            return false;
114
        }
115
        return true;
116
    }
117

    
118
    /* (non-Javadoc)
119
     * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#parseDescribeCoverage(java.io.File)
120
     */
121
    public boolean parseDescribeCoverage(File f) {
122
            int tag;
123
            EncodingXMLParser parser = null;
124
              parser = new EncodingXMLParser();
125
            try
126
            {
127
                    parser.setInput(f);
128
                    parser.nextTag();
129
            if (parser.getEventType() != KXmlParser.END_DOCUMENT){
130
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_DESCRIPTION);
131
                tag = parser.nextTag();
132
                while (tag != KXmlParser.END_DOCUMENT){
133
                    switch (tag){
134
                        case KXmlParser.START_TAG:
135
                            if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING)==0){
136
                                WCSCoverage1_0_0 lyr = new WCSCoverage1_0_0();
137
                                lyr.parse(parser);
138
                                if (lyr!=null){
139
                                    layerPool.put(lyr.getName(), lyr);
140
                                }
141
                            }
142
                            break;
143
                    }
144
                    tag = parser.next();
145
                }
146
                parser.require(KXmlParser.END_DOCUMENT, null, null);
147
            }
148
        } catch (XmlPullParserException e) {
149
            System.out.println(e.getMessage());
150
            e.printStackTrace();
151
            return false;
152
        }
153
        catch (IOException ioe) {
154
            ioe.printStackTrace();
155
            return false;
156
        }
157
        return true;
158
    }
159

    
160

    
161
    /**
162
     * <p>Parses the Capability Tag </p>
163
     */
164
    private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException
165
    {
166
        int currentTag;
167
        boolean end = false;
168

    
169
        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
170
        currentTag = parser.next();
171

    
172
        while (!end)
173
        {
174
             switch(currentTag)
175
             {
176
                case KXmlParser.START_TAG:
177
                    if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
178
                    {
179
                        parseRequestTag(parser);
180
                    }
181
                    else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
182
                    {
183
                        //TODO Parse exception tags...
184
                            parser.skipSubTree();
185
                    }
186
                    else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
187
                            (parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
188
                    {
189
                        parser.skipSubTree();
190
                    }
191
                    break;
192
                case KXmlParser.END_TAG:
193
                    if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
194
                        end = true;
195
                    break;
196
                case KXmlParser.TEXT:
197
                break;
198
             }
199
             currentTag = parser.next();
200
        }
201
    }
202

    
203

    
204
    /**
205
     * <p>Parses the Service Information </p>
206
     */
207
    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException
208
    {
209
        int currentTag;
210
        boolean end = false;
211

    
212
        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
213
        currentTag = parser.next();
214

    
215
        while (!end)
216
        {
217
             switch(currentTag)
218
             {
219
                case KXmlParser.START_TAG:
220
                    if (parser.getName().compareToIgnoreCase(CapabilitiesTags.NAME)==0)
221
                    {
222
                        serviceInfo.name = parser.nextText();
223
                    }
224
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_LABEL)==0)
225
                    {
226
                        serviceInfo.title = parser.nextText();
227
                    }
228
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_DESCRIPTION)==0)
229
                    {
230
                        serviceInfo.abstr = parser.nextText();
231
                    }
232
                    else if (parser.getName().compareTo(CapabilitiesTags.WCS_KEYWORDS)==0)
233
                    {
234
                        parser.skipSubTree();
235
                    }
236
                    else if (parser.getName().compareTo(CapabilitiesTags.ACCESSCONSTRAINTS)==0)
237
                    {
238
                        parser.skipSubTree();
239
                    }
240
                    else if (parser.getName().compareTo(CapabilitiesTags.FEES)==0)
241
                    {
242
                        parser.skipSubTree();
243
                    }
244

    
245
                    break;
246
                case KXmlParser.END_TAG:
247
                    if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
248
                        end = true;
249
                    break;
250
                case KXmlParser.TEXT:
251
                break;
252
             }
253
             currentTag = parser.next();
254
        }
255
//      parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.SERVICE);
256
    }
257

    
258
    /**
259
     * <p>Parses the Request tag </p>
260
     */
261
    private void parseRequestTag(KXmlParser parser) throws IOException, XmlPullParserException
262
    {
263
            int currentTag;
264
            boolean end = false;
265

    
266
            parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.REQUEST);
267
            currentTag = parser.next();
268

    
269
            while (!end)
270
            {
271
                    switch(currentTag)
272
                    {
273
                    case KXmlParser.START_TAG:
274
                            if (parser.getName().compareTo(CapabilitiesTags.GETCAPABILITIES)==0)
275
                            {
276
                                    currentTag = parser.nextTag();
277
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
278
                                    {
279
                                                currentTag = parser.nextTag();
280
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
281
                                                {
282
                                                        currentTag = parser.nextTag();
283
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
284
                                                        {
285
                                                                currentTag = parser.nextTag();
286
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
287
                                                                {
288
                                                                        String value = new String();
289
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
290
                                                                        if (value != null){
291
                                                                                serviceInfo.operations.put(value, null);
292
                                                                        }
293
                                                                }
294
                                                        }
295
                                                }
296
                                        }
297

    
298
                            }
299
                            else if (parser.getName().compareTo(CapabilitiesTags.DESCRIBECOVERAGE)==0)
300
                            {
301
                                    currentTag = parser.nextTag();
302
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
303
                                    {
304
                                                currentTag = parser.nextTag();
305
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
306
                                                {
307
                                                        currentTag = parser.nextTag();
308
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
309
                                                        {
310
                                                                currentTag = parser.nextTag();
311
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
312
                                                                {
313
                                                                        String value = new String();
314
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
315
                                                                        if (value != null){
316
                                                                                serviceInfo.operations.put(value, null);
317
                                                                        }
318
                                                                }
319
                                                        }
320
                                                }
321
                                        }
322
                            }
323
                            else if (parser.getName().compareTo(CapabilitiesTags.GETCOVERAGE)==0)
324
                            {
325
                                    currentTag = parser.nextTag();
326
                                    parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.DCPTYPE);
327
                                    {
328
                                                currentTag = parser.nextTag();
329
                                                if(parser.getName().compareTo(CapabilitiesTags.HTTP)==0)
330
                                                {
331
                                                        currentTag = parser.nextTag();
332
                                                        if(parser.getName().compareTo(CapabilitiesTags.GET)==0)
333
                                                        {
334
                                                                currentTag = parser.nextTag();
335
                                                                if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
336
                                                                {
337
                                                                        String value = new String();
338
                                                                        value = parser.getAttributeValue("", CapabilitiesTags.XLINK_HREF);
339
                                                                        if (value != null){
340
                                                                                serviceInfo.operations.put(value, null);
341
                                                                        }
342
                                                                }
343
                                                        }
344
                                                }
345
                                        }
346
                            }
347
                            break;
348
                    case KXmlParser.END_TAG:
349
                            if (parser.getName().compareTo(CapabilitiesTags.REQUEST) == 0)
350
                                    end = true;
351
                            break;
352
                    case KXmlParser.TEXT:
353
                            break;
354
                    }
355
                    currentTag = parser.next();
356
            }
357
            // TODO: does not get such a tag when arrives here!!!!!!
358
            //parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
359
    }
360

    
361
    private void parseContentMetadataTag(KXmlParser parser) throws XmlPullParserException, IOException {
362
            int currentTag;
363
            boolean end = false;
364

    
365
            parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.WCS_CONTENTMETADATA);
366
            currentTag = parser.next();
367

    
368
            while (!end)
369
            {
370
                    switch(currentTag)
371
                    {
372
                    case KXmlParser.START_TAG:
373
                            if (parser.getName().compareTo("wcs:"+CapabilitiesTags.WCS_COVERAGEOFFERINGBRIEF)==0) {
374
                                    CoverageOfferingBrief cob = new CoverageOfferingBrief();
375
                                    cob.parse(parser);
376
                                    layerPool.put(cob.getName(), cob);
377
                            }
378
                            break;
379
                    case KXmlParser.END_TAG:
380
                            if (parser.getName().compareTo(CapabilitiesTags.WCS_CONTENTMETADATA) == 0)
381
                                    end = true;
382
                            break;
383
                    case KXmlParser.TEXT:
384
                            break;
385
                    }
386
                    currentTag = parser.next();
387
            }
388
            // TODO: does not get such a tag when arrives here!!!!!!
389
            //parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.REQUEST);
390
    }
391

    
392
        /*
393
         * (non-Javadoc)
394
         * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createDescribeCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
395
         */
396
        public WCSDescribeCoverageRequest createDescribeCoverageRequest(
397
                        WCSStatus status) {
398
                return new WCSDescribeCoverageRequest1_0_0(status, this);
399
        }
400

    
401
        /*
402
         * (non-Javadoc)
403
         * @see org.gvsig.remoteClient.wcs.WCSProtocolHandler#createGetCoverageRequest(org.gvsig.remoteClient.wcs.WCSStatus)
404
         */
405
        public WCSGetCoverageRequest createGetCoverageRequest(WCSStatus status) {
406
                return new WCSGetCoverageRequest1_0_0(status, this);
407
        }
408
}
409