Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libRemoteServices / src / org / gvsig / remoteclient / wcs / wcs_1_0_0 / WCSCoverage1_0_0.java @ 34026

History | View | Annotate | Download (28.9 KB)

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

    
46

    
47
import java.io.IOException;
48

    
49
import org.kxml2.io.KXmlParser;
50
import org.xmlpull.v1.XmlPullParserException;
51

    
52
import org.gvsig.compat.CompatLocator;
53
import org.gvsig.compat.lang.StringUtils;
54
import org.gvsig.remoteclient.utils.BoundaryBox;
55
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
56
import org.gvsig.remoteclient.wcs.WCSCoverage;
57

    
58
/**
59
 * @author jaume
60
 *
61
 */
62
public class WCSCoverage1_0_0 extends WCSCoverage{
63
        String axisDescriptionName;
64

    
65
    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
66
    
67
        /* (non-Javadoc)
68
     * @see org.gvsig.remoteClient.wcs.WCSLayer#parse(org.kxml2.io.KXmlParser)
69
     */
70
    public void parse(KXmlParser parser) throws XmlPullParserException, IOException {
71
        int currentTag;
72
        String value;
73
        boolean end = false;
74

    
75
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
76
        currentTag = parser.next();
77

    
78
        while (!end)
79
        {
80
             switch(currentTag)
81
             {
82
                case KXmlParser.START_TAG:
83
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
84
                    {
85
                        value = parser.nextText();
86
                        if (value != null) setName(value);
87
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL)==0){
88
                        value = parser.nextText();
89
                        if (value != null) setTitle(value);
90
                    } else if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE)==0){
91
                            BoundaryBox bBox = parseLonLatGMLEnvelope(parser);
92
                        bBox.setSrs(DescribeCoverageTags.WGS84);
93
                        addBBox(bBox);
94
                        setLonLatBox(bBox);
95
                    } else if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0) {
96
                            parseDomainSet(parser);
97
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0) {
98
                            parseRangeSet(parser);
99
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0) {
100
                            parseSupportedCRSS(parser);
101
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_FORMATS) == 0) {
102
                            setNativeFormat(parser.getAttributeValue("", DescribeCoverageTags.NATIVE_FORMAT));
103
                            parser.nextTag();
104
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.FORMATS);
105
                            while (parser.getName().compareTo(DescribeCoverageTags.FORMATS) == 0) {
106
                                    String[] formats = stringUtils.split(parser.nextText(), SEPARATOR);
107
                                    for (int i = 0; i < formats.length; i++) {
108
                                            addFormat(formats[i]);
109
                                    }
110
                                    parser.nextTag();
111
                            }
112
                    } else if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0) {
113
                            boolean bInterpolationsEnd = false;
114
                            int interpolationsTag = parser.next();
115
                            while (!bInterpolationsEnd) {
116
                                    switch(interpolationsTag) {
117
                                            case KXmlParser.START_TAG:
118
                                                    if (parser.getName().compareTo(DescribeCoverageTags.INTERPOLATION_METHOD)==0) {
119
                                                            addInterpolationMethod(parser.nextText());
120
                                                    }
121
                                                    break;
122
                                            case KXmlParser.END_TAG:
123
                                                    if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_INTERPOLATIONS) == 0)
124
                                                            bInterpolationsEnd = 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
                                    interpolationsTag = parser.next();
132
                            }
133
                    } else {
134
                            if (!parser.getName().equals("rangeSet")) // just a patch to avoid too much messages
135
                                    System.out.println("Skiped "+parser.getName());
136
                    }
137

    
138
                    break;
139
                case KXmlParser.END_TAG:
140
                    if (parser.getName().compareTo(DescribeCoverageTags.COVERAGE_OFFERING) == 0)
141
                        end = true;
142
                    break;
143
                case KXmlParser.TEXT:
144
                        if (parser.getName()!=null)
145
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
146
                        break;
147
             }
148
             currentTag = parser.next();
149
        }
150
    }
