/** * Creates a cached tile layer from the given Layer Group * * @param groupInfo the layer group to cache * @param defaults default configuration */ public static GeoServerTileLayerInfoImpl loadOrCreate( final LayerGroupInfo groupInfo, final GWCConfig defaults) { GeoServerTileLayerInfoImpl info = LegacyTileLayerInfoLoader.load(groupInfo); if (info == null) { info = create(defaults); checkAutomaticStyles(groupInfo, info); } info.setName(tileLayerName(groupInfo)); info.setId(groupInfo.getId()); return info; }
public static GeoServerTileLayerInfo loadOrCreate(final CatalogInfo info, final GWCConfig defaults) { if (info instanceof LayerInfo) { return loadOrCreate((LayerInfo) info, defaults); } if (info instanceof LayerGroupInfo) { return loadOrCreate((LayerGroupInfo) info, defaults); } throw new IllegalArgumentException(); }
public static void setCachedStyles(GeoServerTileLayerInfo info, String defaultStyle, Set<String> cachedStyles) { updateStringParameterFilter(info, "STYLES", true, defaultStyle, cachedStyles); }
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); } } }
public void testCreateLayerInfoAutoCacheStyles() { GeoServerTileLayerInfo info = defaultVectorInfo; info.setAutoCacheStyles(true); defaults.setCacheNonDefaultStyles(true); LayerInfoImpl layer = mockLayer("testLayer", new String[]{"style1", "style2"}, LayerInfoImpl.Type.RASTER); GeoServerTileLayerInfo actual; actual = TileLayerInfoUtil.loadOrCreate(layer, defaults); TileLayerInfoUtil.setCachedStyles(info, "default", ImmutableSet.of("style1", "style2")); assertEquals(info.cachedStyles(), actual.cachedStyles()); layer.setDefaultStyle(null); TileLayerInfoUtil.setCachedStyles(info, "", ImmutableSet.of("style1", "style2")); actual = TileLayerInfoUtil.loadOrCreate(layer, defaults); assertEquals(ImmutableSet.of("style1", "style2"), actual.cachedStyles()); }
public void testCreateLayerGroupInfo() { LayerGroupInfoImpl group = mockGroup("testGroup", mockLayer("testLayer",new String[]{}, LayerInfoImpl.Type.RASTER)); defaults.getDefaultOtherCacheFormats().clear(); defaults.getDefaultOtherCacheFormats().add("image/png8"); defaults.getDefaultOtherCacheFormats().add("image/jpeg"); GeoServerTileLayerInfo expected = TileLayerInfoUtil.create(defaults); expected.setId(group.getId()); expected.setName(GWC.tileLayerName(group)); GeoServerTileLayerInfo info = TileLayerInfoUtil.loadOrCreate(group, defaults); assertNotNull(info); assertEquals(expected, info); }
public static GeoServerTileLayerInfoImpl loadOrCreate(final LayerGroupInfo groupInfo, final GWCConfig defaults) { GeoServerTileLayerInfoImpl info = LegacyTileLayerInfoLoader.load(groupInfo); if (info == null) { info = create(defaults); } info.setName(tileLayerName(groupInfo)); info.setId(groupInfo.getId()); return info; }
public static void checkAutomaticStyles(final LayerInfo layer, GeoServerTileLayerInfo layerInfo) { if (layerInfo.isAutoCacheStyles() && layer.getStyles() != null && layer.getStyles().size() > 0) { if (null == findParameterFilter("STYLES", layerInfo.getParameterFilters())) { String defaultStyle = layer.getDefaultStyle() == null ? null : layer .getDefaultStyle().getName(); Set<String> cachedStyles = new HashSet<String>(); for (StyleInfo s : layer.getStyles()) { if (s != null) { cachedStyles.add(s.getName()); } } setCachedStyles(layerInfo, defaultStyle, cachedStyles); } } }
public static GeoServerTileLayerInfoImpl load(final LayerInfo layer) { MetadataMap metadataMap = layer.getMetadata(); if (!hasTileLayerDef(metadataMap)) { return null; } GeoServerTileLayerInfoImpl tileLayerInfo = load(metadataMap); if (metadataMap.containsKey(CONFIG_KEY_CACHED_STYLES)) { final String defaultStyle = layer.getDefaultStyle() == null ? "" : layer.getDefaultStyle().prefixedName(); String cachedStylesStr = metadataMap.get(CONFIG_KEY_CACHED_STYLES, String.class); Set<String> cachedStyles = unmarshalSet(cachedStylesStr); TileLayerInfoUtil.setCachedStyles(tileLayerInfo, defaultStyle, cachedStyles); } TileLayerInfoUtil.checkAutomaticStyles(layer, tileLayerInfo); tileLayerInfo.setName(tileLayerName(layer)); tileLayerInfo.setId(layer.getId()); return tileLayerInfo; }
/** * If the layer is configured for automatic style updates of its Style parameter filter, do so. * * @param published The GeoServer layer * @param layerInfo The GeoWebCache layer */ public static void checkAutomaticStyles( final PublishedInfo published, GeoServerTileLayerInfo layerInfo) { if (published instanceof LayerInfo) { checkAutomaticStyles((LayerInfo) published, layerInfo); } else if (published instanceof LayerGroupInfo) { checkAutomaticStyles((LayerGroupInfo) published, layerInfo); } else { throw new IllegalArgumentException( "Do not know how to handle this kind of PublishedInfo: " + published); } }
updateStringParameterFilter(tileLayerInfo, "ENV", true, "def:devVal", "envKey:envValue", "envKey2:envValue2"); testParameterFilter(request, rawKvp, "env", "envKey:envValue"); updateAcceptAllFloatParameterFilter(tileLayerInfo, "ANGLE", true); request.setAngle(60); testParameterFilter(request, rawKvp, "angle", "60.0");
public void testUpdateAcceptAllFloatParameterFilter() { GeoServerTileLayerInfo info = defaultVectorInfo; TileLayerInfoUtil.updateAcceptAllFloatParameterFilter(info, "ELEVATION", true); ParameterFilter filter = TileLayerInfoUtil.findParameterFilter("ELEVATION", info.getParameterFilters()); assertTrue(filter instanceof FloatParameterFilter); assertEquals(0, ((FloatParameterFilter) filter).getValues().size()); TileLayerInfoUtil.updateAcceptAllFloatParameterFilter(info, "ELEVATION", true); ParameterFilter filter2 = TileLayerInfoUtil.findParameterFilter("ELEVATION", info.getParameterFilters()); assertNotSame(filter, filter2); assertEquals(filter, filter2); TileLayerInfoUtil.updateAcceptAllFloatParameterFilter(info, "ELEVATION", false); assertNull(TileLayerInfoUtil.findParameterFilter("ELEVATION", info.getParameterFilters())); }
public void testUpdateAcceptAllRegExParameterFilter() { GeoServerTileLayerInfo info = defaultVectorInfo; TileLayerInfoUtil.updateAcceptAllRegExParameterFilter(info, "ENV", true); ParameterFilter filter = TileLayerInfoUtil.findParameterFilter("ENV", info.getParameterFilters()); assertTrue(filter instanceof RegexParameterFilter); assertEquals(".*", ((RegexParameterFilter) filter).getRegex()); TileLayerInfoUtil.updateAcceptAllRegExParameterFilter(info, "ENV", true); ParameterFilter filter2 = TileLayerInfoUtil.findParameterFilter("ENV", info.getParameterFilters()); assertNotSame(filter, filter2); assertEquals(filter, filter2); TileLayerInfoUtil.updateAcceptAllRegExParameterFilter(info, "ENV", false); assertNull(TileLayerInfoUtil.findParameterFilter("ENV", info.getParameterFilters())); }
/** * @see org.geoserver.gwc.layer.GeoServerTileLayerInfo#cachedStyles() */ @Override public ImmutableSet<String> cachedStyles() { ParameterFilter styleQualifier = TileLayerInfoUtil.findParameterFilter("STYLES", getParameterFilters()); if (styleQualifier != null) { if (styleQualifier instanceof StringParameterFilter) { StringParameterFilter sp = (StringParameterFilter) styleQualifier; return ImmutableSet.copyOf(sp.getLegalValues()); } } return ImmutableSet.of(); }
/** * See GEOS-5003 */ public void testNullsInDimensionAndTimeParameters() throws Exception { TileLayerInfoUtil.updateAcceptAllFloatParameterFilter(tileLayerInfo, "ELEVATION", true); TileLayerInfoUtil.updateAcceptAllRegExParameterFilter(tileLayerInfo, "TIME", true); tileLayer = new GeoServerTileLayer(layer, gridSetBroker, tileLayerInfo); GetMapRequest request = new GetMapRequest(); @SuppressWarnings("unchecked") Map<String, String> rawKvp = new CaseInsensitiveMap(new HashMap<String, String>()); request.setRawKvp(rawKvp); StringBuilder target = new StringBuilder(); boolean cachingPossible; request.setElevation(Arrays.asList((Object) null)); cachingPossible = mediator.isCachingPossible(tileLayer, request, target); assertTrue(cachingPossible); assertEquals(0, target.length()); request.setElevation(Collections.emptyList()); request.setTime(Arrays.asList((Object) null)); cachingPossible = mediator.isCachingPossible(tileLayer, request, target); assertTrue(cachingPossible); assertEquals(0, target.length()); }
public static void updateStringParameterFilter(final GeoServerTileLayerInfo tileLayerInfo, final String paramKey, boolean createParam, final String defaultValue, final Set<String> allowedValues) { removeParameterFilter(tileLayerInfo, paramKey); if (createParam && allowedValues != null && allowedValues.size() > 0) { // make sure default value is among the list of allowed values Set<String> values = new TreeSet<String>(allowedValues); StringParameterFilter stringListFilter = new StringParameterFilter(); stringListFilter.setKey(paramKey); stringListFilter.setDefaultValue(defaultValue == null ? "" : defaultValue); stringListFilter.getValues().addAll(values); tileLayerInfo.getParameterFilters().add(stringListFilter); } }
public void testRenameAlternateStyle() throws Exception { Set<ParameterFilter> params = new HashSet<ParameterFilter>(); when(mockTileLayerInfo.getParameterFilters()).thenReturn(params); TileLayerInfoUtil.setCachedStyles(mockTileLayerInfo, null, ImmutableSet.of(STYLE_NAME)); assertEquals(1, params.size()); ImmutableSet<String> styles = ImmutableSet.of(STYLE_NAME); when(mockTileLayerInfo.cachedStyles()).thenReturn(styles); listener.handleModifyEvent(styleNameModifyEvent); assertEquals(1, params.size()); ParameterFilter updated = params.iterator().next(); assertTrue(updated instanceof StringParameterFilter); assertEquals(Lists.newArrayList(STYLE_NAME_MODIFIED), ((StringParameterFilter) updated).getValues()); verify(mockTileLayer, times(1)).resetParameterFilters(); verify(mockMediator, times(1)).truncateByLayerAndStyle(eq(PREFIXED_RESOURCE_NAME), eq(STYLE_NAME)); verify(mockMediator, times(1)).save(same(mockTileLayer)); }
@Override public void setUp() { defaults = GWCConfig.getOldDefaults(); defaultVectorInfo = TileLayerInfoUtil.create(defaults); defaultVectorInfo.getMimeFormats().clear(); defaultVectorInfo.getMimeFormats().addAll(defaults.getDefaultVectorCacheFormats()); }
public GeoServerTileLayer(final LayerInfo layerInfo, final GridSetBroker gridsets, final GeoServerTileLayerInfo state) { checkNotNull(layerInfo, "layerInfo"); checkNotNull(gridsets, "gridsets"); checkNotNull(state, "state"); this.gridSetBroker = gridsets; this.layerInfo = layerInfo; this.layerGroupInfo = null; this.info = state; TileLayerInfoUtil.checkAutomaticStyles(layerInfo, state); }
/** * Creates a cached tile layer from the given Layer or Layer Group * * @param info a Layerinfo or LayerGroupInfo * @param defaults default configuration */ public static GeoServerTileLayerInfo loadOrCreate( final CatalogInfo info, final GWCConfig defaults) { if (info instanceof LayerInfo) { return loadOrCreate((LayerInfo) info, defaults); } if (info instanceof LayerGroupInfo) { return loadOrCreate((LayerGroupInfo) info, defaults); } throw new IllegalArgumentException(); }