this.gridSetBroker = gridSetBroker; this.layerCache.invalidateAll(); this.tileLayerCatalog.initialize(); for (String layerId : tileLayerCatalog.getLayerIds()) { final String layerName = tileLayerCatalog.getLayerName(layerId); try { getTileLayerById(layerId); + e.getMessage(); LOGGER.log(Level.SEVERE, msg, e); tileLayerCatalog.delete(layerId);
lock.readLock().lock(); try { final Set<String> storedNames = tileLayerCatalog.getLayerNames(); Set<String> names = null; if (!pendingDeletes.isEmpty()) { names = new HashSet<String>(storedNames); for (String id : pendingDeletes) { GeoServerTileLayerInfo old = tileLayerCatalog.getLayerById(id); names.remove(old.getName()); GeoServerTileLayerInfo old = tileLayerCatalog.getLayerById(e.getKey()); if (old != null) {
private GeoServerTileLayerInfo getTileLayerInfoByName(final String layerName) { GeoServerTileLayerInfo tileLayerInfo = null; // check pending modifs first in case name changed if (!pendingModications.isEmpty()) { for (GeoServerTileLayerInfo info : pendingModications.values()) { String name = info.getName(); if (name.equals(layerName)) { tileLayerInfo = info; break; } } } if (null == tileLayerInfo) { tileLayerInfo = tileLayerCatalog.getLayerByName(layerName); if (null == tileLayerInfo) { return null; } if (pendingDeletes.contains(tileLayerInfo.getId())) { return null; } if (pendingModications.containsKey(tileLayerInfo.getId())) { // found in catalog but not in pending modifications, means name changed return null; } } return tileLayerInfo; }
when(tileLayerCatalog.getLayerIds()).thenReturn( ImmutableSet.of(layer1.getId(), layer2.getId(), group1.getId(), group2.getId())); when(tileLayerCatalog.getLayerNames()).thenReturn(layerNames); when(tileLayerCatalog.getLayerById(layer1.getId())).thenReturn(layerInfo1); when(tileLayerCatalog.getLayerById(layer2.getId())).thenReturn(layerInfo2); when(tileLayerCatalog.getLayerById(group1.getId())).thenReturn(groupInfo1); when(tileLayerCatalog.getLayerById(group2.getId())).thenReturn(groupInfo2); when(tileLayerCatalog.exists(layer1.getId())).thenReturn(true); when(tileLayerCatalog.exists(layer2.getId())).thenReturn(true); when(tileLayerCatalog.exists(group1.getId())).thenReturn(true); when(tileLayerCatalog.exists(group2.getId())).thenReturn(true); when(tileLayerCatalog.getLayerByName(tileLayerName(layer1))).thenReturn(layerInfo1); when(tileLayerCatalog.getLayerByName(tileLayerName(layer2))).thenReturn(layerInfo2); when(tileLayerCatalog.getLayerByName(tileLayerName(group1))).thenReturn(groupInfo1); when(tileLayerCatalog.getLayerByName(tileLayerName(group2))).thenReturn(groupInfo2); when(tileLayerCatalog.getLayerId(tileLayerName(layer1))).thenReturn(layer1.getId()); when(tileLayerCatalog.getLayerId(tileLayerName(layer2))).thenReturn(layer2.getId()); when(tileLayerCatalog.getLayerId(tileLayerName(group1))).thenReturn(group1.getId()); when(tileLayerCatalog.getLayerId(tileLayerName(group2))).thenReturn(group2.getId());
for (String deletedId : pendingDeletes) { try { GeoServerTileLayerInfo info = tileLayerCatalog.delete(deletedId); if (info != null) { final GeoServerTileLayerInfo old; try { old = tileLayerCatalog.save(modified); modifications.add(new GeoServerTileLayerInfo[] { old, modified }); } catch (RuntimeException e) {
public void testSaveRename() { GeoServerTileLayerInfo originalState = layerInfo1; GeoServerTileLayerInfo forceState1 = TileLayerInfoUtil.loadOrCreate(layer1, defaults); when(tileLayerCatalog.save(same(forceState1))).thenReturn(originalState); forceState1.setName("newName"); config.modifyLayer(new GeoServerTileLayer(layer1, gridSetBroker, forceState1)); verify(mockMediator, never()).layerRemoved(anyString()); verify(mockMediator, never()).layerRenamed(anyString(), anyString()); config.save(); verify(tileLayerCatalog, times(1)).save(same(forceState1)); // and gwc has been instructed on the changes verify(mockMediator, times(1)).layerRenamed(eq(layerInfo1.getName()), eq("newName")); }
tileLayerInfo = tileLayerCatalog.getLayerById(layerId);
@Override public boolean containsLayer(String layerId) { checkNotNull(layerId, "layer id is null"); lock.readLock().lock(); try { if (pendingDeletes.contains(layerId)) { return false; } Set<String> layerIds = tileLayerCatalog.getLayerIds(); boolean hasLayer = layerIds.contains(layerId); return hasLayer; } finally { lock.readLock().unlock(); } }
/** * @see org.geowebcache.config.Configuration#modifyLayer(org.geowebcache.layer.TileLayer) */ @Override public synchronized void modifyLayer(TileLayer tl) throws NoSuchElementException { checkNotNull(tl, "TileLayer is null"); 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"); final GeoServerTileLayerInfo info = tileLayer.getInfo(); lock.writeLock().lock(); try { final String layerId = info.getId(); // check pendingModifications too to catch unsaved adds boolean exists = pendingModications.containsKey(layerId) || tileLayerCatalog.exists(layerId); checkArgument(exists, "No GeoServerTileLayer named '" + info.getName() + "' exists"); pendingModications.put(layerId, info); layerCache.invalidate(layerId); } finally { lock.writeLock().unlock(); } }
@Override public boolean containsLayer(String layerName) { checkNotNull(layerName, "layer id is null"); lock.acquireReadLock(); try { if (pendingDeletes.contains(layerName)) { return false; } Set<String> layerNames = tileLayerCatalog.getLayerNames(); boolean hasLayer = layerNames.contains(layerName); return hasLayer; } finally { lock.releaseReadLock(); } }
private String getLayerId(final String layerName) { String storedName = layerName; // check pending modifs first in case name changed if (!pendingModications.isEmpty()) { for (GeoServerTileLayerInfo info : pendingModications.values()) { String name = info.getName(); if (name.equals(layerName)) { storedName = info.getName(); break; } } } final String layerId = tileLayerCatalog.getLayerId(storedName); if (layerId == null || pendingDeletes.contains(layerId)) { return null; } // name changed? GeoServerTileLayerInfo modifiedState = pendingModications.get(layerId); if (modifiedState != null && !layerName.equals(modifiedState.getName())) { return null; } return layerId; }
public void reset() { lock.writeLock().lock(); try { this.layerCache.invalidateAll(); this.tileLayerCatalog.reset(); } finally { lock.writeLock().unlock(); } } }
@Override public void afterPropertiesSet() { lock.acquireWriteLock(); try { LOGGER.info("Initializing GWC configuration based on GeoServer's Catalog"); this.layerCache.invalidateAll(); this.tileLayerCatalog.initialize(); } finally { lock.releaseWriteLock(); } }
for (String deletedId : pendingDeletes) { try { tileLayerCatalog.delete(deletedId); } catch (RuntimeException e) { LOGGER.log( final GeoServerTileLayerInfo old; try { old = tileLayerCatalog.save(modified); modifications.add(new GeoServerTileLayerInfo[] {old, modified}); } catch (RuntimeException e) {
public void testInitializeLayersToOldDefaults() throws Exception { // no gwc-gs.xml exists when(configPersister.findConfigFile()).thenReturn(null); // ignore the upgrade of the direct wms integration flag on this test when(geoServer.getService(eq(WMSInfo.class))).thenReturn(null); // let the catalog have something to initialize LayerInfo layer = mockLayer("testLayer", new String[]{}, LayerInfo.Type.RASTER); LayerGroupInfo group = mockGroup("testGroup", layer); when(rawCatalog.getLayers()).thenReturn(Lists.newArrayList(layer)); when(rawCatalog.getLayerGroups()).thenReturn(Lists.newArrayList(group)); // run layer initialization initializer.initialize(geoServer); // make sure default tile layers were created GWCConfig oldDefaults = GWCConfig.getOldDefaults(); GeoServerTileLayerInfo tileLayer = TileLayerInfoUtil.loadOrCreate(layer, oldDefaults); GeoServerTileLayerInfo tileLayerGroup = TileLayerInfoUtil.loadOrCreate(group, oldDefaults); verify(tileLayerCatalog, times(1)).save(eq(tileLayer)); verify(tileLayerCatalog, times(1)).save(eq(tileLayerGroup)); }
@Override public GeoServerTileLayer load(String layerId) throws Exception { GeoServerTileLayer tileLayer = null; final GridSetBroker gridSetBroker = CatalogConfiguration.this.gridSetBroker; lock.acquireReadLock(); try { if (pendingDeletes.contains(layerId)) { throw new IllegalArgumentException("Tile layer '" + layerId + "' was deleted."); } GeoServerTileLayerInfo tileLayerInfo = pendingModications.get(layerId); if (tileLayerInfo == null) { tileLayerInfo = tileLayerCatalog.getLayerById(layerId); } if (tileLayerInfo == null) { throw new IllegalArgumentException( "GeoServerTileLayerInfo '" + layerId + "' does not exist."); } tileLayer = new GeoServerTileLayer( geoServerCatalog, layerId, gridSetBroker, tileLayerInfo); } finally { lock.releaseReadLock(); } if (null == tileLayer) { throw new IllegalArgumentException( "GeoServer layer or layer group '" + layerId + "' does not exist"); } return tileLayer; } }
/** * @see org.geowebcache.config.Configuration#getLayers() */ @Override public Iterable<GeoServerTileLayer> getLayers() { lock.readLock().lock(); try { final Set<String> layerIds = tileLayerCatalog.getLayerIds(); Function<String, GeoServerTileLayer> lazyLayerFetch = new Function<String, GeoServerTileLayer>() { @Override public GeoServerTileLayer apply(final String layerId) { return CatalogConfiguration.this.getTileLayerById(layerId); } }; return Iterables.transform(layerIds, lazyLayerFetch); } finally { lock.readLock().unlock(); } }
pendingModications.containsKey(layerId) || tileLayerCatalog.exists(layerId); checkArgument(exists, "No GeoServerTileLayer named '" + info.getName() + "' exists"); pendingModications.put(layerId, info);
/** @see TileLayerConfiguration#getLayers() */ @Override public Collection<TileLayer> getLayers() { lock.acquireReadLock(); try { final Set<String> layerNames = tileLayerCatalog.getLayerNames(); Function<String, Optional<TileLayer>> lazyLayerFetch = CatalogConfiguration.this::getLayer; // removing the NULL results // TODO Should deep copy or wrap with modification proxies, // see // org.geoserver.gwc.layer.CatalogConfigurationLayerConformanceTest.testModifyCallRequiredToChangeInfoFromGetInfo() return Lists.newArrayList( layerNames .stream() .map(lazyLayerFetch) .filter(Optional::isPresent) .map(Optional::get) .collect(Collectors.toList())); } finally { lock.releaseReadLock(); } }
private String getLayerId(final String layerName) { String storedName = layerName; // check pending modifs first in case name changed if (!pendingModications.isEmpty()) { for (GeoServerTileLayerInfo info : pendingModications.values()) { String name = info.getName(); if (name.equals(layerName)) { storedName = info.getName(); break; } } } final String layerId = tileLayerCatalog.getLayerId(storedName); if (layerId == null || pendingDeletes.contains(layerId)) { return null; } // name changed? GeoServerTileLayerInfo modifiedState = pendingModications.get(layerId); if (modifiedState != null && !layerName.equals(modifiedState.getName())) { return null; } return layerId; }