Package org.geoserver.catalog.hibernate

Source Code of org.geoserver.catalog.hibernate.HibernateCatalogTest

package org.geoserver.catalog.hibernate;

import org.geoserver.hibernate.HibTestSupport;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

import java.util.logging.Logger;
import org.geoserver.catalog.CoverageInfo;
import org.geoserver.catalog.CoverageStoreInfo;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.FeatureTypeInfo;
import org.geoserver.catalog.LayerGroupInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.MapInfo;
import org.geoserver.catalog.NamespaceInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.catalog.impl.ModificationProxy;
import org.geoserver.hibernate.dao.CatalogDAO;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.geometry.jts.ReferencedEnvelope;
import org.geotools.referencing.CRS;
import org.geotools.referencing.crs.DefaultGeographicCRS;
import org.geotools.util.logging.Logging;
import org.opengis.filter.Filter;
import org.opengis.filter.FilterFactory;
import org.opengis.geometry.BoundingBox;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.opengis.style.Style;

public class HibernateCatalogTest extends HibTestSupport {
    private static final Logger LOGGER = Logging.getLogger(HibernateCatalogTest.class);

    HibCatalogImpl catalog;

    CatalogDAO catalogDAO;

    protected void onSetUpBeforeTransaction() throws Exception {
        super.onSetUpBeforeTransaction();

        catalog = (HibCatalogImpl) applicationContext.getBean("catalogTarget");
    }

    private void clearCatalog() {
        // ensure no stores

        for (MapInfo mapInfo : ModificationProxy.unwrap(catalog.getMaps())) {
            catalog.remove(mapInfo);
        }
       
        for (LayerGroupInfo layergroup : ModificationProxy.unwrap(catalog.getLayerGroups())) {
            catalog.remove(layergroup);
        }

        for (LayerInfo layerInfo : ModificationProxy.unwrap(catalog.getLayers())) {
            catalog.remove(layerInfo);
        }

        for (FeatureTypeInfo featureTypeInfo : ModificationProxy.unwrap(catalog.getFeatureTypes())) {
            catalog.remove(featureTypeInfo);
        }

        for (CoverageInfo coverageInfo : ModificationProxy.unwrap(catalog.getCoverages())) {
            catalog.remove(coverageInfo);
        }

        for (DataStoreInfo dataStoreInfo : ModificationProxy.unwrap(catalog.getDataStores())) {
            catalog.remove(dataStoreInfo);
        }

        for (CoverageStoreInfo covStoreInfo : ModificationProxy.unwrap(catalog.getCoverageStores())) {
            catalog.remove(covStoreInfo);
        }

        assertTrue("LayerGroups in the DB, can't proceed.", catalog.getLayerGroups().isEmpty());
        assertTrue("Layers in the DB, can't proceed.", catalog.getLayers().isEmpty());
        assertTrue("Datastores in the DB, can't proceed.", catalog.getDataStores().isEmpty());
        assertTrue("Coveragestores in the DB, can't proceed.", catalog.getCoverageStores()
                .isEmpty());
        assertTrue("Coverages in the DB, can't proceed.", catalog.getCoverages().isEmpty());
        assertTrue("FeatureTypes in the DB, can't proceed.", catalog.getFeatureTypes().isEmpty());
        assertTrue("Maps in the DB, can't proceed.", catalog.getMaps().isEmpty());

    }

    private void removeExistingStyles() {
        // ensure no styles
        for (StyleInfo styleInfo : catalog.getStyles()) {
            catalog.remove(styleInfo);
        }

        List<StyleInfo> list = catalog.getStyles();
        assertTrue("Styles in the DB, can't proceed.", list.isEmpty());
    }