151

    
152
    private void parseSupportedCRSS(KXmlParser parser) throws XmlPullParserException, IOException {
153
            int currentTag;
154
            boolean end = false;
155

    
156
            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SUPPORTED_CRSS);
157
            currentTag = parser.next();
158

    
159
            while (!end)
160
            {
161
                    switch(currentTag)
162
                    {
163
                            case KXmlParser.START_TAG:
164
                                    if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_RESPONSE_CRSS)==0) {
165
                                            String[] values = stringUtils.split(parser.nextText(), SEPARATOR);
166
                                            for (int i = 0; i < values.length; i++) {
167
                                                        addSRSs(values[i]);
168
                                                }
169
                                    }
170
                                    else if (parser.getName().compareTo(DescribeCoverageTags.NATIVE_CRS) == 0) {
171
                                            setNativeSRS(parser.nextText());
172
                                    } else if (parser.getName().compareTo(DescribeCoverageTags.REQUEST_CRSS) == 0) {
173
                                            // TODO
174
                            System.out.println("Skiped "+parser.getName());
175
                                    } else if (parser.getName().compareTo(DescribeCoverageTags.RESPONSE_CRSS) == 0) {
176
                                            // TODO
177
                            System.out.println("Skiped "+parser.getName());
178
                    } else {
179
                            System.out.println("Unrecognized "+parser.getName());
180
                                    }
181

    
182
                                    break;
183
                            case KXmlParser.END_TAG:
184
                                    if (parser.getName().compareTo(DescribeCoverageTags.SUPPORTED_CRSS) == 0)
185
                                            return;//end = true;
186
                                    break;
187
                            case KXmlParser.TEXT:
188
                                    if (parser.getName()!=null)
189
                                            System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
190
                                    break;
191
                    }
192
                    currentTag = parser.next();
193
            }
194
    }
195

    
196
        private void parseRangeSet(KXmlParser parser) throws XmlPullParserException, IOException {
197
                int currentTag;
198
        boolean end = false;
199

    
200
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RANGESET);
201
        currentTag = parser.next();
202

    
203
        while (!end)
204
        {
205
             switch(currentTag)
206
             {
207
                case KXmlParser.START_TAG:
208
                    if (parser.getName().compareTo(DescribeCoverageTags.NAME)==0)
209
                            setRangeSetName(parser.nextText());
210
                    else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0)
211
                            setRangeSetLabel(parser.nextText());
212
                    else if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0) {
213
                            // Reading all axe description
214
                            int axisTag = parser.nextTag();
215
                            boolean endAxe = false;
216
                            while (!endAxe) {
217
                            switch(axisTag)
218
                            {
219
                               case KXmlParser.START_TAG:
220
                                       if (parser.getName().compareTo(DescribeCoverageTags.AXISDESCRIPTION)==0) {
221
                                               AxisDescription as = parseAxisDescription(parser);
222
                                               axisPool.put(as.getName(), as);
223
                                               axisDescriptionName = as.getName();
224
                                       }
225
                                       break;
226
                               case KXmlParser.END_TAG:
227
                                   if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
228
                                           endAxe = true;
229
                                   break;
230
                               case KXmlParser.TEXT:
231
                                       if (parser.getName()!=null)
232
                                               System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
233
                                       break;
234
                            }
235
                            axisTag = parser.next();
236
                            }
237
                    } else {
238
                            System.out.println("Unrecognized "+parser.getName());
239
                    }
240
                    break;
241
                case KXmlParser.END_TAG:
242
                    if (parser.getName().compareTo(DescribeCoverageTags.RANGESET) == 0)
243
                        end = true;
244
                    break;
245
                case KXmlParser.TEXT:
246
                        if (parser.getName()!=null)
247
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
248
                        break;
249
             }
250
             currentTag = parser.next();
251
        }
252
        }
253

    
254
        private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
255
                int currentTag;
256
        boolean end = false;
257

    
258
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
259
        AxisDescription as = new AxisDescription();
260
        currentTag = parser.next();
261

    
262
        while (!end)
