Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libRemoteServices / src / org / gvsig / remoteclient / wms / wms_1_1_1 / WMSLayer1_1_1.java @ 33738

History | View | Annotate | Download (10.4 KB)

1

    
2
package org.gvsig.remoteclient.wms.wms_1_1_1;
3

    
4
import java.io.IOException;
5
import java.util.ArrayList;
6
import java.util.TreeMap;
7

    
8
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
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

    
19

    
20
/**
21
 * <p>WMS Layer for WMS 1.1.1</p>
22
 * 
23
 */
24
public class WMSLayer1_1_1 extends org.gvsig.remoteclient.wms.WMSLayer {
25
    
26
    private static final StringUtils stringUtils = CompatLocator.getStringUtils();
27
    
28
         /**
29
     * <p>Extents defined for the layer in the capabilities doc</p>
30
     */
31
    private java.util.ArrayList extents = new ArrayList();
32
    
33
    /**
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
        ArrayList myDimensions = (ArrayList) this.dimensions.clone();        
69
        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
        return myDimensions;
83
    }
84
    
85
    /**
86
     * <p>Adds an extent to the extent vector </p>
87
     * @param extent 
88
     */
89
    public void addExtent(org.gvsig.remoteclient.wms.WMSExtent extent) {        
90
        extents.add(extent);
91
    }   
92
    
93
    public WMSLayer1_1_1()
94
    {
95
        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
       
111
        readLayerAttributes(parser);
112
        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
                        lyr.setParent(this);                       
125
                        this.children.add(lyr);
126
                        // Jaume
127
                        if (lyr.getName()!=null)
128
                            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
                    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
                        if (value != null){
153
                            String[] mySRSs = stringUtils.split(value, " ");
154
                            for (int i = 0; i < mySRSs.length; i++) {
155
                                addSrs(mySRSs[i]);    
156
                            }                            
157
                        }
158
                    }                                        
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
                        addSrs(bbox.getSrs());
179
                    }        
180
                    else if (parser.getName().compareTo(CapabilitiesTags.LATLONBOUNDINGBOX)==0)
181
                    {
182
                        bbox = new BoundaryBox();
183
                        bbox.setSrs(CapabilitiesTags.EPSG_4326);
184
                        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
                        addSrs(bbox.getSrs());
199
                    }                                                
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
                        if ((style != null) && (style.getName() != null))
214
                        {
215
                            styles.add(style);
216
                        }
217
                    }
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
                    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
                    else if (parser.getName().compareTo(CapabilitiesTags.KEYWORDLIST)==0)
238
                    {
239
                            parseKeywordList(parser);
240
                    }                    
241
                    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
            if (!end)
250
                    currentTag = parser.next();
251
        }
252
        parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.LAYER);
253
    }      
254
    
255
    public String toString(){
256
        return super.toString();
257
    }
258
}