Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2020 / libraries / libRemoteServices / src / org / gvsig / remoteclient / wms / wms_1_1_1 / WMSLayer1_1_1.java @ 33910

History | View | Annotate | Download (10.4 KB)

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