    private void removeExistingNS() {
        // for (NamespaceInfo namespaceInfo : ModificationProxy.unwrap(catalog.getNamespaces())) {
        for (NamespaceInfo namespaceInfo : catalogDAO.getNamespaces()) {
            // namespaceInfo = ModificationProxy.unwrap(namespaceInfo);
            catalog.remove(namespaceInfo);
        }

        List<NamespaceInfo> list = catalogDAO.getNamespaces();
        StringBuilder sb = new StringBuilder();
        for (NamespaceInfo nsi : list) {
            sb.append(nsi.getName()).append("(").append(nsi.getId()).append(") ");
        }
        if (!list.isEmpty())
            LOGGER.severe("!!! Namespaces in the DB (" + sb + ")");

        assertTrue("Namespaces in the DB (" + sb + "), can't proceed.", list.isEmpty());

        for (WorkspaceInfo ws : ModificationProxy.unwrap(catalog.getWorkspaces())) {
            catalog.remove(ws);
        }

        assertTrue("Workspaces in the DB, can't proceed.", catalog.getWorkspaces().isEmpty());

    }

    public void testDataStore() {
        System.out.println("========== testDataStore()");

        clearCatalog();
        removeExistingNS();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testDataStoreWorkspace");

        assertNull(ws.getId());
        catalog.add(ws);
        assertNotNull(ws.getId());

        endTransaction();
        startNewTransaction();

        // create a new store
        DataStoreInfo store = catalog.getFactory().createDataStore();
        store.setWorkspace(ws);
        store.setName("dataStore");
        store.setDescription("store description");
        store.setEnabled(true);

        store.getConnectionParameters().put("param1", "value1");
        store.getConnectionParameters().put("param2", new Integer(2));

        store.getMetadata().put("1", "one");
        store.getMetadata().put("2", "two");

        assertEquals("one", store.getMetadata().get("1"));

        catalog.add(store);

        assertEquals("one", store.getMetadata().get("1"));

        endTransaction();

        assertEquals("one", store.getMetadata().get("1"));

        startNewTransaction();
        Iterator<DataStoreInfo> stores = catalog.getDataStores().iterator();
        assertTrue("Datastore not properly stored.", stores.hasNext());

        store = catalog.getDataStore(store.getId());
        assertEquals("dataStore", store.getName());
        assertEquals("store description", store.getDescription());
        assertTrue(store.isEnabled());

        assertEquals("value1", store.getConnectionParameters().get("param1"));
        assertEquals(new Integer(2), store.getConnectionParameters().get("param2"));

        assertEquals("one", store.getMetadata().get("1"));
        assertEquals("two", store.getMetadata().get("2"));
    }

    public void testCoverageStore() {
        System.out.println("========== testCoverageStore()");

        // ensure no stores
        clearCatalog();
        removeExistingNS();

        endTransaction();
        // ----------------------------------------------------------------------
        startNewTransaction();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testCoverageStoreWorkspace");
        catalog.add(ws);

        endTransaction();
        // ----------------------------------------------------------------------
        startNewTransaction();

        // create a new store
        CoverageStoreInfo store = catalog.getFactory().createCoverageStore();
        store.setWorkspace(ws);
        store.setName("coverageStore");
        store.setDescription("store description");
        store.setEnabled(true);
        store.setType("type");
        store.setURL("url");

        store.getMetadata().put("1", "one");
        store.getMetadata().put("2", new Double(2.0));

        catalog.add(store);

        endTransaction();
        // Logging.getLogger(this.getClass()).warning("##################### id:" + store.getId() +
        // " name:"+store.getName() );

        // ----------------------------------------------------------------------
        startNewTransaction();

        List<CoverageStoreInfo> stores = catalog.getCoverageStores();
        // for (CoverageStoreInfo storex : stores) {
        // Logging.getLogger(this.getClass()).warning(":::::::::: id:" + storex.getId() +
        // " name:"+storex.getName() );
        // }
        assertEquals(1, stores.size());
        // Logging.getLogger(this.getClass()).warning("::::::::::::::::::::: id:" +
        // stores.get(0).getId() + " name:"+stores.get(0).getName() );

        CoverageStoreInfo loadedStore = catalog.getCoverageStore(store.getId());
        assertNotNull("Store " + store.getId() + " was not persisted properly.", loadedStore);
        assertEquals("coverageStore", loadedStore.getName());
        assertEquals("store description", loadedStore.getDescription());
        assertTrue(loadedStore.isEnabled());
        assertEquals("type", loadedStore.getType());

        assertEquals("url", loadedStore.getURL());

        assertEquals("one", loadedStore.getMetadata().get("1"));
        assertEquals(new Double(2.0), loadedStore.getMetadata().get("2"));
    }

