Statistics
| Revision:

root / tags / v1_0_2_Build_916 / libraries / libRemoteServices / src / org / gvsig / remoteClient / wms / wms_1_1_1 / WMSLayer1_1_1.java @ 12327

History | View | Annotate | Download (10.2 KB)

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