263
        {
264
             switch(currentTag)
265
             {
266
                case KXmlParser.START_TAG:
267
                        if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
268
                                as.setName(parser.nextText());
269
                        } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
270
                                as.setLabel(parser.nextText());
271
                        } else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
272
                                int valuesTag = parser.nextTag();
273
                                boolean valuesEnd = false;
274
                                while (!valuesEnd) {
275
                                        switch(valuesTag)        {
276
                                                case KXmlParser.START_TAG:
277
                                                        if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
278
                                                                as.addSingleValues(parser.nextText());
279
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
280
                                                                as.setInterval(parser.nextText());
281
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
282
                                                                as.setDefaultValue(parser.nextText());
283
                                                        }
284
                                                        break;
285
                                                case KXmlParser.END_TAG:
286
                                                        if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
287
                                                                valuesEnd = true;
288
                                                        break;
289
                                                case KXmlParser.TEXT:
290
                                                        if (parser.getName()!=null)
291
                                                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
292
                                                        break;
293
                                                }
294
                                        valuesTag = parser.next();
295
                                }
296
                        } else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
297
                                // TODO
298
                                System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
299
                    } else {
300
                            System.out.println("Unrecognized "+parser.getName());
301
                        }
302

    
303
                        break;
304
                case KXmlParser.END_TAG:
305
                    if (parser.getName().compareToIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION) == 0)
306
                        end = true;
307
                    break;
308
                case KXmlParser.TEXT:
309
                        if (parser.getName()!=null)
310
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
311
                        break;
312
             }
313
             currentTag = parser.next();
314
        }
315
        return as;
316
        }
317

    
318
        private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
319
                int currentTag;
320
        boolean end = false;
321

    
322
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
323
        currentTag = parser.next();
324

    
325
        while (!end)
326
        {
327
             switch(currentTag)
328
             {
329
                case KXmlParser.START_TAG:
330
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN)==0)
331
                    {
332
                            parseSpatialDomain(parser);
333
                    } else if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN)==0) {
334
                            parseTemporalDomain(parser);
335
                    }
336
                    break;
337
                case KXmlParser.END_TAG:
338
                    if (parser.getName().compareTo(DescribeCoverageTags.DOMAINSET) == 0)
339
                        end = true;
340
                    break;
341
                case KXmlParser.TEXT:
342
                        if (parser.getName()!=null)
343
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
344
                        break;
345
             }
346
             currentTag = parser.next();
347
        }
348
        }
349

    
350
        private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
351
                int currentTag;
352
        boolean end = false;
353

    
354
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
355
        currentTag = parser.next();
356

    
357
        while (!end)
358
        {
359
             switch(currentTag)
360
             {
361
                case KXmlParser.START_TAG:
362
                        if (parser.getName().compareTo(DescribeCoverageTags.GML_TIMEPOSITION) == 0) {
363
                                addTimePosition(parser.nextText());
364
                        } else if (parser.getName().compareTo(DescribeCoverageTags.TIMEPERIOD) == 0) {
365
                                boolean timePeriodEnd = false;
366
                                int timePeriodTag = parser.next();
367
                                String[] myTimePeriod = new String[3];
368
                                while (!timePeriodEnd) {
369
                                        switch (timePeriodTag) {
370
                                        case KXmlParser.START_TAG:
371
                                                if (parser.getName().compareTo(DescribeCoverageTags.BEGINPOSITION) == 0) {
372
                                                        myTimePeriod[0] = parser.nextText();
373
                                                } else if (parser.getName().compareTo(DescribeCoverageTags.ENDPOSITION) == 0) {
374
                                                        myTimePeriod[1] = parser.nextText();
375
                                                } else if (parser.getName().compareTo(DescribeCoverageTags.TIMERESOLUTION) == 0) {
376
                                                        myTimePeriod[2] = parser.nextText();
377
                                } else {
378
                                        System.out.println("Unrecognized "+parser.getName());
379
                                                }
380
                                                break;
381
                                        case KXmlParser.END_TAG:
382
                                                if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
383
                                                        end = true;
384
                                                break;
385
                                        case KXmlParser.TEXT:
386
                                                if (parser.getName()!=null)
387
                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
388
                                                break;
389
                                        }
390
                                        timePeriodTag = parser.next();
391
                                }
392
                                super.timePeriod = "";
393
                                for (int i = 0; i < myTimePeriod.length-1; i++) {
394
                                        if (myTimePeriod[i]!=null) {
395
                                                super.timePeriod += myTimePeriod[i];
396
                                        }
397
                                        if (myTimePeriod[i+1]!=null) {
398
                                                super.timePeriod += "/";
399
                                        }
400
                                                }
401
                    } else {
402
                            System.out.println("Unrecognized "+parser.getName());
403
                        }
404
                        break;
405
                case KXmlParser.END_TAG:
406
                    if (parser.getName().compareTo(DescribeCoverageTags.TEMPORALDOMAIN) == 0)
407
                        end = true;
408
                    break;
409
                case KXmlParser.TEXT:
410
                        if (parser.getName()!=null)
411
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
412
                        break;
413
             }
414
             currentTag = parser.next();
415
        }
