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 / WCSCoverage1_0_0.java @ 40559

History | View | Annotate | Download (28.6 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
/**
25
 *
26
 */
27
package org.gvsig.remoteclient.wcs.wcs_1_0_0;
28

    
29

    
30
import java.io.IOException;
31

    
32
import org.kxml2.io.KXmlParser;
33
import org.xmlpull.v1.XmlPullParserException;
34

    
35
import org.gvsig.compat.CompatLocator;
36
import org.gvsig.compat.lang.StringUtils;
37
import org.gvsig.remoteclient.utils.BoundaryBox;
38
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
39
import org.gvsig.remoteclient.wcs.WCSCoverage;
40

    
41
/**
42
 * @author jaume
43
 *
44
 */
45
public class WCSCoverage1_0_0 extends WCSCoverage{
46
        String axisDescriptionName;
47

    
48
    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
49
    
50
        /* (non-Javadoc)
51
     * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
52
     */
53
    public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
54
        int currentTag;
55
        String value;
56
        boolean end = false;
57

    
58
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
59
        currentTag = parser.next();
60

    
61
        while (!end)
62
        {
63
             switch(currentTag)
64
             {
65
                case KXmlParser.START_TAG:
66
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
67
                    {
68
                        value = parser.nextText();
69
                        if (value != null) setName(value);
70
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){
71
                        value = parser.nextText();
72
                        if (value != null) setTitle(value);
73
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){
74
                            BoundaryBox bBox = parseLonLatGMLEnvelope(parser);
75
                        bBox.setSrs(DescribeCoverageTags.WGS84);
76
                        addBBox(bBox);
77
                        setLonLatBox(bBox);
78
                    } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) {
79
                            parseDomainSet(parser);
80
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) {
81
                            parseRangeSet(parser);
82
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) {
83
                            parseSupportedCRSS(parser);
84
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_FORMATS) == 0) {
85
                            setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVE_FORMAT));
86
                            parser.nextTag();
87
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
88
                            while (parser.getName().compareTo(DescribeCoverageTags.FORMATS) == 0) {
89
                                    String[] formats = stringUtils.split(parser.nextText(), SEPARATOR);
90
                                    for (int i = 0; i < formats.length; i++) {
91
                                            addFormat(formats[i]);
92
                                    }
93
                                    parser.nextTag();
94
                            }
95
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) {
96
                            boolean bInterpolationsEnd = false;
97
                            int interpolationsTag = parser.next();
98
                            while (!bInterpolationsEnd) {
99
                                    switch(interpolationsTag) {
100
                                            case KXmlParser.START_TAG:
101
                                                    if (parser.getName().compareTo(DescribeCoverageTags.INTERPOLATION_METHOD)==0) {
102
                                                            addInterpolationMethod(parser.nextText());
103
                                                    }
104
                                                    break;
105
                                            case KXmlParser.END_TAG:
106
                                                    if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0)
107
                                                            bInterpolationsEnd = true;
108
                                                    break;
109
                                            case KXmlParser.TEXT:
110
                                                    if (parser.getName()!=null)
111
                                                            System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
112
                                                    break;
113
                                    }
114
                                    interpolationsTag = parser.next();
115
                            }
116
                    } else {
117
                            if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages
118
                                    System.out.println("Skiped "+parser.getName());
119
                    }
120

    
121
                    break;
122
                case KXmlParser.END_TAG:
123
                    if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0)
124
                        end = true;
125
                    break;
126
                case KXmlParser.TEXT:
127
                        if (parser.getName()!=null)
128
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
129
                        break;
130
             }
131
             currentTag = parser.next();
132
        }
133
    }
134

    
135
    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
136
            int currentTag;
137
            boolean end = false;
138

    
139
            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
140
            currentTag = parser.next();
141

    
142
            while (!end)
143
            {
144
                    switch(currentTag)
145
                    {
146
                            case KXmlParser.START_TAG:
147
                                    if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_RESPONSE_CRSS)==0) {
148
                                            String[] values = stringUtils.split(parser.nextText(), SEPARATOR);
149
                                            for (int i = 0; i < values.length; i++) {
150
                                                        addSRSs(values[i]);
151
                                                }
152
                                    }
