package br.com.arsmachina.eloquentia.dao.mongodb; import org.mongojack.DBCursor; import org.mongojack.DBQuery; import org.mongojack.JacksonDBCollection; import org.slf4j.LoggerFactory; import com.mongodb.BasicDBObject; import com.mongodb.MongoException; import br.com.arsmachina.dao.SortCriterion; import br.com.arsmachina.eloquentia.dao.UserDAO; import br.com.arsmachina.eloquentia.entity.User; /** * Implementation of {@link UserDAO} using MongoDB. * * @author Thiago H. de Paula Figueiredo (http://machina.com.br/thiago) */ public class UserDAOImpl extends AbstractDAOImpl<User, String> implements UserDAO { private static final SortCriterion[] DEFAULT_SORT_CRITERIA = {new SortCriterion("name", true)}; final private static PrimaryKeyEncoder<User, String> ID_VALUE_EXTRACTOR = new PrimaryKeyEncoder<User, String>() { public String get(User object) { return object != null ? object.getId() : null; } public void set(User object, String id) { object.setId(id); } }; public UserDAOImpl() { super(ID_VALUE_EXTRACTOR); final JacksonDBCollection<User, String> dbCollection = getDbCollection(); dbCollection.ensureIndex("tags"); try { dbCollection.ensureIndex(new BasicDBObject("username", 1), "username", true); } catch (MongoException e) { LoggerFactory.getLogger(UserDAOImpl.class).error("Exception while creating username index", e); } } public User findByLogin(String username) { DBCursor<User> cursor = getDbCollection().find(DBQuery.is("login", username)).limit(1); return cursor.hasNext() ? cursor.next() : null; } public SortCriterion[] getDefaultSortCriteria() { return DEFAULT_SORT_CRITERIA; } }