Revision 7271 org.gvsig.raster.wms/trunk/org.gvsig.raster.wms/org.gvsig.raster.wms.remoteclient/src/main/java/org/gvsig/remoteclient/wms/wms_1_3_0/WMSProtocolHandler1_3_0.java

View differences:

WMSProtocolHandler1_3_0.java
61 61
 * </p>
62 62
 */
63 63
public class WMSProtocolHandler1_3_0 extends org.gvsig.remoteclient.wms.WMSProtocolHandler {
64
    
64

  
65 65
        private static final Logger logger = LoggerFactory.getLogger(WMSProtocolHandler1_3_0.class);
66 66
	private WMSLayer1_3_0 fakeRootLayer;
67
    
67

  
68 68
	public WMSProtocolHandler1_3_0()
69 69
	{
70 70
		this.version = "1.3.0";
71 71
		this.name = "WMS1.3.0";
72
		this.serviceInfo = new WMSServiceInformation(); 
73
		this.layers = new TreeMap();		   
72
		this.serviceInfo = new WMSServiceInformation();
73
		this.layers = new TreeMap();
74 74
	}
75
    
75

  
76 76
//------------------------------------------------------------------------------
77
// Parsing methods....    
78
//------------------------------------------------------------------------------    
77
// Parsing methods....
78
//------------------------------------------------------------------------------
79 79

  
80 80
	@Override
81 81
	public void getCapabilities(WMSStatus status, boolean override,
......
89 89
			processLayer(rootLayer);
90 90
		}
91 91
	}
92
	
92

  
93 93
	/**
94 94
	 * WMSLayer parser gets no information about the user preferences regarding
95 95
	 * axis order, so the bboxes should be should be post-processed here,
......
98 98
	 * @param layer
99 99
	 */
100 100
	protected void processLayer(WMSLayer layer) {
101
		if (layer.getBboxes()!=null) {
102
			Collection<BoundaryBox> col = (Collection<BoundaryBox>) layer.getBboxes().values();
103
			for (BoundaryBox bbox: col) {
104
				if (!CrsAxisOrder.isXyAxisOrder(bbox.getSrs())) {
105
					bbox.setXmin(bbox.getYmin());
106
					bbox.setYmin(bbox.getXmin());
107
					bbox.setXmax(bbox.getYmax());
108
					bbox.setYmax(bbox.getXmax());
109
				}
110
			}
111
		}
112
		ArrayList children = layer.getChildren();
113
		if (children!=null) {
114
			for (int i=0; i<children.size(); i++) {
115
				WMSLayer child = (WMSLayer) children.get(i);
116
				processLayer(child);
117
			}
118
		}
119
	}
120
	
101
        if (layer.getBboxes()!=null) {
102
            Collection<BoundaryBox> col = (Collection<BoundaryBox>) layer.getBboxes().values();
103
            for (BoundaryBox bbox: col) {
104
                if (!CrsAxisOrder.isXyAxisOrder(bbox.getSrs())) {
105
                    double auxX = bbox.getXmin();
106
                    double auxY = bbox.getYmin();
107
                    bbox.setXmin(auxY);
108
                    bbox.setYmin(auxX);
109
                    auxX = bbox.getXmax();
110
                    auxY = bbox.getYmax();
111
                    bbox.setXmax(auxY);
112
                    bbox.setYmax(auxX);
113
                }
114
            }
115
        }
116
        ArrayList children = layer.getChildren();
117
        if (children!=null) {
118
            for (int i=0; i<children.size(); i++) {
119
                WMSLayer child = (WMSLayer) children.get(i);
120
                processLayer(child);
121
            }
122
        }
123
    }
124

  
121 125
    public boolean parseCapabilities(File f)
122
    {   
126
    {
123 127
    	rootLayer = null;
124
    	
128

  
125 129
    	int tag;
126 130
      	EncodingXMLParser kxmlParser = null;
127 131
    	kxmlParser = new EncodingXMLParser();
......
129 133
    	{
130 134
    	   	kxmlParser.setInput(f);
131 135
			kxmlParser.nextTag();
132
    		if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT ) 
133
    		{    		
134
    			kxmlParser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITIES_ROOT1_3_0);    			
136
    		if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT )
137
    		{
138
    			kxmlParser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITIES_ROOT1_3_0);
135 139
    			tag = kxmlParser.nextTag();
136 140
				 while(tag != KXmlParser.END_DOCUMENT)
137 141
				 {
138 142
                     switch(tag)
139
					 {                       
143
					 {
140 144
						case KXmlParser.START_TAG:
141 145
							if (kxmlParser.getName().compareTo(CapabilitiesTags.SERVICE )==0)
142 146
							{
143 147
								parseServiceTag(kxmlParser);
144
							}	
148
							}
145 149
							else if (kxmlParser.getName().compareTo(CapabilitiesTags.CAPABILITY)==0)
146 150
							{
147 151
								parseCapabilityTag(kxmlParser);
148 152
							}
149 153
							break;
150
						case KXmlParser.END_TAG:							
154
						case KXmlParser.END_TAG:
151 155
							break;
152 156
						case KXmlParser.TEXT:
153
							//System.out.println("[TEXT]["+kxmlParser.getText()+"]");							
157
							//System.out.println("[TEXT]["+kxmlParser.getText()+"]");
154 158
						break;
155 159
					 }
156 160
    				 tag = kxmlParser.next();
157 161
    			 }//while !END_DOCUMENT
158 162
    		}