    public void testStyle() {
        System.out.println("========== testStyle()");

        removeExistingStyles();

        StyleInfo style = catalog.getFactory().createStyle();
        style.setName("style1");
        style.setFilename("style1");
        catalog.add(style);

        style = catalog.getFactory().createStyle();
        style.setName("style2");
        style.setFilename("style2");
        catalog.add(style);

        endTransaction();

        startNewTransaction();

        List<StyleInfo> styles = catalog.getStyles();
        assertFalse(styles.isEmpty());
        StyleInfo s1 = styles.get(0);

        assertTrue(styles.size() == 2);
        StyleInfo s2 = styles.get(1);

        if ("style2".equals(s1.getName())) {
            StyleInfo t = s1;
            s1 = s2;
            s2 = t;
        }

        assertEquals("style1", s1.getName());
        assertEquals("style2", s2.getName());
    }

    public void testNamespace() {
        System.out.println("========== testNamespace()");
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        NamespaceInfo namespace = catalog.getFactory().createNamespace();
        namespace.setPrefix("topp");
        namespace.setURI("http://topp.openplans.org");
        catalog.add(namespace);

        namespace = catalog.getFactory().createNamespace();
        namespace.setPrefix("gs");
        namespace.setURI("http://geoserver.org");
        catalog.add(namespace);

        endTransaction();
        startNewTransaction();

        Iterator<NamespaceInfo> namespaces = catalog.getNamespaces().iterator();

        assertTrue(namespaces.hasNext());
        NamespaceInfo ns1 = namespaces.next();
        ns1 = ModificationProxy.unwrap(ns1);

        assertTrue(namespaces.hasNext());
        NamespaceInfo ns2 = namespaces.next();
        ns2 = ModificationProxy.unwrap(ns2);

        if ("gs".equals(ns1.getPrefix())) {
            NamespaceInfo t = ns1;
            ns1 = ns2;
            ns2 = t;
        }

        assertEquals("topp", ns1.getPrefix());
        assertEquals("http://topp.openplans.org", ns1.getURI());

        assertEquals("gs", ns2.getPrefix());
        assertEquals("http://geoserver.org", ns2.getURI());

        endTransaction();
        startNewTransaction();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testNamespaceWorkspace");
        catalog.add(ws);

        endTransaction();
        startNewTransaction();

        // feature type needs a store
        DataStoreInfo dataStore = catalog.getFactory().createDataStore();
        dataStore.setEnabled(true);
        dataStore.setName("ds1");
        dataStore.setWorkspace(ws);
        catalog.add(dataStore);

        endTransaction();
        startNewTransaction();

        FeatureTypeInfo ft1 = catalog.getFactory().createFeatureType();
        ft1.setName(getName() + "1");
        ft1.setNativeName("native_" + ft1.getName());
        ft1.setNamespace(ns1);
        ft1.setStore(dataStore);
        catalog.add(ft1);

        FeatureTypeInfo ft2 = catalog.getFactory().createFeatureType();
        ft2.setName(getName() + "2");
        ft2.setNativeName("native_" + ft2.getName());
        ft2.setNamespace(ns2);
        ft2.setStore(dataStore);
        catalog.add(ft2);

        List resources = catalog.getResourcesByNamespace(ns1, FeatureTypeInfo.class);
        assertEquals(1, resources.size());
    }

    public void testDefaultNamespace() {
        System.out.println("========== testDefaultNamespace()");
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        NamespaceInfo toppNamespace = catalog.getFactory().createNamespace();
        toppNamespace.setPrefix("topp2");
        toppNamespace.setURI("http://topp.openplans.org/default");

        catalog.add(toppNamespace);
        catalog.setDefaultNamespace(toppNamespace);

        NamespaceInfo gsNamespace = catalog.getFactory().createNamespace();
        gsNamespace.setPrefix("gs2");
        gsNamespace.setURI("http://geoserver.org/default");
        catalog.add(gsNamespace);

        endTransaction();
        startNewTransaction();

        NamespaceInfo defaultNs = catalog.getDefaultNamespace();
        assertEquals(toppNamespace, defaultNs);

        catalog.setDefaultNamespace(gsNamespace);

        endTransaction();
        startNewTransaction();

        defaultNs = catalog.getDefaultNamespace();
        assertEquals(gsNamespace, defaultNs);
    }

