/** * Removes a workspace from the catalog. * * <p>The <tt>recursive</tt> flag controls whether objects linked to the workspace such as * stores should also be deleted. */ public void removeWorkspace(WorkspaceInfo workspace, boolean recursive) { if (recursive) { workspace.accept(new CascadeDeleteVisitor(catalog)); } else { catalog.remove(workspace); } }
/** * Removes a resource from the catalog. * * <p>The <tt>recursive</tt> flag controls whether objects linked to the resource such as layers * should also be deleted. */ public void removeResource(ResourceInfo resource, boolean recursive) { if (recursive) { resource.accept(new CascadeDeleteVisitor(catalog)); } else { catalog.remove(resource); } }
/** * Removes a store from the catalog. * * <p>The <tt>recursive</tt> flag controls whether objects linked to the store such as resources * should also be deleted. */ public void removeStore(StoreInfo store, boolean recursive) { if (recursive) { store.accept(new CascadeDeleteVisitor(catalog)); } else { catalog.remove(store); } }
/** * Recursively deletes a workspace and everything under it. * * <p>If the workspace does not exist, this method will do nothing rather than fail. * * <p>This method is intended to be called after system startup. Typically from {@link * #onSetUp(SystemTestData)} or a {@literal @}Before hook. * * @param name Name of the workspace. */ protected void removeWorkspace(String name) { Catalog cat = getCatalog(); WorkspaceInfo ws = cat.getWorkspaceByName(name); if (ws != null) { new CascadeDeleteVisitor(cat).visit(ws); } }
@After public void clearLayerGroups() throws Exception { CascadeDeleteVisitor remover = new CascadeDeleteVisitor(catalog); for (LayerGroupInfo lg : catalog.getLayerGroups()) { if (catalog.getLayerGroup(lg.getId()) != null) { remover.visit(lg); } } }
/** * Recursively deletes a store and everything under it. * * <p>If the store does not exist, this method will do nothing rather than fail. * * <p>This method is intended to be called after system startup. Typically from {@link * #onSetUp(SystemTestData)} or a {@literal @}Before hook. * * @param workspaceName Name of the workspace of the store. * @param name Name of the store. */ protected void removeStore(String workspaceName, String name) { Catalog cat = getCatalog(); StoreInfo store = cat.getStoreByName(workspaceName, name, StoreInfo.class); if (store == null) { return; } CascadeDeleteVisitor v = new CascadeDeleteVisitor(getCatalog()); store.accept(v); }
@Test public void testCascadeLayer() { Catalog catalog = getCatalog(); String name = toString(LAKES); LayerInfo layer = catalog.getLayerByName(name); assertNotNull(layer); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog); visitor.visit(layer); LayerGroupInfo group = catalog.getLayerGroupByName(LAKES_GROUP); assertEquals(2, group.getLayers().size()); assertFalse(group.getLayers().contains(layer)); }
/** * Recursively deletes a layer and every resource associated with it. * * <p>If the layer does not exist, this method will do nothing rather than fail. * * <p>This method is intended to be called after system startup. Typically from {@link * #onSetUp(SystemTestData)} or a {@literal @}Before hook. * * @param workspaceName Name of the workspace/namespace of the layer. * @param name Name of the layer. */ protected void removeLayer(String workspaceName, String name) { Catalog cat = getCatalog(); ResourceInfo resource = cat.getResourceByName(workspaceName, name, ResourceInfo.class); if (resource == null) { return; } CascadeDeleteVisitor v = new CascadeDeleteVisitor(getCatalog()); for (LayerInfo layer : cat.getLayers()) { if (resource.equals(layer.getResource())) { layer.accept(v); } } }
@Test public void testCascadeLayerGroup() { Catalog catalog = getCatalog(); LayerGroupInfo layerGroup = catalog.getLayerGroupByName(LAKES_GROUP); assertNotNull(layerGroup); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog); visitor.visit(layerGroup); LayerGroupInfo nestedGroup = catalog.getLayerGroupByName(NEST_GROUP); assertNotNull(nestedGroup); assertEquals(1, nestedGroup.getLayers().size()); assertEquals(1, nestedGroup.getStyles().size()); }
@Test public void testCascadeStyle() { Catalog catalog = getCatalog(); StyleInfo style = catalog.getStyleByName(LAKES.getLocalPart()); assertNotNull(style); new CascadeDeleteVisitor(catalog).visit(style); assertNull(catalog.getStyleByName(LAKES.getLocalPart())); LayerInfo layer = catalog.getLayerByName(getLayerId(LAKES)); assertEquals("polygon", layer.getDefaultStyle().getName()); } }
@Test public void testCascadeLayerDuplicate() { Catalog catalog = getCatalog(); String name = toString(LAKES); LayerInfo layer = catalog.getLayerByName(name); assertNotNull(layer); LayerGroupInfo group = catalog.getLayerGroupByName(LAKES_GROUP); group.getLayers().add(layer); group.getStyles().add(null); catalog.save(group); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog); visitor.visit(layer); group = catalog.getLayerGroupByName(LAKES_GROUP); assertEquals(2, group.getLayers().size()); assertFalse(group.getLayers().contains(layer)); }
@Test public void testAddRemoveNestedNamed() throws Exception { final String NESTED_NAMED = "nestedNamed"; LayerInfo neatline = catalog.getLayerByName(getLayerId(MockData.MAP_NEATLINE)); LayerInfo lakes = catalog.getLayerByName(getLayerId(MockData.LAKES)); // add, nest, and check containment LayerGroupInfo nestedNamed = addLayerGroup(NESTED_NAMED, Mode.NAMED, null, lakes, neatline); container.getLayers().add(nestedNamed); container.getStyles().add(null); catalog.save(container); assertThat( containerNamesForResource(MockData.LAKES), equalTo(set(CONTAINER_GROUP, NESTED_NAMED))); assertThat( containerNamesForResource(MockData.MAP_NEATLINE), equalTo(set(CONTAINER_GROUP, NESTED_NAMED))); assertThat(containerNamesForGroup(nestedNamed), equalTo(set(CONTAINER_GROUP))); // delete and check containment new CascadeDeleteVisitor(catalog).visit(nestedNamed); assertThat(containerNamesForResource(MockData.LAKES), equalTo(set(CONTAINER_GROUP))); assertThat(containerNamesForResource(MockData.MAP_NEATLINE), empty()); assertThat(containerNamesForGroup(nestedNamed), empty()); }
@Test public void testWorkspaceRemoveAndReadd() { // remove all workspaces Catalog catalog = getCatalog(); NamespaceInfo defaultNamespace = catalog.getDefaultNamespace(); WorkspaceInfo defaultWs = catalog.getDefaultWorkspace(); List<WorkspaceInfo> workspaces = catalog.getWorkspaces(); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog); for (WorkspaceInfo ws : workspaces) { visitor.visit(ws); } assertEquals(0, catalog.getWorkspaces().size()); assertEquals(0, catalog.getNamespaces().size()); // add back one (this would NPE) catalog.add(defaultNamespace); catalog.add(defaultWs); assertEquals(1, catalog.getWorkspaces().size()); assertEquals(1, catalog.getNamespaces().size()); // get back by name (this would NPE too) assertNotNull(catalog.getNamespaceByURI(defaultNamespace.getURI())); }
CascadeDeleteVisitor remover = new CascadeDeleteVisitor(catalog); ws.accept(remover); assertNull(catalog.getWorkspaceByName(ws.getName()));
@Test public void testDropCoverageStore() throws Exception { // build the store Catalog cat = getCatalog(); CatalogBuilder cb = new CatalogBuilder(cat); CoverageStoreInfo store = cb.buildCoverageStore("dem"); store.setURL(MockData.class.getResource("tazdem.tiff").toExternalForm()); store.setType("GeoTIFF"); cat.add(store); // build the coverage cb.setStore(store); CoverageInfo ci = cb.buildCoverage(); cat.add(ci); // build the layer LayerInfo layer = cb.buildLayer(ci); cat.add(layer); // grab a reader just to inizialize the code ci.getGridCoverage(null, null); ci.getGridCoverageReader(null, GeoTools.getDefaultHints()); // now drop the store CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(cat); visitor.visit(store); // and reload (GEOS-4782 -> BOOM!) getGeoServer().reload(); }
@Test public void testCascadeWorkspace() { Catalog catalog = getCatalog(); WorkspaceInfo ws = catalog.getWorkspaceByName(CITE_PREFIX); new CascadeDeleteVisitor(catalog).visit(ws); // check the namespace is also gone assertNull(catalog.getNamespaceByPrefix(CITE_PREFIX)); // that workspace actually holds all layers, so check we got empty assertEquals(0, catalog.count(LayerInfo.class, Filter.INCLUDE)); assertEquals(0, catalog.count(ResourceInfo.class, Filter.INCLUDE)); assertEquals(0, catalog.count(StoreInfo.class, Filter.INCLUDE)); assertEquals(0, catalog.count(LayerGroupInfo.class, Filter.INCLUDE)); // the workspace specific style is also gone assertEquals(0, catalog.getStylesByWorkspace(CITE_PREFIX).size()); assertNull(catalog.getStyleByName(WS_STYLE)); }
@Test public void testCascadeStore() { Catalog catalog = getCatalog(); DataStoreInfo store = (DataStoreInfo) catalog.getLayerByName(getLayerId(LAKES)).getResource().getStore(); new CascadeDeleteVisitor(catalog).visit(store); // that store actually holds all layers, so check we got empty assertEquals(0, catalog.count(LayerInfo.class, Filter.INCLUDE)); assertEquals(0, catalog.count(ResourceInfo.class, Filter.INCLUDE)); assertEquals(0, catalog.count(StoreInfo.class, Filter.INCLUDE)); List<LayerGroupInfo> groups = catalog.getLayerGroups(); assertEquals(0, catalog.count(LayerGroupInfo.class, Filter.INCLUDE)); }
protected boolean onSubmit(AjaxRequestTarget target, Component contents) { // cascade delete the whole selection Catalog catalog = GeoServerApplication.get().getCatalog(); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(catalog); for (CatalogInfo ci : selection) { ci.accept(visitor); } // the deletion will have changed what we see in the page // so better clear out the selection catalogObjects.clearSelection(); return true; }
public void delete(final String repoId) { List<DataStoreInfo> repoStores = findDataStores(repoId); CascadeDeleteVisitor deleteVisitor = new CascadeDeleteVisitor(this.catalog); for (DataStoreInfo storeInfo : repoStores) { storeInfo.accept(deleteVisitor); } try { this.configStore.delete(repoId); } finally { this.repoCache.invalidate(repoId); } }
@After public void dropStore() { Catalog cat = getCatalog(); CascadeDeleteVisitor visitor = new CascadeDeleteVisitor(cat); store.accept(visitor); }