153
                                    else if (parser.getName().compareTo(DescribeCoverageTags.NATIVE_CRS) == 0) {
154
                                            setNativeSRS(parser.nextText());
155
                                    } else if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_CRSS) == 0) {
156
                                            // TODO
157
                            System.out.println("Skiped "+parser.getName());
158
                                    } else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSE_CRSS) == 0) {
159
                                            // TODO
160
                            System.out.println("Skiped "+parser.getName());
161
                    } else {
162
                            System.out.println("Unrecognized "+parser.getName());
163
                                    }
164

    
165
                                    break;
166
                            case KXmlParser.END_TAG:
167
                                    if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0)
168
                                            return;//end = true;
169
                                    break;
170
                            case KXmlParser.TEXT:
171
                                    if (parser.getName()!=null)
172
                                            System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
173
                                    break;
174
                    }
175
                    currentTag = parser.next();
176
            }
177
    }
178

    
179
        private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
180
                int currentTag;
181
        boolean end = false;
182

    
183
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
184
        currentTag = parser.next();
185

    
186
        while (!end)
187
        {
188
             switch(currentTag)
189
             {
190
                case KXmlParser.START_TAG:
191
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
192
                            setRangeSetName(parser.nextText());
193
                    else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0)
194
                            setRangeSetLabel(parser.nextText());
195
                    else if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) {
196
                            // Reading all axe description
197
                            int axisTag = parser.nextTag();
198
                            boolean endAxe = false;
199
                            while (!endAxe) {
200
                            switch(axisTag)
201
                            {
202
                               case KXmlParser.START_TAG:
203
                                       if (parser.getName().compareTo(DescribeCoverageTags.AXISDESCRIPTION)==0) {
204
                                               AxisDescription as = parseAxisDescription(parser);
205
                                               axisPool.put(as.getName(), as);
206
                                               axisDescriptionName = as.getName();
207
                                       }
208
                                       break;
209
                               case KXmlParser.END_TAG:
210
                                   if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
211
                                           endAxe = true;
212
                                   break;
213
                               case KXmlParser.TEXT:
214
                                       if (parser.getName()!=null)
215
                                               System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
216
                                       break;
217
                            }
218
                            axisTag = parser.next();
219
                            }
220
                    } else {
221
                            System.out.println("Unrecognized "+parser.getName());
222
                    }
223
                    break;
224
                case KXmlParser.END_TAG:
225
                    if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0)
226
                        end = true;
227
                    break;
228
                case KXmlParser.TEXT:
229
                        if (parser.getName()!=null)
230
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
231
                        break;
232
             }
233
             currentTag = parser.next();
234
        }
235
        }
236

    
237
        private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
238
                int currentTag;
239
        boolean end = false;
240

    
241
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
242
        AxisDescription as = new AxisDescription();
243
        currentTag = parser.next();
244

    
245
        while (!end)
246
        {
247
             switch(currentTag)
248
             {
249
                case KXmlParser.START_TAG:
250
                        if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
251
                                as.setName(parser.nextText());
252
                        } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
253
                                as.setLabel(parser.nextText());
254
                        } else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
255
                                int valuesTag = parser.nextTag();
256
                                boolean valuesEnd = false;
257
                                while (!valuesEnd) {
258
                                        switch(valuesTag)        {
259
                                                case KXmlParser.START_TAG:
260
                                                        if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
261
                                                                as.addSingleValues(parser.nextText());
262
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
263
                                                                as.setInterval(parser.nextText());
264
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
265
                                                                as.setDefaultValue(parser.nextText());
266
                                                        }
267
                                                        break;
268
                                                case KXmlParser.END_TAG:
269
                                                        if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
270
                                                                valuesEnd = true;
271
                                                        break;
272
                                                case KXmlParser.TEXT:
273
                                                        if (parser.getName()!=null)
274
                                                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
275
                                                        break;
276
                                                }
277
                                        valuesTag = parser.next();
278
                                }
279
                        } else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
280
                                // TODO
281
                                System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
282
                    } else {
283
                            System.out.println("Unrecognized "+parser.getName());
284
                        }
285

    
286
                        break;
287
                case KXmlParser.END_TAG:
288
                    if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
289
                        end = true;
290
                    break;
291
                case KXmlParser.TEXT:
292
                        if (parser.getName()!=null)
293
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
294
                        break;
295
             }
296
             currentTag = parser.next();
297
        }
298
        return as;
