throws GeoWebCacheException, IOException, OutsideCoverageException { MimeType mime = tile.getMimeType(); final List<MimeType> formats = getMimeTypes(); if (mime == null) { mime = formats.get(0); if (!formats.contains(mime)) { throw new IllegalArgumentException( mime.getFormat() + " is not a supported format for " + getName()); final GridSubset gridSubset = getGridSubset(tileGridSetId); if (gridSubset == null) { throw new IllegalArgumentException("Requested gridset not found: " + tileGridSetId); returnTile = getMetatilingReponse(tile, true, metaX, metaY); sendTileRequestedEvent(returnTile);
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); } } }
private static void truncate( final GeoServerTileLayer tileLayer, final String gridsetId, final Geometry geomInGridsetCrs, final TileBreeder breeder) { final List<MimeType> mimeTypes = tileLayer.getMimeTypes(); final Set<String> cachedStyles = getCachedStyles(tileLayer); final String defaultStyle = tileLayer.getStyles(); GridSubset gridSubset = tileLayer.getGridSubset(gridsetId); for (String style : cachedStyles) { Map<String, String> parameters; if (style.isEmpty() || style.equals(defaultStyle)) { parameters = null; } else { parameters = Collections.singletonMap("STYLES", style); } for (MimeType mime : mimeTypes) { truncate(breeder, tileLayer, gridSubset, mime, parameters, geomInGridsetCrs); } } }
private synchronized void checkGridSubsets() { if (this.subSets == null) { ReferencedEnvelope latLongBbox = getLatLonBbox(); try { this.subSets = getGrids(latLongBbox, gridSetBroker); } catch (ConfigurationException e) { String msg = "Can't create grids for '" + getName() + "': " + e.getMessage(); LOGGER.log(Level.WARNING, msg, e); setConfigErrorMessage(msg); } } }
LayerInfo layerInfo = getLayerInfo(); if (layerInfo != null) { return getLayerMaxAge(layerInfo); LayerGroupInfo layerGroupInfo = getLayerGroupInfo(); if (layerGroupInfo != null) { return getGroupMaxAge(layerGroupInfo); } else { if (LOGGER.isLoggable(Level.FINE)) {
/** * The default style name for the layer, as advertised by its backing {@link * LayerInfo#getDefaultStyle()}, or {@code null} if this tile layer is backed by a {@link * LayerGroupInfo}. * * <p>As the default style is always cached, its name is not stored as part of this tile layer's * {@link GeoServerTileLayerInfo}. Instead it's 'live' and retrieved from the current {@link * LayerInfo} every time this method is invoked. * * @see org.geowebcache.layer.TileLayer#getStyles() */ @Override public String getStyles() { LayerGroupInfo layerGroupInfo = getLayerGroupInfo(); if (layerGroupInfo != null) { // there's no such thing as default style for a layer group return null; } LayerInfo layerInfo = getLayerInfo(); StyleInfo defaultStyle = layerInfo.getDefaultStyle(); if (defaultStyle == null) { setConfigErrorMessage("Underlying GeoSever Layer has no default style"); return null; } return defaultStyle.prefixedName(); }
private ConveyorTile getMetatilingReponse(ConveyorTile tile, final boolean tryCache, final int metaX, final int metaY) throws GeoWebCacheException, IOException { final GridSubset gridSubset = getGridSubset(tile.getGridSetId()); final int zLevel = (int) tile.getTileIndex()[2]; tile.setMetaTileCacheOnly(!gridSubset.shouldCacheAtZoom(zLevel)); if (tryCache && tryCacheFetch(tile)) { return finalizeTile(tile); final GeoServerMetaTile metaTile = createMetaTile(tile, metaX, metaY); final GridLocObj metaGridLoc; metaGridLoc = META_GRID_LOCKS.unique(new GridLocObj(metaTile.getMetaGridPos(), 32)); synchronized (metaGridLoc) { if (tryCache && tryCacheFetch(tile)) { LOGGER.finest("--> " + Thread.currentThread().getName() + " returns cache hit for " + Arrays.toString(metaTile.getMetaGridPos())); RenderedImageMap map; try { map = dispatchGetMap(tile, metaTile); checkNotNull(map, "Did not obtain a WebMap from GeoServer's Dispatcher"); metaTile.setWebMap(map); saveTiles(metaTile, tile); } catch (Exception e) { throw new GeoWebCacheException("Problem communicating with GeoServer", e); return finalizeTile(tile);
private void testModifyLayer(GeoServerTileLayer orig) { GeoServerTileLayerInfo newState = TileLayerInfoUtil.create(defaults); newState.setId(orig.getInfo().getId()); newState.setName(orig.getInfo().getName()); assertFalse(orig.equals(newState)); final GeoServerTileLayer modified; if (orig.getLayerInfo() != null) { modified = new GeoServerTileLayer(orig.getLayerInfo(), gridSetBroker, newState); } else { modified = new GeoServerTileLayer(orig.getLayerGroupInfo(), gridSetBroker, newState); } assertEquals(orig.getInfo(), config.getTileLayer(orig.getName()).getInfo()); config.modifyLayer(modified); assertEquals(newState, config.getTileLayer(orig.getName()).getInfo()); final String origName = orig.getName(); modified.getInfo().setName("changed"); config.modifyLayer(modified); assertNull(config.getTileLayer(origName)); assertFalse(config.getTileLayerNames().contains(origName)); }
public void testTruncateByBounds() throws Exception { String layerName = tileLayer.getName(); ReferencedEnvelope bounds; BoundingBox layerBounds = tileLayer.getGridSubset("EPSG:4326").getGridSet() .getOriginalExtent(); int numGridsets = tileLayer.getGridSubsets().size(); int numFormats = tileLayer.getMimeTypes().size(); int numStyles = 1/* default */+ tileLayer.getInfo().cachedStyles().size(); final int expected = numGridsets * numFormats * numStyles; verify(tileBreeder, times(expected)).dispatchTasks(any(GWCTask[].class));
when(tld.layerExists(eq(layerName))).thenReturn(true); when(tld.getTileLayer(eq(layerName))).thenReturn(tileLayer); when(tileLayer.getName()).thenReturn(layerName); when(tileLayer.isEnabled()).thenReturn(true); when(tileLayer.getMimeTypes()).thenReturn(ImmutableList.of(mimeType1, mimeType2)); bySrs.put(gridSet.getSrs(), gridSubSet); when(tileLayer.getGridSubset(eq(gsetName))).thenReturn(gridSubSet); when(tileLayer.getGridSubsetsForSRS(eq(srs))).thenReturn(list); when(tileLayer.getGridSubsets()).thenReturn(subsets.keySet()); assertTrue(tileLayer.getGridSubsets().contains(gsetName)); assertNotNull(tileLayer.getGridSubset(gsetName));
final ObjectId newCommit = newRef.isPresent() ? newRef.get().getObjectId() : ObjectId.NULL; final String tileLayerName = tileLayer.getName(); final String layerTreeName = tileLayer.getLayerInfo().getResource().getNativeName(); throw Throwables.propagate(e); final Set<String> gridSubsets = tileLayer.getGridSubsets(); LayerInfo layerInfo = tileLayer.getLayerInfo(); ResourceInfo resource = layerInfo.getResource(); final CoordinateReferenceSystem sourceCrs; GridSubset gridSubset = tileLayer.getGridSubset(gridsetId); final CoordinateReferenceSystem gridSetCrs = getGridsetCrs(gridSubset);
final GridSubset gridSubset = getGridSubset(gridSetId); params.put("VERSION", "1.1.1"); params.put("REQUEST", "GetMap"); params.put("LAYERS", getName()); params.put("SRS", srs); params.put("FORMAT", format); filteredParams = getDefaultParameterFilters();
wmsParams.put("VERSION", "1.1.1"); wmsParams.put("REQUEST", "GetFeatureInfo"); wmsParams.put("LAYERS", getName()); wmsParams.put("STYLES", ""); wmsParams.put("QUERY_LAYERS", getName()); MimeType mimeType = convTile.getMimeType(); if (mimeType == null) { mimeType = getMimeTypes().get(0); fullParameters = getDefaultParameterFilters();
if (getLayerInfo() != null) { nativeBounds = getLayerInfo().getResource().boundingBox(); } catch (Exception e) { throw new RuntimeException(e); nativeBounds = getLayerGroupInfo().getBounds(); checkState(nativeBounds != null, getName(), " has no native bounds set");
/** * Returns the tile layers that refer to the given style, either as the tile layer's {@link * GeoServerTileLayer#getStyles() default style} or one of the {@link * GeoServerTileLayerInfoImpl#cachedStyles() cached styles}. * * <p>The result may be different from {@link #getLayerInfosFor(StyleInfo)} and {@link * #getLayerGroupsFor(StyleInfo)} as the {@link GeoServerTileLayerInfoImpl}'s backing each * {@link GeoServerTileLayer} may have assigned a subset of the layerinfo styles for caching. */ public List<GeoServerTileLayer> getTileLayersForStyle(final String styleName) { Iterable<GeoServerTileLayer> tileLayers = getGeoServerTileLayers(); List<GeoServerTileLayer> affected = new ArrayList<GeoServerTileLayer>(); for (GeoServerTileLayer tl : tileLayers) { try { GeoServerTileLayerInfo info = tl.getInfo(); String defaultStyle = tl.getStyles(); // may be null if backed by a LayerGroupInfo Set<String> cachedStyles = info.cachedStyles(); if (styleName.equals(defaultStyle) || cachedStyles.contains(styleName)) { affected.add(tl); } } catch (Exception e) { log.log(Level.SEVERE, "Failed to retrieve style info for layer" + tl.getName(), e); } } return affected; }
public boolean isQueryable(final GeoServerTileLayer geoServerTileLayer) { WMS wmsMediator = WMS.get(); LayerInfo layerInfo = geoServerTileLayer.getLayerInfo(); if (layerInfo != null) { return wmsMediator.isQueryable(layerInfo); } LayerGroupInfo lgi = geoServerTileLayer.getLayerGroupInfo(); return wmsMediator.isQueryable(lgi); }
checkArgument(canSave(tl), "Can't save TileLayer of type ", tl.getClass()); GeoServerTileLayer tileLayer = (GeoServerTileLayer) tl; checkNotNull(tileLayer.getInfo(), "GeoServerTileLayerInfo is null"); checkNotNull(tileLayer.getInfo().getId(), "id is null"); checkNotNull(tileLayer.getInfo().getName(), "name is null"); GeoServerTileLayerInfo info = tileLayer.getInfo(); LayerInfo layerInfo = tileLayer.getLayerInfo(); if(layerInfo!=null && !isLayerExposable(layerInfo)) { LOGGER.warning("Requested layer " + layerInfo.getName() + " has no geometry. Won't create TileLayer");
return false; if (getConfigErrorMessage() != null) { if (LOGGER.isLoggable(Level.FINEST)) { LOGGER.finest("Layer " + getName() + "is not enabled due to config error: " + getConfigErrorMessage()); LayerInfo layerInfo = getLayerInfo(); if (layerInfo != null) { geoserverLayerEnabled = layerInfo.enabled();
public void testEnabled() { layerInfo.setEnabled(true); layerInfoTileLayer = new GeoServerTileLayer(layerInfo, defaults, gridSetBroker); assertTrue(layerInfoTileLayer.isEnabled()); layerInfo.setEnabled(false); layerInfoTileLayer = new GeoServerTileLayer(layerInfo, defaults, gridSetBroker); assertFalse(layerInfoTileLayer.isEnabled()); layerInfo.setEnabled(true); layerInfoTileLayer.setEnabled(true); assertTrue(layerInfoTileLayer.isEnabled()); assertTrue(layerInfoTileLayer.getInfo().isEnabled()); layerInfoTileLayer.setConfigErrorMessage("fake error message"); assertFalse(layerInfoTileLayer.isEnabled()); layerInfoTileLayer.setConfigErrorMessage(null); layerInfoTileLayer.setEnabled(false); assertFalse(layerInfoTileLayer.isEnabled()); assertFalse(layerInfoTileLayer.getInfo().isEnabled()); layerGroupInfoTileLayer = new GeoServerTileLayer(layerGroup, defaults, gridSetBroker); assertTrue(layerGroupInfoTileLayer.isEnabled()); }
if (getLayerInfo() == null) { LayerGroupInfo groupInfo = getLayerGroupInfo(); try { ReferencedEnvelope bounds = groupInfo.getBounds(); ResourceInfo resourceInfo = getResourceInfo(); latLongBbox = resourceInfo.getLatLonBoundingBox(); if (null == latLongBbox) {