Statistics
| Revision:

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

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.gvsig.compat.CompatLocator;
50
import org.gvsig.compat.lang.StringUtils;
51
import org.gvsig.remoteclient.utils.BoundaryBox;
52
import org.gvsig.remoteclient.utils.DescribeCoverageTags;
53
import org.gvsig.remoteclient.wcs.WCSCoverage;
54
import org.kxml2.io.KXmlParser;
55
import org.xmlpull.v1.XmlPullParserException;
56

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
261
        while (!end)
262
        {
263
             switch(currentTag)
264
             {
265
                case KXmlParser.START_TAG:
266
                        if (parser.getName().compareTo(DescribeCoverageTags.NAME) == 0) {
267
                                as.setName(parser.nextText());
268
                        } else if (parser.getName().compareTo(DescribeCoverageTags.LABEL) == 0) {
269
                                as.setLabel(parser.nextText());
270
                        } else if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0) {
271
                                int valuesTag = parser.nextTag();
272
                                boolean valuesEnd = false;
273
                                while (!valuesEnd) {
274
                                        switch(valuesTag)        {
275
                                                case KXmlParser.START_TAG:
276
                                                        if (parser.getName().compareTo(DescribeCoverageTags.SINGLEVALUE) == 0) {
277
                                                                as.addSingleValues(parser.nextText());
278
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.INTERVAL) == 0) {
279
                                                                as.setInterval(parser.nextText());
280
                                                        } else if (parser.getName().compareTo(DescribeCoverageTags.DEFAULT) == 0) {
281
                                                                as.setDefaultValue(parser.nextText());
282
                                                        }
283
                                                        break;
284
                                                case KXmlParser.END_TAG:
285
                                                        if (parser.getName().compareTo(DescribeCoverageTags.VALUES) == 0)
286
                                                                valuesEnd = 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
                                        valuesTag = parser.next();
294
                                }
295
                        } else if (parser.getName().compareTo(DescribeCoverageTags.NULLVALUES)==0) {
296
                                // TODO
297
                                System.err.println("Missing NULL VALUE PARSING on WCS 1.0.0 Client");
298
                    } else {
299
                            System.out.println("Unrecognized "+parser.getName());
300
                        }
301

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

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

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

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

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

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

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

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

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

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

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

    
460
                currentTag = parser.next();
461

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

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

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

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

    
537
                currentTag = parser.next();
538

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

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

    
624

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

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

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

    
648
                            parser.nextTag();
649

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

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

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

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

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

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

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

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

    
726
        return bBox;
727
        }
728
}