package org.mapfish.print.map.image.wms;
import com.google.common.collect.Multimap;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.json.JSONObject;
import org.junit.Test;
import org.mapfish.print.TestHttpClientFactory;
import org.mapfish.print.URIUtils;
import org.mapfish.print.map.image.wms.WmsLayerParam.ServerType;
import org.mapfish.print.wrapper.json.PJsonObject;
import java.awt.Dimension;
import java.net.URI;
import java.util.Collection;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertFalse;
public class WmsUtilitiesTest {
@Test
public void testMakeWmsGetLayerRequest() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.customParams = new PJsonObject(new JSONObject("{\"map_resolution\":254}"), "customParams");
wmsLayerParams.version = "1.1.1";
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize, 72.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
final Collection<String> layersParam = finalParams.get("LAYERS");
assertNotNull(layersParam);
assertEquals(1, layersParam.size());
String[] resultlayers = layersParam.iterator().next().split(",");
assertArrayEquals(wmsLayerParams.layers, resultlayers);
}
@Test
public void testMakeWmsGetLayerRequestDpiMapServer() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.version = "1.1.1";
wmsLayerParams.serverType = ServerType.MAPSERVER;
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize, 300.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
final String mapResolution = finalParams.get("MAP_RESOLUTION").iterator().next();
assertEquals("300", mapResolution);
}
@Test
public void testMakeWmsGetLayerRequestDpiMapServerSet() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.version = "1.1.1";
wmsLayerParams.serverType = ServerType.MAPSERVER;
wmsLayerParams.customParams = new PJsonObject(new JSONObject("{\"map_resolution\":254}"), "customParams");
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize, 300.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
assertFalse(finalParams.containsKey("MAP_RESOLUTION"));
final String mapResolution = finalParams.get("map_resolution").iterator().next();
assertEquals("254", mapResolution);
}
@Test
public void testMakeWmsGetLayerRequestDpiGeoServer() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.version = "1.1.1";
wmsLayerParams.serverType = ServerType.GEOSERVER;
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize,300.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
final String mapResolution = finalParams.get("FORMAT_OPTIONS").iterator().next();
assertEquals("dpi:300", mapResolution);
}
@Test
public void testMakeWmsGetLayerRequestDpiGeoServerSet() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.customParams = new PJsonObject(new JSONObject("{\"format_options\":\"dpi:254\"}"), "customParams");
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.version = "1.1.1";
wmsLayerParams.serverType = ServerType.GEOSERVER;
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize, 300.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
assertFalse(finalParams.containsKey("FORMAT_OPTIONS"));
final String mapResolution = finalParams.get("format_options").iterator().next();
assertEquals("dpi:254", mapResolution);
}
@Test
public void testMakeWmsGetLayerRequestDpiGeoServerAdd() throws Exception {
WmsLayerParam wmsLayerParams = new WmsLayerParam();
wmsLayerParams.layers = new String[] {"layer1", "layer2", "layer3", "layer4", "layer5"};
wmsLayerParams.customParams = new PJsonObject(new JSONObject("{\"format_options\":\"antialiasing:on\"}"), "customParams");
wmsLayerParams.imageFormat = "image/png";
wmsLayerParams.version = "1.1.1";
wmsLayerParams.serverType = ServerType.GEOSERVER;
URI commonURI = new URI("http://test.xyz/geoserver/wms?SERVICE=WMS");
Dimension imageSize = new Dimension(200,300);
ReferencedEnvelope env = new ReferencedEnvelope(0,10, 40, 50, CRS.decode("EPSG:4326"));
final URI wmsURI = WmsUtilities.makeWmsGetLayerRequest(
wmsLayerParams, commonURI, imageSize, 300.0, 0.0, env);
final Multimap<String, String> finalParams = URIUtils.getParameters(wmsURI);
assertFalse(finalParams.containsKey("FORMAT_OPTIONS"));
final String mapResolution = finalParams.get("format_options").iterator().next();
assertEquals("antialiasing:on;dpi:300", mapResolution);
}
}