package org.geoserver.catalog.hib;
import java.lang.reflect.Method;
import java.util.List;
import org.geoserver.catalog.Catalog;
import org.geoserver.catalog.CatalogFacade;
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.catalog.impl.CatalogImplTest;
import org.geoserver.hibernate.HibUtil;
import org.hibernate.SessionFactory;
import org.springframework.web.context.support.XmlWebApplicationContext;
public class HibCatalogImplTest extends CatalogImplTest {
XmlWebApplicationContext ctx;
SessionFactory sessionFactory;
@Override
protected Catalog createCatalog() {
ctx = new XmlWebApplicationContext() {
public String[] getConfigLocations() {
return new String[]{
"file:src/main/resources/applicationContext.xml",
"file:src/test/resources/applicationContext-test.xml"
};
}
};
ctx.refresh();
return (Catalog) ctx.getBean("catalog");
}
@Override
protected void setUp() throws Exception {
super.setUp();
sessionFactory = (SessionFactory) ctx.getBean("hibSessionFactory");
HibUtil.setUpSession(sessionFactory, true);
CatalogFacade dao = catalog.getFacade();
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); }
}
@Override
protected void tearDown() throws Exception {
HibUtil.tearDownSession(sessionFactory, null);
}
@Override
public void testProxyBehaviour() throws Exception {
// do nothing, does not apply
}
@Override
public void testProxyListBehaviour() throws Exception {
// do nothing, does not apply
}
@Override
public void testModifyMetadata() {
// TODO: currently this does not work becuae hibernate does not intercept the change to the
// metadata map... figure out how to do this.
}
@Override
public void testGetNamespaceById() {
catalog.add( ns );
NamespaceInfo ns2 = catalog.getNamespace(ns.getId());
assertNotNull(ns2);
assertEquals( ns, ns2 );
}
@Override
public void testGetNamespaceByPrefix() {
catalog.add( ns );
NamespaceInfo ns2 = catalog.getNamespaceByPrefix(ns.getPrefix());
assertNotNull(ns2);
assertEquals( ns, ns2 );
NamespaceInfo ns3 = catalog.getNamespaceByPrefix(null);
assertNotNull(ns3);
assertEquals( ns, ns3 );
NamespaceInfo ns4 = catalog.getNamespaceByPrefix(Catalog.DEFAULT);
assertNotNull(ns4);
assertEquals( ns, ns4 );
}
@Override
public void testGetNamespaceByURI() {
catalog.add( ns );
NamespaceInfo ns2 = catalog.getNamespaceByURI(ns.getURI());
assertNotNull(ns2);
assertEquals( ns, ns2 );
}
@Override
public void testModifyNamespace() {
catalog.add( ns );
NamespaceInfo ns2 = catalog.getNamespaceByPrefix(ns.getPrefix());
ns2.setPrefix( null );
ns2.setURI( null );
try {
catalog.save(ns2);
fail( "setting prefix to null should throw exception");
}
catch( Exception e ) {
}
ns2.setPrefix( "ns2Prefix" );
try {
catalog.save(ns2);
fail( "setting uri to null should throw exception");
}
catch( Exception e ) {
}
ns2.setURI( "ns2URI");
catalog.save( ns2 );
//ns3 = catalog.getNamespaceByPrefix(ns.getPrefix());
NamespaceInfo ns3 = catalog.getNamespaceByPrefix("ns2Prefix");
assertEquals(ns2, ns3);
assertEquals( "ns2Prefix", ns3.getPrefix() );
assertEquals( "ns2URI", ns3.getURI() );
}
@Override
public void testGetWorkspaceById() {
catalog.add( ws );
WorkspaceInfo ws2 = catalog.getWorkspace(ws.getId());
assertNotNull(ws2);
assertEquals( ws, ws2 );
}
@Override
public void testGetWorkspaceByName() {
catalog.add( ws );
WorkspaceInfo ws2 = catalog.getWorkspaceByName(ws.getName());
assertNotNull(ws2);
assertEquals( ws, ws2 );
WorkspaceInfo ws3 = catalog.getWorkspaceByName(null);
assertNotNull(ws3);
assertEquals( ws, ws3 );
WorkspaceInfo ws4 = catalog.getWorkspaceByName(Catalog.DEFAULT);
assertNotNull(ws4);
assertEquals( ws, ws4 );
}
@Override
public void testModifyWorkspace() {
catalog.add( ws );
WorkspaceInfo ws2 = catalog.getWorkspaceByName(ws.getName());
ws2.setName( null );
try {
catalog.save( ws2 );
fail( "setting name to null should throw exception");
}
catch( Exception e) {
}
ws2.setName( "ws2");
catalog.save( ws2 );
WorkspaceInfo ws3 = catalog.getWorkspaceByName(ws2.getName());
assertEquals(ws2, ws3);
assertEquals( "ws2", ws3.getName() );
}
@Override
public void testGetDataStoreById() {
addDataStore();
DataStoreInfo ds2 = catalog.getDataStore(ds.getId());
assertNotNull(ds2);
assertEquals( ds, ds2 );
}
@Override
public void testGetDataStoreByName() {
addDataStore();
DataStoreInfo ds2 = catalog.getDataStoreByName(ds.getName());
assertNotNull(ds2);
assertEquals( ds, ds2 );
DataStoreInfo ds3 = catalog.getDataStoreByName(ws, null);
assertNotNull(ds3);
assertEquals( ds, ds3 );
DataStoreInfo ds4 = catalog.getDataStoreByName(ws, Catalog.DEFAULT);
assertNotNull(ds4);
assertEquals( ds, ds4 );
DataStoreInfo ds5 = catalog.getDataStoreByName(Catalog.DEFAULT, Catalog.DEFAULT);
assertNotNull(ds5);
assertEquals( ds, ds5 );
}
@Override
public void testModifyDataStore() {
addDataStore();
DataStoreInfo ds2 = catalog.getDataStoreByName(ds.getName());
ds2.setName( "dsName2" );
ds2.setDescription( "dsDescription2" );
catalog.save( ds2 );
DataStoreInfo ds3 = catalog.getDataStoreByName("dsName2");
assertEquals(ds2, ds3);
assertEquals( "dsName2", ds3.getName() );
assertEquals( "dsDescription2", ds3.getDescription() );
}
@Override
public void testGetFeatureTypeById() {
addFeatureType();
FeatureTypeInfo ft2 = catalog.getFeatureType(ft.getId());
assertNotNull(ft2);
assertEquals( ft, ft2 );
}
@Override
public void testGetFeatureTypeByName() {
addFeatureType();
FeatureTypeInfo ft2 = catalog.getFeatureTypeByName(ft.getName());
assertNotNull(ft2);
assertEquals( ft, ft2 );
NamespaceInfo ns2 = catalog.getFactory().createNamespace();
ns2.setPrefix( "ns2Prefix" );
ns2.setURI( "ns2URI" );
catalog.add( ns2 );
FeatureTypeInfo ft3 = catalog.getFactory().createFeatureType();
ft3.setName( "ft3Name" );
ft3.setStore( ds );
ft3.setNamespace( ns2 );
catalog.add( ft3 );
FeatureTypeInfo ft4 = catalog.getFeatureTypeByName(ns2.getPrefix(), ft3.getName() );
assertNotNull(ft4);
assertEquals( ft3, ft4 );
ft4 = catalog.getFeatureTypeByName(ns2.getURI(), ft3.getName() );
assertNotNull(ft4);
assertEquals( ft3, ft4 );
}
@Override
public void testModifyFeatureType() {
addFeatureType();
FeatureTypeInfo ft2 = catalog.getFeatureTypeByName(ft.getName());
ft2.setDescription( "ft2Description" );
ft2.getKeywords().add( "ft2");
catalog.save( ft2 );
FeatureTypeInfo ft3 = catalog.getFeatureTypeByName(ft.getName());
assertEquals(ft2, ft3);
assertEquals( "ft2Description", ft3.getDescription() );
assertEquals( 1, ft3.getKeywords().size() );
}
@Override
public void testGetLayerById() {
addLayer();
LayerInfo l2 = catalog.getLayer( l.getId() );
assertNotNull(l2);
assertEquals( l, l2 );
}
@Override
public void testGetLayerByName() {
addLayer();
LayerInfo l2 = catalog.getLayerByName( l.getName() );
assertNotNull(l2);
assertEquals( l, l2 );
}
@Override
public void testGetLayerByResource() {
addLayer();
List<LayerInfo> layers = catalog.getLayers(ft);
assertEquals( 1, layers.size() );
LayerInfo l2 = layers.get(0);
assertEquals( l, l2 );
}
@Override
public void testModifyLayer() {
addLayer();
LayerInfo l2 = catalog.getLayerByName( l.getName() );
l2.setResource( null );
try {
catalog.save(l2);
fail( "setting resource to null should throw exception");
}
catch( Exception e ) {}
l2.setResource(ft);
catalog.save(l2);
// TODO: reinstate with resource/publishing split done
// l3 = catalog.getLayerByName( "changed" );
LayerInfo l3 = catalog.getLayerByName( ft.getName() );
assertNotNull(l3);
}
@Override
public void testGetStyleById() {
addStyle();
StyleInfo s2 = catalog.getStyle( s.getId() );
assertNotNull( s2 );
assertEquals(s,s2);
}
@Override
public void testGetStyleByName() {
addStyle();
StyleInfo s2 = catalog.getStyleByName( s.getName() );
assertNotNull( s2 );
assertEquals(s,s2);
}
@Override
public void testModifyStyle() {
addStyle();
StyleInfo s2 = catalog.getStyleByName( s.getName() );
s2.setName( null );
s2.setFilename( null );
try {
catalog.save(s2);
fail("setting name to null should fail");
}
catch( Exception e ) {}
s2.setName( "s2Name");
try {
catalog.save(s2);
fail("setting filename to null should fail");
}
catch( Exception e ) {}
s2.setFilename( "s2Filename");
catalog.save( s2 );
StyleInfo s3 = catalog.getStyleByName( "styleName" );
assertNull( s3 );
s3 = catalog.getStyleByName( s2.getName() );
assertEquals( s2, s3 );
}
}