Example usage for io.vertx.core.json JsonObject getJsonArray

List of usage examples for io.vertx.core.json JsonObject getJsonArray

Introduction

In this page you can find the example usage for io.vertx.core.json JsonObject getJsonArray.

Prototype

public JsonArray getJsonArray(String key, JsonArray def) 

Source Link

Document

Like #getJsonArray(String) but specifying a default value to return if there is no entry.

Usage

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));
        }
    });
}