package org.geoserver.catalog.hibernate;
import java.util.logging.Logger;
import org.geoserver.catalog.DataStoreInfo;
import org.geoserver.catalog.event.CatalogAddEvent;
import org.geoserver.catalog.event.CatalogListener;
import org.geoserver.catalog.event.CatalogModifyEvent;
import org.geoserver.catalog.event.CatalogPostModifyEvent;
import org.geoserver.catalog.event.CatalogRemoveEvent;
import org.geoserver.catalog.impl.WorkspaceInfoImpl;
import org.geoserver.config.hibernate.HibGeoServerImpl;
import org.geoserver.hibernate.HibTestSupport;
import org.geotools.util.logging.Logging;
public class HibernateCatalogEventTest extends HibTestSupport {
HibCatalogImpl catalog;
HibGeoServerImpl geoServer;
// public void setDataSource(org.apache.commons.dbcp.BasicDataSource ds) {
// System.out.println("SETTING DS " + ds);
// super.setDataSource(ds);
// }
protected void onSetUpBeforeTransaction() throws Exception {
super.onSetUpBeforeTransaction();
catalog = (HibCatalogImpl) applicationContext.getBean("catalogTarget");
catalog.setFireEventsOnCommit(true);
geoServer = (HibGeoServerImpl) applicationContext.getBean("configTarget");
// HibBootstrapper bootstrapper = new HibBootstrapper(catalog, geoServer);
// bootstrapper.createBaseObjects();
}
public void testDummy() {
logger.warn("TODO: event handling has changed in GS2 -- please replace hibernate tests");
}
public void _testAddStore() {
logger.error("------------------> running testAddStore");
logger.warn("fire on commit? " + catalog.isFireEventsOnCommit());
Listener listener = new Listener();
catalog.addListener(listener);
DataStoreInfo store = catalog.getFactory().createDataStore();
store.setName("foo" + System.currentTimeMillis()); // we need a unique name
store.setDescription("testAddStore() "); // just for data debugging
WorkspaceInfoImpl ws = catalog.getFactory().createWorkspace();
ws.setName("testAddStore" + System.currentTimeMillis()); // we need a unique name
catalog.add(ws);
store.setWorkspace(ws);
catalog.add(store);
assertFalse("Listener added, shouldn't", listener.added);
endTransaction();
assertTrue("Listener not added", listener.added);
assertFalse("Listener modified, it should not.", listener.modified);
}
public void _testModifyStore() {
logger.error("------------------> running testModifyStore");
DataStoreInfo store = catalog.getFactory().createDataStore();
store.setName("bar");
WorkspaceInfoImpl ws = catalog.getFactory().createWorkspace();
ws.setName("testModifyStore" + System.currentTimeMillis()); // we need a unique name
catalog.add(ws);
store.setWorkspace(ws);
catalog.add(store);
endTransaction();
startNewTransaction();
Listener listener = new Listener();
catalog.addListener(listener);
store = (DataStoreInfo) catalog.getDataStore(store.getId());
store.setName("bar2");
catalog.save(store);
assertFalse("Listener modified, it should not.", listener.modified);
endTransaction();
assertTrue("Listener not modified.", listener.modified);
}
// public void testModifyStore() {
// session.beginTransaction();
//
// Listener listener = new Listener() {
// public void storeModified(StoreInfo store, List properties, List oldValues, List newValues) {
// assertEquals( 1, properties.size() );
// assertEquals( "name", properties.get( 0 ) );
// assertNull( oldValues.get( 0 ) );
// assertEquals( "theName", newValues.get( 0 ) );
// }
// };
// catalog.addListener( listener );
//
// DataStoreInfo store = catalog.getFactory().createDataStore();
// catalog.add( store );
//
// store.setName("theName");
// catalog.save( store );
//
// session.getTransaction().commit();
//
// }
//
// public void testRemoveStore() {
// session.beginTransaction();
//
// Listener listener = new Listener();
// catalog.addListener( listener );
//
// DataStoreInfo store = catalog.getFactory().createDataStore();
// catalog.add( store );
// session.getTransaction().commit();
//
// session.beginTransaction();
//
// catalog.remove( store );
// assertTrue( listener.storeRemoved );
//
// session.getTransaction().commit();
//
// }
static class Listener implements CatalogListener {
private static Logger LOGGER = Logging.getLogger(Listener.class);
boolean added;
boolean removed;
boolean modified;
public void handleAddEvent(CatalogAddEvent event) {
// LOGGER.warning("EVENT: handleAddEvent " +
// event.getSource().getClass().getSimpleName());
added = true;
}
public void handleRemoveEvent(CatalogRemoveEvent event) {
// LOGGER.warning("EVENT: handleRemoveEvent " +
// event.getSource().getClass().getSimpleName());
removed = true;
}
public void handleModifyEvent(CatalogModifyEvent event) {
// LOGGER.warning("EVENT: handleModifyEvent " +
// event.getSource().getClass().getSimpleName());
modified = true;
}
public void reloaded() {
Logger.getLogger(Listener.class.getName()).warning("reloaded() not implemented");
}
public void handlePostModifyEvent(CatalogPostModifyEvent event) {
Logger.getLogger(Listener.class.getName()).warning(
"PostModify " + event.getSource().getClass().getSimpleName());
}
}
}