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