Package org.geoserver.catalog.impl

Source Code of org.geoserver.catalog.impl.CascadeRemovalReporterTest

/* (c) 2014 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.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createNiceMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;

import javax.xml.namespace.QName;

import org.geoserver.catalog.CascadeRemovalReporter;
import org.geoserver.catalog.CascadeRemovalReporter.ModificationType;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
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.geoserver.data.test.MockCatalogBuilder;
import org.geoserver.data.test.MockCreator;
import org.geoserver.data.test.MockData;
import org.geoserver.data.test.MockTestData;
import org.geoserver.test.GeoServerMockTestSupport;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.junit.Test;

public class CascadeRemovalReporterTest extends GeoServerMockTestSupport {
   
    static final String LAKES_GROUP = "lakesGroup";

    @Override
    protected void setUp(MockTestData testData) throws Exception {
        super.setUp(testData);
        setMockCreator(new MockCreator() {
            @Override
            protected void addToCatalog(Catalog catalog, MockCatalogBuilder b) {
                String lakes = MockData.LAKES.getLocalPart();
                String forests = MockData.FORESTS.getLocalPart();
                String bridges = MockData.BRIDGES.getLocalPart();

                b.layerGroup(LAKES_GROUP, Arrays.asList(lakes, forests, bridges),
                    Arrays.asList(lakes, forests, bridges));
            }
        });
    }

    public void setNativeBox(Catalog catalog, String name) throws Exception {
        FeatureTypeInfo fti = catalog.getFeatureTypeByName(name);
        fti.setNativeBoundingBox(fti.getFeatureSource(null, null).getBounds());
        fti.setLatLonBoundingBox(new ReferencedEnvelope(fti.getNativeBoundingBox(), DefaultGeographicCRS.WGS84));
        catalog.save(fti);
    }

    @Test
    public void testCascadeLayer() {
        Catalog catalog = getCatalog();
        CascadeRemovalReporter visitor = new CascadeRemovalReporter(catalog);

        String name = getLayerId(MockData.LAKES);
        LayerInfo layer = catalog.getLayerByName(name);
        assertNotNull(layer);
        visitor.visit(layer);
        //layer.accept(visitor);
       
        // we expect a layer, a resource and a group
        assertEquals(3, visitor.getObjects(null).size());
       
        // check the layer and resource have been marked to delete (and
        assertEquals(catalog.getLayerByName(name),
                visitor.getObjects(LayerInfo.class, ModificationType.DELETE).get(0));
        assertEquals(catalog.getResourceByName(name, ResourceInfo.class),
                visitor.getObjects(ResourceInfo.class, ModificationType.DELETE).get(0));
       
        // the group has been marked to update? (we need to compare by id as the
        // objects won't compare properly by equality)
        LayerGroupInfo group = catalog.getLayerGroupByName(LAKES_GROUP);
        assertEquals(group.getId(), visitor.getObjects(LayerGroupInfo.class,
                ModificationType.GROUP_CHANGED).get(0).getId());
    }
   
    @Test
    public void testCascadeStore() {
        Catalog catalog = getCatalog();
        CascadeRemovalReporter visitor = new CascadeRemovalReporter(catalog);

        String citeStore = MockData.CITE_PREFIX;
        StoreInfo store = catalog.getStoreByName(citeStore, StoreInfo.class);
        String buildings = getLayerId(MockData.BUILDINGS);
        String lakes = getLayerId(MockData.LAKES);
        LayerInfo bl = catalog.getLayerByName(buildings);
        ResourceInfo br = catalog.getResourceByName(buildings, ResourceInfo.class);
        LayerInfo ll = catalog.getLayerByName(lakes);
        ResourceInfo lr = catalog.getResourceByName(lakes, ResourceInfo.class);
       
        visitor.visit((DataStoreInfo)store);
       
        assertEquals(store, visitor.getObjects(StoreInfo.class, ModificationType.DELETE).get(0));
        List<LayerInfo> layers = visitor.getObjects(LayerInfo.class, ModificationType.DELETE);
        assertTrue(layers.contains(bl));
        assertTrue(layers.contains(ll));
        List<ResourceInfo> resources = visitor.getObjects(ResourceInfo.class, ModificationType.DELETE);
        assertTrue(resources.contains(br));
        assertTrue(resources.contains(lr));
    }
   
    @Test
    public void testCascadeWorkspace() {
        Catalog catalog = getCatalog();
        CascadeRemovalReporter visitor = new CascadeRemovalReporter(catalog);

        WorkspaceInfo ws = catalog.getWorkspaceByName(MockData.CITE_PREFIX);
        assertNotNull(ws);
        List<StoreInfo> stores = getCatalog().getStoresByWorkspace(ws, StoreInfo.class);
       
        ws.accept(visitor);
       
        assertTrue(stores.containsAll(visitor.getObjects(StoreInfo.class, ModificationType.DELETE)));
    }
   
    @Test
    public void testCascadeStyle() {
        setMockCreator(new MockCreator() {
            @Override
            public Catalog createCatalog(MockTestData testData) throws Exception {
                Catalog catalog = createNiceMock(Catalog.class);

                StyleInfo s = createNiceMock(StyleInfo.class);
                expect(catalog.getStyleByName((String)anyObject())).andReturn(s).anyTimes();

                LayerInfo l1 = createNiceMock(LayerInfo.class);
                expect(l1.getDefaultStyle()).andReturn(s).anyTimes();
                expect(catalog.getLayerByName(getLayerId(MockData.LAKES))).andReturn(l1);

                LayerInfo l2 = createNiceMock(LayerInfo.class);

                // add the lakes style to builds as an alternate style
                Set<StyleInfo> styles = createNiceMock(Set.class);
                expect(styles.contains(s)).andReturn(true).anyTimes();
                replay(styles);

                expect(l2.getStyles()).andReturn(styles).anyTimes();
                expect(catalog.getLayerByName(getLayerId(MockData.BUILDINGS))).andReturn(l2);
               
                expect(catalog.getLayers()).andReturn(Arrays.asList(l1, l2)).anyTimes();
                expect(catalog.getLayerGroups()).andReturn((List)Collections.emptyList()).anyTimes();
                replay(s, l1, l2, catalog);
                return catalog;
            }
        });

        Catalog catalog = getCatalog();
        CascadeRemovalReporter visitor = new CascadeRemovalReporter(catalog);

        StyleInfo style = catalog.getStyleByName("foo");
        LayerInfo buildings = catalog.getLayerByName(getLayerId(MockData.BUILDINGS));
        LayerInfo lakes = catalog.getLayerByName(getLayerId(MockData.LAKES));
       
        visitor.visit(style);

        // test style reset
        assertEquals(style, visitor.getObjects(StyleInfo.class, ModificationType.DELETE).get(0));
        assertEquals(lakes, visitor.getObjects(LayerInfo.class, ModificationType.STYLE_RESET).get(0));
        assertEquals(buildings, visitor.getObjects(LayerInfo.class, ModificationType.EXTRA_STYLE_REMOVED).get(0));
    }

    String getLayerId(QName name) {
        return toString(name);
    }
}
TOP

Related Classes of org.geoserver.catalog.impl.CascadeRemovalReporterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.