416
        }
417

    
418
        private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
419
                int currentTag;
420
        boolean end = false;
421

    
422
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
423
        currentTag = parser.next();
424

    
425
        while (!end)
426
        {
427
             switch(currentTag)
428
             {
429
                case KXmlParser.START_TAG:
430
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE)==0) {
431
                            BoundaryBox bBox = parseGMLEnvelope(parser);
432
                            addBBox(bBox);
433
                    } else if (parser.getName().compareTo(DescribeCoverageTags.GRID)==0) {
434
                            parseGrid(parser);
435
                    } else if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID)==0) {
436
                            parseRectifiedGrid(parser);
437
                    } else {
438
                            System.out.println("Unrecognized "+parser.getName());
439
                    }
440
                    break;
441
                case KXmlParser.END_TAG:
442
                    if (parser.getName().compareTo(DescribeCoverageTags.SPATIALDOMAIN) == 0)
443
                        return;
444
                    break;
445
                case KXmlParser.TEXT:
446
                        if (parser.getName()!=null)
447
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
448
                        break;
449
             }
450
             currentTag = parser.next();
451
        }
452
         }
453

    
454
        private void parseGrid(KXmlParser parser) throws XmlPullParserException, IOException {
455
                int currentTag;
456
                String value;
457
                boolean end = false;
458
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GRID);
459
                rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
460

    
461
                currentTag = parser.next();
462

    
463
                while (!end)
464
                {
465
                        switch(currentTag)        {
466
                        case KXmlParser.START_TAG:
467
                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
468
                                        parser.nextTag();
469
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
470
                                                boolean gridEnd = false;
471
                                                int gridCurrentTag = parser.next();
472
                                                while (!gridEnd){
473
                                                        switch (gridCurrentTag) {
474
                                                        case KXmlParser.START_TAG:
475

    
476
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
477
                                                                        value = parser.nextText();
478
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
479
                                                                        int[] limits = new int[ss.length];
480
                                                                        for (int i = 0; i < limits.length; i++) {
481
                                                                                limits[i] = Integer.parseInt(ss[i]);
482
                                                                        }
483
                                                                        rg.addLowGridEnvelopLimit(limits);
484
                                                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
485
                                                                        value = parser.nextText();
486
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
487
                                                                        int[] limits = new int[ss.length];
488
                                                                        for (int i = 0; i < limits.length; i++) {
489
                                                                                limits[i] = Integer.parseInt(ss[i]);
490
                                                                        }
491
                                                                        rg.addHighGridEnvelopLimit(limits);
492
                                                                } else {
493
                                                                        System.out.println("Unrecognized "+parser.getName());
494
                                                                }
495
                                                                break;
496
                                                        case KXmlParser.END_TAG:
497
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
498
                                                                        gridEnd = true;
499
                                                                break;
500
                                                        case KXmlParser.TEXT:
501
                                                                if (parser.getName()!=null)
502
                                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
503
                                                                break;
504
                                                        }
505
                                                        gridCurrentTag = parser.next();
506
                                                }
507
                                        }
