/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2014 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.wms.dimension; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import java.util.Collections; import javax.xml.namespace.QName; import org.geoserver.catalog.CoverageInfo; import org.geoserver.catalog.DimensionDefaultValueSetting; import org.geoserver.catalog.DimensionInfo; import org.geoserver.catalog.DimensionPresentation; import org.geoserver.catalog.FeatureTypeInfo; import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.DimensionDefaultValueSetting.Strategy; import org.geoserver.catalog.impl.DimensionInfoImpl; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.wms.WMS; import org.geoserver.wms.WMSTestSupport; import org.geotools.util.Range; import org.junit.Before; import org.junit.Test; /** * Tests the WMS default value support for ELEVATION dimension for both * vector and raster layers. * * @author Ilkka Rinne <ilkka.rinne@spatineo.com> */ public class RasterElevationDimensionDefaultValueTest extends WMSTestSupport { static final QName WATTEMP = new QName(MockData.SF_URI, "watertemp", MockData.SF_PREFIX); WMS wms; @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); } @Before public void setup() throws Exception { wms = getWMS(); //with the initialized application context ((SystemTestData)testData).addRasterLayer(WATTEMP, "watertemp.zip", null, Collections.EMPTY_MAP, getClass(), getCatalog()); } @Test public void testDefaultElevationCoverageSelector() throws Exception { // Use default default value strategy: setupCoverageElevationDimension(WATTEMP,null); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double expected = Double.valueOf(0d); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the smallest one", Math.abs(e.doubleValue()-expected.doubleValue()) < 0.00001); } @Test public void testExplicitMinElevationCoverageSelector() throws Exception { // Use explicit default value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.MINIMUM); setupCoverageElevationDimension(WATTEMP,defaultValueSetting); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double expected = Double.valueOf(0d); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the smallest one", Math.abs(e.doubleValue()-expected.doubleValue()) < 0.00001); } @Test public void testExplicitMaxElevationCoverageSelector() throws Exception { // Use explicit default value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.MAXIMUM); setupCoverageElevationDimension(WATTEMP,defaultValueSetting); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double expected = Double.valueOf(100d); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the biggest one", Math.abs(e.doubleValue()-expected.doubleValue()) < 0.00001); } @Test public void testExplicitFixedElevationCoverageSelector() throws Exception { String fixedElevationStr = "550"; // Use explicit default value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.FIXED); defaultValueSetting.setReferenceValue(fixedElevationStr); Double fixedElevation = Double.parseDouble(fixedElevationStr); setupCoverageElevationDimension(WATTEMP,defaultValueSetting); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the fixed one", Math.abs(e.doubleValue()-fixedElevation.doubleValue()) < 0.00001); } @Test public void testExplicitNearestToGivenTimeCoverageSelector() throws Exception { String referenceElevationStr = "55"; //Use explicit default value DimensionInfo setup: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.NEAREST); defaultValueSetting.setReferenceValue(referenceElevationStr); setupCoverageElevationDimension(WATTEMP,defaultValueSetting); //From src/test/resources/org/geoserver/wms/watertemp.zip: Double expected = Double.valueOf(100d); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the fixed one", Math.abs(e.doubleValue()-expected.doubleValue()) < 0.00001); } @Test public void testExplicitNearestToGivenTimeCoverageSelector2() throws Exception { String referenceElevationStr = "45"; //Use explicit default value DimensionInfo setup: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.NEAREST); defaultValueSetting.setReferenceValue(referenceElevationStr); setupCoverageElevationDimension(WATTEMP,defaultValueSetting); //From src/test/resources/org/geoserver/wms/watertemp.zip: Double expected = Double.valueOf(0d); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Double e = (Double) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", e != null); assertTrue("Default elevation should be the fixed one", Math.abs(e.doubleValue()-expected.doubleValue()) < 0.00001); } @Test public void testFixedRangeElevation() throws Exception { DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.FIXED); defaultValueSetting.setReferenceValue("-100/0"); setupCoverageElevationDimension(WATTEMP, defaultValueSetting); CoverageInfo elevatedCoverage = getCatalog().getCoverageByName(WATTEMP.getLocalPart()); Range<Double> defaultRange = (Range<Double>) wms.getDefaultElevation(elevatedCoverage); assertTrue("Default elevation is null", defaultRange != null); assertEquals(-100, defaultRange.getMinValue(), 0d); assertEquals(0, defaultRange.getMaxValue(), 0d); } protected void setupCoverageElevationDimension(QName name, DimensionDefaultValueSetting defaultValue) { CoverageInfo info = getCatalog().getCoverageByName(name.getLocalPart()); DimensionInfo di = new DimensionInfoImpl(); di.setEnabled(true); di.setPresentation(DimensionPresentation.LIST); di.setDefaultValue(defaultValue); info.getMetadata().put(ResourceInfo.ELEVATION, di); getCatalog().save(info); } }