package org.openanzo.datasource;
import java.util.List;
import org.openanzo.osgi.ConfiguredServiceActivator;
import org.osgi.framework.BundleContext;
/**
* Base Activator that depends on having the primary datasource available
*
* @author Matthew Roy ( <a href="mailto:mroy@cambridgesemantics.com">mroy@cambridgesemantics.com</a>)
*
*/
public abstract class ConfiguredWithPrimaryDatasourceActivator extends ConfiguredServiceActivator {
PrimaryDatasourceTracker primaryDatasourceTracker = null;
protected IDatasource primaryDatasource = null;
@Override
public void start(BundleContext bundleContext) throws Exception {
super.start(bundleContext);
primaryDatasourceTracker = new PrimaryDatasourceTracker(context, new IDatasourceRegistrationListener() {
public void unregisterDatasource(IDatasource datasource) {
if (primaryDatasource != null && datasource.equals(primaryDatasource)) {
primaryDatasource = null;
stopLocked(false);
}
}
public void registerDatasource(IDatasource datasource) {
lock.lock();
try {
if (primaryDatasource == null) {
primaryDatasource = datasource;
if (isInitialized()) {
startLocked();
}
}
} finally {
lock.unlock();
}
}
});
primaryDatasourceTracker.open();
}
@Override
public void stop(BundleContext context) throws Exception {
primaryDatasourceTracker.close();
super.stop(context);
}
@Override
public boolean isInitialized() {
return super.isInitialized() && primaryDatasource != null;
}
@Override
public List<String> getOkServices() {
List<String> list = super.getOkServices();
if (primaryDatasource != null) {
list.add(IDatasource.class.getName());
}
return list;
}
@Override
public List<String> getWaitingServices() {
List<String> list = super.getWaitingServices();
if (primaryDatasource == null) {
list.add(IDatasource.class.getName());
}
return list;
}
}