package com.netflix.fabricator.guice.mapping; import com.google.inject.Binding; import com.google.inject.Injector; import com.google.inject.Key; import com.google.inject.TypeLiteral; import com.google.inject.util.Types; import com.netflix.fabricator.ConfigurationNode; import java.lang.reflect.Method; import java.util.Map; /** * Look for a named component in a map binding : Map<String, T> * * Created by hyuan on 1/16/14. */ public class NamedMapBinding implements BindingReslove { @Override public boolean execute(String name, Object obj, ConfigurationNode config, Class<?> argType, Injector injector, Method method) throws Exception { // Look for a MapBinder binding TypeLiteral<Map<String, ?>> mapLiteral = (TypeLiteral<Map<String, ?>>) TypeLiteral.get( Types.mapOf(String.class, argType)); Binding<Map<String, ?>> mapBinding = injector.getExistingBinding(Key.get(mapLiteral)); if (mapBinding != null) { Map<String, ?> map = mapBinding.getProvider().get(); if (map.containsKey(name)) { method.invoke(obj, map.get(name)); return true; } } return false; } }