private void renameTileLayer( final GeoServerTileLayerInfo tileLayerInfo, String oldLayerName, String newLayerName) { tileLayerInfo.setName(newLayerName); // notify the mediator of the rename so it changes the name of the layer in GWC without // affecting its caches GridSetBroker gridSetBroker = mediator.getGridSetBroker(); final GeoServerTileLayer oldTileLayer = (GeoServerTileLayer) mediator.getTileLayerByName(oldLayerName); checkState( null != oldTileLayer, "handleRename: old tile layer not found: '" + oldLayerName + "'. New name: '" + newLayerName + "'"); final GeoServerTileLayer modifiedTileLayer; mediator.rename(oldLayerName, newLayerName); }
/** * Returns the names of the styles for the layer, including the default style * * @param layerName */ private Set<String> getCachedStyles(final String layerName) { final TileLayer l = getTileLayerByName(layerName); Set<String> cachedStyles = new HashSet<String>(); String defaultStyle = l.getStyles(); if (defaultStyle != null) { cachedStyles.add(defaultStyle); } List<ParameterFilter> parameterFilters = l.getParameterFilters(); if (parameterFilters != null) { for (ParameterFilter pf : parameterFilters) { if (!"STYLES".equalsIgnoreCase(pf.getKey())) { continue; } cachedStyles.add(pf.getDefaultValue()); cachedStyles.addAll(pf.getLegalValues()); break; } } return cachedStyles; }
/** * Returns the names of the styles for the layer, including the default style * * @param layerName * @return */ private Set<String> getCachedStyles(final String layerName) { final TileLayer l = getTileLayerByName(layerName); Set<String> cachedStyles = new HashSet<String>(); String defaultStyle = l.getStyles(); if (defaultStyle != null) { cachedStyles.add(defaultStyle); } List<ParameterFilter> parameterFilters = l.getParameterFilters(); if (parameterFilters != null) { for (ParameterFilter pf : parameterFilters) { if (!"STYLES".equalsIgnoreCase(pf.getKey())) { continue; } cachedStyles.add(pf.getDefaultValue()); cachedStyles.addAll(pf.getLegalValues()); break; } } return cachedStyles; }
private String buildGetMap(final boolean directWMSIntegrationEndpoint, final String layerName, final String gridsetId, String styles) { final GWC gwc = GWC.get(); final TileLayer tileLayer = gwc.getTileLayerByName(layerName); return buildGetMap(directWMSIntegrationEndpoint, layerName, gridsetId, styles, tileLayer); }
TileLayer tileLayer = getTileLayerByName(layerName); tileLayer.acquireLayerLock(); try {
public CoordinateReferenceSystem getDeclaredCrs(final String geoServerTileLayerName) { GeoServerTileLayer layer = (GeoServerTileLayer) getTileLayerByName(geoServerTileLayerName); LayerInfo layerInfo = layer.getLayerInfo(); if (layerInfo != null) { return layerInfo.getResource().getCRS(); } LayerGroupInfo layerGroupInfo = layer.getLayerGroupInfo(); ReferencedEnvelope bounds = layerGroupInfo.getBounds(); return bounds.getCoordinateReferenceSystem(); }
public CoordinateReferenceSystem getDeclaredCrs(final String geoServerTileLayerName) { GeoServerTileLayer layer = (GeoServerTileLayer) getTileLayerByName(geoServerTileLayerName); LayerInfo layerInfo = layer.getLayerInfo(); if (layerInfo != null) { return layerInfo.getResource().getCRS(); } LayerGroupInfo layerGroupInfo = layer.getLayerGroupInfo(); ReferencedEnvelope bounds = layerGroupInfo.getBounds(); return bounds.getCoordinateReferenceSystem(); }
/** * Truncates the cache for the default style of the given layer * * @param layerName */ public void truncateByLayerDefaultStyle(final String layerName) { checkNotNull(layerName, "layerName can't be null"); log.fine("truncating '" + layerName + "' for default style"); final TileLayer layer = getTileLayerByName(layerName); final Set<String> gridSetIds = layer.getGridSubsets(); // all of them final List<MimeType> mimeTypes = layer.getMimeTypes(); // all of them final BoundingBox bounds = null; // all of them final Map<String, String> parameters = null; // only default style for (String gridSetId : gridSetIds) { GridSubset gridSubset = layer.getGridSubset(gridSetId); if (gridSubset == null) { // layer may no longer have this gridsubset, but we want to truncate any remaining // tiles GridSet gridSet = gridSetBroker.get(gridSetId); gridSubset = GridSubsetFactory.createGridSubSet(gridSet); } for (MimeType mime : mimeTypes) { String formatName = mime.getFormat(); truncate(layer, bounds, gridSubset, formatName, parameters); } } }
TileLayer tileLayer = getTileLayerByName(layerName); Lock lock = null; try {
public void testLayerInfoDefaultStyleChanged() throws Exception { final String oldName = "oldStyle"; final String newName = "newStyle"; StyleInfo oldStyle = mock(StyleInfo.class); when(oldStyle.getName()).thenReturn(oldName); StyleInfo newStyle = mock(StyleInfo.class); when(newStyle.getName()).thenReturn(newName); when(mockLayerInfo.getDefaultStyle()).thenReturn(newStyle); CatalogModifyEvent modifyEvent = mock(CatalogModifyEvent.class); when(modifyEvent.getSource()).thenReturn(mockLayerInfo); when(modifyEvent.getPropertyNames()).thenReturn(Arrays.asList("defaultStyle")); when(modifyEvent.getOldValues()).thenReturn(Collections.singletonList((Object) oldStyle)); when(modifyEvent.getNewValues()).thenReturn(Collections.singletonList((Object) newStyle)); GeoServerTileLayer tileLayer = mock(GeoServerTileLayer.class); when(mockMediator.getTileLayerByName(eq(PREFIXED_RESOURCE_NAME))).thenReturn(tileLayer); // the tile layer must exist on the layer metadata otherwise the event will be ignored GeoServerTileLayerInfo info = TileLayerInfoUtil.loadOrCreate(mockLayerInfo, GWCConfig.getOldDefaults()); when(tileLayer.getInfo()).thenReturn(info); when(mockMediator.hasTileLayer(same(mockLayerInfo))).thenReturn(true); when(mockMediator.getTileLayer(same(mockLayerInfo))).thenReturn(tileLayer); listener.handleModifyEvent(modifyEvent); CatalogPostModifyEvent postModifyEvent = mock(CatalogPostModifyEvent.class); when(postModifyEvent.getSource()).thenReturn(mockLayerInfo); listener.handlePostModifyEvent(postModifyEvent); verify(mockMediator).truncateByLayerAndStyle(eq(PREFIXED_RESOURCE_NAME), eq(oldName)); verify(mockMediator).save(any(GeoServerTileLayer.class)); }
.getTileLayerByName(oldLayerName);
when(mockMediator.getTileLayerByName(eq(oldGroupName))).thenReturn(tileLayer);
when(mockMediator.getTileLayerByName(eq(oldTileLayerName))).thenReturn(tileLayer);
when(mockMediator.getTileLayerByName(eq(oldPrefixedName))).thenReturn(tileLayer);
when(mockMediator.getTileLayer(same(mockLayerGroupInfo))).thenReturn(tileLayer); final String oldLayerName = tileLayerName(mockLayerGroupInfo); when(mockMediator.getTileLayerByName(eq(oldLayerName))).thenReturn(tileLayer);
TileLayer layer = GWC.get().getTileLayerByName("cite:Lakes"); layer.setBlobStoreId(storeId); GWC.get().save(layer); layer = GWC.get().getTileLayerByName("cite:Lakes"); assertThat(layer.getBlobStoreId(), is(updatedStoreId));
public void testDirectWMSIntegrationWithVirtualServicesHiddenLayer() throws Exception { /* * Nothing special needs to be done at the GWC integration level for this to work. The hard * work should already be done by WMSWorkspaceQualifier so that when the request hits GWC * the layer name is already qualified */ final GWC gwc = GWC.get(); gwc.getConfig().setDirectWMSIntegrationEnabled(true); final String qualifiedName = super.getLayerId(BASIC_POLYGONS); final String localName = BASIC_POLYGONS.getLocalPart(); final TileLayer tileLayer = gwc.getTileLayerByName(qualifiedName); assertNotNull(tileLayer); boolean directWMSIntegrationEndpoint = true; String request = MockData.CDF_PREFIX // asking /geoserver/cdf/wms? for cite:BasicPolygons + "/" + buildGetMap(directWMSIntegrationEndpoint, localName, "EPSG:4326", null, tileLayer) + "&tiled=true"; MockHttpServletResponse response = getAsServletResponse(request); assertEquals(200, response.getStatusCode()); assertTrue(response.getContentType(), response.getContentType().startsWith("application/vnd.ogc.se_xml")); assertTrue(response.getOutputStreamContent(), response.getOutputStreamContent() .contains("Could not find layer cdf:BasicPolygons")); }
public void testDirectWMSIntegrationWithVirtualServices() throws Exception { final GWC gwc = GWC.get(); gwc.getConfig().setDirectWMSIntegrationEnabled(true); final String qualifiedName = super.getLayerId(BASIC_POLYGONS); final String localName = BASIC_POLYGONS.getLocalPart(); final TileLayer tileLayer = gwc.getTileLayerByName(qualifiedName); assertNotNull(tileLayer); boolean directWMSIntegrationEndpoint = true; String request = MockData.CITE_PREFIX + "/" + buildGetMap(directWMSIntegrationEndpoint, localName, "EPSG:4326", null, tileLayer) + "&tiled=true"; MockHttpServletResponse response = getAsServletResponse(request); assertEquals(200, response.getStatusCode()); assertEquals("image/png", response.getContentType()); assertEquals(qualifiedName, response.getHeader("geowebcache-layer")); }
/** * See GEOS-5092, check server startup is not hurt by a tile layer out of sync (say someone * manually removed the GeoServer layer) */ public void testMissingGeoServerLayerAtStartUp() throws Exception { Catalog catalog = getCatalog(); GWC mediator = GWC.get(); final String layerName = getLayerId(BASIC_POLYGONS); LayerInfo layerInfo = catalog.getLayerByName(layerName); assertNotNull(layerInfo); TileLayer tileLayer = mediator.getTileLayerByName(layerName); assertNotNull(tileLayer); assertTrue(tileLayer.isEnabled()); MockData testData = getTestData(); testData.removeFeatureType(BASIC_POLYGONS); getGeoServer().reload(); assertNull(catalog.getLayerByName(layerName)); CatalogConfiguration config = GeoServerExtensions.bean(CatalogConfiguration.class); assertNull(config.getTileLayer(layerName)); try { mediator.getTileLayerByName(layerName); fail("Expected IAE"); } catch (IllegalArgumentException e) { assertTrue(true); } }
public void testDirectWMSIntegrationMaxAge() throws Exception { final GWC gwc = GWC.get(); gwc.getConfig().setDirectWMSIntegrationEnabled(true); final String layerName = BASIC_POLYGONS.getPrefix() + ":" + BASIC_POLYGONS.getLocalPart(); final String path = buildGetMap(true, layerName, "EPSG:4326", null) + "&tiled=true"; final String qualifiedName = super.getLayerId(BASIC_POLYGONS); final GeoServerTileLayer tileLayer = (GeoServerTileLayer) gwc.getTileLayerByName(qualifiedName); tileLayer.getLayerInfo().getResource().getMetadata().put("cachingEnabled", "true"); tileLayer.getLayerInfo().getResource().getMetadata().put("cacheAgeMax", 3456); MockHttpServletResponse response = getAsServletResponse(path); String cacheControl = response.getHeader("Cache-Control"); assertEquals("max-age=3456", cacheControl); assertNotNull(response.getHeader("Last-Modified")); tileLayer.getLayerInfo().getResource().getMetadata().put("cachingEnabled", "false"); response = getAsServletResponse(path); cacheControl = response.getHeader("Cache-Control"); assertEquals("no-cache", cacheControl); // make sure a boolean is handled, too - see comment in CachingWebMapService tileLayer.getLayerInfo().getResource().getMetadata().put("cachingEnabled", Boolean.FALSE); response = getAsServletResponse(path); cacheControl = response.getHeader("Cache-Control"); assertEquals("no-cache", cacheControl); }