/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.catalog.impl; import static org.geoserver.data.test.CiteTestData.BRIDGES; import static org.geoserver.data.test.CiteTestData.BUILDINGS; import static org.geoserver.data.test.CiteTestData.CITE_PREFIX; import static org.geoserver.data.test.CiteTestData.FORESTS; import static org.geoserver.data.test.CiteTestData.LAKES; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import java.io.IOException; import java.util.List; import org.geoserver.catalog.CascadeDeleteVisitor; import org.geoserver.catalog.Catalog; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.catalog.LayerGroupInfo; import org.geoserver.catalog.LayerInfo; import org.geoserver.catalog.ResourceInfo; import org.geoserver.catalog.StoreInfo; import org.geoserver.catalog.StyleInfo; import org.geoserver.catalog.WorkspaceInfo; import org.junit.After; import org.junit.Ignore; import org.junit.Test; import org.opengis.filter.Filter; public class CascadeDeleteVisitorTest extends CascadeVisitorAbstractTest { @After public void resetChanges() throws IOException { // add layers revertLayer(LAKES); revertLayer(BRIDGES); revertLayer(FORESTS); revertLayer(BUILDINGS); Catalog catalog = getCatalog(); StyleInfo style = catalog.getStyleByName(WS_STYLE); if (style != null) { catalog.remove(style); } LayerGroupInfo group = catalog.getLayerGroupByName(NEST_GROUP); if (group != null) { catalog.remove(group); } group = catalog.getLayerGroupByName(LAKES_GROUP); if (group != null) { catalog.remove(group); } setupExtras(getTestData(), catalog); } @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)); } @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 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 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)); } @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 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()); } }