/* (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.Catalog; import org.geoserver.catalog.DimensionDefaultValueSetting; import org.geoserver.catalog.DimensionInfo; import org.geoserver.catalog.DimensionPresentation; import org.geoserver.catalog.impl.DimensionInfoImpl; import org.geoserver.data.test.MockData; import org.geoserver.data.test.SystemTestData; import org.geoserver.gwc.GWC; import org.geoserver.gwc.wmts.dimensions.Dimension; import org.geoserver.wms.WMS; import org.geoserver.wms.WMSTestSupport; import org.geoserver.wms.dimension.RasterTimeDimensionDefaultValueTest; import org.geoserver.wms.dimension.VectorElevationDimensionDefaultValueTest; import org.junit.Before; import org.junit.Test; import org.opengis.filter.Filter; import javax.xml.namespace.QName; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.TimeZone; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; public abstract class TestsSupport extends WMSTestSupport { protected static final QName RASTER_ELEVATION_TIME = new QName(MockData.SF_URI, "watertemp", MockData.SF_PREFIX); protected static final QName RASTER_ELEVATION = new QName(MockData.SF_URI, "watertemp", MockData.SF_PREFIX); protected static final QName RASTER_TIME = new QName(MockData.SF_URI, "watertemp_future_generated", MockData.SF_PREFIX); protected static final QName RASTER_CUSTOM = new QName(MockData.SF_URI, "watertemp_custom", MockData.SF_PREFIX); protected static final QName VECTOR_ELEVATION_TIME = new QName(MockData.SF_URI, "ElevationWithStartEnd", MockData.SF_PREFIX); protected static final QName VECTOR_ELEVATION = new QName(MockData.SF_URI, "ElevationWithStartEnd", MockData.SF_PREFIX); protected static final QName VECTOR_TIME = new QName(MockData.SF_URI, "TimeWithStartEnd", MockData.SF_PREFIX); protected static final QName VECTOR_CUSTOM = new QName(MockData.SF_URI, "TimeElevationCustom", MockData.SF_PREFIX); protected WMS wms; protected Catalog catalog; @Override protected void onSetUp(SystemTestData testData) throws Exception { super.onSetUp(testData); TimeZone.setDefault(TimeZone.getTimeZone("UTC")); // raster with elevation dimension testData.addRasterLayer(RASTER_ELEVATION, "/org/geoserver/wms/dimension/watertemp.zip", null, Collections.emptyMap(), getClass(), getCatalog()); // raster with time dimension RasterTimeDimensionDefaultValueTest.prepareFutureCoverageData(RASTER_TIME, this.getDataDirectory(), this.getCatalog()); // raster with custom dimension testData.addRasterLayer(RASTER_CUSTOM, "/org/geoserver/wms/dimension/custwatertemp.zip", null, Collections.emptyMap(), getClass(), getCatalog()); // vector with elevation dimension testData.addVectorLayer(VECTOR_ELEVATION, Collections.emptyMap(), "/TimeElevationWithStartEnd.properties", this.getClass(), getCatalog()); // vector with time dimension testData.addVectorLayer(VECTOR_TIME, Collections.emptyMap(), "/TimeElevationWithStartEnd.properties", this.getClass(), getCatalog()); // vector with custom dimension testData.addVectorLayer(VECTOR_CUSTOM, Collections.emptyMap(), "TimeElevationCustom.properties", VectorElevationDimensionDefaultValueTest.class, getCatalog()); GWC.get().getConfig().setDirectWMSIntegrationEnabled(false); // invoke after setup callback afterSetup(testData); } protected void afterSetup(SystemTestData testData) { } @Before public void setup() throws Exception { wms = getWMS(); catalog = getCatalog(); } protected abstract Dimension buildDimension(DimensionInfo dimensionInfo); protected void testDomainsValuesRepresentation(DimensionPresentation dimensionPresentation, String... expectedDomainValues) throws IOException { DimensionInfo dimensionInfo = createDimension(true, dimensionPresentation, null); Dimension dimension = buildDimension(dimensionInfo); List<String> valuesAsStrings = dimension.getDomainValuesAsStrings(Filter.INCLUDE).second.second; assertThat(valuesAsStrings.size(), is(expectedDomainValues.length)); assertThat(valuesAsStrings, containsInAnyOrder(expectedDomainValues)); } protected void testDefaultValueStrategy(DimensionDefaultValueSetting.Strategy strategy, String expectedDefaultValue) { DimensionDefaultValueSetting defaultValueStrategy = new DimensionDefaultValueSetting(); defaultValueStrategy.setStrategyType(strategy); testDefaultValueStrategy(defaultValueStrategy, expectedDefaultValue); } protected void testDefaultValueStrategy(DimensionDefaultValueSetting defaultValueStrategy, String expectedDefaultValue) { DimensionInfo dimensionInfo = createDimension(true, null, defaultValueStrategy); Dimension dimension = buildDimension(dimensionInfo); String defaultValue = dimension.getDefaultValueAsString(); assertThat(defaultValue, is(expectedDefaultValue)); } protected static DimensionInfo createDimension(boolean enable, DimensionPresentation presentation, DimensionDefaultValueSetting defaultValueStrategy) { DimensionInfo dimension = new DimensionInfoImpl(); dimension.setEnabled(enable); dimension.setPresentation(presentation); dimension.setDefaultValue(defaultValueStrategy); return dimension; } }