508
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
509
                                        rg.addAxisName(parser.nextText());
510
                                } else {
511
                                        System.out.println("Unrecognized "+parser.getName());
512
                                }
513
                                break;
514
                        case KXmlParser.END_TAG:
515
                                if (parser.getName().compareTo(DescribeCoverageTags.GRID) == 0)
516
                                        return;//end = true;
517
                                break;
518
                        case KXmlParser.TEXT:
519
                                if (parser.getName()!=null)
520
                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
521
                                break;
522
                        }
523
                        currentTag = parser.next();
524
                }
525
        }
526

    
527
        private void parseRectifiedGrid(KXmlParser parser) throws XmlPullParserException, IOException {
528
                int currentTag;
529
                String value;
530
                boolean end = false;
531
                parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.RECTIFIEDGRID);
532
                rg = new RectifiedGrid(Integer.parseInt(parser.getAttributeValue("", DescribeCoverageTags.DIMENSION)));
533

    
534
                // TODO maybe this is wrong
535
                rg.addToOffsetVector(new double[] { -1, -1});
536
                rg.addToOffsetVector(new double[] { -1, -1});
537

    
538
                currentTag = parser.next();
539

    
540
                while (!end)
541
                {
542
                        switch(currentTag)
543
                        {
544
                        case KXmlParser.START_TAG:
545
                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LIMITS) == 0) {
546
                                        parser.nextTag();
547
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE)==0) {
548
                                                boolean gridEnd = false;
549
                                                int gridCurrentTag = parser.next();
550
                                                while (!gridEnd)
551
                                                {
552
                                                        switch (gridCurrentTag) {
553
                                                        case KXmlParser.START_TAG:
554

    
555
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_LOW) == 0) {
556
                                                                        value = parser.nextText();
557
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
558
                                                                        int[] limits = new int[ss.length];
559
                                                                        for (int i = 0; i < limits.length; i++) {
560
                                                                                limits[i] = Integer.parseInt(ss[i]);
561
                                                                        }
562
                                                                        rg.addLowGridEnvelopLimit(limits);
563
                                                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_HIGH) == 0) {
564
                                                                        value = parser.nextText();
565
                                                                        String[] ss = stringUtils.split(value, SEPARATOR);
566
                                                                        int[] limits = new int[ss.length];
567
                                                                        for (int i = 0; i < limits.length; i++) {
568
                                                                                limits[i] = Integer.parseInt(ss[i]);
569
                                                                        }
570
                                                                        rg.addHighGridEnvelopLimit(limits);
571
                                                                } else {
572
                                                                        System.out.println("Unrecognized "+parser.getName());
573
                                                                }
574
                                                                break;
575
                                                        case KXmlParser.END_TAG:
576
                                                                if (parser.getName().compareTo(DescribeCoverageTags.GML_GRIDENVELOPE) == 0)
577
                                                                        gridEnd = true;
578
                                                                break;
579
                                                        case KXmlParser.TEXT:
580
                                                                if (parser.getName()!=null)
581
                                                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
582
                                                                break;
583
                                                        }
584
                                                        gridCurrentTag = parser.next();
585
                                                }
586
                                        }
587
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_AXISNAME)==0) {
588
                                        rg.addAxisName(parser.nextText());
589
                                } else if (parser.getName().compareTo(DescribeCoverageTags.GML_ORIGIN)==0) {
590
                                        parser.nextTag();
591
                                        if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
592
                                                value = parser.nextText();
593
                                                String[] ss = stringUtils.split(value, SEPARATOR);
594
                                                double[] ori = new double[ss.length];
595
                                                for (int i = 0; i < ori.length; i++) {
596
                                                        ori[i] = Double.parseDouble(ss[i]);
597
                                                }
598
                                                rg.setOrigin(ori);
599
                                        }
