Skip to content

Commit

Permalink
Track whether a gridsubset extent was generated dynamically
Browse files Browse the repository at this point in the history
  • Loading branch information
smithkm committed Jul 10, 2018
1 parent f4677a4 commit 5c54024
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 7 deletions.
Original file line number Original file line Diff line number Diff line change
@@ -0,0 +1,31 @@
/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.gwc.layer;

import java.util.Map;

import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridCoverage;
import org.geowebcache.grid.GridSet;
import org.geowebcache.grid.GridSubset;

public class DynamicGridSubset extends GridSubset {

public DynamicGridSubset(GridSet gridSet, Map<Integer, GridCoverage> coverages,
BoundingBox originalExtent, boolean fullCoverage, Integer minCachedZoom,
Integer maxCachedZoom) {
super(gridSet, coverages, originalExtent, fullCoverage, minCachedZoom, maxCachedZoom);
}

public DynamicGridSubset(GridSet gridSet, Map<Integer, GridCoverage> coverages,
BoundingBox originalExtent, boolean fullCoverage) {
super(gridSet, coverages, originalExtent, fullCoverage);
}

public DynamicGridSubset(GridSubset gridSubset) {
super(gridSubset);
}
}
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -855,6 +855,9 @@ public synchronized GridSubset removeGridSubset(String gridSetId) {
@Override @Override
public void addGridSubset(GridSubset gridSubset) { public void addGridSubset(GridSubset gridSubset) {
XMLGridSubset gridSubsetInfo = new XMLGridSubset(gridSubset); XMLGridSubset gridSubsetInfo = new XMLGridSubset(gridSubset);
if(gridSubset instanceof DynamicGridSubset) {
gridSubsetInfo.setExtent(null);
}
Set<XMLGridSubset> gridSubsets = new HashSet<XMLGridSubset>(info.getGridSubsets()); Set<XMLGridSubset> gridSubsets = new HashSet<XMLGridSubset>(info.getGridSubsets());
gridSubsets.add(gridSubsetInfo); gridSubsets.add(gridSubsetInfo);
info.setGridSubsets(gridSubsets); info.setGridSubsets(gridSubsets);
Expand All @@ -871,15 +874,16 @@ private Map<String, GridSubset> getGrids(
} }


Map<String, GridSubset> grids = new HashMap<String, GridSubset>(2); Map<String, GridSubset> grids = new HashMap<String, GridSubset>(2);
for (XMLGridSubset gridSubset : cachedGridSets) { for (XMLGridSubset xmlGridSubset : cachedGridSets) {
final String gridSetId = gridSubset.getGridSetName(); final String gridSetId = xmlGridSubset.getGridSetName();
final GridSet gridSet = gridSetBroker.get(gridSetId); final GridSet gridSet = gridSetBroker.get(gridSetId);
if (gridSet == null) { if (gridSet == null) {
LOGGER.info("No GWC GridSet named '" + gridSetId + "' exists."); LOGGER.info("No GWC GridSet named '" + gridSetId + "' exists.");
continue; continue;
} }
BoundingBox extent = gridSubset.getExtent(); BoundingBox extent = xmlGridSubset.getExtent();
if (null == extent) { boolean dynamic = Objects.isNull(extent);
if (dynamic) {
try { try {
SRS srs = gridSet.getSrs(); SRS srs = gridSet.getSrs();
try { try {
Expand Down Expand Up @@ -912,9 +916,12 @@ private Map<String, GridSubset> getGrids(
extent = gridSet.getOriginalExtent(); extent = gridSet.getOriginalExtent();
} }
} }
gridSubset.setExtent(extent); xmlGridSubset.setExtent(extent);


GridSubset gridSubSet = gridSubset.getGridSubSet(gridSetBroker); GridSubset gridSubSet = xmlGridSubset.getGridSubSet(gridSetBroker);
if(dynamic) {
gridSubSet = new DynamicGridSubset(gridSubSet);
}


grids.put(gridSetId, gridSubSet); grids.put(gridSetId, gridSubSet);
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@
import static junit.framework.Assert.assertTrue; import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail; import static junit.framework.Assert.fail;
import static org.geoserver.gwc.GWC.tileLayerName; import static org.geoserver.gwc.GWC.tileLayerName;
import static org.hamcrest.Matchers.closeTo;
import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.hamcrest.Matchers.hasProperty;
import static org.hamcrest.Matchers.instanceOf;
import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue; import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat; import static org.junit.Assert.assertThat;
Expand Down Expand Up @@ -40,6 +45,8 @@
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;

import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
Expand Down Expand Up @@ -85,6 +92,7 @@
import org.geowebcache.filter.parameters.ParameterFilter; import org.geowebcache.filter.parameters.ParameterFilter;
import org.geowebcache.grid.BoundingBox; import org.geowebcache.grid.BoundingBox;
import org.geowebcache.grid.GridSetBroker; import org.geowebcache.grid.GridSetBroker;
import org.geowebcache.grid.GridSubset;
import org.geowebcache.grid.OutsideCoverageException; import org.geowebcache.grid.OutsideCoverageException;
import org.geowebcache.io.Resource; import org.geowebcache.io.Resource;
import org.geowebcache.layer.ExpirationRule; import org.geowebcache.layer.ExpirationRule;
Expand All @@ -94,6 +102,7 @@
import org.geowebcache.mime.MimeType; import org.geowebcache.mime.MimeType;
import org.geowebcache.storage.StorageBroker; import org.geowebcache.storage.StorageBroker;
import org.geowebcache.storage.TileObject; import org.geowebcache.storage.TileObject;
import org.hamcrest.Matchers;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
Expand Down Expand Up @@ -121,6 +130,8 @@ public class GeoServerTileLayerTest {


private GWC mockGWC; private GWC mockGWC;


private FeatureTypeInfoImpl resource;

@After @After
public void tearDown() throws Exception { public void tearDown() throws Exception {
GWC.set(null); GWC.set(null);
Expand Down Expand Up @@ -148,7 +159,7 @@ public void setUp() throws Exception {
storeInfo.setEnabled(true); storeInfo.setEnabled(true);
storeInfo.setWorkspace(workspaceInfo); storeInfo.setWorkspace(workspaceInfo);


FeatureTypeInfoImpl resource = new FeatureTypeInfoImpl((Catalog) null); resource = new FeatureTypeInfoImpl((Catalog) null);
resource.setStore(storeInfo); resource.setStore(storeInfo);
resource.setId("mock-resource-info"); resource.setId("mock-resource-info");
resource.setName("MockLayerInfoName"); resource.setName("MockLayerInfoName");
Expand Down Expand Up @@ -433,6 +444,54 @@ public void testGetGridSubsets() throws Exception {
assertNotNull(gridSubsets); assertNotNull(gridSubsets);
assertEquals(2, gridSubsets.size()); assertEquals(2, gridSubsets.size());
} }

@Test
public void testGetGridSubsetsDynamic() throws Exception {
layerInfoTileLayer = new GeoServerTileLayer(layerInfo, defaults, gridSetBroker);

GridSubset subset = layerInfoTileLayer.getGridSubset("EPSG:4326");

assertThat(subset, instanceOf(DynamicGridSubset.class));

assertThat(subset, hasProperty("originalExtent", hasProperty("minX", closeTo(-180.0, 0.0000001))));

layerInfoTileLayer.removeGridSubset("EPSG:4326");
layerInfoTileLayer.addGridSubset(subset);

resource.setLatLonBoundingBox(
new ReferencedEnvelope(-90, -90, 0, 0, DefaultGeographicCRS.WGS84));
resource.setNativeBoundingBox(
new ReferencedEnvelope(-90, -90, 0, 0, DefaultGeographicCRS.WGS84));

GridSubset subset2 = layerInfoTileLayer.getGridSubset("EPSG:4326");

// the extent should be that of resource
assertThat(subset2, hasProperty("originalExtent", hasProperty("minX", closeTo(-90.0, 0.0000001))));
}

@Test
public void testGetGridSubsetsStatic() throws Exception {
layerInfoTileLayer = new GeoServerTileLayer(layerInfo, defaults, gridSetBroker);

GridSubset subset = layerInfoTileLayer.getGridSubset("EPSG:4326");

assertThat(subset, instanceOf(DynamicGridSubset.class));

assertThat(subset, hasProperty("originalExtent", hasProperty("minX", closeTo(-180.0, 0.0000001))));

layerInfoTileLayer.removeGridSubset("EPSG:4326");
layerInfoTileLayer.addGridSubset(new GridSubset(subset)); // Makes the dynamic extent static

resource.setLatLonBoundingBox(
new ReferencedEnvelope(-90, -90, 0, 0, DefaultGeographicCRS.WGS84));
resource.setNativeBoundingBox(
new ReferencedEnvelope(-90, -90, 0, 0, DefaultGeographicCRS.WGS84));

GridSubset subset2 = layerInfoTileLayer.getGridSubset("EPSG:4326");

// the extent should not change with that of resource
assertThat(subset2, hasProperty("originalExtent", hasProperty("minX", closeTo(-180.0, 0.0000001))));
}


@Test @Test
public void testGridSubsetBoundsClippedToTargetCrsAreaOfValidity() throws Exception { public void testGridSubsetBoundsClippedToTargetCrsAreaOfValidity() throws Exception {
Expand Down

0 comments on commit 5c54024

Please sign in to comment.