package tc.oc.api.model;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import javax.inject.Singleton;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.inject.Key;
import com.google.inject.Provides;
import tc.oc.commons.core.inject.HybridManifest;
public class ModelsManifest extends HybridManifest implements ModelBinders {
@Provides @Singleton @ModelSync
ListeningExecutorService listeningModelSync(@ModelSync ExecutorService modelSync) {
return MoreExecutors.listeningDecorator(modelSync);
}
@Override
protected void configure() {
// @ModelSync ExecutorService must be bound elsewhere
final Key<Executor> executorKey = Key.get(Executor.class, ModelSync.class);
final Key<ExecutorService> executorServiceKey = Key.get(ExecutorService.class, ModelSync.class);
final Key<ListeningExecutorService> listeningExecutorServiceKey = Key.get(ListeningExecutorService.class, ModelSync.class);
bind(executorKey).to(executorServiceKey);
expose(executorKey);
expose(executorServiceKey);
expose(listeningExecutorServiceKey);
new ModelListenerBinder(publicBinder());
}
}