package restx.factory; import com.google.common.base.Function; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.util.Set; public class DeactivationFactoryMachine implements FactoryMachine { public static DeactivationFactoryMachine forNames(Iterable<Name<?>> names) { return new DeactivationFactoryMachine(names); } public static DeactivationFactoryMachine forNames(Name<?>... names) { return new DeactivationFactoryMachine(Lists.newArrayList(names)); } private final ImmutableSet<String> keys; public DeactivationFactoryMachine(Iterable<Name<?>> keys) { this.keys = ImmutableSet.copyOf(Iterables.transform(keys, new Function<Name<?>, String>() { @Override public String apply(Name<?> input) { return Factory.activationKey(input.getClazz(), input.getName()); } })); } @Override public boolean canBuild(Name<?> name) { return name.getClazz() == String.class && keys.contains(name.getName()); } @Override public <T> MachineEngine<T> getEngine(Name<T> name) { return new NoDepsMachineEngine<T>(name, priority(), BoundlessComponentBox.FACTORY) { @Override protected T doNewComponent(SatisfiedBOM satisfiedBOM) { return (T) "false"; } }; } @Override public <T> Set<Name<T>> nameBuildableComponents(Class<T> componentClass) { if (componentClass != String.class) { return ImmutableSet.of(); } return Sets.newLinkedHashSet(Iterables.transform(keys, new Function<String, Name<T>>() { @Override public Name<T> apply(String input) { return (Name<T>) Name.of(String.class, input); } })); } @Override public int priority() { return -10000; } }