public SRS getSRS() { return this.gridSubset.getSRS(); }
CoordinateReferenceSystem getCRSForGridset(GridSubset gridSubset) throws NoSuchAuthorityCodeException, FactoryException { return CRS.decode(gridSubset.getSRS().toString()); }
/** * Returns an immutable list of all the layer's {@link GridSubset} whose {@link GridSet} has a * SRS equal to {@code srs} (may be an alias), or the empty list of none matches. */ public List<GridSubset> getGridSubsetsForSRS(SRS srs) { List<GridSubset> matches = Collections.emptyList(); for (String gridSet : getGridSubsets()) { GridSubset gridSubset = getGridSubset(gridSet); SRS gridSetSRS = gridSubset.getSRS(); if (gridSetSRS.equals(srs)) { if (matches.isEmpty()) { matches = new ArrayList<GridSubset>(2); } matches.add(gridSubset); } } return matches.isEmpty() ? matches : Collections.unmodifiableList(matches); }
private void capabilityVendorSpecificTileset(StringBuilder str, TileLayer layer, GridSubset grid, String formatStr, String styleName) throws GeoWebCacheException { String srsStr = grid.getSRS().toString(); StringBuilder resolutionsStr = new StringBuilder(); double[] res = grid.getResolutions(); for (int i = 0; i < res.length; i++) { resolutionsStr.append(Double.toString(res[i]) + " "); } String[] bs = boundsPrep(grid.getCoverageBestFitBounds()); str.append(" <TileSet>\n"); str.append(" <SRS>" + srsStr + "</SRS>\n"); str.append(" <BoundingBox SRS=\"" + srsStr + "\" minx=\"" + bs[0] + "\" miny=\"" + bs[1] + "\" maxx=\"" + bs[2] + "\" maxy=\"" + bs[3] + "\" />\n"); str.append(" <Resolutions>" + resolutionsStr.toString() + "</Resolutions>\n"); str.append(" <Width>" + grid.getTileWidth() + "</Width>\n"); str.append(" <Height>" + grid.getTileHeight() + "</Height>\n"); str.append(" <Format>" + formatStr + "</Format>\n"); str.append(" <Layers>" + layer.getName() + "</Layers>\n"); str.append(" <Styles>").append(ServletUtils.URLEncode(styleName)) .append("</Styles>\n"); str.append(" </TileSet>\n"); }
protected Map<String, String> getWMSParams() throws GeoWebCacheException { Map<String, String> params = wmsLayer.getWMSRequestTemplate(this.getResponseFormat(), WMSLayer.RequestType.MAP); // Fill in the blanks String format; if (formatModifier == null) { format = responseFormat.getFormat(); } else { MimeType requestFormat = formatModifier.getRequestFormat(); format = requestFormat.getFormat(); } params.put("FORMAT", format); params.put("SRS", wmsLayer.backendSRSOverride(gridSubset.getSRS())); params.put("WIDTH", String.valueOf(getMetaTileWidth())); params.put("HEIGHT", String.valueOf(getMetaTileHeight())); params.put("BBOX", String.valueOf(getMetaTileBounds())); params.putAll(fullParameters); return params; }
String srs = gridSubset.getSRS().toString(); String format = mimeType.getFormat(); BoundingBox bbox = metaTile.getMetaTileBounds();
/** * This method is deprecated, as a layer may be configured for more than one gridset with the * same SRS. * * @deprecated use {@link #getGridSubsetsForSRS(SRS)} in combination with {@link * GridUtil#findBestMatchingGrid} instead */ public GridSubset getGridSubsetForSRS(SRS srs) { for (String gridSet : getGridSubsets()) { GridSubset gridSubset = getGridSubset(gridSet); SRS gridSetSRS = gridSubset.getSRS(); if (gridSetSRS.equals(srs)) { return gridSubset; } } return null; }
wmsParams.put("SRS", layer.backendSRSOverride(gridSubset.getSRS())); wmsParams.put("HEIGHT", String.valueOf(height)); wmsParams.put("WIDTH", String.valueOf(width));
HttpServletRequest fuserRequest( TileLayer layer, GridSubset gridSubset, BoundingBox bounds, int width, int height) { MockHttpServletRequest req = new MockHttpServletRequest(); Map<String, String> params = new HashMap<>(); params.put("layers", layer.getId()); params.put("srs", gridSubset.getSRS().toString()); params.put("format", "image/png"); params.put("bbox", bounds.toString()); params.put("width", Integer.toString(width)); params.put("height", Integer.toString(height)); req.setParameters(params); return req; }
/** * Apply security filters to a conveyor. * * @param tile * @throws SecurityException if any of the filter throw it */ public void checkSecurity(final ConveyorTile tile) throws SecurityException, GeoWebCacheException { final TileLayer layer = tile.getLayer(); final GridSubset gridSubset = tile.getGridSubset(); final BoundingBox bounds; final SRS srs; if (Objects.nonNull(gridSubset)) { bounds = gridSubset.boundsFromIndex(tile.getTileIndex()); srs = gridSubset.getSRS(); } else { bounds = null; srs = null; } checkSecurity(layer, bounds, srs); }
public void makeRequest(ConveyorTile tile, Resource target) throws GeoWebCacheException { WMSLayer layer = (WMSLayer) tile.getLayer(); GridSubset gridSubset = layer.getGridSubset(tile.getGridSetId()); Map<String, String> wmsParams = layer.getWMSRequestTemplate(tile.getMimeType(), WMSLayer.RequestType.MAP); wmsParams.put("FORMAT", tile.getMimeType().getFormat()); wmsParams.put("SRS", layer.backendSRSOverride(gridSubset.getSRS())); wmsParams.put("HEIGHT", String.valueOf(gridSubset.getTileHeight())); wmsParams.put("WIDTH", String.valueOf(gridSubset.getTileWidth())); // strBuilder.append("&TILED=").append(requestTiled); BoundingBox bbox = gridSubset.boundsFromIndex(tile.getTileIndex()); wmsParams.put("BBOX", bbox.toString()); Map<String, String> filteringParameters = tile.getFilteringParameters(); if (filteringParameters.isEmpty()) { filteringParameters = layer.getDefaultParameterFilters(); } wmsParams.putAll(filteringParameters); if (tile.getMimeType() == XMLMime.kml) { // This is a hack for GeoServer to produce regionated KML, // but it is unlikely to do much harm, especially since nobody // else appears to produce regionated KML at this point wmsParams.put("format_options", "mode:superoverlay;overlaymode:auto"); } MimeType mimeType = tile.getMimeType(); makeRequest(tile, layer, wmsParams, mimeType, target); }
private String buildGetMap(final boolean directWMSIntegrationEndpoint, final String queryLayerName, final String gridsetId, String styles, final TileLayer tileLayer) { final GridSubset gridSubset = tileLayer.getGridSubset(gridsetId); long[] coverage = gridSubset.getCoverage(0); long[] tileIndex = { coverage[0], coverage[1], coverage[4] }; BoundingBox bounds = gridSubset.boundsFromIndex(tileIndex); final String endpoint = directWMSIntegrationEndpoint ? "wms" : "gwc/service/wms"; StringBuilder sb = new StringBuilder(endpoint); sb.append("?service=WMS&request=GetMap&version=1.1.1&format=image/png"); sb.append("&layers=").append(queryLayerName); sb.append("&srs=").append(gridSubset.getSRS()); sb.append("&width=").append(gridSubset.getGridSet().getTileWidth()); sb.append("&height=").append(gridSubset.getGridSet().getTileHeight()); sb.append("&styles="); if (styles != null) { sb.append(styles); } sb.append("&bbox=").append(bounds.toString()); return sb.toString(); }
throws GeoWebCacheException, IOException { String srsStr = grid.getSRS().toString(); StringBuilder resolutionsStr = new StringBuilder(); double[] res = grid.getResolutions();
@Test public void testNoFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); EasyMock.replay(conv, layer, subset, srs); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs); } }
private void setCacheMetadataHeaders(RawMap map, ConveyorTile cachedTile, TileLayer layer) { long[] tileIndex = cachedTile.getTileIndex(); CacheResult cacheResult = cachedTile.getCacheResult(); GridSubset gridSubset = layer.getGridSubset(cachedTile.getGridSetId()); BoundingBox tileBounds = gridSubset.boundsFromIndex(tileIndex); String cacheResultHeader = cacheResult == null ? "UNKNOWN" : cacheResult.toString(); map.setResponseHeader("geowebcache-layer", layer.getName()); map.setResponseHeader("geowebcache-cache-result", cacheResultHeader); map.setResponseHeader("geowebcache-tile-index", Arrays.toString(tileIndex)); map.setResponseHeader("geowebcache-tile-bounds", tileBounds.toString()); map.setResponseHeader("geowebcache-gridset", gridSubset.getName()); map.setResponseHeader("geowebcache-crs", gridSubset.getSRS().toString()); }
@Test public void testOneFilterFail() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter = EasyMock.createMock("filter", SecurityFilter.class); extensions.addBean("testSecurityFilter", filter, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().andThrow(new SecurityException()).once(); EasyMock.replay(conv, layer, subset, srs, filter); exception.expect(instanceOf(SecurityException.class)); try { secDispatcher.checkSecurity(conv); } finally { EasyMock.verify(conv, layer, subset, srs, filter); } }
@Test public void testOneFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter = EasyMock.createMock("filter", SecurityFilter.class); extensions.addBean("testSecurityFilter", filter, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); EasyMock.replay(conv, layer, subset, srs, filter); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs, filter); }
private void setCacheMetadataHeaders(RawMap map, ConveyorTile cachedTile, TileLayer layer) { long[] tileIndex = cachedTile.getTileIndex(); CacheResult cacheResult = cachedTile.getCacheResult(); GridSubset gridSubset = layer.getGridSubset(cachedTile.getGridSetId()); BoundingBox tileBounds = gridSubset.boundsFromIndex(tileIndex); String cacheResultHeader = cacheResult == null ? "UNKNOWN" : cacheResult.toString(); map.setResponseHeader("geowebcache-layer", layer.getName()); map.setResponseHeader("geowebcache-cache-result", cacheResultHeader); map.setResponseHeader("geowebcache-tile-index", Arrays.toString(tileIndex)); map.setResponseHeader("geowebcache-tile-bounds", tileBounds.toString()); map.setResponseHeader("geowebcache-gridset", gridSubset.getName()); map.setResponseHeader("geowebcache-crs", gridSubset.getSRS().toString()); }
@Test public void testTwoFilterPass() throws Exception { SecurityDispatcher secDispatcher = new SecurityDispatcher(); secDispatcher.setApplicationContext(extensions.getMockContext()); ConveyorTile conv = EasyMock.createMock("conv", ConveyorTile.class); TileLayer layer = EasyMock.createMock("layer", TileLayer.class); GridSubset subset = EasyMock.createMock("subset", GridSubset.class); SRS srs = EasyMock.createMock("srs", SRS.class); BoundingBox bbox = new BoundingBox(10, 20, 30, 40); SecurityFilter filter1 = EasyMock.createMock("filter1", SecurityFilter.class); SecurityFilter filter2 = EasyMock.createMock("filter2", SecurityFilter.class); extensions.addBean("testSecurityFilter1", filter1, SecurityFilter.class); extensions.addBean("testSecurityFilter2", filter2, SecurityFilter.class); EasyMock.expect(conv.getLayer()).andStubReturn(layer); EasyMock.expect(conv.getGridSubset()).andStubReturn(subset); EasyMock.expect(conv.getTileIndex()).andStubReturn(new long[] {1, 2, 3}); EasyMock.expect(subset.boundsFromIndex(EasyMock.aryEq(new long[] {1, 2, 3}))) .andStubReturn(bbox); EasyMock.expect(subset.getSRS()).andStubReturn(srs); filter1.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); filter2.checkSecurity(layer, bbox, srs); EasyMock.expectLastCall().once(); EasyMock.replay(conv, layer, subset, srs, filter1, filter2); secDispatcher.checkSecurity(conv); EasyMock.verify(conv, layer, subset, srs, filter1, filter2); }
protected void tileMapsForLayer( XMLBuilder xml, TileLayer layer, String baseUrl, String contextPath) throws IOException { for (String gridSetId : layer.getGridSubsets()) { GridSubset gridSub = layer.getGridSubset(gridSetId); for (MimeType mimeType : layer.getMimeTypes()) { // GridSubset gridSub = iter.next(); xml.indentElement("TileMap") .attribute("title", tileMapTitle(layer)) .attribute("srs", gridSub.getSRS().toString()) .attribute("profile", profileForGridSet(gridSub.getGridSet())) .attribute( "href", tileMapUrl(layer, gridSub, mimeType, baseUrl, contextPath)) .endElement(); } } }