Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libRemoteServices / src / org / gvsig / remoteclient / wms / wms_1_1_0 / WMSLayer1_1_0.java @ 38579

History | View | Annotate | Download (10.5 KB)

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