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

Map<String, GridSubset> grids = new HashMap<String, GridSubset>(2);
for (XMLGridSubset gridSubset : cachedGridSets) {
final String gridSetId = gridSubset.getGridSetName();
for (XMLGridSubset xmlGridSubset : cachedGridSets) {
final String gridSetId = xmlGridSubset.getGridSetName();
final GridSet gridSet = gridSetBroker.get(gridSetId);
if (gridSet == null) {
LOGGER.info("No GWC GridSet named '" + gridSetId + "' exists.");
continue;
}
BoundingBox extent = gridSubset.getExtent();
if (null == extent) {
BoundingBox extent = xmlGridSubset.getExtent();
boolean dynamic = Objects.isNull(extent);
if (dynamic) {
try {
SRS srs = gridSet.getSrs();
try {
Expand Down Expand Up @@ -912,9 +916,12 @@ private Map<String, GridSubset> getGrids(
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@
import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
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.notNullValue;
import static org.junit.Assert.assertThat;
Expand Down Expand Up @@ -40,6 +45,8 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;

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

private GWC mockGWC;

private FeatureTypeInfoImpl resource;

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

FeatureTypeInfoImpl resource = new FeatureTypeInfoImpl((Catalog) null);
resource = new FeatureTypeInfoImpl((Catalog) null);
resource.setStore(storeInfo);
resource.setId("mock-resource-info");
resource.setName("MockLayerInfoName");
Expand Down Expand Up @@ -433,6 +444,54 @@ public void testGetGridSubsets() throws Exception {
assertNotNull(gridSubsets);
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
public void testGridSubsetBoundsClippedToTargetCrsAreaOfValidity() throws Exception {
Expand Down

0 comments on commit 5c54024

Please sign in to comment.