299
        }
300

    
301
        private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
302
                int currentTag;
303
        boolean end = false;
304

    
305
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
306
        currentTag = parser.next();
307

    
308
        while (!end)
309
        {
310
             switch(currentTag)
311
             {
312
                case KXmlParser.START_TAG:
313
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0)
314
                    {
315
                            parseSpatialDomain(parser);
316
                    } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) {
317
                            parseTemporalDomain(parser);
318
                    }
319
                    break;
320
                case KXmlParser.END_TAG:
321
                    if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0)
322
                        end = true;
323
                    break;
324
                case KXmlParser.TEXT:
325
                        if (parser.getName()!=null)
326
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
327
                        break;
328
             }
329
             currentTag = parser.next();
330
        }
331
        }
332

    
333
        private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
334
                int currentTag;
335
        boolean end = false;
336

    
337
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
338
        currentTag = parser.next();
339

    
340
        while (!end)
341
        {
342
             switch(currentTag)
343
             {
344
                case KXmlParser.START_TAG:
345
                        if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) {
346
                                addTimePosition(parser.nextText());
347
                        } else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) {
348
                                boolean timePeriodEnd = false;
349
                                int timePeriodTag = parser.next();
350
                                String[] myTimePeriod = new String[3];
351
                                while (!timePeriodEnd) {
352
                                        switch (timePeriodTag) {
353
                                        case KXmlParser.START_TAG:
354
                                                if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) {
355
                                                        myTimePeriod[0] = parser.nextText();
356
                                                } else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) {
357
                                                        myTimePeriod[1] = parser.nextText();
358
                                                } else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) {
359
                                                        myTimePeriod[2] = parser.nextText();
360
                                } else {
361
                                        System.out.println("Unrecognized "+parser.getName());
362
                                                }
363
                                                break;
364
                                        case KXmlParser.END_TAG:
365
                                                if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
366
                                                        end = true;
367
                                                break;
368
                                        case KXmlParser.TEXT:
369
                                                if (parser.getName()!=null)
370
                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
371
                                                break;
372
                                        }
373
                                        timePeriodTag = parser.next();
374
                                }
375
                                super.timePeriod = "";
376
                                for (int i = 0; i < myTimePeriod.length-1; i++) {
377
                                        if (myTimePeriod[i]!=null) {
378
                                                super.timePeriod += myTimePeriod[i];
379
                                        }
380
                                        if (myTimePeriod[i+1]!=null) {
381
                                                super.timePeriod += "/";
382
                                        }
383
                                                }
384
                    } else {
385
                            System.out.println("Unrecognized "+parser.getName());
386
                        }
387
                        break;
388
                case KXmlParser.END_TAG:
389
                    if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
390
                        end = true;
391
                    break;
392
                case KXmlParser.TEXT:
393
                        if (parser.getName()!=null)
394
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
395
                        break;
396
             }
397
             currentTag = parser.next();
398
        }
399
        }
400

    
401
        private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
402
                int currentTag;
403
        boolean end = false;
404

    
405
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
406
        currentTag = parser.next();
407

    
408
        while (!end)
409
        {
410
             switch(currentTag)
411
             {
412
                case KXmlParser.START_TAG:
413
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) {
414
                            BoundaryBox bBox = parseGMLEnvelope(parser);
415
                            addBBox(bBox);
416
                    } else if (parser.getName().compareTo(DescribeCoverageTags.GRID)==0) {
417
                            parseGrid(parser);
418
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) {
419
                            parseRectifiedGrid(parser);
420
                    } else {
421
                            System.out.println("Unrecognized "+parser.getName());
422
                    }
423
                    break;
424
                case KXmlParser.END_TAG:
425
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0)
426
                        return;
427
                    break;
428
                case KXmlParser.TEXT:
429
                        if (parser.getName()!=null)
430
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
431
                        break;
432
             }
433
             currentTag = parser.next();
434
        }
435
         }
436

    
437
        private void parseGrid(KXmlParser parser) throws XmlPullParserException, IOException {
438
                int currentTag;
439
                String value;
440
                boolean end = false;
441
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GRID);
442
                rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
443

    
444
                currentTag = parser.next();
445

    
446
                while (!end)
