package restx.jongo; import org.jongo.Jongo; import restx.factory.*; import java.util.Collections; import java.util.Set; /** * User: xavierhanin * Date: 3/31/13 * Time: 9:04 AM */ @Machine public class JongoCollectionFactory implements FactoryMachine { private Factory.Query<Jongo> jongoQuery = Factory.Query.byName(JongoModule.NAME); @Override public boolean canBuild(Name<?> name) { return JongoCollection.class == name.getClazz(); } @Override public <T> MachineEngine<T> getEngine(final Name<T> name) { return new StdMachineEngine<T>(name, priority(), BoundlessComponentBox.FACTORY) { @Override @SuppressWarnings("unchecked") protected T doNewComponent(SatisfiedBOM satisfiedBOM) { return (T) new StdJongoCollection(satisfiedBOM.getOne(jongoQuery).get().getComponent(), name.getName()); } @Override public BillOfMaterials getBillOfMaterial() { return BillOfMaterials.of(jongoQuery); } }; } @Override public <T> Set<Name<T>> nameBuildableComponents(Class<T> componentClass) { return Collections.emptySet(); } @Override public int priority() { return 0; } @Override public String toString() { return "JongoCollectionFactory{" + "jongoQuery=" + jongoQuery + '}'; } }