    public void testFeatureType() throws Exception {
        System.out.println("========== testFeatureType()");

        // ensure no stores
        clearCatalog();
        removeExistingNS();

        NamespaceInfo namespace = catalog.getFactory().createNamespace();
        namespace.setPrefix(getName());
        namespace.setURI("http://" + getName() + ".openplans.org");
        catalog.add(namespace);

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testFeatureTypeWorkspace");
        catalog.add(ws);

        StyleInfo style = catalog.getFactory().createStyle();
        style.setName("style_testFeatureType");
        style.setFilename("style_testFeatureType");
        catalog.add(style);

        DataStoreInfo dataStore = catalog.getFactory().createDataStore();
        dataStore.setName("dataStore2");
        dataStore.setDescription("store description");
        dataStore.setEnabled(true);
        dataStore.setWorkspace(ws);
        catalog.add(dataStore);

        FeatureTypeInfo refFeatureType = catalog.getFactory().createFeatureType();
        refFeatureType.setName("featureType");
        refFeatureType.setNativeName("nativefeatureType");
        refFeatureType.setTitle("featureType title");
        refFeatureType.setDescription("featureType description");
        refFeatureType.setAbstract("featureType abstract");
        refFeatureType.setSRS("EPSG:4326");
        refFeatureType.setNamespace(namespace);

        FilterFactory factory = CommonFactoryFinder.getFilterFactory(null);
        Filter filter = factory.id(Collections.EMPTY_SET);
        refFeatureType.setFilter(filter);

        CoordinateReferenceSystem crsNative = CRS
                .parseWKT("PROJCS[\"NAD83 / BC Albers\",GEOGCS[\"NAD83\",DATUM[\"North_American_Datum_1983\",SPHEROID[\"GRS 1980\",6378137,298.257222101,AUTHORITY[\"EPSG\",\"7019\"]],TOWGS84[0,0,0],AUTHORITY[\"EPSG\",\"6269\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4269\"]],PROJECTION[\"Albers_Conic_Equal_Area\"],PARAMETER[\"standard_parallel_1\",50],PARAMETER[\"standard_parallel_2\",58.5],PARAMETER[\"latitude_of_center\",45],PARAMETER[\"longitude_of_center\",-126],PARAMETER[\"false_easting\",1000000],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3005\"]]");
        BoundingBox nativeBoundingBox = new ReferencedEnvelope(0, 0, 0, 0, crsNative);
        BoundingBox latLonBoundingBox = new ReferencedEnvelope(-180, 180, -90, 90,
                DefaultGeographicCRS.WGS84);

        refFeatureType.setNativeBoundingBox((ReferencedEnvelope) nativeBoundingBox);
        refFeatureType.setLatLonBoundingBox((ReferencedEnvelope) latLonBoundingBox);

        refFeatureType.setStore(dataStore);

        catalog.add(refFeatureType);

        endTransaction();

        startNewTransaction();

        FeatureTypeInfo loadedFeatureType = catalog.getFeatureType(refFeatureType.getId());
        assertNotNull(loadedFeatureType);

        assertFalse(refFeatureType == loadedFeatureType);
        refFeatureType = loadedFeatureType;

        assertEquals("featureType", refFeatureType.getName());
        assertEquals("featureType title", refFeatureType.getTitle());
        assertEquals("featureType description", refFeatureType.getDescription());
        assertEquals("featureType abstract", refFeatureType.getAbstract());
        assertEquals("EPSG:4326", refFeatureType.getSRS());

        BoundingBox box = refFeatureType.getNativeBoundingBox();
        assertNotNull("Native BBox is null", box);
        assertEquals(0d, box.getMinX(), 0d);
        assertEquals(0d, box.getMinY(), 0d);
        assertEquals(0d, box.getMaxX(), 0d);
        assertEquals(0d, box.getMaxY(), 0d);
        assertTrue(CRS.equalsIgnoreMetadata(crsNative, box.getCoordinateReferenceSystem()));

        box = refFeatureType.getLatLonBoundingBox();
        assertNotNull(box);
        assertEquals(-180d, box.getMinX(), 0d);
        assertEquals(-90d, box.getMinY(), 0d);
        assertEquals(180d, box.getMaxX(), 0d);
        assertEquals(90d, box.getMaxY(), 0d);
        assertTrue(CRS.equalsIgnoreMetadata(DefaultGeographicCRS.WGS84, box
                .getCoordinateReferenceSystem()));

        assertNotNull(refFeatureType.getNamespace());
        assertEquals(getName(), refFeatureType.getNamespace().getPrefix());

        assertNotNull(refFeatureType.getStore());
        assertEquals("dataStore2", refFeatureType.getStore().getName());
        endTransaction();

        startNewTransaction();
        loadedFeatureType = catalog.getFeatureTypeByName(namespace.getPrefix(), refFeatureType
                .getName());
        assertNotNull(loadedFeatureType);

        loadedFeatureType = catalog.getFeatureTypeByName(namespace.getURI(), refFeatureType
                .getName());
        assertNotNull(loadedFeatureType);
    }

