/* (c) 2015 Open Source Geospatial Foundation - all rights reserved * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.jdbcstore; import javax.sql.DataSource; import org.geoserver.jdbcstore.cache.ResourceCache; import org.geoserver.jdbcstore.internal.JDBCResourceStoreProperties; import org.geoserver.platform.resource.LockProvider; import org.geoserver.platform.resource.Resource; import org.geoserver.platform.resource.ResourceStore; import org.geoserver.platform.resource.ResourceNotificationDispatcher; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import com.google.common.base.Preconditions; /** * Loads JDBCResourceStore if enabled or falls back to regular store if disabled. * * @author Niels Charlier * */ public class JDBCResourceStoreFactoryBean implements FactoryBean<ResourceStore>, InitializingBean { private ResourceStore resourceStore; public JDBCResourceStoreFactoryBean(ResourceStore fallbackStore, DataSource ds, JDBCResourceStoreProperties config) { if (config.isEnabled()) { resourceStore = new JDBCResourceStore(ds, config, fallbackStore); } else { resourceStore = fallbackStore; } } public void setCache(ResourceCache cache) { if (resourceStore instanceof JDBCResourceStore) { ((JDBCResourceStore) resourceStore).setCache(cache); } } /** * Configure LockProvider used during {@link Resource#out()}. * * @param lockProvider LockProvider used for Resource#out() */ public void setLockProvider(LockProvider lockProvider) { if (resourceStore instanceof JDBCResourceStore) { ((JDBCResourceStore) resourceStore).setLockProvider(lockProvider); } } /** * Configure ResourceWatcher * * @param resourceWatcher */ public void setResourceNotificationDispatcher(ResourceNotificationDispatcher resourceWatcher) { if (resourceStore instanceof JDBCResourceStore) { ((JDBCResourceStore) resourceStore).setResourceNotificationDispatcher(resourceWatcher); } } @Override public void afterPropertiesSet() throws Exception { if (resourceStore instanceof JDBCResourceStore) { JDBCResourceStore store = ((JDBCResourceStore) resourceStore); LockProvider lockProvider = store.getLockProvider(); Preconditions .checkState( lockProvider != null, "LockProvider has not been set. Check your applicationContext.xml configuration file for JDBCResourceStoreFactoryBean"); } } @Override public ResourceStore getObject() throws Exception { return resourceStore; } @Override public Class<?> getObjectType() { return ResourceStore.class; } @Override public boolean isSingleton() { return true; } }