447
                {
448
                        switch(currentTag)        {
449
                        case KXmlParser.START_TAG:
450
                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
451
                                        parser.nextTag();
452
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
453
                                                boolean gridEnd = false;
454
                                                int gridCurrentTag = parser.next();
455
                                                while (!gridEnd){
456
                                                        switch (gridCurrentTag) {
457
                                                        case KXmlParser.START_TAG:
458

    
459
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
460
                                                                        value = parser.nextText();
461
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
462
                                                                        int[] limits = new int[ss.length];
463
                                                                        for (int i = 0; i < limits.length; i++) {
464
                                                                                limits[i] = Integer.parseInt(ss[i]);
465
                                                                        }
466
                                                                        rg.addLowGridEnvelopLimit(limits);
467
                                                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
468
                                                                        value = parser.nextText();
469
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
470
                                                                        int[] limits = new int[ss.length];
471
                                                                        for (int i = 0; i < limits.length; i++) {
472
                                                                                limits[i] = Integer.parseInt(ss[i]);
473
                                                                        }
474
                                                                        rg.addHighGridEnvelopLimit(limits);
475
                                                                } else {
476
                                                                        System.out.println("Unrecognized "+parser.getName());
477
                                                                }
478
                                                                break;
479
                                                        case KXmlParser.END_TAG:
480
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
481
                                                                        gridEnd = true;
482
                                                                break;
483
                                                        case KXmlParser.TEXT:
484
                                                                if (parser.getName()!=null)
485
                                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
486
                                                                break;
487
                                                        }
488
                                                        gridCurrentTag = parser.next();
489
                                                }
490
                                        }
491
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
492
                                        rg.addAxisName(parser.nextText());
493
                                } else {
494
                                        System.out.println("Unrecognized "+parser.getName());
495
                                }
496
                                break;
497
                        case KXmlParser.END_TAG:
498
                                if (parser.getName().compareTo(DescribeCoverageTags.GRID) == 0)
499
                                        return;//end = true;
500
                                break;
501
                        case KXmlParser.TEXT:
502
                                if (parser.getName()!=null)
503
                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
504
                                break;
505
                        }
506
                        currentTag = parser.next();
507
                }
508
        }
509

    
510
        private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException {
511
                int currentTag;
512
                String value;
513
                boolean end = false;
514
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
515
                rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
516

    
517
                // TODO maybe this is wrong
518
                rg.addToOffsetVector(new double[] { -1, -1});
519
                rg.addToOffsetVector(new double[] { -1, -1});
520

    
521
                currentTag = parser.next();
522

    
523
                while (!end)
524
                {
525
                        switch(currentTag)
526
                        {
527
                        case KXmlParser.START_TAG:
528
                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
529
                                        parser.nextTag();
530
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
531
                                                boolean gridEnd = false;
532
                                                int gridCurrentTag = parser.next();
533
                                                while (!gridEnd)
534
                                                {
535
                                                        switch (gridCurrentTag) {
536
                                                        case KXmlParser.START_TAG:
537

    
538
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
539
                                                                        value = parser.nextText();
540
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
541
                                                                        int[] limits = new int[ss.length];
542
                                                                        for (int i = 0; i < limits.length; i++) {
543
                                                                                limits[i] = Integer.parseInt(ss[i]);
544
                                                                        }
545
                                                                        rg.addLowGridEnvelopLimit(limits);
546
                                                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
547
                                                                        value = parser.nextText();
548
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
549
                                                                        int[] limits = new int[ss.length];
550
                                                                        for (int i = 0; i < limits.length; i++) {
551
                                                                                limits[i] = Integer.parseInt(ss[i]);
552
                                                                        }
553
                                                                        rg.addHighGridEnvelopLimit(limits);
554
                                                                } else {
555
                                                                        System.out.println("Unrecognized "+parser.getName());
556
                                                                }
557
                                                                break;
558
                                                        case KXmlParser.END_TAG:
559
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
560
                                                                        gridEnd = true;
561
                                                                break;
562
                                                        case KXmlParser.TEXT:
563
                                                                if (parser.getName()!=null)
564
                                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
565
                                                                break;
566
                                                        }
567
                                                        gridCurrentTag = parser.next();
568
                                                }
569
                                        }
570
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
571
                                        rg.addAxisName(parser.nextText());
572
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) {
573
                                        parser.nextTag();
574
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
575
                                                value = parser.nextText();
576
                                                String[] ss = stringUtils.split(value, SEPARATOR);
577
                                                double[] ori = new double[ss.length];
578
                                                for (int i = 0; i < ori.length; i++) {
579
                                                        ori[i] = Double.parseDouble(ss[i]);
580
                                                }
581
                                                rg.setOrigin(ori);
582
                                        }
