List of usage examples for io.vertx.core.json JsonObject getJsonArray
public JsonArray getJsonArray(String key, JsonArray def)
From source file:org.entcore.conversation.controllers.ConversationController.java
License:Open Source License
private void saveAndSend(final String messageId, final JsonObject message, final UserInfos user, final String parentMessageId, final String threadId, final Handler<Either<String, JsonObject>> result) { Handler<Either<String, JsonObject>> handler = new Handler<Either<String, JsonObject>>() { @Override/*ww w. j a va 2 s. co m*/ public void handle(Either<String, JsonObject> event) { if (event.isLeft()) { result.handle(event); return; } final String id = (messageId != null && !messageId.trim().isEmpty()) ? messageId : event.right().getValue().getString("id"); conversationService.get(id, user, new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { if (event.isLeft()) { result.handle(event); return; } JsonObject msg = event.right().getValue(); JsonArray attachments = msg.getJsonArray("attachments", new fr.wseduc.webutils.collections.JsonArray()); final AtomicLong size = new AtomicLong(0l); for (Object att : attachments) { size.addAndGet(((JsonObject) att).getLong("size", 0l)); } neoConversationService.findInactives(message, size.get(), new Handler<JsonObject>() { public void handle(JsonObject userDetails) { message.mergeIn(userDetails); conversationService.send(parentMessageId, id, message, user, new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { if (event.isRight()) { for (Object recipient : message.getJsonArray("allUsers", new fr.wseduc.webutils.collections.JsonArray())) { if (recipient.toString().equals(user.getUserId())) continue; updateUserQuota(recipient.toString(), size.get()); } } result.handle(event); } }); } }); } }); } }; if (messageId != null && !messageId.trim().isEmpty()) { conversationService.updateDraft(messageId, message, user, handler); } else { conversationService.saveDraft(parentMessageId, threadId, message, user, handler); } }
From source file:org.entcore.conversation.controllers.ConversationController.java
License:Open Source License
@Post("send") @SecuredAction(value = "", type = ActionType.RESOURCE) @ResourceFilter(VisiblesFilter.class) public void send(final HttpServerRequest request) { final String messageId = request.params().get("id"); getUserInfos(eb, request, new Handler<UserInfos>() { @Override//from w w w .java2 s . c o m public void handle(final UserInfos user) { if (user != null) { final String parentMessageId = request.params().get("In-Reply-To"); bodyToJson(request, new Handler<JsonObject>() { @Override public void handle(final JsonObject message) { if (!message.containsKey("from")) { message.put("from", user.getUserId()); } final Handler<JsonObject> parentHandler = new Handler<JsonObject>() { public void handle(JsonObject parentMsg) { final String threadId; if (parentMsg != null) { threadId = parentMsg.getString("thread_id"); } else { threadId = null; } neoConversationService.addDisplayNames(message, parentMsg, new Handler<JsonObject>() { public void handle(final JsonObject message) { saveAndSend(messageId, message, user, parentMessageId, threadId, new Handler<Either<String, JsonObject>>() { @Override public void handle( Either<String, JsonObject> event) { if (event.isRight()) { JsonObject result = event.right() .getValue(); JsonObject timelineParams = new JsonObject() .put("subject", result.getString("subject")) .put("body", StringUtils.stripHtmlTag( result.getString( "body"))) .put("id", result.getString("id")) .put("sentIds", message.getJsonArray( "allUsers", new fr.wseduc.webutils.collections.JsonArray())); timelineNotification(request, timelineParams, user); renderJson(request, result.put("inactive", message.getJsonArray("inactives", new fr.wseduc.webutils.collections.JsonArray())) .put("undelivered", message.getJsonArray( "undelivered", new fr.wseduc.webutils.collections.JsonArray())) .put("sent", message.getJsonArray( "allUsers", new fr.wseduc.webutils.collections.JsonArray()) .size())); } else { JsonObject error = new JsonObject().put( "error", event.left().getValue()); renderJson(request, error, 400); } } }); } }); } }; if (parentMessageId != null && !parentMessageId.trim().isEmpty()) { conversationService.get(parentMessageId, user, new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { if (event.isLeft()) { badRequest(request); return; } parentHandler.handle(event.right().getValue()); } }); } else { parentHandler.handle(null); } } }); } else { unauthorized(request); } } }); }
From source file:org.entcore.conversation.controllers.ConversationController.java
License:Open Source License
private void send(final Message<JsonObject> message) { JsonObject m = message.body().getJsonObject("message"); if (m == null) { message.reply(new JsonObject().put("status", "error").put("message", "invalid.message")); }// w ww. j av a2 s . c o m final HttpServerRequest request = new JsonHttpServerRequest( message.body().getJsonObject("request", new JsonObject())); final UserInfos user = new UserInfos(); user.setUserId(message.body().getString("userId")); user.setUsername(message.body().getString("username")); if (!m.containsKey("from")) { m.put("from", user.getUserId()); } neoConversationService.addDisplayNames(m, null, new Handler<JsonObject>() { public void handle(final JsonObject m) { saveAndSend(null, m, user, null, null, new Handler<Either<String, JsonObject>>() { @Override public void handle(Either<String, JsonObject> event) { if (event.isRight()) { JsonObject result = event.right().getValue(); JsonObject timelineParams = new JsonObject().put("subject", result.getString("subject")) .put("id", result.getString("id")).put("sentIds", m.getJsonArray("allUsers", new fr.wseduc.webutils.collections.JsonArray())); timelineNotification(request, timelineParams, user); JsonObject s = new JsonObject().put("status", "ok").put("result", new fr.wseduc.webutils.collections.JsonArray().add(new JsonObject())); message.reply(s); } else { JsonObject error = new JsonObject().put("error", event.left().getValue()); message.reply(error); } } }); } }); }
From source file:org.entcore.conversation.filters.FoldersMessagesFilter.java
License:Open Source License
@Override public void authorize(final HttpServerRequest request, Binding binding, final UserInfos user, final Handler<Boolean> handler) { super.authorize(request, binding, user, new Handler<Boolean>() { @Override//from www .j a v a2 s .co m public void handle(Boolean event) { if (event) { RequestUtils.bodyToJson(request, new Handler<JsonObject>() { public void handle(final JsonObject body) { final List<String> messageIds = body .getJsonArray("id", new fr.wseduc.webutils.collections.JsonArray()).getList(); String usersQuery = "SELECT count(distinct um) AS number FROM conversation.usermessages um " + "WHERE um.user_id = ? AND um.message_id IN " + Sql.listPrepared(messageIds.toArray()); JsonArray values = new fr.wseduc.webutils.collections.JsonArray().add(user.getUserId()); for (String id : messageIds) { values.add(id); } request.pause(); sql.prepared(usersQuery, values, SqlResult.validUniqueResultHandler(new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { request.resume(); if (event.isLeft()) { handler.handle(false); return; } int count = event.right().getValue().getInteger("number", 0); handler.handle(count == messageIds.size()); } })); } }); } else { handler.handle(false); return; } } }); }
From source file:org.entcore.conversation.filters.MultipleMessageUserFilter.java
License:Open Source License
public void authorize(final HttpServerRequest request, Binding binding, UserInfos user, final Handler<Boolean> handler) { RequestUtils.bodyToJson(request, new Handler<JsonObject>() { public void handle(final JsonObject body) { List<String> messageIds = body.getJsonArray("id", new fr.wseduc.webutils.collections.JsonArray()) .getList();/* w ww.ja va 2 s . co m*/ if (messageIds == null || messageIds.isEmpty()) { handler.handle(false); return; } checkMessages(request, messageIds, user, handler); } }); final List<String> messageIds = request.params().getAll("id"); }
From source file:org.entcore.conversation.filters.VisiblesFilter.java
License:Open Source License
@Override @SuppressWarnings("unchecked") public void authorize(HttpServerRequest request, Binding binding, final UserInfos user, final Handler<Boolean> handler) { final String parentMessageId = request.params().get("In-Reply-To"); final Set<String> ids = new HashSet<>(); final String customReturn = "WHERE visibles.id IN {ids} RETURN DISTINCT visibles.id"; final JsonObject params = new JsonObject(); RequestUtils.bodyToJson(request, new Handler<JsonObject>() { public void handle(final JsonObject message) { ids.addAll(message.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()).getList()); ids.addAll(message.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()).getList()); final Handler<Void> checkHandler = new Handler<Void>() { public void handle(Void v) { params.put("ids", new fr.wseduc.webutils.collections.JsonArray(new ArrayList<>(ids))); findVisibles(neo.getEventBus(), user.getUserId(), customReturn, params, true, true, false, new Handler<JsonArray>() { public void handle(JsonArray visibles) { handler.handle(visibles.size() == ids.size()); }// ww w .j av a 2 s . c o m }); } }; if (parentMessageId == null || parentMessageId.trim().isEmpty()) { checkHandler.handle(null); return; } sql.prepared("SELECT m.* " + "FROM conversation.messages m " + "WHERE m.id = ?", new fr.wseduc.webutils.collections.JsonArray().add(parentMessageId), SqlResult.validUniqueResultHandler(new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> parentMsgEvent) { if (parentMsgEvent.isLeft()) { handler.handle(false); return; } JsonObject parentMsg = parentMsgEvent.right().getValue(); ids.remove(parentMsg.getString("from")); ids.removeAll( parentMsg.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()) .getList()); ids.removeAll( parentMsg.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()) .getList()); checkHandler.handle(null); } }, "cc", "to")); } }); }
From source file:org.entcore.conversation.service.impl.DefaultConversationService.java
License:Open Source License
private void addDisplayNames(final JsonObject message, final Handler<JsonObject> handler) { String query = "MATCH (v:Visible) " + "WHERE v.id IN {ids} " + "RETURN COLLECT(distinct (v.id + '$' + coalesce(v.displayName, ' ') + '$' + " + "coalesce(v.name, ' ') + '$' + coalesce(v.groupDisplayName, ' '))) as displayNames "; Set<String> ids = new HashSet<>(); ids.addAll(message.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()).getList()); ids.addAll(message.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()).getList()); if (message.containsKey("from")) { ids.add(message.getString("from")); }//ww w . j a v a2 s .co m neo.execute(query, new JsonObject().put("ids", new fr.wseduc.webutils.collections.JsonArray(new ArrayList<>(ids))), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { JsonArray r = m.body().getJsonArray("result"); if ("ok".equals(m.body().getString("status")) && r != null && r.size() == 1) { JsonObject j = r.getJsonObject(0); JsonArray d = j.getJsonArray("displayNames"); if (d != null && d.size() > 0) { message.put("displayNames", d); } } handler.handle(message); } }); }
From source file:org.entcore.conversation.service.impl.Neo4jConversationService.java
License:Open Source License
public void addDisplayNames(final JsonObject message, final JsonObject parentMessage, final Handler<JsonObject> handler) { if (!displayNamesCondition(message)) { handler.handle(message);/*from w ww. ja v a 2s . c o m*/ return; } String query = "MATCH (v:Visible) " + "WHERE v.id IN {ids} " + "RETURN COLLECT(distinct (v.id + '$' + coalesce(v.displayName, ' ') + '$' + " + "coalesce(v.name, ' ') + '$' + coalesce(v.groupDisplayName, ' '))) as displayNames "; Set<String> ids = new HashSet<>(); ids.addAll(message.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()).getList()); ids.addAll(message.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()).getList()); if (message.containsKey("from")) { ids.add(message.getString("from")); } if (parentMessage != null) { ids.addAll(parentMessage.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()).getList()); ids.addAll(parentMessage.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()).getList()); if (parentMessage.containsKey("from")) ids.add(parentMessage.getString("from")); } neo.execute(query, new JsonObject().put("ids", new fr.wseduc.webutils.collections.JsonArray(new ArrayList<>(ids))), new Handler<Message<JsonObject>>() { @Override public void handle(Message<JsonObject> m) { JsonArray r = m.body().getJsonArray("result"); if ("ok".equals(m.body().getString("status")) && r != null && r.size() == 1) { JsonObject j = r.getJsonObject(0); JsonArray d = j.getJsonArray("displayNames"); if (d != null && d.size() > 0) { message.put("displayNames", d); } } handler.handle(message); } }); }
From source file:org.entcore.conversation.service.impl.Neo4jConversationService.java
License:Open Source License
public void findInactives(final JsonObject message, long size, final Handler<JsonObject> handler) { Set<Object> dest = new HashSet<>(); dest.addAll(message.getJsonArray("to", new fr.wseduc.webutils.collections.JsonArray()).getList()); dest.addAll(message.getJsonArray("cc", new fr.wseduc.webutils.collections.JsonArray()).getList()); JsonObject params = new JsonObject().put("dest", new fr.wseduc.webutils.collections.JsonArray(new ArrayList<Object>(dest))); String returnClause = ""; if (size > 0) { returnClause = "RETURN " + "[t IN targets WHERE t.quotaLeft IS NULL OR t.quotaLeft < {attachmentsSize} | t.users.displayName] as undelivered, " + "[t IN targets WHERE t.quotaLeft IS NOT NULL AND t.quotaLeft >= {attachmentsSize} | t.users.id] as userTargets "; params.put("attachmentsSize", size); } else {//from w w w .j a v a 2 s. c o m returnClause = "RETURN " + "[t IN targets WHERE t.users.activationCode IS NOT NULL | t.users.displayName] as inactives, " + "EXTRACT(t IN targets | t.users.id) as userTargets "; } String query = "MATCH (v:Visible)<-[:IN*0..1]-(u:User) " + "WHERE v.id IN {dest} " + "OPTIONAL MATCH (u)-[:USERBOOK]->(ub:UserBook) " + "WITH COLLECT(DISTINCT {users: u, quotaLeft: (ub.quota - ub.storage)}) as targets " + returnClause; neo.execute(query, params, new Handler<Message<JsonObject>>() { public void handle(Message<JsonObject> event) { JsonArray r = event.body().getJsonArray("result"); JsonObject formattedResult = new JsonObject() .put("inactives", new fr.wseduc.webutils.collections.JsonArray()) .put("actives", new fr.wseduc.webutils.collections.JsonArray()) .put("allUsers", new fr.wseduc.webutils.collections.JsonArray()); if ("ok".equals(event.body().getString("status")) && r != null && r.size() == 1) { JsonObject j = r.getJsonObject(0); formattedResult.put("inactives", j.getJsonArray("inactives", new fr.wseduc.webutils.collections.JsonArray())); formattedResult.put("undelivered", j.getJsonArray("undelivered", new fr.wseduc.webutils.collections.JsonArray())); formattedResult.put("allUsers", j.getJsonArray("userTargets", new fr.wseduc.webutils.collections.JsonArray())); } handler.handle(formattedResult); } }); }
From source file:org.entcore.conversation.service.impl.SqlConversationService.java
License:Open Source License
private void sendMessage(final String parentMessageId, final String draftId, final JsonObject message, final UserInfos user, final Handler<Either<String, JsonObject>> result) { if (validationParamsError(user, result, draftId)) return;// w w w .ja v a2 s. c o m getSenderAttachments(user.getUserId(), draftId, new Handler<Either<String, JsonObject>>() { public void handle(Either<String, JsonObject> event) { if (event.isLeft()) { result.handle(new Either.Left<String, JsonObject>(event.left().getValue())); return; } JsonArray attachmentIds = event.right().getValue().getJsonArray("attachmentids"); long totalQuota = event.right().getValue().getLong("totalquota"); final JsonArray ids = message.getJsonArray("allUsers", new fr.wseduc.webutils.collections.JsonArray()); SqlStatementsBuilder builder = new SqlStatementsBuilder(); String updateMessage = "UPDATE " + messageTable + " SET state = ? WHERE id = ? " + "RETURNING id, subject, body"; String updateUnread = "UPDATE " + userMessageTable + " " + "SET unread = true " + "WHERE user_id = ? AND message_id = ? "; builder.prepared(updateMessage, new fr.wseduc.webutils.collections.JsonArray().add("SENT").add(draftId)); builder.prepared(updateUnread, new fr.wseduc.webutils.collections.JsonArray().add(user.getUserId()).add(draftId)); for (Object toObj : ids) { if (toObj.equals(user.getUserId())) continue; builder.insert(userMessageTable, new JsonObject().put("user_id", toObj.toString()) .put("message_id", draftId).put("total_quota", totalQuota)); for (Object attachmentId : attachmentIds) { builder.insert(userMessageAttachmentTable, new JsonObject().put("user_id", toObj.toString()) .put("message_id", draftId).put("attachment_id", attachmentId.toString())); } } sql.transaction(builder.build(), SqlResult.validUniqueResultHandler(0, result)); } }); }