    public void testCoverage() {
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        NamespaceInfo namespace = catalog.getFactory().createNamespace();
        namespace.setPrefix(getName());
        namespace.setURI("http://" + getName() + ".openplans.org");
        catalog.add(namespace);

        StyleInfo style = catalog.getFactory().createStyle();
        style.setName("style_testCoverage");
        style.setFilename("style_testCoverage");
        catalog.add(style);

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testCoverageWorkspace");
        catalog.add(ws);

        endTransaction();
        startNewTransaction();

        CoverageStoreInfo coverageStore = catalog.getFactory().createCoverageStore();
        coverageStore.setName("coverageStore2");
        coverageStore.setWorkspace(ws);

        catalog.add(coverageStore);

        CoverageInfo coverage = catalog.getFactory().createCoverage();
        coverage.setName("coverage");
        coverage.setNativeName("nativename");
        coverage.setTitle("coverage title");
        coverage.setDescription("coverage description");
        coverage.setAbstract("coverage abstract");
        coverage.setSRS("EPSG:4326");
        coverage.setNamespace(namespace);
        coverage.setStore(coverageStore);
        coverage
                .setNativeBoundingBox(new ReferencedEnvelope(0, 0, 0, 0, DefaultGeographicCRS.WGS84));
        coverage
                .setLatLonBoundingBox(new ReferencedEnvelope(0, 0, 0, 0, DefaultGeographicCRS.WGS84));

        coverage.setNativeFormat("nativeFormat");
        coverage.getSupportedFormats().add("supportedFormat1");
        coverage.getSupportedFormats().add("supportedFormat2");

        coverage.setDefaultInterpolationMethod("defaultInterpolationMethod");
        coverage.getInterpolationMethods().add("interpolationMethod1");
        coverage.getInterpolationMethods().add("interpolationMethod2");

        coverage.getRequestSRS().add("EPSG:3003");
        coverage.getRequestSRS().add("EPSG:4326");
        coverage.getResponseSRS().add("EPSG:42102");

        catalog.add(coverage);

        endTransaction();

        startNewTransaction();
        CoverageInfo coverage1 = catalog.getCoverage(coverage.getId());
        assertNotNull(coverage1);

        // assertFalse( coverage == coverage1 );
        coverage = ModificationProxy.unwrap(coverage1);

        assertEquals("nativeFormat", coverage.getNativeFormat());
        assertEquals(2, coverage.getSupportedFormats().size());
        assertTrue(coverage.getSupportedFormats().contains("supportedFormat1"));
        assertTrue(coverage.getSupportedFormats().contains("supportedFormat2"));

        assertEquals("defaultInterpolationMethod", coverage.getDefaultInterpolationMethod());
        assertEquals(2, coverage.getInterpolationMethods().size());
        assertTrue(coverage.getInterpolationMethods().contains("interpolationMethod1"));
        assertTrue(coverage.getInterpolationMethods().contains("interpolationMethod2"));

        assertEquals(2, coverage.getRequestSRS().size());
        assertEquals(1, coverage.getResponseSRS().size());
        assertTrue(coverage.getRequestSRS().contains("EPSG:3003"));
        assertTrue(coverage.getRequestSRS().contains("EPSG:4326"));
        assertTrue(coverage.getResponseSRS().contains("EPSG:42102"));
        endTransaction();

        startNewTransaction();
        coverage1 = catalog.getCoverageByName(namespace.getPrefix(), coverage.getName());
        assertNotNull(coverage1);

        coverage1 = catalog.getCoverageByName(namespace.getURI(), coverage.getName());
        assertNotNull(coverage1);
    }

