/* (c) 2016 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.gwc.wmts; import org.geoserver.catalog.*; import org.geoserver.catalog.DimensionDefaultValueSetting.Strategy; import org.geoserver.catalog.impl.DimensionInfoImpl; import org.geoserver.catalog.testreader.CustomFormat; import org.geoserver.gwc.wmts.dimensions.Dimension; import org.geoserver.gwc.wmts.dimensions.DimensionsUtils; import org.geoserver.gwc.wmts.dimensions.RasterElevationDimension; import org.junit.Test; import org.opengis.filter.Filter; import java.util.List; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; /** * This class contains tests that check that elevation dimensions values are correctly extracted from rasters. */ public class RasterElevationDimensionTest extends TestsSupport { @Test public void testDisabledDimension() throws Exception { // enable a elevation dimension DimensionInfo dimensionInfo = new DimensionInfoImpl(); dimensionInfo.setEnabled(true); CoverageInfo rasterInfo = getCoverageInfo(); rasterInfo.getMetadata().put(ResourceInfo.ELEVATION, dimensionInfo); getCatalog().save(rasterInfo); // check that we correctly retrieve the elevation dimension assertThat(DimensionsUtils.extractDimensions(wms, getLayerInfo()).size(), is(1)); // disable the elevation dimension dimensionInfo.setEnabled(false); rasterInfo.getMetadata().put(ResourceInfo.ELEVATION, dimensionInfo); getCatalog().save(rasterInfo); // no dimensions should be available assertThat(DimensionsUtils.extractDimensions(wms, getLayerInfo()).size(), is(0)); } @Test public void testGetDefaultValue() { testDefaultValueStrategy(Strategy.MINIMUM, "0.0"); testDefaultValueStrategy(Strategy.MAXIMUM, "100.0"); } @Test public void testGetDomainsValues() throws Exception { testDomainsValuesRepresentation(DimensionPresentation.LIST, "0", "100"); testDomainsValuesRepresentation(DimensionPresentation.CONTINUOUS_INTERVAL, "0--100"); testDomainsValuesRepresentation(DimensionPresentation.DISCRETE_INTERVAL, "0--100"); } @Override protected Dimension buildDimension(DimensionInfo dimensionInfo) { return new RasterElevationDimension(wms, getLayerInfo(), dimensionInfo); } @Test public void testGetHistogram() { DimensionInfo dimensionInfo = createDimension(true, DimensionPresentation.LIST, null); Dimension dimension = buildDimension(dimensionInfo); Tuple<String, List<Integer>> histogram = dimension.getHistogram(Filter.INCLUDE, "50"); assertThat(histogram.first, is("0.0/100.0/50.0")); assertThat(histogram.second, containsInAnyOrder(2, 2)); } /** * Helper method that just returns the current layer info. */ private LayerInfo getLayerInfo() { return catalog.getLayerByName(RASTER_ELEVATION.getLocalPart()); } /** * Helper method that just returns the current coverage info. */ private CoverageInfo getCoverageInfo() { LayerInfo layerInfo = getLayerInfo(); assertThat(layerInfo.getResource(), instanceOf(CoverageInfo.class)); return (CoverageInfo) layerInfo.getResource(); } }