package org.geoserver.catalog.hib;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import org.geoserver.catalog.CatalogFacade;
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.NamespaceInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.StoreInfo;
import org.geoserver.catalog.StyleInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.geoserver.hibernate.HibTestSupport;
import org.geoserver.hibernate.HibUtil;
import org.h2.tools.DeleteDbFiles;
import org.hibernate.SessionFactory;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class HibCatalogFacadeTest extends HibTestSupport {
static CatalogFacade dao;
@BeforeClass
public static void init() throws Exception {
dao = (CatalogFacade) ctx.getBean("hibCatalogFacade");
}
@AfterClass
public static void destroy() throws Exception {
ctx.close();
DeleteDbFiles.execute(".", "geoserver", false);
}
@Before
public void setUpData() throws Exception {
//clear the catalog
for (LayerGroupInfo lg : dao.getLayerGroups()) { dao.remove(lg); }
for (LayerInfo l : dao.getLayers()) { dao.remove(l); }
for (ResourceInfo r : dao.getResources(ResourceInfo.class)) { dao.remove(r); }
for (StoreInfo s : dao.getStores(StoreInfo.class)) { dao.remove(s); }
for (WorkspaceInfo ws : dao.getWorkspaces()){ dao.remove(ws); }
for (NamespaceInfo ns : dao.getNamespaces()){ dao.remove(ns); }
for (StyleInfo s : dao.getStyles()){ dao.remove(s); }
assertEquals(0, dao.getWorkspaces().size());
}
@Test
public void testAddWorkspace() throws Exception {
assertEquals(0, dao.getWorkspaces().size());
WorkspaceInfo ws = dao.getCatalog().getFactory().createWorkspace();
ws.setName("acme");
assertNull(ws.getId());
dao.add(ws);
assertNotNull(ws.getId());
assertEquals(1, dao.getWorkspaces().size());
assertEquals(ws, dao.getWorkspace(ws.getId()));
}
@Test
public void testGetWorkspaceByName() throws Exception {
assertNull(dao.getWorkspaceByName("acme"));
testAddWorkspace();
assertNotNull(dao.getWorkspaceByName("acme"));
}
@Test
public void testModifyWorkspace() throws Exception {
WorkspaceInfo ws = dao.getCatalog().getFactory().createWorkspace();
ws.setName("foo");
dao.add(ws);
ws = dao.getWorkspaceByName("foo");
ws.setName("bar");
dao.save(ws);
assertNull(dao.getWorkspaceByName("foo"));
assertNotNull(dao.getWorkspaceByName("bar"));
}
@Test
public void testRemoveWorkspace() throws Exception {
WorkspaceInfo ws = dao.getCatalog().getFactory().createWorkspace();
ws.setName("baz");
dao.add(ws);
assertNotNull(dao.getWorkspaceByName("baz"));
int n = dao.getWorkspaces().size();
dao.remove(ws);
assertNull(dao.getWorkspaceByName("baz"));
assertEquals(n-1, dao.getWorkspaces().size());
}
@Test
public void testDefaultWorkspace() throws Exception {
testAddWorkspace();
assertNull(dao.getDefaultWorkspace());
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
dao.setDefaultWorkspace(ws);
assertNotNull(dao.getDefaultWorkspace());
assertEquals("acme", dao.getDefaultWorkspace().getName());
ws = dao.getCatalog().getFactory().createWorkspace();
ws.setName("bam");
dao.add(ws);
dao.setDefaultWorkspace(ws);
assertEquals("bam", dao.getDefaultWorkspace().getName());
dao.setDefaultWorkspace(null);
assertNull(dao.getDefaultWorkspace());
}
@Test
public void testAddNamespace() throws Exception {
assertEquals(0, dao.getNamespaces().size());
NamespaceInfo ws = dao.getCatalog().getFactory().createNamespace();
ws.setPrefix("acme");
ws.setURI("http://acme.com");
assertNull(ws.getId());
dao.add(ws);
assertNotNull(ws.getId());
assertEquals(1, dao.getNamespaces().size());
assertEquals(ws, dao.getNamespace(ws.getId()));
}
@Test
public void testGetNamespace() throws Exception {
assertNull(dao.getNamespaceByPrefix("acme"));
testAddNamespace();
assertNotNull(dao.getNamespaceByPrefix("acme"));
assertNotNull(dao.getNamespaceByURI("http://acme.com"));
}
@Test
public void testModifyNamespace() throws Exception {
NamespaceInfo ws = dao.getCatalog().getFactory().createNamespace();
ws.setPrefix("foo");
ws.setURI("http://foo.org");
dao.add(ws);
ws = dao.getNamespaceByPrefix("foo");
ws.setPrefix("bar");
dao.save(ws);
assertNull(dao.getNamespaceByPrefix("foo"));
assertNotNull(dao.getNamespaceByPrefix("bar"));
}
@Test
public void testRemoveNamespace() throws Exception {
NamespaceInfo ws = dao.getCatalog().getFactory().createNamespace();
ws.setPrefix("baz");
ws.setURI("http://baz.org");
dao.add(ws);
assertNotNull(dao.getNamespaceByPrefix("baz"));
int n = dao.getNamespaces().size();
dao.remove(ws);
assertNull(dao.getNamespaceByPrefix("baz"));
assertEquals(n-1, dao.getNamespaces().size());
}
@Test
public void testDefaultNamespace() throws Exception {
testAddNamespace();
assertNull(dao.getDefaultNamespace());
NamespaceInfo ws = dao.getNamespaceByPrefix("acme");
dao.setDefaultNamespace(ws);
assertNotNull(dao.getDefaultNamespace());
assertEquals("acme", dao.getDefaultNamespace().getName());
ws = dao.getCatalog().getFactory().createNamespace();
ws.setPrefix("bam");
dao.add(ws);
dao.setDefaultNamespace(ws);
assertEquals("bam", dao.getDefaultNamespace().getName());
dao.setDefaultNamespace(null);
assertNull(dao.getDefaultNamespace());
}
@Test
public void testAddDataStore() throws Exception {
testAddWorkspace();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
assertEquals(0, dao.getStoresByWorkspace(ws, DataStoreInfo.class).size());
DataStoreInfo ds = dao.getCatalog().getFactory().createDataStore();
ds.setWorkspace(ws);
ds.setName("widgets");
dao.add(ds);
assertEquals(1, dao.getStoresByWorkspace(ws, DataStoreInfo.class).size());
}
@Test
public void testModifyDataStore() throws Exception {
testAddDataStore();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
DataStoreInfo ds = dao.getStoreByName( ws, "widgets", DataStoreInfo.class );
ds.setName("foo");
dao.save(ds);
assertNull(dao.getStoreByName( ws, "widgets", DataStoreInfo.class));
assertNotNull(dao.getStoreByName( ws, "foo", DataStoreInfo.class));
}
@Test
public void testRemoveDataStore() throws Exception {
testAddDataStore();
assertEquals(1, dao.getStores(DataStoreInfo.class).size());
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
DataStoreInfo ds = dao.getStoreByName( ws, "widgets", DataStoreInfo.class );
dao.remove(ds);
assertNull(dao.getStoreByName( ws, "widgets", DataStoreInfo.class ));
assertEquals(0, dao.getStores(DataStoreInfo.class).size());
}
@Test
public void testDefaultDataStore() throws Exception {
testAddDataStore();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
DataStoreInfo ds = dao.getStoreByName(ws, "widgets", DataStoreInfo.class);
dao.setDefaultDataStore(ws, ds);
DataStoreInfo ds1 = dao.getDefaultDataStore(ws);
assertEquals(ds, ds1);
DataStoreInfo ds2 = dao.getCatalog().getFactory().createDataStore();
ds2.setWorkspace(ws);
ds2.setName("things");
dao.add(ds2);
dao.setDefaultDataStore(ws, ds2);
assertEquals(dao.getStoreByName(ws, "things", DataStoreInfo.class), ds2);
}
@Test
public void testAddCoverageStore() throws Exception {
testAddWorkspace();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
assertEquals(0, dao.getStoresByWorkspace(ws, CoverageStoreInfo.class).size());
CoverageStoreInfo cs = dao.getCatalog().getFactory().createCoverageStore();
cs.setWorkspace(ws);
cs.setName("widgets");
dao.add(cs);
assertEquals(1, dao.getStoresByWorkspace(ws, CoverageStoreInfo.class).size());
}
@Test
public void testModifyCoverageStore() throws Exception {
testAddCoverageStore();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
CoverageStoreInfo cs = dao.getStoreByName( ws, "widgets", CoverageStoreInfo.class );
cs.setName("foo");
dao.save(cs);
assertNull(dao.getStoreByName( ws, "widgets", CoverageStoreInfo.class));
assertNotNull(dao.getStoreByName( ws, "foo", CoverageStoreInfo.class));
}
@Test
public void testRemoveCoverageStore() throws Exception {
testAddCoverageStore();
assertEquals(1, dao.getStores(CoverageStoreInfo.class).size());
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
CoverageStoreInfo cs = dao.getStoreByName( ws, "widgets", CoverageStoreInfo.class );
dao.remove(cs);
assertNull(dao.getStoreByName( ws, "widgets", CoverageStoreInfo.class ));
assertEquals(0, dao.getStores(CoverageStoreInfo.class).size());
}
@Test
public void testAddFeatureType() throws Exception {
testAddDataStore();
testAddNamespace();
DataStoreInfo ds =
dao.getStoreByName(dao.getWorkspaceByName("acme"), "widgets", DataStoreInfo.class );
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
assertNull(dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class));
FeatureTypeInfo ft = dao.getCatalog().getFactory().createFeatureType();
ft.setName("anvil");
ft.setNativeName("anvil");
ft.setStore(ds);
ft.setNamespace(ns);
dao.add(ft);
assertNotNull(dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class));
}
@Test
public void testModifyFeatureType() throws Exception {
testAddFeatureType();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
FeatureTypeInfo ft = dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class);
ft.setName("dynamite");
dao.save(ft);
assertNull(dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class));
assertNotNull(dao.getResourceByName(ns, "dynamite", FeatureTypeInfo.class));
}
@Test
public void testRemoveFeatureType() throws Exception {
testAddFeatureType();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
FeatureTypeInfo ft = dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class);
dao.remove(ft);
assertNull(dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class));
}
@Test
public void testGetFeatureType() throws Exception {
testAddFeatureType();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
DataStoreInfo ds = dao.getStoreByName(ws, "widgets", DataStoreInfo.class);
assertNotNull(dao.getResourceByStore(ds, "anvil", FeatureTypeInfo.class));
assertEquals(1, dao.getResourcesByStore(ds, FeatureTypeInfo.class).size());
assertNotNull(dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class));
assertEquals(1, dao.getResourcesByNamespace(ns, FeatureTypeInfo.class).size());
}
@Test
public void testAddCoverage() throws Exception {
testAddCoverageStore();
testAddNamespace();
CoverageStoreInfo ds =
dao.getStoreByName(dao.getWorkspaceByName("acme"), "widgets", CoverageStoreInfo.class );
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
assertNull(dao.getResourceByName(ns, "anvil", CoverageInfo.class));
CoverageInfo ft = dao.getCatalog().getFactory().createCoverage();
ft.setName("anvil");
ft.setNativeName("anvil");
ft.setStore(ds);
ft.setNamespace(ns);
dao.add(ft);
assertNotNull(dao.getResourceByName(ns, "anvil", CoverageInfo.class));
}
@Test
public void testModifyCoverage() throws Exception {
testAddCoverage();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
CoverageInfo ft = dao.getResourceByName(ns, "anvil", CoverageInfo.class);
ft.setName("dynamite");
dao.save(ft);
assertNull(dao.getResourceByName(ns, "anvil", CoverageInfo.class));
assertNotNull(dao.getResourceByName(ns, "dynamite", CoverageInfo.class));
}
@Test
public void testRemoveCoverage() throws Exception {
testAddCoverage();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
CoverageInfo ft = dao.getResourceByName(ns, "anvil", CoverageInfo.class);
dao.remove(ft);
assertNull(dao.getResourceByName(ns, "anvil", CoverageInfo.class));
}
@Test
public void testGetCoverage() throws Exception {
testAddCoverage();
WorkspaceInfo ws = dao.getWorkspaceByName("acme");
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
CoverageStoreInfo ds = dao.getStoreByName(ws, "widgets", CoverageStoreInfo.class);
assertNotNull(dao.getResourceByStore(ds, "anvil", CoverageInfo.class));
assertEquals(1, dao.getResourcesByStore(ds, CoverageInfo.class).size());
assertNotNull(dao.getResourceByName(ns, "anvil", CoverageInfo.class));
assertEquals(1, dao.getResourcesByNamespace(ns, CoverageInfo.class).size());
}
@Test
public void testAddStyle() throws Exception {
StyleInfo s = dao.getCatalog().getFactory().createStyle();
s.setName("blue");
dao.add(s);
assertEquals(s, dao.getStyleByName("blue"));
}
@Test
public void testModifyStyle() throws Exception {
testAddStyle();
StyleInfo st = dao.getStyleByName("blue");
st.setName("red");
dao.save(st);
assertNull(dao.getStyleByName("blue"));
assertNotNull(dao.getStyleByName("red"));
}
@Test
public void testRemoveStyle() throws Exception {
testAddStyle();
StyleInfo st = dao.getStyleByName("blue");
dao.remove(st);
assertNull(dao.getStyleByName("blue"));
}
@Test
public void testAddLayer() throws Exception {
testAddFeatureType();
testAddStyle();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
FeatureTypeInfo ft = dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class);
StyleInfo s = dao.getStyleByName("blue");
LayerInfo l = dao.getCatalog().getFactory().createLayer();
l.setPath("/anvil");
l.setResource(ft);
l.setDefaultStyle(s);
dao.add(l);
assertEquals(l, dao.getLayerByName("anvil"));
}
@Test
public void testModifyLayer() throws Exception {
testAddLayer();
LayerInfo l = dao.getLayerByName("anvil");
l.setPath("changed");
dao.save(l);
l = dao.getLayerByName("anvil");
assertEquals("changed", l.getPath());
}
@Test
public void testRemoveLayer() throws Exception {
testAddLayer();
LayerInfo l = dao.getLayerByName("anvil");
dao.remove(l);
assertNull(dao.getLayerByName("anvil"));
}
@Test
public void testGetLayer() throws Exception {
testAddLayer();
NamespaceInfo ns = dao.getNamespaceByPrefix("acme");
FeatureTypeInfo ft = dao.getResourceByName(ns, "anvil", FeatureTypeInfo.class);
assertEquals(1, dao.getLayers(ft).size());
StyleInfo s1 = dao.getStyleByName("blue");
assertEquals(1, dao.getLayers(s1).size());
//TODO: we need to ge tthe following test to pass
// StyleInfo s2 = dao.getCatalog().getFactory().createStyle();
// s2.setName("red");
// dao.add(s2);
//
// LayerInfo l = dao.getLayerByName("anvil");
// l.getStyles().add(s2);
// dao.save(l);
//
// assertEquals(1, dao.getLayers(s2).size());
}
@Test
public void testAddLayerGroup() throws Exception {
testAddLayer();
LayerInfo l = dao.getLayerByName("anvil");
LayerGroupInfo lg = dao.getCatalog().getFactory().createLayerGroup();
lg.setName("anvils");
lg.getLayers().add(l);
dao.add(lg);
assertEquals(lg, dao.getLayerGroupByName("anvils"));
}
}