    public void testMap() {
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testLayerWorkspace");
        catalog.add(ws);
        NamespaceInfo ns = catalog.getFactory().createNamespace();
        ns.setPrefix("testLayerWorkspace");
        ns.setURI("http://testLayerWorkspace.org");
        catalog.add(ns);

        LayerInfo layer1 = createLayer(ws, "cs1", "cov1", "ncov1", "test coverage 1", "testlayer1");
        LayerInfo layer2 = createLayer(ws, "cs2", "cov2", "ncov2", "test coverage 2", "testlayer2");

        MapInfo map1 = catalog.getFactory().createMap();
        map1.setName("map_testLayer");
        map1.getLayers().add(layer1);
        map1.getLayers().add(layer2);
        catalog.add(map1);

        endTransaction();
        startNewTransaction();

        MapInfo map2 = catalog.getMap(map1.getId());
        assertNotNull(map2);
        map2 = ModificationProxy.unwrap(map2);

        // assertTrue( map1 != map2 );

        assertEquals(2, map2.getLayers().size());
    }

    public void testLayerGroup() {
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testLayerWorkspace");
        catalog.add(ws);
        NamespaceInfo ns = catalog.getFactory().createNamespace();
        ns.setPrefix("testLayerWorkspace");
        ns.setURI("http://testLayerWorkspace.org");
        catalog.add(ns);

        LayerInfo layer1 = createLayer(ws, "cs1", "cov1", "ncov1", "test coverage 1", "testlayer1");
        LayerInfo layer2 = createLayer(ws, "cs2", "cov2", "ncov2", "test coverage 2", "testlayer2");

        LayerGroupInfo layerGroupInfo = catalog.getFactory().createLayerGroup();
        layerGroupInfo.setName("TestLayerGroup");
        layerGroupInfo.getLayers().add(layer1);
        layerGroupInfo.getLayers().add(layer2);

        ReferencedEnvelope re = new ReferencedEnvelope(10, 20, -20, -10, DefaultGeographicCRS.WGS84);
        layerGroupInfo.setBounds(re);

        catalog.add(layerGroupInfo);

        endTransaction();
        startNewTransaction();

        LayerGroupInfo reloaded = catalog.getLayerGroup(layerGroupInfo.getId());
        assertNotNull(reloaded);

        ReferencedEnvelope reReloaded = reloaded.getBounds();
        assertNotNull(reReloaded);
        assertEquals(re.getMinX(), reReloaded.getMinX());
    }

