package com.levigo.samplelib;
import java.util.logging.Logger;
import com.google.inject.AbstractModule;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.levigo.samplelib.descriptors.ProviderDescriptor;
import com.levigo.samplelib.descriptors.SampleHostDescriptor;
public class SampleHostInstance {
private static final Logger LOG = Logger.getLogger(SampleHostDescriptor.class.getName());
public static final class SampleHostModule extends AbstractModule {
private final SampleHostDescriptor shd;
public SampleHostModule(SampleHostDescriptor shd) {
this.shd = shd;
}
// we have to suppress warnings here as we're configuring using reflection without
// concrete knowledge about the types that we are using.
@SuppressWarnings({
"rawtypes", "unchecked"
})
@Override
protected void configure() {
LOG.info("Configuring sample host '" + shd.getId() + '\'');
// FIXME error detection and prevention
for (ProviderDescriptor pd : shd.getProviders()) {
LOG.info("\tClass '" + pd.getProvidedClass() + "' provided using '" + pd.getProvider()+"'");
final AnnotatedBindingBuilder b = bind(pd.getProvidedClass());
b.toProvider(pd.getProvider());
}
}
}
private final SampleHostDescriptor descriptor;
private final SampleHostModule sampleHostModule;
public SampleHostInstance(SampleHostDescriptor descriptor, SampleHostModule sampleHostModule) {
this.descriptor = descriptor;
this.sampleHostModule = sampleHostModule;
}
public SampleHostDescriptor getDescriptor() {
return descriptor;
}
public SampleHostModule getSampleHostModule() {
return sampleHostModule;
}
}