159 163
    	}
160
    	catch(XmlPullParserException parser_ex){    		
164
    	catch(XmlPullParserException parser_ex){
161 165
                logger.warn("Error parsing capabilites.",parser_ex);
162 166
    		return false;
163 167
    	}
164
   		catch (IOException ioe) {			
168
   		catch (IOException ioe) {
165 169
                        logger.warn("Error parsing capabilites.",ioe);
166 170
   			return false;
167 171
 		} finally {
168 172
            return true;
169 173
        }
170
   		// In the parsing process the layer has been filled  		
171
    } 
172
    
174
   		// In the parsing process the layer has been filled
175
    }
176

  
173 177
    /**
174 178
     * <p>Parses the Service Information </p>
175
     */    
176
    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException 
179
     */
180
    private void parseServiceTag(KXmlParser parser) throws IOException, XmlPullParserException
177 181
    {
178 182
    	int currentTag;
179 183
    	boolean end = false;
180
    	
184

  
181 185
    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.SERVICE);
182 186
    	currentTag = parser.next();
183
    	
184
    	while (!end) 
187

  
188
    	while (!end)
185 189
    	{
186 190
			 switch(currentTag)
187 191
			 {
188 192
				case KXmlParser.START_TAG:
189 193
					if (parser.getName().compareTo(CapabilitiesTags.NAME)==0)
190 194
					{
191
						serviceInfo.name = parser.nextText(); 
192
					}	
195
						serviceInfo.name = parser.nextText();
196
					}
193 197
					else if (parser.getName().compareTo(CapabilitiesTags.TITLE)==0)
194 198
					{
195
						serviceInfo.title = parser.nextText(); 
199
						serviceInfo.title = parser.nextText();
196 200
					}
197 201
					else if (parser.getName().compareTo(CapabilitiesTags.ABSTRACT)==0)
198 202
					{
199
						serviceInfo.abstr = parser.nextText(); 
203
						serviceInfo.abstr = parser.nextText();
200 204
					}
201 205
					else if (parser.getName().compareTo(CapabilitiesTags.ONLINERESOURCE)==0)
202 206
					{
......
205 209
				        if (value != null){
206 210
				        	serviceInfo.online_resource = value;
207 211
				        }
208
					}					
212
					}
209 213
					else if ((parser.getName().compareTo(CapabilitiesTags.KEYWORDLIST)==0) ||
210 214
							(parser.getName().compareTo(CapabilitiesTags.CONTACTINFORMATION)==0))
211 215
					{
212 216
						parser.skipSubTree();
213
					}					
217
					}
214 218
					break;
215 219
				case KXmlParser.END_TAG:
216 220
					if (parser.getName().compareTo(CapabilitiesTags.SERVICE) == 0)
217 221
						end = true;
218 222
					break;
219
				case KXmlParser.TEXT:					
223
				case KXmlParser.TEXT:
220 224
				break;
221 225
			 }
222 226
             if (!end)
......
224 228
    	}
225 229
    	parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.SERVICE);
226 230
    }
227
    
231

  
228 232
    /**
229 233
     * <p>Parses the Capability Tag </p>
230
     */    
234
     */
231 235
    private void parseCapabilityTag(KXmlParser parser) throws IOException, XmlPullParserException
