package restx.factory.alternative.components; import javax.inject.Named; import restx.factory.Alternative; import restx.factory.Component; import restx.factory.Module; import restx.factory.Provides; import restx.factory.When; /** * @author apeyrard */ @Module public class TestAlternativesFromModule { public static interface Calculation { int calculate(int a, int b); } @Provides public Calculation addition() { return new Calculation() { @Override public int calculate(int a, int b) { return a + b; } }; } @Alternative(to = Calculation.class, named = "addition") @When(name = "restx.test.alternatives", value = "true") public Calculation multiplication() { return new Calculation() { @Override public int calculate(int a, int b) { return a * b; } }; } public static interface Flag { boolean value(); } @Provides @Named("SomeFlag") public Flag alwaysTrue() { return new Flag() { @Override public boolean value() { return true; } }; } @Alternative(to = Flag.class, named = "SomeFlag") @When(name = "restx.test.alternatives", value = "true") public Flag alwaysFalse() { return new Flag() { @Override public boolean value() { return false; } }; } public static interface Priority { int value(); } @Provides public Priority priority() { return new Priority() { @Override public int value() { return Integer.MAX_VALUE; } }; } @Alternative(to = Priority.class, named = "priority", priority = -2000) @When(name = "restx.test.alternatives", value = "true") public Priority nilPriority() { return new Priority() { @Override public int value() { return 0; } }; } @Alternative(to = Priority.class, named = "priority", priority = -3000) @When(name = "restx.test.alternatives", value = "true") public Priority minPriority() { return new Priority() { @Override public int value() { return Integer.MIN_VALUE; } }; } }