    public void testLayerGroupUpdate() {
        // ensure no stores
        clearCatalog();
        removeExistingNS();

        // store needs a workspace...
        WorkspaceInfo ws = catalog.getFactory().createWorkspace();
        ws.setName("testLayerWorkspace");
        catalog.add(ws);
        NamespaceInfo ns = catalog.getFactory().createNamespace();
        ns.setPrefix("testLayerWorkspace");
        ns.setURI("http://testLayerWorkspace.org");
        catalog.add(ns);

        LayerInfo layer1 = createLayer(ws, "cs1", "cov1", "ncov1", "test coverage 1", "testlayer1");
        LayerInfo layer2 = createLayer(ws, "cs2", "cov2", "ncov2", "test coverage 2", "testlayer2");

        LayerGroupInfo layerGroupInfo = catalog.getFactory().createLayerGroup();
        layerGroupInfo.setName("TestLayerGroup_SAVE_UPDATE");
        layerGroupInfo.getLayers().add(layer1);
        layerGroupInfo.getLayers().add(layer2);

        ReferencedEnvelope re = new ReferencedEnvelope(10, 20, -20, -10, DefaultGeographicCRS.WGS84);
        layerGroupInfo.setBounds(re);

        StyleInfo style = catalog.getFactory().createStyle();
        style.setName("style_test");
        style.setFilename("style_test");
        catalog.add(style);

        layerGroupInfo.getStyles().add(style);
        layerGroupInfo.getStyles().add(null);

        catalog.add(layerGroupInfo);

        assertEquals(2, layerGroupInfo.getStyles().size());

        endTransaction();

        {
            startNewTransaction();

            LayerGroupInfo reloaded = catalog.getLayerGroup(layerGroupInfo.getId());
            assertNotNull(reloaded);

            assertEquals("Styles has not been saved", 2, reloaded.getStyles().size());

            reloaded.getLayers().remove(1);
            reloaded.getStyles().remove(1);

            assertEquals("GroupedLayer is broken", 1, reloaded.getStyles().size());
            assertEquals("GroupedLayer is broken", 1, reloaded.getLayers().size());

            LOGGER.info("A Layer was removed from the group, total should be 1 - SAVING");
            catalog.save(reloaded);
            LOGGER.info("After saving, IN transaction, 1 expected:  " + reloaded);
            endTransaction();
            LOGGER.info("After saving, OUT transaction, 1 expected: " + reloaded);

            assertEquals(layerGroupInfo.getId(), reloaded.getId());
            assertFalse(layerGroupInfo == reloaded);
        }


        {
            startNewTransaction();
            LayerGroupInfo reloaded2 = catalog.getLayerGroup(layerGroupInfo.getId());
            assertNotNull(reloaded2);

            assertEquals("GroupedLayer remove/update is broken", 1, reloaded2.getStyles().size());
            assertEquals("GroupedLayer remove/update is broken", 1, reloaded2.getLayers().size());

            endTransaction();
            startNewTransaction();

            reloaded2.getLayers().add(layer2);
            reloaded2.getStyles().add(null);

            LOGGER.info("A Layer was added to the group, total should be 2 - SAVING");
            catalog.save(reloaded2);
            LOGGER.info("After saving, IN transaction, 2 expected:  " + reloaded2);
            endTransaction();
            LOGGER.info("After saving, OUT transaction, 2 expected: " + reloaded2);
        }

        {
            startNewTransaction();

            LayerGroupInfo reloaded3 = catalog.getLayerGroup(layerGroupInfo.getId());
            assertNotNull(reloaded3);

            assertEquals("GroupedLayer add/update is broken", 2, reloaded3.getStyles().size());
            assertEquals("GroupedLayer add/update is broken", 2, reloaded3.getLayers().size());
        }

    }

    private LayerInfo createLayer(WorkspaceInfo ws, String csname, String covname, String covnname,
            String covtitle, String lname) {
        LayerInfo layer1;

        CoverageStoreInfo coverageStore = catalog.getFactory().createCoverageStore();
        coverageStore.setName(csname);
        coverageStore.setWorkspace(ws);

        catalog.add(coverageStore);

        CoverageInfo coverage = catalog.getFactory().createCoverage();
        coverage.setName(covname);
        coverage.setNativeName(covnname);
        coverage.setTitle(covtitle);
        coverage.setStore(coverageStore);
        // coverage.setNativeBoundingBox(new ReferencedEnvelope(0, 0, 0, 0,
        // DefaultGeographicCRS.WGS84));
        // coverage.setLatLonBoundingBox(new ReferencedEnvelope(0, 0, 0, 0,
        // DefaultGeographicCRS.WGS84));
        catalog.add(coverage);

        layer1 = catalog.getFactory().createLayer();
        layer1.setResource(coverage);
        layer1.setName(lname);

        logger.warn("LYID:     " + layer1.getId());
        logger.warn("COVERAGE: " + layer1.getResource());
        logger.warn("COVSTORE: " + ((CoverageInfo) layer1.getResource()).getStore());

        catalog.add(layer1);

        return layer1;
    }

    public void setCatalogDAO(CatalogDAO catalogDAO) {
        this.catalogDAO = catalogDAO;
    }

}
TOP

Related Classes of org.geoserver.catalog.hibernate.HibernateCatalogTest

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.