/** * @see org.geoserver.catalog.event.CatalogListener#handleModifyEvent(org.geoserver.catalog.event.CatalogModifyEvent) * @see #handlePostModifyEvent */ public void handleModifyEvent(CatalogModifyEvent event) throws CatalogException { CatalogInfo source = event.getSource(); if (source instanceof LayerInfo || source instanceof LayerGroupInfo || source instanceof FeatureTypeInfo || source instanceof CoverageInfo || source instanceof WMSLayerInfo) { PRE_MODIFY_EVENT.set(event); if (mediator.hasTileLayer(source)) { try { GeoServerTileLayer tileLayer = mediator.getTileLayer(source); GeoServerTileLayerInfo tileLayerInfo = tileLayer.getInfo(); PRE_MODIFY_TILELAYER.set(tileLayerInfo); } catch (RuntimeException e) { log.info("Ignoring misconfigured tile layer info for " + source); } } } }
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); }
/** * @see org.geowebcache.layer.TileLayer#isQueryable() * @see WMS#isQueryable(LayerGroupInfo) * @see WMS#isQueryable(LayerInfo) */ @Override public boolean isQueryable() { boolean queryable = GWC.get().isQueryable(this); return queryable; }
/** * LayerGroupInfo has been created, add a matching {@link GeoServerTileLayer} * * @see CatalogLayerEventListener#handleAddEvent * @see GWC#add(GeoServerTileLayer) */ public void createTileLayer(LayerGroupInfo lgi) { GWCConfig defaults = mediator.getConfig(); GridSetBroker gridSetBroker = mediator.getGridSetBroker(); GeoServerTileLayer tileLayer = new GeoServerTileLayer(lgi, defaults, gridSetBroker); mediator.add(tileLayer); }
@Override public void proxyRequest(ConveyorTile tile) throws GeoWebCacheException { try { GWC.get().proxyOwsRequest(tile); } catch (Exception e) { throw new GeoWebCacheException("Failed to cascade request", e); } }
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)); }
checkArgument(equal(oldInfo.getId(), newInfo.getId())); final GWC mediator = GWC.get(); mediator.layerRenamed(oldLayerName, layerName); removedGridSets.removeAll(newGridSubsetNames); for (String removedGridset : removedGridSets) { mediator.deleteCacheByGridSetId(layerName, removedGridset); String gridSetName = null; BoundingBox bounds = null; mediator.truncate(layerName, styleName, gridSetName, bounds, removedFormat); oldStyles.removeAll(newStyles); for (String removedStyle : oldStyles) { mediator.truncateByLayerAndStyle(layerName, removedStyle);
final String layerName = tileLayerName(li); + " to " + defaultStyle); mediator.truncateByLayerDefaultStyle(layerName); + layerName + " as it's no longer one of the layer's styles"); mediator.truncateByLayerAndStyle(layerName, oldCachedStyle); GridSetBroker gridSetBroker = mediator.getGridSetBroker(); GeoServerTileLayer tileLayer = new GeoServerTileLayer(li, gridSetBroker, tileLayerInfo); mediator.save(tileLayer); List<LayerGroupInfo> groups = catalog.getLayerGroups(); for (LayerGroupInfo lg : groups) { GeoServerTileLayer tileLayer = mediator.getTileLayer(lg); if (tileLayer != null) { LayerGroupHelper helper = new LayerGroupHelper(lg); GridSetBroker gridSetBroker = mediator.getGridSetBroker(); GeoServerTileLayerInfo groupTileLayerInfo = tileLayer.getInfo(); GeoServerTileLayer newTileLayer = new GeoServerTileLayer(lg, gridSetBroker, groupTileLayerInfo); mediator.save(newTileLayer); mediator.truncate(groupTileLayerInfo.getName());
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 * org.geoserver.catalog.event.CatalogListener#handleRemoveEvent(org.geoserver.catalog.event.CatalogRemoveEvent) * @see GWC#removeTileLayers(List) */ public void handleRemoveEvent(CatalogRemoveEvent event) throws CatalogException { CatalogInfo obj = event.getSource(); if (!(obj instanceof LayerInfo || obj instanceof LayerGroupInfo)) { return; } if (!mediator.hasTileLayer(obj)) { return; } String prefixedName = null; if (obj instanceof LayerGroupInfo) { LayerGroupInfo lgInfo = (LayerGroupInfo) obj; prefixedName = tileLayerName(lgInfo); } else if (obj instanceof LayerInfo) { LayerInfo layerInfo = (LayerInfo) obj; prefixedName = tileLayerName(layerInfo); } if (null != prefixedName) { // notify the layer has been removed mediator.removeTileLayers(Arrays.asList(prefixedName)); } }
id.set(originalConfiguration, storeId); GWC.get().addBlobStore(originalConfiguration); 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)); GWC.get().removeBlobStores(Collections.singleton(updatedStoreId));
private RenderedImageMap dispatchGetMap(final ConveyorTile tile, final MetaTile metaTile) throws Exception { Map<String, String> params = buildGetMap(tile, metaTile); WebMap map; try { HttpServletRequest actualRequest = tile.servletReq; Cookie[] cookies = actualRequest == null ? null : actualRequest.getCookies(); GWC.get().dispatchOwsRequest(params, cookies); map = WEB_MAP.get(); if (!(map instanceof RenderedImageMap)) { throw new IllegalStateException("Expected: RenderedImageMap, got " + map); } } finally { WEB_MAP.remove(); } return (RenderedImageMap) map; }
newLayerName = tileLayerName((LayerGroupInfo) source); GridSetBroker gridSetBroker = mediator.getGridSetBroker(); .getTileLayerByName(oldLayerName); modifiedTileLayer = new GeoServerTileLayer(layerGroup, gridSetBroker, tileLayerInfo); mediator.save(modifiedTileLayer);
public void testLayerGroupInfoLayersChanged() throws Exception { CatalogModifyEvent modifyEvent = mock(CatalogModifyEvent.class); when(modifyEvent.getSource()).thenReturn(mockLayerGroupInfo); when(modifyEvent.getPropertyNames()).thenReturn(Arrays.asList("layers")); List<LayerInfo> oldLayers = Collections.emptyList(); List<LayerInfo> newLayers = Collections.singletonList(mockLayerInfo); when(modifyEvent.getOldValues()).thenReturn(Collections.singletonList((Object) oldLayers)); when(modifyEvent.getNewValues()).thenReturn(Collections.singletonList((Object) newLayers)); // the tile layer must exist otherwise the event will be ignored GeoServerTileLayerInfo tileLayerInfo = TileLayerInfoUtil.loadOrCreate(mockLayerGroupInfo, mockMediator.getConfig()); GridSetBroker gridsets = new GridSetBroker(true, true); GeoServerTileLayer tileLayer = new GeoServerTileLayer(mockLayerGroupInfo, gridsets, tileLayerInfo); when(mockMediator.hasTileLayer(same(mockLayerGroupInfo))).thenReturn(true); when(mockMediator.getTileLayer(same(mockLayerGroupInfo))).thenReturn(tileLayer); listener.handleModifyEvent(modifyEvent); CatalogPostModifyEvent postModifyEvent = mock(CatalogPostModifyEvent.class); when(postModifyEvent.getSource()).thenReturn(mockLayerGroupInfo); listener.handlePostModifyEvent(postModifyEvent); verify(mockMediator).truncate(eq(LAYER_GROUP_NAME)); }
final String layerName = tileLayerName(li); log.info("Truncating default style for layer " + layerName + ", as it changed from " + oldStyleName + " to " + defaultStyle); mediator.truncateByLayerAndStyle(layerName, oldStyleName); log.info("Truncating cached style " + oldCachedStyle + " of layer " + layerName + " as it's no longer one of the layer's styles"); mediator.truncateByLayerAndStyle(layerName, oldCachedStyle); GridSetBroker gridSetBroker = mediator.getGridSetBroker(); GeoServerTileLayer tileLayer = new GeoServerTileLayer(li, gridSetBroker, tileLayerInfo); mediator.save(tileLayer);
private void handleStyleRenamed(final String oldStyleName, final String newStyleName) { if (oldStyleName.equals(newStyleName)) { return; } List<GeoServerTileLayer> affectedLayers; affectedLayers = mediator.getTileLayersForStyle(oldStyleName); for (GeoServerTileLayer tl : affectedLayers) { LayerInfo layerInfo = tl.getLayerInfo(); if (layerInfo == null) { // no extra styles for layer groups continue; } GeoServerTileLayerInfo info = tl.getInfo(); ImmutableSet<String> styleNames = info.cachedStyles(); if (styleNames.contains(oldStyleName)) { tl.resetParameterFilters(); // pity, we don't have a way to just rename a style in GWC mediator.truncateByLayerAndStyle(tl.getName(), oldStyleName); Set<String> newStyles = new HashSet<String>(styleNames); newStyles.remove(oldStyleName); newStyles.add(newStyleName); String defaultStyle = layerInfo.getDefaultStyle() == null ? null : layerInfo.getDefaultStyle().prefixedName(); TileLayerInfoUtil.setCachedStyles(info, defaultStyle, newStyles); mediator.save(tl); } } }
checkArgument(saneConfig.isSane()); final Catalog catalog = getCatalog(); for (String name : catalogLayerNames) { checkArgument(!tileLayerExists(name), "Can't auto configure Layer, a tile layer named '", name, "' already exists."); add(tileLayer); } else { log.warning("Requested layer " + name + " does not exist. Won't create TileLayer");
public synchronized void removeGridSets(final Set<String> gridsetIds) throws IOException { checkNotNull(gridsetIds); final Set<String> affectedLayers = getLayerNamesForGridSets(gridsetIds); TileLayer tileLayer = getTileLayerByName(layerName); tileLayer.acquireLayerLock(); try { if (tileLayer.getGridSubsets().contains(gridSetId)) { tileLayer.removeGridSubset(gridSetId); deleteCacheByGridSetId(layerName, gridSetId);
NamespaceInfo namespace; if (namespaceURI == null || XMLConstants.DEFAULT_NS_PREFIX.equals(namespaceURI)) { namespace = getCatalog().getDefaultNamespace(); } else { namespace = getCatalog().getNamespaceByURI(namespaceURI); final FeatureTypeInfo typeInfo = getCatalog().getFeatureTypeByName(namespace, typeName); final List<LayerInfo> layers = getCatalog().getLayers(typeInfo); final String tileLayerName = tileLayerName(layer); if (tileLayerExists(tileLayerName)) { affectedLayers.add(tileLayerName); for (LayerGroupInfo lgi : getLayerGroups()) { final String tileLayerName = tileLayerName(lgi); if (!tileLayerExists(tileLayerName)) { continue;