/** * @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 void handleRename( final GeoServerTileLayerInfo tileLayerInfo, final CatalogInfo source, final List<String> changedProperties, final List<Object> oldValues, final List<Object> newValues) { final int nameIndex = changedProperties.indexOf("name"); final int namespaceIndex = changedProperties.indexOf("namespace"); String oldLayerName; String newLayerName; if (source instanceof ResourceInfo) { // covers LayerInfo, CoverageInfo, and WMSLayerInfo // must cover prefix:name final ResourceInfo resourceInfo = (ResourceInfo) source; final NamespaceInfo currNamespace = resourceInfo.getNamespace(); final NamespaceInfo oldNamespace; if (namespaceIndex > -1) { // namespace changed oldNamespace = (NamespaceInfo) oldValues.get(namespaceIndex); } else { oldNamespace = currNamespace; } newLayerName = resourceInfo.prefixedName(); if (nameIndex > -1) { oldLayerName = (String) oldValues.get(nameIndex); } else { oldLayerName = resourceInfo.getName(); } oldLayerName = oldNamespace.getPrefix() + ":" + oldLayerName; } else { // it's a layer group, no need to worry about namespace oldLayerName = tileLayerInfo.getName(); newLayerName = tileLayerName((LayerGroupInfo) source); } if (!oldLayerName.equals(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, "hanldeRename: old tile layer not found: '" + oldLayerName + "'. New name: '" + newLayerName + "'"); final GeoServerTileLayer modifiedTileLayer; if (oldTileLayer.getLayerInfo() != null) { LayerInfo layerInfo = oldTileLayer.getLayerInfo(); modifiedTileLayer = new GeoServerTileLayer(layerInfo, gridSetBroker, tileLayerInfo); } else { LayerGroupInfo layerGroup = oldTileLayer.getLayerGroupInfo(); modifiedTileLayer = new GeoServerTileLayer(layerGroup, gridSetBroker, tileLayerInfo); } mediator.save(modifiedTileLayer); } }