Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wcs / trunk / org.gvsig.raster.wcs / org.gvsig.raster.wcs.remoteclient / src / main / java / org / gvsig / remoteclient / wcs / wcs_1_0_0 / WCSCoverage1_0_0.java @ 4269

History | View | Annotate | Download (29.2 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.apache.commons.lang3.StringUtils;
30
import org.kxml2.io.KXmlParser;
31
import org.xmlpull.v1.XmlPullParserException;
32

    
33
import org.gvsig.remoteclient.utils.BoundaryBox;
34
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
35
import org.gvsig.remoteclient.wcs.WCSCoverage;
36

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

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

    
52
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.COVERAGE_OFFERING);
53
        currentTag = parser.next();
54

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

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

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

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

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

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

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

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

    
181
        while (!end)
182
        {
183
             switch(currentTag)
184
             {
185
                case KXmlParser.START_TAG:
186
                    if (StringUtils.equals(parser.getName(),DescribeCoverageTags.NAME))
187
                            setRangeSetName(parser.nextText());
188
                    else if (StringUtils.equals(parser.getName(),DescribeCoverageTags.LABEL))
189
                            setRangeSetLabel(parser.nextText());
190
                    else if (StringUtils.equalsIgnoreCase(parser.getName(),DescribeCoverageTags.AXISDESCRIPTION)) {
191
                            // Reading all axe description
192
                            int axisTag = parser.nextTag();
193
                            boolean endAxe = false;
194
                            boolean endRangeSet = false;
195
                            while (!endAxe) { //When axisTag == 1 it's all over. It prevents an infinite loop
196
                            switch(axisTag)
197
                            {
198
                               case KXmlParser.START_TAG:
199
                                       if (StringUtils.equals(DescribeCoverageTags.AXISDESCRIPTION,parser.getName())) {
200
                                               AxisDescription as = parseAxisDescription(parser);
201
                                               axisPool.put(as.getName(), as);
202
                                               axisDescriptionName = as.getName();
203
                                               endRangeSet = true;
204
                                       }
205
                                       break;
206
                               case KXmlParser.END_TAG:
207
                                   if (StringUtils.equalsIgnoreCase(DescribeCoverageTags.AXISDESCRIPTION,parser.getName()))
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
                            if(endRangeSet && StringUtils.equalsIgnoreCase(DescribeCoverageTags.RANGESET,parser.getName())){
217
                                    endAxe = true;
218
                                    end = true;
219
                            }
220
                            }
221
                    } else {
222
                            System.out.println("Unrecognized "+parser.getName());
223
                    }
224
                    break;
225
                case KXmlParser.END_TAG:
226
                    if (DescribeCoverageTags.RANGESET.equals(parser.getName()))
227
                        end = true;
228
                    break;
229
                case KXmlParser.TEXT:
230
                        if (parser.getName()!=null)
231
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
232
                        break;
233
             }
234
             if(!end){
235
                     currentTag = parser.next();
236
             }
237
        }
238
        }
239

    
240
        private AxisDescription parseAxisDescription(KXmlParser parser) throws XmlPullParserException, IOException {
241
                int currentTag;
242
        boolean end = false;
243

    
244
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.AXISDESCRIPTION);
245
        AxisDescription as = new AxisDescription();
246
        currentTag = parser.next();
247

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

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

    
304
        private void parseDomainSet(KXmlParser parser) throws XmlPullParserException, IOException {
305
                int currentTag;
306
        boolean end = false;
307

    
308
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.DOMAINSET);
309
        currentTag = parser.next();
310

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

    
336
        private void parseTemporalDomain(KXmlParser parser) throws XmlPullParserException, IOException {
337
                int currentTag;
338
        boolean end = false;
339

    
340
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.TEMPORALDOMAIN);
341
        currentTag = parser.next();
342

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

    
404
        private void parseSpatialDomain(KXmlParser parser) throws XmlPullParserException, IOException {
405
                int currentTag;
406
        boolean end = false;
407

    
408
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.SPATIALDOMAIN);
409
        currentTag = parser.next();
410

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

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

    
447
                currentTag = parser.next();
448

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

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

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

    
520
                // TODO maybe this is wrong
521
                rg.addToOffsetVector(new double[] { -1, -1});
522
                rg.addToOffsetVector(new double[] { -1, -1});
523

    
524
                currentTag = parser.next();
525

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

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

    
613

    
614
        private BoundaryBox parseLonLatGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
615
                BoundaryBox bBox = new BoundaryBox();
616
                int currentTag;
617
        String value;
618
        boolean end = false;
619

    
620
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.LONLAT_ENVELOPE);
621
        currentTag = parser.next();
622

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

    
637
                            parser.nextTag();
638

    
639
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
640
                            value = parser.nextText();
641
                            coordinates = StringUtils.split(value, SEPARATOR);
642
                            maxx = Double.parseDouble(coordinates[0]);
643
                            maxy = Double.parseDouble(coordinates[1]);
644

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

    
665
        private BoundaryBox parseGMLEnvelope(KXmlParser parser) throws XmlPullParserException, IOException {
666
                BoundaryBox bBox = new BoundaryBox();
667
                int currentTag;
668
        String value;
669
        boolean end = false;
670

    
671
        parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_ENVELOPE);
672
        bBox.setSrs(parser.getAttributeValue("", DescribeCoverageTags.SRSNAME));
673
        currentTag = parser.next();
674
        boolean skipThisTag = false;
675

    
676
        while (!end)
677
        {
678
             switch(currentTag)
679
             {
680
                case KXmlParser.START_TAG:
681
                        if (parser.getName().compareTo(DescribeCoverageTags.GML_POS)==0) {
682

    
683
                            String[] coordinates;
684
                            double minx, miny, maxx, maxy;
685
                            value = parser.nextText();
686
                            coordinates = StringUtils.split(value, SEPARATOR);
687
                            minx = Double.parseDouble(coordinates[0]);
688
                            miny = Double.parseDouble(coordinates[1]);
689

    
690
                            parser.nextTag();
691
                            //parser.nextTag();
692
                            parser.require(KXmlParser.START_TAG, null, DescribeCoverageTags.GML_POS);
693
                            value = parser.nextText();
694
                            coordinates = StringUtils.split(value, SEPARATOR);
695
                            maxx = Double.parseDouble(coordinates[0]);
696
                            maxy = Double.parseDouble(coordinates[1]);
697

    
698
                            bBox.setXmin(minx);
699
                            bBox.setYmin(miny);
700
                            bBox.setXmax(maxx);
701
                            bBox.setYmax(maxy);
702
                    }else{
703
                            skipThisTag = true;
704
                    }
705
                    break;
706
                case KXmlParser.END_TAG:
707
                    if (parser.getName().compareTo(DescribeCoverageTags.GML_ENVELOPE) == 0){
708
                        end = true;
709
                            skipThisTag = true;
710
                    }
711
                    break;
712
                case KXmlParser.TEXT:
713
                        if (parser.getName()!=null)
714
                                System.out.println("[TAG]["+parser.getName()+"]\n[TEXT]["+parser.getText().trim()+"]");
715
                        break;
716
             }
717
             if(!skipThisTag)
718
                     currentTag = parser.next();
719
        }
720

    
721
        return bBox;
722
        }
723
}