package restx.factory;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.Iterables;
import javax.inject.Named;
import java.util.Collection;
/**
* @author xavier hanin
*/
@Module
public class TestNamedComponentInjection {
@Provides(priority = -10) @Named("NCA") public String a() {
return "NamedComponentA";
}
@Provides @Named("NCB") public String b(@Named("NCA") NamedComponent<String> a) {
return a.getName().getName() + " " + a.getPriority() + " " + a.getComponent();
}
@Provides @Named("NCMA1") public V a1() {
return new V("NamedComponentA1");
}
@Provides(priority = -10) @Named("NCMA2") public V a2() {
return new V("NamedComponentA2");
}
@Provides @Named("NCMB") public String mb(Collection<NamedComponent<V>> as) {
return Joiner.on(';').join(Iterables.transform(as, new Function<NamedComponent<V>, String>() {
@Override
public String apply(NamedComponent<V> a) {
return a.getName().getName() + " " + a.getPriority() + " " + a.getComponent().getVal();
}
}));
}
public static class V {
private final String val;
public V(String val) {
this.val = val;
}
public String getVal() {
return val;
}
}
}