public void testRenameDefaultStyle() throws Exception { // this is another case of an ignorable change. Renaming the default style shall have no // impact. listener.handleModifyEvent(styleNameModifyEvent); // a change in the name of the default style should not cause a truncate verify(mockMediator, never()).truncateByLayerAndStyle(anyString(), anyString()); // nor a save, as the default style name is dynamic verify(mockMediator, never()).save((GeoServerTileLayer) anyObject()); verify(mockTileLayer, atLeastOnce()).getInfo(); verify(mockTileLayerInfo, atLeastOnce()).cachedStyles(); }
public void testTruncateByLayerAndStyle() throws Exception { String layerName = tileLayer.getName(); String styleName = "notACachedStyle"; mediator.truncateByLayerAndStyle(layerName, styleName); verify(tileBreeder, never()).dispatchTasks(any(GWCTask[].class)); styleName = layer.getDefaultStyle().getName(); mediator.truncateByLayerAndStyle(layerName, styleName); int expected = tileLayer.getGridSubsets().size() * tileLayer.getMimeTypes().size(); verify(tileBreeder, times(expected)).dispatchTasks(any(GWCTask[].class)); }
/** * Options are: * <ul> * <li>A {@link LayerInfo} has {@code modifiedStyle} as either its default or style or as one of * its alternate styles * <li>A {@link LayerGroupInfo} contains a layer using {@code modifiedStyle} * <li>{@code modifiedStyle} is explicitly assigned to a {@link LayerGroupInfo} * </ul> * * @param modifiedStyle */ private void handleStyleChange(final StyleInfo modifiedStyle) { final String styleName = modifiedStyle.getName(); log.finer("Handling style modification: " + styleName); // First we collect all the layers that use this style for (LayerInfo affectedLayer : mediator.getLayerInfosFor(modifiedStyle)) { // If the style name changes, we need to update the layer's parameter filter String prefixedName = tileLayerName(affectedLayer); log.info("Truncating layer '" + prefixedName + "' due to a change in style '" + styleName + "'"); mediator.truncateByLayerAndStyle(prefixedName, styleName); } // Now we check for layer groups that are affected for (LayerGroupInfo layerGroup : mediator.getLayerGroupsFor(modifiedStyle)) { String layerGroupName = tileLayerName(layerGroup); log.info("Truncating layer group '" + layerGroupName + "' due to a change in style '" + styleName + "'"); mediator.truncate(layerGroupName); } }
@SuppressWarnings("unchecked") public void testLayerInfoDefaultOrAlternateStyleChanged() throws Exception { when(mockMediator.getLayerInfosFor(same(mockStyle))).thenReturn( Collections.singleton(mockLayerInfo)); when(mockMediator.getLayerGroupsFor(same(mockStyle))).thenReturn(Collections.EMPTY_LIST); CatalogPostModifyEventImpl postModifyEvent = new CatalogPostModifyEventImpl(); postModifyEvent.setSource(mockStyle); listener.handlePostModifyEvent(postModifyEvent); verify(mockMediator, times(1)).truncateByLayerAndStyle(eq(PREFIXED_RESOURCE_NAME), eq(STYLE_NAME)); }
+ styleName + "'"); mediator.truncateByLayerAndStyle(prefixedName, styleName);
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);
oldStyles.removeAll(newStyles); for (String removedStyle : oldStyles) { mediator.truncateByLayerAndStyle(layerName, removedStyle);
oldStyles.removeAll(newStyles); for (String removedStyle : oldStyles) { mediator.truncateByLayerAndStyle(layerName, removedStyle);
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 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)); }
tl.resetParameterFilters(); mediator.truncateByLayerAndStyle(tl.getName(), oldStyleName); Set<String> newStyles = new HashSet<String>(styleNames); newStyles.remove(oldStyleName);
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)); }
public void testIgnorableChange() throws Exception { // not a name change styleNameModifyEvent.setPropertyNames(Arrays.asList("fileName")); listener.handleModifyEvent(styleNameModifyEvent); // name didn't change at all styleNameModifyEvent.setPropertyNames(Arrays.asList("name")); styleNameModifyEvent.setOldValues(Arrays.asList(STYLE_NAME)); styleNameModifyEvent.setNewValues(Arrays.asList(STYLE_NAME)); listener.handleModifyEvent(styleNameModifyEvent); // not a style change styleNameModifyEvent.setSource(mock(LayerInfo.class)); listener.handleModifyEvent(styleNameModifyEvent); // a change in the name of the default style should not cause a truncate verify(mockMediator, never()).truncateByLayerAndStyle(anyString(), anyString()); // nor a save, as the default style name is dynamic verify(mockMediator, never()).save((GeoServerTileLayer) anyObject()); verify(mockTileLayer, never()).getInfo(); verify(mockTileLayerInfo, never()).cachedStyles(); }
verify(mockMediator).truncateByLayerAndStyle(eq(PREFIXED_RESOURCE_NAME), eq("removedStyleName")); verify(mockMediator, atMost(1)).truncateByLayerAndStyle(anyString(), anyString()); verify(mockMediator).save(any(GeoServerTileLayer.class));
+ layerName + " as it's no longer one of the layer's styles"); mediator.truncateByLayerAndStyle(layerName, oldCachedStyle);