package io.blobkeeper.cluster.configuration;
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
import com.google.inject.spi.InjectionListener;
import com.google.inject.spi.TypeEncounter;
import com.google.inject.spi.TypeListener;
import io.blobkeeper.cluster.util.ReplicationStatistic;
import io.blobkeeper.common.configuration.ClassToTypeLiteralMatcherAdapter;
import static com.google.inject.matcher.Matchers.subclassesOf;
public class ClusterModule extends AbstractModule {
@Override
protected void configure() {
install(new JGroupsModule());
binder().bindListener(new ClassToTypeLiteralMatcherAdapter(subclassesOf(ReplicationStatistic.class)), new TypeListener() {
@Override
public <I> void hear(TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
typeEncounter.register(
(InjectionListener<I>) injectedObject -> {
ReplicationStatistic handler = (ReplicationStatistic) injectedObject;
handler.init();
}
);
}
});
}
}