package restx.factory; import java.util.Collections; import java.util.Set; /** * User: xavierhanin * Date: 1/31/13 * Time: 7:23 PM */ public class SingleNameFactoryMachine<C> implements FactoryMachine { private final int priority; private final MachineEngine<C> engine; private final Name<C> name; public SingleNameFactoryMachine(int priority, MachineEngine<C> engine) { this.priority = priority; this.engine = engine; this.name = engine.getName(); } @Override public boolean canBuild(Name<?> name) { return (this.name.equals(name) || ( this.name.getName().equals(name.getName()) && name.getClazz().isAssignableFrom(this.name.getClazz()))); } @Override @SuppressWarnings("unchecked") public <T> MachineEngine<T> getEngine(Name<T> name) { return (MachineEngine<T>) engine; } @Override @SuppressWarnings("unchecked") public <T> Set<Name<T>> nameBuildableComponents(Class<T> componentClass) { if (componentClass.isAssignableFrom(name.getClazz())) { return Collections.singleton((Name<T>) name); } else { return Collections.emptySet(); } } @Override public int priority() { return priority; } @Override public String toString() { return "SingleNameFactoryMachine{" + "priority=" + priority + ", engine=" + engine + ", name=" + name + '}'; } }