/* (c) 2014 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.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.ResourceInfo; import org.geoserver.catalog.DimensionDefaultValueSetting.Strategy; import org.geoserver.catalog.impl.DimensionInfoImpl; import org.geoserver.catalog.testreader.CustomFormat; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.wms.WMS; import org.geoserver.wms.WMSTestSupport; import org.junit.Before; import org.junit.Test; /** * Tests the WMS default value support for a custom dimension for both * vector and raster layers. * * @author Ilkka Rinne <ilkka.rinne@spatineo.com> */ public class RasterCustomDimensionDefaultValueTest extends WMSTestSupport { private static final QName WATTEMP_CUSTOM = new QName(MockData.SF_URI, "watertemp_custom", MockData.SF_PREFIX); private static final String COVERAGE_DIMENSION_NAME = CustomFormat.CUSTOM_DIMENSION_NAME; 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_CUSTOM, "custwatertemp.zip", null, Collections.EMPTY_MAP, getClass(), getCatalog()); } @Test public void testDefaultCustomDimValueVectorSelector() throws Exception { // Use default default value strategy: setupCoverageMyDimension(WATTEMP_CUSTOM,null); CoverageInfo customCoverage = getCatalog().getCoverageByName(WATTEMP_CUSTOM.getLocalPart()); String expected = "CustomDimValueA"; String def = wms.getDefaultCustomDimensionValue(COVERAGE_DIMENSION_NAME, customCoverage, String.class); assertTrue("Default dimension value is null", def != null); assertTrue("Default dimension value should be the smallest one", expected.equals(def)); } @Test public void testExplicitMinCustomDimValueVectorSelector() throws Exception { // Use default explicit value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.MINIMUM); setupCoverageMyDimension(WATTEMP_CUSTOM,defaultValueSetting); CoverageInfo customCoverage = getCatalog().getCoverageByName(WATTEMP_CUSTOM.getLocalPart()); String expected = "CustomDimValueA"; String def = wms.getDefaultCustomDimensionValue(COVERAGE_DIMENSION_NAME, customCoverage, String.class); assertTrue("Default dimension value is null", def != null); assertTrue("Default dimension value should be the smallest one", expected.equals(def)); } @Test public void testExplicitMaxCustomDimValueVectorSelector() throws Exception { // Use default explicit value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.MAXIMUM); setupCoverageMyDimension(WATTEMP_CUSTOM,defaultValueSetting); CoverageInfo customCoverage = getCatalog().getCoverageByName(WATTEMP_CUSTOM.getLocalPart()); String expected = "CustomDimValueC"; String def = wms.getDefaultCustomDimensionValue(COVERAGE_DIMENSION_NAME, customCoverage, String.class); assertTrue("Default dimension value is null", def != null); assertTrue("Default dimension value should be the biggest one", expected.equals(def)); } @Test public void testExplicitNearestToGivenValueCustomDimValueVectorSelector() throws Exception { // Use default explicit value strategy: DimensionDefaultValueSetting defaultValueSetting = new DimensionDefaultValueSetting(); defaultValueSetting.setStrategyType(Strategy.NEAREST); String referenceValue = "CustomDimValueD"; defaultValueSetting.setReferenceValue(referenceValue); setupCoverageMyDimension(WATTEMP_CUSTOM,defaultValueSetting); CoverageInfo customCoverage = getCatalog().getCoverageByName(WATTEMP_CUSTOM.getLocalPart()); String expected = "CustomDimValueC"; String def = wms.getDefaultCustomDimensionValue(COVERAGE_DIMENSION_NAME, customCoverage, String.class); assertTrue("Default dimension value is null", def != null); assertTrue("Default dimension value should be the closest one", expected.equals(def)); } protected void setupCoverageMyDimension(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.CUSTOM_DIMENSION_PREFIX+COVERAGE_DIMENSION_NAME, di); getCatalog().save(info); } }