@Override public void prePersist(final Object entity, final DBObject dbObj, final Mapper mapper) { MappedClass mclass = mapper.getMappedClass(entity); Field id = mclass.getIdField(); if (id != null && id.getAnnotation(GeneratedValue.class) != null) { try { id.setAccessible(true); final String collName = gen.value(mclass.getClazz()); final Query<StoredId> q = db.find(StoredId.class, "_id", collName); final UpdateOperations<StoredId> uOps = db.createUpdateOperations(StoredId.class) .inc("value"); StoredId newId = db.findAndModify(q, uOps); if (newId == null) { newId = new StoredId(collName); db.save(newId); } id.set(entity, newId.value); } catch (Exception ex) { throw new IllegalStateException("Can't generate ID on " + mclass, ex); } } }
@Override protected DBCollection getCollection(Class<?> type) { return datastore.getCollection(type); }
@Override public void clearWebhooks(@Nonnull ProjectId projectId) { Query<SlackWebhook> query = datastore.createQuery(SlackWebhook.class).field(PROJECT_ID).equal(projectId); datastore.delete(query); }
private Query<UserActivityRecord> queryByUserId(@Nonnull UserId userId) { return datastore.createQuery(UserActivityRecord.class) .field(USER_ID).equal(userId); } }
public void setApplicationPreferences(@Nonnull ApplicationPreferences preferences) { writeLock.lock(); try { cachedPreferences = preferences; datastore.save(checkNotNull(preferences)); } finally { writeLock.unlock(); } } }
Datastore ds = ...; //get/change/save Settings s = ds.find(Settings.class).get(); //like findOne in the shell/driver s.showFriendsList = true; ds.save(s); //or update ds.updateFirst(ds.find(Settings.class), ds.creatUpdateOperations(Settings.class).set("showFiendsList", true));
@Override public T findById(ID id) { return datastore.get(persistentClass, id); }
@Override public void setApiKeys(@Nonnull UserId userId, List<ApiKeyRecord> records) { Set<ApiKeyId> ids = new HashSet<>(); List<ApiKeyRecord> nonDuplicates = records.stream() .filter(r -> ids.add(r.getApiKeyId())) .collect(Collectors.toList()); UpdateOperations<UserApiKeys> ops = datastore.createUpdateOperations(UserApiKeys.class) .set(API_KEYS, nonDuplicates); Query<UserApiKeys> query = datastore.createQuery(UserApiKeys.class) .field(USER_ID).equal(userId); datastore.update(query, ops, new UpdateOptions().upsert(true)); }
@Override public void addTag(@Nonnull OWLEntity entity, @Nonnull TagId tagId) { try { writeLock.lock(); Query<EntityTags> query = tagWithProjectIdAndEntity(projectId, entity); UpdateOperations<EntityTags> updateOps = datastore.createUpdateOperations(EntityTags.class); updateOps.addToSet(TAGS, tagId); datastore.update(query, updateOps); } finally { writeLock.unlock(); } }
@Override public void delete(T entity) { if (entity != null) { datastore.delete(entity); } }
public List<EntityDiscussionThread> findThreads(@Nonnull ProjectId projectId, @Nonnull OWLEntity entity) { datastore.createQuery(EntityDiscussionThread.class); return datastore.find(EntityDiscussionThread.class) .disableValidation() .field(PROJECT_ID).equal(projectId) .field(ENTITY).equal(entity) .order("-comments.0.createdAt") .asList(); }
public void replaceEntity(ProjectId projectId, OWLEntity entity, OWLEntity withEntity) { Query<EntityDiscussionThread> query = datastore.find(EntityDiscussionThread.class) .field(PROJECT_ID).equal(projectId) .field(ENTITY).equal(entity); UpdateOperations<EntityDiscussionThread> updateOperations = datastore.createUpdateOperations(EntityDiscussionThread.class); updateOperations.set("entity", withEntity); datastore.update(query, updateOperations); }
/** * Returns the current number in the sequence specified. If the sequence does not * exists then `-1` will be returned * @param name the sequence name * @return the current number in the sequence. */ public long get(String name) { Sequence seq = ds.find(Sequence.class, "_id", name).get(); return null == seq ? -1 : seq.number; }
public boolean deleteComment(CommentId commentId) { Query<EntityDiscussionThread> query = datastore.createQuery(EntityDiscussionThread.class) .field(COMMENTS_ID).equal(commentId); UpdateOperations<EntityDiscussionThread> update = getUpdateOperations() .removeAll(COMMENTS, new BasicDBObject("_id", commentId.getId())); UpdateResults updateResults = datastore.updateFirst(query, update); return updateResults.getUpdatedCount() == 1; }
public Optional<EntityDiscussionThread> setThreadStatus(@Nonnull ThreadId threadId, @Nonnull Status status) { datastore.updateFirst(createQueryForThread(threadId), getUpdateOperations().set(STATUS, status)); return Optional.ofNullable(datastore.get(EntityDiscussionThread.class, threadId)); }
@Override public void ensureIndexes() { datastore.ensureIndexes(EntityTags.class); }