/* * GeoTools - The Open Source Java GIS Toolkit * http://geotools.org * * (C) 2004-2008, Open Source Geospatial Foundation (OSGeo) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; * version 2.1 of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package org.geotools.data.wms.test; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.StringTokenizer; import java.util.logging.Level; import org.geotools.data.ows.CRSEnvelope; import org.geotools.data.ows.GetCapabilitiesRequest; import org.geotools.data.ows.Layer; import org.geotools.data.ows.Specification; import org.geotools.data.ows.WMSCapabilities; import org.geotools.data.wms.WMS1_0_0; import org.geotools.data.wms.WMSSpecification; import org.geotools.data.wms.WebMapServer; import org.geotools.data.wms.request.GetMapRequest; import org.geotools.data.wms.xml.WMSSchema; import org.geotools.test.TestData; import org.geotools.xml.DocumentFactory; import org.geotools.xml.SchemaFactory; import org.geotools.xml.handlers.DocumentHandler; import org.geotools.xml.schema.Schema; import org.xml.sax.SAXException; /** * * * @source $URL$ */ public class WMS1_0_0_OnlineTest extends ServerTestCase { protected URL server; protected WMSSpecification spec; public WMS1_0_0_OnlineTest() throws Exception { this.spec = new WMS1_0_0(); this.server = new URL( "http://www2.demis.nl/mapserver/Request.asp?wmtver=1.0.0&request=getcapabilities"); } public void testGetVersion() { assertEquals(spec.getVersion(), "1.0.0"); } public void testCreateGetCapabilitiesRequest() throws Exception { GetCapabilitiesRequest request = spec.createGetCapabilitiesRequest(server); Properties properties = new Properties(); StringTokenizer tokenizer = new StringTokenizer(request.getFinalURL() .getQuery(), "&"); while (tokenizer.hasMoreTokens()) { String token = tokenizer.nextToken(); String[] param = token.split("="); properties.setProperty(param[0].toUpperCase(), param[1]); } checkProperties(properties); try{ WebMapServer wms = new WebMapServer(server); WMSCapabilities capabilities = wms.getCapabilities(); assertNotNull(capabilities); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } } public void testCreateDescribeLayerRequest() throws Exception { try { spec.createDescribeLayerRequest(null); assertTrue("Shouldn't be able to create DescribeLayer requests for version 1.0.0", false); } catch (UnsupportedOperationException e) { } } protected void checkProperties(Properties properties) { assertEquals(properties.getProperty("REQUEST"), "capabilities"); assertEquals(properties.getProperty("WMTVER"), "1.0.0"); } public void testCreateParser() throws Exception { WMSCapabilities capabilities = createCapabilities( "1.0.0Capabilities.xml"); try{ assertEquals(capabilities.getVersion(), "1.0.0"); assertEquals(capabilities.getService().getName(), "GetMap"); assertEquals(capabilities.getService().getTitle(), "World Map"); for (int i = 0; i < capabilities.getService().getKeywordList().length; i++) { assertEquals(capabilities.getService().getKeywordList()[i], "OpenGIS WMS Web Map Server".split(" ")[i]); } assertEquals(capabilities.getService().getOnlineResource(), new URL("http://www2.demis.nl")); assertEquals(capabilities.getRequest().getGetCapabilities() .getFormats().get(0), "application/vnd.ogc.wms_xml"); assertEquals(capabilities.getRequest().getGetFeatureInfo().getGet(), new URL("http://www2.demis.nl/wms/wms.asp?wms=WorldMap&")); assertEquals(capabilities.getRequest().getGetMap().getFormats().size(), 4); assertEquals(capabilities.getLayerList().size(), 21); Layer[] layers = (Layer[]) capabilities.getLayerList().toArray(new Layer[capabilities.getLayerList().size()]); assertEquals(layers[0].getTitle(), "World Map"); assertEquals(layers[0].getParent(), null); assertTrue(layers[0].getSrs().contains("EPSG:4326")); // case should not matter assertTrue(layers[0].getSrs().contains("EPSG:4327")); assertEquals(layers[1].getTitle(), "Bathymetry"); assertEquals(layers[1].getName(), "Bathymetry"); assertEquals(layers[20].getTitle(), "Ocean features"); assertEquals(layers[20].getName(), "Ocean features"); assertEquals(layers[0].getBoundingBoxes().size(), 1); CRSEnvelope bbox = (CRSEnvelope) layers[1].getBoundingBoxes().get("EPSG:4326"); assertNotNull(bbox); } catch(Exception e){ if(e.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+e); } else{ throw(e); } } } public void testCreateGetMapRequest() throws Exception { try{ CustomWMS wms = new CustomWMS(server); WMSCapabilities caps = wms.getCapabilities(); GetMapRequest request = wms.createGetMapRequest(); request.setFormat("image/jpeg"); System.out.println(request.getFinalURL().toExternalForm()); assertTrue(request.getFinalURL().toExternalForm().indexOf("JPEG") >= 0); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } } public void testCreateGetFeatureInfoRequest() throws Exception { /* TODO FIX THIS try{ URL featureURL = new URL("http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?VERSION=1.1.0&REQUEST=GetCapabilities"); WebMapServer wms = getCustomWMS(featureURL); WMSCapabilities caps = wms.getCapabilities(); assertNotNull(caps); assertNotNull(caps.getRequest().getGetFeatureInfo()); GetMapRequest getMapRequest = wms.createGetMapRequest(); List layers = Arrays.asList(WMSUtils.getNamedLayers(caps)); List simpleLayers = new ArrayList(); Iterator iter = layers.iterator(); while (iter.hasNext()) { Layer layer = (Layer) iter.next(); SimpleLayer sLayer = new SimpleLayer(layer.getName(), ""); simpleLayers.add(sLayer); List styles = layer.getStyles(); if (styles.size() == 0) { sLayer.setStyle(""); continue; } Random random = new Random(); int randomInt = random.nextInt(styles.size()); sLayer.setStyle((String) styles.get(randomInt)); } getMapRequest.setLayers(simpleLayers); getMapRequest.setSRS("EPSG:4326"); getMapRequest.setDimensions("400", "400"); getMapRequest.setFormat("image/png"); getMapRequest.setBBox("-114.01268,59.4596930,-113.26043,60.0835794"); URL url2 = getMapRequest.getFinalURL(); GetFeatureInfoRequest request = wms.createGetFeatureInfoRequest(getMapRequest); request.setQueryLayers(WMSUtils.getQueryableLayers(caps)); request.setQueryPoint(200, 200); request.setInfoFormat(caps.getRequest().getGetFeatureInfo().getFormatStrings()[0]); System.out.println(request.getFinalURL()); GetFeatureInfoResponse response = (GetFeatureInfoResponse) wms.issueRequest(request); System.out.println(response.getContentType()); assertTrue( response.getContentType().indexOf("text/plain") != -1 ); BufferedReader in = new BufferedReader(new InputStreamReader(response.getInputStream())); String line; boolean textFound = false; while ((line = in.readLine()) != null) { System.out.println(line); if (line.indexOf("Wood Buffalo National Park") != -1) { textFound = true; } } assertTrue(textFound); } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); } else{ throw(ce); } } */ } /** * @param featureURL * @throws IOException * @throws URISyntaxException * @throws SAXException */ protected WebMapServer getCustomWMS( URL featureURL ) throws SAXException, URISyntaxException, IOException { return new CustomWMS(featureURL); } protected WMSCapabilities createCapabilities( String capFile ) throws Exception { try{ File getCaps = TestData.file(this, capFile); URL getCapsURL = getCaps.toURI().toURL(); Map hints = new HashMap(); hints.put(DocumentHandler.DEFAULT_NAMESPACE_HINT_KEY, WMSSchema.getInstance()); Object object = DocumentFactory.getInstance(getCapsURL.openStream(), hints, Level.WARNING); Schema schema = WMSSchema.getInstance(); SchemaFactory.getInstance(WMSSchema.NAMESPACE); assertTrue("Capabilities failed to parse", object instanceof WMSCapabilities); WMSCapabilities capabilities = (WMSCapabilities) object; return capabilities; } catch(java.net.ConnectException ce){ if(ce.getMessage().indexOf("timed out")>0){ System.err.println("Unable to test - timed out: "+ce); return null; } else{ throw(ce); } } } //forces use of 1.0.0 spec private class CustomWMS extends WebMapServer { /** * @param serverURL * @param wait * @throws SAXException * @throws URISyntaxException * @throws IOException */ public CustomWMS( URL serverURL) throws SAXException, URISyntaxException, IOException { super(serverURL); // TODO Auto-generated constructor stub } protected void setupSpecifications() { specs = new Specification[1]; specs[0] = new WMS1_0_0(); } } }