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 @ 40769

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
package org.gvsig.remoteclient.wcs.wcs_1_0_0;
25

    
26

    
27
import java.io.IOException;
28

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

    
32
import org.gvsig.compat.CompatLocator;
33
import org.gvsig.compat.lang.StringUtils;
34
import org.gvsig.remoteclient.utils.BoundaryBox;
35
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
36
import org.gvsig.remoteclient.wcs.WCSCoverage;
37

    
38
/**
39
 * @author jaume
40
 *
41
 */
42
public class WCSCoverage1_0_0 extends WCSCoverage{
43
        String axisDescriptionName;
44

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

    
55
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
56
        currentTag = parser.next();
57

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

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

    
132
    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
133
            int currentTag;
134
            boolean end = false;
135

    
136
            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
137
            currentTag = parser.next();
138

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

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

    
176
        private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
177
                int currentTag;
178
        boolean end = false;
179

    
180
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
181
        currentTag = parser.next();
182

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

    
234
        private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
235
                int currentTag;
236
        boolean end = false;
237

    
238
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
239
        AxisDescription as = new AxisDescription();
240
        currentTag = parser.next();
241

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

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

    
298
        private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
299
                int currentTag;
300
        boolean end = false;
301

    
302
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
303
        currentTag = parser.next();
304

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

    
330
        private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
331
                int currentTag;
332
        boolean end = false;
333

    
334
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
335
        currentTag = parser.next();
336

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

    
398
        private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
399
                int currentTag;
400
        boolean end = false;
401

    
402
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
403
        currentTag = parser.next();
404

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

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

    
441
                currentTag = parser.next();
442

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

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

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

    
514
                // TODO maybe this is wrong
515
                rg.addToOffsetVector(new double[] { -1, -1});
516
                rg.addToOffsetVector(new double[] { -1, -1});
517

    
518
                currentTag = parser.next();
519

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

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

    
605

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

    
612
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
613
        currentTag = parser.next();
614

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

    
629
                            parser.nextTag();
630

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

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

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

    
663
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
664
        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
665
        currentTag = parser.next();
666

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

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

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

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

    
707
        return bBox;
708
        }
709
}