Statistics
| Revision:

svn-gvsig-desktop / tags / gvSIGv0_6_1RELEASE / libraries / libRemoteServices / src / org / gvsig / remoteClient / wms / wms_1_3_0 / WMSLayer1_3_0.java @ 5222

History | View | Annotate | Download (10.6 KB)

1 3660 ldiaz
2
package org.gvsig.remoteClient.wms.wms_1_3_0;
3
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.TreeMap;
7 4318 jaume
import java.util.Vector;
8 3660 ldiaz
9
import org.gvsig.remoteClient.utils.BoundaryBox;
10
import org.gvsig.remoteClient.utils.CapabilitiesTags;
11
import org.gvsig.remoteClient.utils.Utilities;
12
import org.gvsig.remoteClient.wms.WMSDimension;
13
import org.kxml2.io.KXmlParser;
14
import org.xmlpull.v1.XmlPullParserException;
15
16
17
/**
18
 * <p>WMS Layer for WMS 1.3.0</p>
19
 *
20
 */
21
public class WMSLayer1_3_0 extends org.gvsig.remoteClient.wms.WMSLayer {
22
23
24 4318 jaume
    public ArrayList getDimensions()
25
    {
26
        WMSDimension pDimension;
27
        WMSDimension myDimension;
28
        ArrayList myDimensions = (ArrayList) this.dimensions.clone();
29
        ArrayList pDimensions;
30
31
        if (parent!=null)
32
        {
33
                pDimensions = parent.getDimensions();
34
                for (int i= 0; i < pDimensions.size(); i++){
35
                        pDimension = (WMSDimension)pDimensions.get(i);
36
                        myDimension = getDimension(pDimension.getName());
37
                        if (myDimension != null){
38
                                pDimensions.remove(pDimension);
39
                        }
40
                }
41
                myDimensions.addAll(pDimensions);
42
        }
43
        return myDimensions;
44
    }
45
46 3660 ldiaz
    public WMSLayer1_3_0()
47
    {
48
        children = new ArrayList();
49
    }
50
    /**
51
     * <p>Parses the contents of the parser(WMSCapabilities)
52
     * to extract the information about an WMSLayer</p>
53
     *
54
     */
55
    public void parse(KXmlParser parser, TreeMap layerTreeMap)
56
    throws IOException, XmlPullParserException
57
    {
58
        int currentTag;
59
        boolean end = false;
60
        String value;
61
        BoundaryBox bbox;
62
        parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.LAYER);
63
64 3750 ldiaz
        readLayerAttributes( parser );
65 3660 ldiaz
66
        currentTag = parser.nextTag();
67
68
        while (!end)
69
        {
70
            switch(currentTag)
71
            {
72
                case KXmlParser.START_TAG:
73
                    if (parser.getName().compareTo(CapabilitiesTags.LAYER)==0)
74
                    {
75
                        WMSLayer1_3_0 lyr = new WMSLayer1_3_0();
76
                        //parser.next();
77
                        lyr.parse(parser, layerTreeMap);
78
                        lyr.setParent(this);
79 3911 ldiaz
                        this.children.add(lyr);
80 3660 ldiaz
                        // Jaume
81
                        if (lyr.getName()!=null)
82
                            layerTreeMap.put(lyr.getName(), lyr);
83
                    }
84
                    else if (parser.getName().compareTo(CapabilitiesTags.ATTRIBUTION)==0){
85
                        // TODO comprobar que esto se necesite o se deseche
86
                        parser.skipSubTree();
87
                    }
88
                    else if (parser.getName().compareTo(CapabilitiesTags.NAME)==0)
89
                    {
90
                        value = parser.nextText();
91
                        if (value != null) setName(value);
92
                    }
93
                    else if (parser.getName().compareTo(CapabilitiesTags.TITLE)==0)
94
                    {
95
                        value = parser.nextText();
96
                        if (value != null) setTitle(value);
97
                    }
98
                    else if (parser.getName().compareTo(CapabilitiesTags.ABSTRACT)==0)
99
                    {
100
                        value = parser.nextText();
101
                        if (value != null) setAbstract(value);
102
                    }
103 3665 ldiaz
                    else if (parser.getName().compareTo(CapabilitiesTags.CRS)==0)
104 3660 ldiaz
                    {
105 3872 ldiaz
                            //TODO:
106
                            //comentar esto y a?adir solo los SRS o CRS que incluyan un extent...
107 3660 ldiaz
                        value = parser.nextText();
108
                        if (value != null){
109
                            String[] srs = value.split(" ");
110
                            for (int i = 0; i < srs.length; i++) {
111
                                addSrs(srs[i]);
112 3775 ldiaz
                            }
113 3660 ldiaz
                        }
114
                    }
115
                    else if (parser.getName().compareTo(CapabilitiesTags.BOUNDINGBOX)==0)
116
                    {
117
                        bbox = new BoundaryBox();
118 3687 ldiaz
                        value = parser.getAttributeValue("",CapabilitiesTags.CRS);
119 3660 ldiaz
                        if (value != null)
120
                            bbox.setSrs(value);
121
                        value = parser.getAttributeValue("",CapabilitiesTags.MINX);
122
                        if ((value != null) && (Utilities.isNumber(value)))
123
                            bbox.setXmin(Double.parseDouble(value));
124
                        value = parser.getAttributeValue("",CapabilitiesTags.MINY);
125
                        if ((value != null) && (Utilities.isNumber(value)))
126
                            bbox.setYmin(Double.parseDouble(value));
127
                        value = parser.getAttributeValue("",CapabilitiesTags.MAXX);
128
                        if ((value != null) && (Utilities.isNumber(value)))
129
                            bbox.setXmax(Double.parseDouble(value));
130
                        value = parser.getAttributeValue("",CapabilitiesTags.MAXY);
131
                        if ((value != null) && (Utilities.isNumber(value)))
132
                            bbox.setYmax(Double.parseDouble(value));
133 3750 ldiaz
134
                        //X and Y spatial resolution in the units if that CRS.
135 3824 ldiaz
                        //value = parser.getAttributeValue("",CapabilitiesTags.RESX);
136
                        //if ((value != null) && (Utilities.isNumber(value)))
137 3750 ldiaz
                            //bbox.setYmax(Double.parseDouble(value));
138 3824 ldiaz
                        //value = parser.getAttributeValue("",CapabilitiesTags.RESY);
139
                        //if ((value != null) && (Utilities.isNumber(value)))
140 3750 ldiaz
                            //bbox.setYmax(Double.parseDouble(value));
141
142 3660 ldiaz
                        addBBox(bbox);
143 3892 ldiaz
                        addSrs(bbox.getSrs());
144 3660 ldiaz
                    }
145 3750 ldiaz
                    else if (parser.getName().compareTo(CapabilitiesTags.EX_GEOGRAPHICBOUNDINGBOX)==0)
146 3660 ldiaz
                    {
147 3750 ldiaz
                            //minimum bounding rectangle in decimal degrees of the area covered by the layer.
148
                        bbox = parseEXGeographicBBTag(parser);
149 3660 ldiaz
                        addBBox(bbox);
150
                        setLatLonBox(bbox);
151 3872 ldiaz
                        addSrs(bbox.getSrs());
152 3660 ldiaz
                    }
153
                    else if (parser.getName().compareTo(CapabilitiesTags.SCALEHINT)==0)
154
                    {
155
                        value = parser.getAttributeValue("",CapabilitiesTags.MIN);
156
                        if ((value != null) && (Utilities.isNumber(value)))
157
                            setScaleMin(Double.parseDouble(value));
158
                        value = parser.getAttributeValue("",CapabilitiesTags.MAX);
159
                        if ((value != null) && (Utilities.isNumber(value)))
160
                            setScaleMax(Double.parseDouble(value));
161
                    }
162
                    else if (parser.getName().compareTo(CapabilitiesTags.STYLE)==0)
163
                    {
164
                        WMSStyle1_3_0 style = new WMSStyle1_3_0();
165
                        style.parse(parser);
166
                        if ((style != null) && (style.getName() != null))
167
                        {
168
                            styles.add(style);
169
                        }
170
                    }
171
                    else if (parser.getName().compareTo(CapabilitiesTags.DIMENSION)==0)
172
                    {
173
                        WMSDimension dim = new WMSDimension();
174
                        dim.parse(parser);
175
                        if ((dim != null) && (dim.getName() != null))
176
                        {
177
                            addDimension(dim);
178 4318 jaume
179 3660 ldiaz
                        }
180 4318 jaume
                    }
181 3750 ldiaz
                    else if (parser.getName().compareTo(CapabilitiesTags.KEYWORDLIST)==0)
182
                    {
183 3755 ldiaz
                            parseKeywordList(parser);
184 3750 ldiaz
                    }
185 3660 ldiaz
                    break;
186
                case KXmlParser.END_TAG:
187
                    if (parser.getName().compareTo(CapabilitiesTags.LAYER) == 0)
188
                        end = true;
189
                    break;
190
                case KXmlParser.TEXT:
191
                    break;
192
            }
193 3911 ldiaz
            if (!end)
194 3919 ldiaz
                    currentTag = parser.next();
195 3660 ldiaz
        }
196 3911 ldiaz
        parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.LAYER);