232
    { 	
236
    {
233 237
    	int currentTag;
234 238
    	boolean end = false;
235
    	
239

  
236 240
    	parser.require(KXmlParser.START_TAG, null, CapabilitiesTags.CAPABILITY);
237 241
    	currentTag = parser.next();
238
    	
239
    	while (!end) 
242

  
243
    	while (!end)
240 244
    	{
241 245
			 switch(currentTag)
242 246
			 {
243 247
				case KXmlParser.START_TAG:
244 248
					if (parser.getName().compareTo(CapabilitiesTags.REQUEST)==0)
245 249
					{
246
						parseRequestTag(parser); 
247
					}	
250
						parseRequestTag(parser);
251
					}
248 252
					else if (parser.getName().compareTo(CapabilitiesTags.EXCEPTION)==0)
249 253
					{
250 254
						//TODO:
......
266 270
                            rootLayer.getChildren().add(lyr);
267 271
                        }
268 272
						lyr.parse(parser, layers);
269
						
273

  
270 274
                        if (lyr.getName()!=null)
271
						    layers.put(lyr.getName(), lyr); 											
275
						    layers.put(lyr.getName(), lyr);
272 276
					}
273 277
					else if ((parser.getName().compareTo(CapabilitiesTags.VENDORSPECIFICCAPABILITIES)==0) ||
274
							(parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))                            
278
							(parser.getName().compareTo(CapabilitiesTags.USERDEFINEDSYMBOLIZATION )==0))
275 279
					{
276 280
						parser.skipSubTree();
277
					}					
281
					}
278 282
					break;
279 283
				case KXmlParser.END_TAG:
280 284
					if (parser.getName().compareTo(CapabilitiesTags.CAPABILITY) == 0)
281 285
						end = true;
282 286
					break;
283
				case KXmlParser.TEXT:					
287
				case KXmlParser.TEXT:
284 288
				break;
285 289
			 }
286 290
			 if (!end)
287 291
				 currentTag = parser.next();
288 292
    	}
289
    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.CAPABILITY);    	
290
    }  
291
    
293
    	//parser.require(KXmlParser.END_TAG, null, CapabilitiesTags.CAPABILITY);
294
    }
295

  
292 296
    private WMSLayer1_3_0 getFakeRootLayer(){
293 297
        if (fakeRootLayer == null){
294 298
            fakeRootLayer = new WMSLayer1_3_0();
......
306 310
        KXmlParser kxmlParser = new KXmlParser();
307 311
        try
308 312
        {
309
            kxmlParser.setInput(new ByteArrayInputStream(data), encoding);        
313
            kxmlParser.setInput(new ByteArrayInputStream(data), encoding);
310 314
            kxmlParser.nextTag();
311 315
            int tag;
312
            if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT ) 
313
            { 
314
                kxmlParser.require(KXmlParser.START_TAG, null, ExceptionTags.EXCEPTION_ROOT);             
316
            if ( kxmlParser.getEventType() != KXmlParser.END_DOCUMENT )
317
            {
318
                kxmlParser.require(KXmlParser.START_TAG, null, ExceptionTags.EXCEPTION_ROOT);
315 319
                tag = kxmlParser.nextTag();
316 320
                 while(tag != KXmlParser.END_DOCUMENT)
317 321
                 {
......
325 329
                                errors.add(errorCode+errorMessage);
326 330
                            }
327 331
                            break;
328
                        case KXmlParser.END_TAG:                            
332
                        case KXmlParser.END_TAG:
329 333
                            break;
330
                        
334

  
331 335
                     }
332 336
                     tag = kxmlParser.nextTag();
333 337
                 }
......
337 341
        catch(XmlPullParserException parser_ex){
338 342
            logger.warn("",parser_ex);
339 343
        }
340
        catch (IOException ioe) {           
341
            logger.warn("",ioe);        
344
        catch (IOException ioe) {
345
            logger.warn("",ioe);
342 346
        }
343 347
        String message = errors.size()>0? "" : null;
344 348
        for (int i = 0; i < errors.size(); i++) {
345 349
            message += (String) errors.get(i)+"\n";
346 350
        }
347 351
        return message;
348
    }   
349
    
352
    }
353

  
350 354
    /*
351 355
     * (non-Javadoc)
352 356
     * @see org.gvsig.remoteClient.wms.WMSProtocolHandler#createGetFeatureInfoRequest(org.gvsig.remoteClient.wms.WMSStatus, int, int)
......
372 376
			WMSStatus status, String layerName) {
373 377
		return new WMSGetLegendGraphicRequest1_1_3(status, this, layerName);
374 378
	}
375
	
376 379

  
380

  
377 381
	/* (non-Javadoc)
378 382
	 * @see org.gvsig.remoteclient.wms.WMSProtocolHandler#createGetCapabilitiesRequest(org.gvsig.remoteclient.wms.WMSStatus)
379
	 */	
383
	 */
380 384
	protected WMSGetCapabilitiesRequest createGetCapabilitiesRequest(
381 385
			WMSStatus status) {
382 386
		return new WMSGetCapabilitiesRequest1_3_0(status, this);

Also available in: Unified diff