600
                                } else if (parser.getName().compareTo(DescribeCoverageTags.OFFSETVECTOR) == 0) {
601
                                        value = parser.nextText();
602
                                        String[] ss = stringUtils.split(value, SEPARATOR);
603
                                        double[] offset = new double[ss.length];
604
                                        for (int i = 0; i < offset.length; i++) {
605
                                                offset[i] = Double.parseDouble(ss[i]);
606
                                        }
607
                                        rg.addToOffsetVector(offset);
608
                                } else {
609
                                        System.out.println("Unrecognized "+parser.getName());
610
                                }
611
                                break;
612
                        case KXmlParser.END_TAG:
613
                                if (parser.getName().compareTo(DescribeCoverageTags.RECTIFIEDGRID) == 0)
614
                                        end = true;
615
                                break;
616
                        case KXmlParser.TEXT:
617
                                if (parser.getName()!=null)
618
                                        System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
619
                                break;
620
                        }
621
                        currentTag = parser.next();
622
                }
623
        }
624

    
625

    
626
        private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
627
                BoundaryBox bBox = new BoundaryBox();
628
                int currentTag;
629
        String value;
630
        boolean end = false;
631

    
632
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
633
        currentTag = parser.next();
634

    
635
        while (!end)
636
        {
637
             switch(currentTag)
638
             {
639
                case KXmlParser.START_TAG:
640
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
641
                            bBox.setSrs(DescribeCoverageTags.WGS84);
642
                            String[] coordinates;
643
                            double minx, miny, maxx, maxy;
644
                            value = parser.nextText();
645
                            coordinates = stringUtils.split(value, SEPARATOR);
646
                            minx = Double.parseDouble(coordinates[0]);
647
                            miny = Double.parseDouble(coordinates[1]);
648

    
649
                            parser.nextTag();
650

    
651
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
652
                            value = parser.nextText();
653
                            coordinates = stringUtils.split(value, SEPARATOR);
654
                            maxx = Double.parseDouble(coordinates[0]);
655
                            maxy = Double.parseDouble(coordinates[1]);
656

    
657
                            bBox.setXmin(minx);
658
                            bBox.setYmin(miny);
659
                            bBox.setXmax(maxx);
660
                            bBox.setYmax(maxy);
661
                    }
662
                    break;
663
                case KXmlParser.END_TAG:
664
                    if (parser.getName().compareTo(DescribeCoverageTags.LONLAT_ENVELOPE) == 0)
665
                        end = true;
666
                    break;
667
                case KXmlParser.TEXT:
668
                        if (parser.getName()!=null)
669
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
670
                        break;
671
             }
672
             currentTag = parser.next();
673
        }
674
        return bBox;
675
        }
676

    
677
        private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
678
                BoundaryBox bBox = new BoundaryBox();
679
                int currentTag;
680
        String value;
681
        boolean end = false;
682

    
683
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
684
        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
685
        currentTag = parser.next();
686

    
687
        while (!end)
688
        {
689
             switch(currentTag)
690
             {
691
                case KXmlParser.START_TAG:
692
                        if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
693

    
694
                            String[] coordinates;
695
                            double minx, miny, maxx, maxy;
696
                            value = parser.nextText();
697
                            coordinates = stringUtils.split(value, SEPARATOR);
698
                            minx = Double.parseDouble(coordinates[0]);
699
                            miny = Double.parseDouble(coordinates[1]);
700

    
701
                            parser.nextTag();
702
                            //parser.nextTag();
703
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
704
                            value = parser.nextText();
705
                            coordinates = stringUtils.split(value, SEPARATOR);
706
                            maxx = Double.parseDouble(coordinates[0]);
707
                            maxy = Double.parseDouble(coordinates[1]);
708

    
709
                            bBox.setXmin(minx);
710
                            bBox.setYmin(miny);
711
                            bBox.setXmax(maxx);
712
                            bBox.setYmax(maxy);
713
                    }
714
                    break;
715
                case KXmlParser.END_TAG:
716
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0)
717
                        end = true;
718
                    break;
719
                case KXmlParser.TEXT:
720
                        if (parser.getName()!=null)
721
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
722
                        break;
723
             }
724
             currentTag = parser.next();
725
        }
726

    
727
        return bBox;
728
        }
729
}