Statistics
| Revision:

svn-gvsig-desktop / tags / v1_0_2_Build_895 / libraries / libRemoteServices / src / org / gvsig / remoteClient / wms / wms_1_1_1 / WMSLayer1_1_1.java @ 10328

History | View | Annotate | Download (10.2 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.gvsig.remoteClient.utils.BoundaryBox;
9
import org.gvsig.remoteClient.utils.CapabilitiesTags;
10
import org.gvsig.remoteClient.utils.Utilities;
11
import org.gvsig.remoteClient.wms.WMSDimension;
12
import org.gvsig.remoteClient.wms.WMSExtent;
13
import org.kxml2.io.KXmlParser;
14
import org.xmlpull.v1.XmlPullParserException;
15

    
16

    
17
/**
18
 * <p>WMS Layer for WMS 1.1.1</p>
19
 * 
20
 */
21
public class WMSLayer1_1_1 extends org.gvsig.remoteClient.wms.WMSLayer {
22
    
23
         /**
24
     * <p>Extents defined for the layer in the capabilities doc</p>
25
     */
26
    private java.util.ArrayList extents = new ArrayList();
27
    
28
    /**
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
        ArrayList myDimensions = (ArrayList) this.dimensions.clone();        
64
        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
        return myDimensions;
78
    }
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
    public WMSLayer1_1_1()
89
    {
90
        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
       
106
        readLayerAttributes(parser);
107
        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
                        lyr.setParent(this);                       
120
                        this.children.add(lyr);
121
                        // Jaume
122
                        if (lyr.getName()!=null)
123
                            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
                    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
                        if (value != null){
148
                            String[] mySRSs = value.split(" ");
149
                            for (int i = 0; i < mySRSs.length; i++) {
150
                                addSrs(mySRSs[i]);    
151
                            }                            
152
                        }
153
                    }                                        
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
                        addSrs(bbox.getSrs());
174
                    }        
175
                    else if (parser.getName().compareTo(CapabilitiesTags.LATLONBOUNDINGBOX)==0)
176
                    {
177
                        bbox = new BoundaryBox();
178
                        bbox.setSrs(CapabilitiesTags.EPSG_4326);
179
                        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
                        addSrs(bbox.getSrs());
194
                    }                                                
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
                        if ((style != null) && (style.getName() != null))
209
                        {
210
                            styles.add(style);
211
                        }
212
                    }
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
                    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
                    else if (parser.getName().compareTo(CapabilitiesTags.KEYWORDLIST)==0)
233
                    {
234
                            parseKeywordList(parser);
235
                    }                    
236
                    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
            if (!end)
245
                    currentTag = parser.next();
246
        }
247
        parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.LAYER);
248
    }      
249
    
250
    public String toString(){
251
        return super.toString();
252
    }
253
}