583
                                } else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) {
584
                                        value = parser.nextText();
585
                                        String[] ss = stringUtils.split(value, SEPARATOR);
586
                                        double[] offset = new double[ss.length];
587
                                        for (int i = 0; i < offset.length; i++) {
588
                                                offset[i] = Double.parseDouble(ss[i]);
589
                                        }
590
                                        rg.addToOffsetVector(offset);
591
                                } else {
592
                                        System.out.println("Unrecognized "+parser.getName());
593
                                }
594
                                break;
595
                        case KXmlParser.END_TAG:
596
                                if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0)
597
                                        end = true;
598
                                break;
599
                        case KXmlParser.TEXT:
600
                                if (parser.getName()!=null)
601
                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
602
                                break;
603
                        }
604
                        currentTag = parser.next();
605
                }
606
        }
607

    
608

    
609
        private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
610
                BoundaryBox bBox = new BoundaryBox();
611
                int currentTag;
612
        String value;
613
        boolean end = false;
614

    
615
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
616
        currentTag = parser.next();
617

    
618
        while (!end)
619
        {
620
             switch(currentTag)
621
             {
622
                case KXmlParser.START_TAG:
623
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
624
                            bBox.setSrs(DescribeCoverageTags.WGS84);
625
                            String[] coordinates;
626
                            double minx, miny, maxx, maxy;
627
                            value = parser.nextText();
628
                            coordinates = stringUtils.split(value, SEPARATOR);
629
                            minx = Double.parseDouble(coordinates[0]);
630
                            miny = Double.parseDouble(coordinates[1]);
631

    
632
                            parser.nextTag();
633

    
634
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
635
                            value = parser.nextText();
636
                            coordinates = stringUtils.split(value, SEPARATOR);
637
                            maxx = Double.parseDouble(coordinates[0]);
638
                            maxy = Double.parseDouble(coordinates[1]);
639

    
640
                            bBox.setXmin(minx);
641
                            bBox.setYmin(miny);
642
                            bBox.setXmax(maxx);
643
                            bBox.setYmax(maxy);
644
                    }
645
                    break;
646
                case KXmlParser.END_TAG:
647
                    if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0)
648
                        end = true;
649
                    break;
650
                case KXmlParser.TEXT:
651
                        if (parser.getName()!=null)
652
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
653
                        break;
654
             }
655
             currentTag = parser.next();
656
        }
657
        return bBox;
658
        }
659

    
660
        private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
661
                BoundaryBox bBox = new BoundaryBox();
662
                int currentTag;
663
        String value;
664
        boolean end = false;
665

    
666
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
667
        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
668
        currentTag = parser.next();
669

    
670
        while (!end)
671
        {
672
             switch(currentTag)
673
             {
674
                case KXmlParser.START_TAG:
675
                        if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
676

    
677
                            String[] coordinates;
678
                            double minx, miny, maxx, maxy;
679
                            value = parser.nextText();
680
                            coordinates = stringUtils.split(value, SEPARATOR);
681
                            minx = Double.parseDouble(coordinates[0]);
682
                            miny = Double.parseDouble(coordinates[1]);
683

    
684
                            parser.nextTag();
685
                            //parser.nextTag();
686
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
687
                            value = parser.nextText();
688
                            coordinates = stringUtils.split(value, SEPARATOR);
689
                            maxx = Double.parseDouble(coordinates[0]);
690
                            maxy = Double.parseDouble(coordinates[1]);
691

    
692
                            bBox.setXmin(minx);
693
                            bBox.setYmin(miny);
694
                            bBox.setXmax(maxx);
695
                            bBox.setYmax(maxy);
696
                    }
697
                    break;
698
                case KXmlParser.END_TAG:
699
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0)
700
                        end = true;
701
                    break;
702
                case KXmlParser.TEXT:
703
                        if (parser.getName()!=null)
704
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
705
                        break;
706
             }
707
             currentTag = parser.next();
708
        }
709

    
710
        return bBox;
711
        }
712
}