package tc.oc.api.model; import com.google.inject.Binder; import com.google.inject.TypeLiteral; import com.google.inject.binder.LinkedBindingBuilder; import tc.oc.api.docs.virtual.Model; import tc.oc.commons.core.inject.SetBinder; import tc.oc.commons.core.inject.TypeMapBinder; public class ModelListenerBinder { private final TypeMapBinder<Model, ModelHandler> handlers; private final SetBinder<ModelListener> listeners; public ModelListenerBinder(Binder binder) { binder = binder.skipSources(ModelListenerBinder.class); this.handlers = new TypeMapBinder<Model, ModelHandler>(binder){}; this.listeners = new SetBinder<ModelListener>(binder){}; } public <M extends Model> LinkedBindingBuilder<ModelHandler<? super M>> bindHandler(Class<M> model) { return (LinkedBindingBuilder) handlers.addBinding(model); } public <M extends Model> LinkedBindingBuilder<ModelHandler<? super M>> bindHandler(TypeLiteral<M> model) { return (LinkedBindingBuilder) handlers.addBinding(model); } public LinkedBindingBuilder<ModelListener> bindListener() { return listeners.addBinding(); } }