197 3660 ldiaz
    }
198 3755 ldiaz
199 3660 ldiaz
200 3750 ldiaz
    /**
201
     * <p>Parses the EX_GeographicBoundingBox </p>
202
     */
203
    private BoundaryBox parseEXGeographicBBTag(KXmlParser parser) throws IOException, XmlPullParserException
204
    {
205
            int currentTag;
206
            boolean end = false;
207
            BoundaryBox bbox = new BoundaryBox ();
208
            String value;
209
210
            parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.EX_GEOGRAPHICBOUNDINGBOX);
211
            currentTag = parser.next();
212
213
            while (!end)
214
            {
215
                         switch(currentTag)
216
                         {
217
                                case KXmlParser.START_TAG:
218
                                        if (parser.getName().compareTo(CapabilitiesTags.WESTBOUNDLONGITUDE)==0)
219
                                        {
220
                                                value = parser.nextText();
221
                            if ((value != null) && (Utilities.isNumber(value)))
222
                                    bbox.setXmin(Double.parseDouble(value));
223
                                        }
224
                                        else if (parser.getName().compareTo(CapabilitiesTags.EASTBOUNDLONGITUDE)==0)
225
                                        {
226
                                                value = parser.nextText();
227
                            if ((value != null) && (Utilities.isNumber(value)))
228
                                    bbox.setXmax(Double.parseDouble(value));
229
                                        }
230
                                        else if (parser.getName().compareTo(CapabilitiesTags.NORTHBOUNDLATITUDE)==0)
231
                                        {
232
                                                value = parser.nextText();
233
                            if ((value != null) && (Utilities.isNumber(value)))
234
                                    bbox.setYmax(Double.parseDouble(value));
235
                                        }
236
                                        else if (parser.getName().compareTo(CapabilitiesTags.SOUTHBOUNDLATITUDE)==0)
237
                                        {
238
                                                value = parser.nextText();
239
                            if ((value != null) && (Utilities.isNumber(value)))
240
                                    bbox.setYmin(Double.parseDouble(value));
241
                                        }
242
                                        break;
243
                                case KXmlParser.END_TAG:
244
                                        if (parser.getName().compareTo(CapabilitiesTags.EX_GEOGRAPHICBOUNDINGBOX) == 0)
245
                                                end = true;
246
                                        break;
247
                                case KXmlParser.TEXT:
248
                                        break;
249
                         }
250
             if (!end)
251
                 currentTag = parser.next();
252
            }
253
            parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.EX_GEOGRAPHICBOUNDINGBOX);
254 3775 ldiaz
255
            //TODO:
256 3892 ldiaz
            bbox.setSrs("CRS:84");
257 3750 ldiaz
            return bbox;
258
    }
259
260 3660 ldiaz
    public String toString(){
261
        return super.toString();
262
    }
263
}