Example usage for io.vertx.core.json JsonArray add

List of usage examples for io.vertx.core.json JsonArray add

Introduction

In this page you can find the example usage for io.vertx.core.json JsonArray add.

Prototype

public JsonArray add(Object value) 

Source Link

Document

Add an Object to the JSON array.

Usage

From source file:org.entcore.conversation.service.impl.ConversationRepositoryEvents.java

License:Open Source License

@Override
public void deleteGroups(JsonArray groups) {
    SqlStatementsBuilder builder = new SqlStatementsBuilder();

    String setTO = "UPDATE conversation.messages " + "SET " + "\"to\" = \"to\" - ?, "
            + "\"toName\" = COALESCE(\"toName\", '[]')::jsonb || (?)::jsonb, "
            + "\"displayNames\" = \"displayNames\" - (? || '$ $' || ? || '$ ') - (? || '$ $' || ? || '$' || ?) "
            + "WHERE \"to\" @> (?)::jsonb";

    String setCC = "UPDATE conversation.messages " + "SET " + "\"cc\" = \"cc\" - ?, "
            + "\"ccName\" = COALESCE(\"ccName\", '[]')::jsonb || (?)::jsonb, "
            + "\"displayNames\" = \"displayNames\" - (? || '$ $' || ? || '$ ') - (? || '$ $' || ? || '$' || ?) "
            + "WHERE \"cc\" @> (?)::jsonb";

    for (Object o : groups) {
        if (!(o instanceof JsonObject))
            continue;
        JsonObject group = (JsonObject) o;

        JsonArray params = new fr.wseduc.webutils.collections.JsonArray();

        params.add(group.getString("group", ""));
        params.add(new fr.wseduc.webutils.collections.JsonArray().add(group.getString("groupName", ""))
                .toString());/*from  ww w . j a  v a  2s  .  c  om*/
        params.add(group.getString("group", ""));
        params.add(group.getString("groupName", ""));
        params.add(group.getString("group", ""));
        params.add(group.getString("groupName", ""));
        params.add(group.getString("groupName", ""));
        params.add(new fr.wseduc.webutils.collections.JsonArray().add(group.getString("group", "")).toString());

        builder.prepared(setTO, params);
        builder.prepared(setCC, params);
    }
    sql.transaction(builder.build(), new Handler<Message<JsonObject>>() {
        public void handle(Message<JsonObject> event) {
            if (!"ok".equals(event.body().getString("status"))) {
                log.error("Error updating delete groups in conversation : " + event.body().encode());
            }
        }
    });
}

From source file:org.entcore.conversation.service.impl.ConversationRepositoryEvents.java

License:Open Source License

@Override
public void deleteUsers(JsonArray users) {
    JsonArray userIds = new fr.wseduc.webutils.collections.JsonArray();
    for (Object o : users) {
        if (!(o instanceof JsonObject))
            continue;
        userIds.add(((JsonObject) o).getString("id"));
    }//from w  ww .  ja  va2  s  . co  m

    SqlStatementsBuilder builder = new SqlStatementsBuilder();

    String unusedAttachments = "WITH unusedAtts AS ("
            + "SELECT DISTINCT attachment_id AS id FROM conversation.usermessagesattachments uma "
            + "GROUP BY attachment_id " + "HAVING every(user_id IN " + Sql.listPrepared(userIds.getList())
            + ") " + ") SELECT "
            + "CASE WHEN COUNT(id) = 0 THEN '[]' ELSE json_agg(distinct id) END AS attachmentIds "
            + "FROM unusedAtts u";
    builder.prepared(unusedAttachments, userIds);

    String deleteFolder = "DELETE FROM conversation.folders f " + "WHERE f.user_id IN "
            + Sql.listPrepared(userIds.getList());
    builder.prepared(deleteFolder, userIds);

    String deleteUserMessages = "DELETE FROM conversation.usermessages um " + "WHERE um.user_id IN "
            + Sql.listPrepared(userIds.getList());
    builder.prepared(deleteUserMessages, userIds);

    String setFrom = "UPDATE conversation.messages " + "SET " + "\"from\" = '', " + "\"fromName\" = ?, "
            + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"from\" = ?";

    String setTO = "UPDATE conversation.messages " + "SET " + "\"to\" = \"to\" - ?, "
            + "\"toName\" = COALESCE(\"toName\", '[]')::jsonb || (?)::jsonb, "
            + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"to\" @> (?)::jsonb";

    String setCC = "UPDATE conversation.messages " + "SET " + "\"cc\" = \"cc\" - ?, "
            + "\"ccName\" = COALESCE(\"ccName\", '[]')::jsonb || (?)::jsonb, "
            + "\"displayNames\" = \"displayNames\" - (? || '$' || ? || '$ $ ') " + "WHERE \"cc\" @> (?)::jsonb";

    for (Object o : users) {
        if (!(o instanceof JsonObject))
            continue;
        JsonObject user = (JsonObject) o;
        JsonArray paramsToCc = new fr.wseduc.webutils.collections.JsonArray();
        JsonArray paramsFrom = new fr.wseduc.webutils.collections.JsonArray();

        paramsToCc.add(user.getString("id", ""));
        paramsToCc.add(new fr.wseduc.webutils.collections.JsonArray().add(user.getString("displayName", ""))
                .toString());
        paramsToCc.add(user.getString("id", ""));
        paramsToCc.add(user.getString("displayName", ""));
        paramsToCc.add(new fr.wseduc.webutils.collections.JsonArray().add(user.getString("id", "")).toString());

        paramsFrom.add(user.getString("displayName", ""));
        paramsFrom.add(user.getString("id", ""));
        paramsFrom.add(user.getString("displayName", ""));
        paramsFrom.add(user.getString("id", ""));

        builder.prepared(setTO, paramsToCc);
        builder.prepared(setCC, paramsToCc);
        builder.prepared(setFrom, paramsFrom);
    }
    sql.transaction(builder.build(), new DeliveryOptions().setSendTimeout(timeout),
            SqlResult.validResultsHandler(new Handler<Either<String, JsonArray>>() {
                public void handle(Either<String, JsonArray> event) {
                    if (event.isLeft()) {
                        log.error("Error deleting conversation data : " + event.left().getValue());
                        return;
                    }

                    JsonArray results = event.right().getValue();
                    JsonArray attachmentIds = results.getJsonArray(0).size() > 0
                            ? new fr.wseduc.webutils.collections.JsonArray(
                                    results.getJsonArray(0).getJsonObject(0).getString("attachmentIds", "[]"))
                            : new fr.wseduc.webutils.collections.JsonArray();

                    for (Object attachmentObj : attachmentIds) {
                        final String attachmentId = (String) attachmentObj;
                        storage.removeFile(attachmentId, new Handler<JsonObject>() {
                            @Override
                            public void handle(JsonObject event) {
                                if (!"ok".equals(event.getString("status"))) {
                                    log.error("[" + ConversationRepositoryEvents.class.getSimpleName()
                                            + "] Error while tying to delete attachment file (_id: {"
                                            + attachmentId + "})");
                                }
                            }
                        });
                    }
                }
            }, "attachmentIds"));
}

From source file:org.entcore.conversation.service.impl.DeleteOrphan.java

License:Open Source License

@Override
public void handle(Long event) {
    final Sql sql = Sql.getInstance();
    final SqlStatementsBuilder builder = new SqlStatementsBuilder();
    builder.raw(DELETE_ORPHAN_MESSAGE);/*  w w  w . j  a  va2s .  c o m*/
    builder.raw(SELECT_ORPHAN_ATTACHMENT);
    sql.transaction(builder.build(), new DeliveryOptions().setSendTimeout(TIMEOUT),
            SqlResult.validResultHandler(1, new Handler<Either<String, JsonArray>>() {
                @Override
                public void handle(Either<String, JsonArray> res) {
                    if (res.isRight()) {
                        log.info("Successful delete orphan conversation messages.");
                        final JsonArray attachments = res.right().getValue();
                        if (attachments != null && attachments.size() > 0) {
                            log.info("Orphan attachments : " + attachments.encode());
                            JsonArray ids = new fr.wseduc.webutils.collections.JsonArray();
                            for (Object attObj : attachments) {
                                if (!(attObj instanceof JsonObject))
                                    continue;
                                JsonObject unusedAttachment = (JsonObject) attObj;
                                final String attachmentId = unusedAttachment.getString("orphanid");
                                ids.add(attachmentId);
                                storage.removeFile(attachmentId, new Handler<JsonObject>() {
                                    public void handle(JsonObject event) {
                                        if (!"ok".equals(event.getString("status"))) {
                                            log.error("Error while tying to delete attachment file (_id: {"
                                                    + attachmentId + "})");
                                        }
                                    }
                                });
                            }
                            final String deletOrphanAttachments = "delete from conversation.attachments where id IN "
                                    + Sql.listPrepared(ids.getList());
                            sql.prepared(deletOrphanAttachments, ids,
                                    new DeliveryOptions().setSendTimeout(TIMEOUT),
                                    new Handler<Message<JsonObject>>() {
                                        @Override
                                        public void handle(Message<JsonObject> event) {
                                            if (!"ok".equals(event.body().getString("status"))) {
                                                log.error("Error deleting orphan attachments : "
                                                        + event.body().getString("message", ""));
                                            } else {
                                                log.info("Successful delete orphan conversation attachments.");
                                            }
                                        }
                                    });
                        }
                    } else {
                        log.error("Orphan conversation error : " + res.left().getValue());
                    }
                }
            }));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

private void update(String messageId, JsonObject message, UserInfos user,
        Handler<Either<String, JsonObject>> result) {
    message.put("date", System.currentTimeMillis());
    JsonObject m = Utils.validAndGet(message, UPDATE_DRAFT_FIELDS, UPDATE_DRAFT_REQUIRED_FIELDS);
    if (validationError(user, m, result, messageId))
        return;//w w w.j  a v a 2 s.  c  o  m

    StringBuilder sb = new StringBuilder();
    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();

    for (String attr : message.fieldNames()) {
        if ("to".equals(attr) || "cc".equals(attr) || "displayNames".equals(attr)) {
            sb.append("\"" + attr + "\"").append(" = CAST(? AS JSONB),");
        } else {
            sb.append("\"" + attr + "\"").append(" = ?,");
        }
        values.add(message.getValue(attr));
    }
    if (sb.length() > 0)
        sb.deleteCharAt(sb.length() - 1);

    String query = "UPDATE " + messageTable + " SET " + sb.toString() + " " + "WHERE id = ? AND state = ?";
    values.add(messageId).add("DRAFT");

    sql.prepared(query, values, SqlResult.validUniqueResultHandler(result));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void list(String folder, String restrain, Boolean unread, UserInfos user, int page,
        final String searchText, Handler<Either<String, JsonArray>> results) {
    int skip = page * LIST_LIMIT;

    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();
    String messageConditionUnread = addMessageConditionUnread(folder, values, unread, user);
    String messagesFields = "m.id, m.subject, m.from, m.state, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date ";

    values.add("SENT").add(user.getUserId());
    String additionalWhere = addCompleteFolderCondition(values, restrain, unread, folder, user);

    if (searchText != null) {
        additionalWhere += " AND m.text_searchable  @@ to_tsquery(m.language::regconfig, unaccent(?)) ";
        values.add(StringUtils.join(checkAndComposeWordFromSearchText(searchText), " & "));
    }//w w w . j  a v a2s. c om
    String query = "SELECT " + messagesFields + ", um.unread as unread, "
            + "CASE when COUNT(distinct r) = 0 THEN false ELSE true END AS response, COUNT(*) OVER() as count, "
            + "CASE when COUNT(distinct uma) = 0 THEN false ELSE true END AS  \"hasAttachment\" " + "FROM "
            + userMessageTable + " um LEFT JOIN " + userMessageAttachmentTable
            + " uma ON um.user_id = uma.user_id AND um.message_id = uma.message_id JOIN " + messageTable
            + " m ON (um.message_id = m.id" + messageConditionUnread + ") LEFT JOIN " + messageTable
            + " r ON um.message_id = r.parent_id AND r.from = um.user_id AND r.state= ? "
            + "WHERE um.user_id = ? " + additionalWhere + " " + "GROUP BY m.id, unread "
            + "ORDER BY m.date DESC LIMIT " + LIST_LIMIT + " OFFSET " + skip;

    sql.prepared(query, values, SqlResult.validResultHandler(results, "attachments", "to", "toName", "cc",
            "ccName", "displayNames"));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void listThreads(UserInfos user, int page, Handler<Either<String, JsonArray>> results) {
    int nbThread = 10;
    int skip = page * nbThread;
    int maxMessageInThread = 5;
    String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id ";
    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();
    values.add(user.getUserId());
    values.add(user.getUserId());//  w  ww.j a  va 2 s  .c  o m
    String query = " WITH threads AS ( "
            + " SELECT thread_id from (SELECT  DISTINCT ON (m.thread_id) m.thread_id, m.date FROM "
            + userMessageTable + " um " + " JOIN " + messageTable + " m ON um.message_id = m.id "
            + " WHERE um.user_id = ? AND m.state = 'SENT' AND um.trashed = false ORDER BY m.thread_id, m.date DESC) a "
            + " ORDER BY date DESC LIMIT " + nbThread + " OFFSET " + skip + ") " +

            "SELECT * FROM ( " + "SELECT DISTINCT " + messagesFields
            + ", um.unread as unread, row_number() OVER (PARTITION BY m.thread_id ORDER BY m.date DESC) as rownum "
            + "FROM threads, " + userMessageTable + " um JOIN " + messageTable + " m ON um.message_id = m.id  "
            + " WHERE um.user_id = ? and "
            + " m.thread_id = threads.thread_id AND m.state = 'SENT' AND um.trashed = false " +

            ") b where rownum <= " + maxMessageInThread + " ORDER BY thread_id, date DESC";

    sql.prepared(query, values,
            SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames"));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void listThreadMessages(String threadId, int page, UserInfos user,
        Handler<Either<String, JsonArray>> results) {
    int skip = page * LIST_LIMIT;
    String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id ";
    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();

    values.add(user.getUserId());
    values.add(threadId);/*  ww  w .  jav  a2 s  .co m*/

    String query = "SELECT " + messagesFields + ", um.unread as unread FROM " + userMessageTable + " as um "
            + " JOIN " + messageTable + " as m ON um.message_id = m.id "
            + " WHERE um.user_id = ? AND m.thread_id = ? " + " AND m.state = 'SENT' AND um.trashed = false "
            + " ORDER BY m.date DESC LIMIT " + LIST_LIMIT + " OFFSET " + skip;

    sql.prepared(query, values,
            SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames"));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void listThreadMessagesNavigation(String messageId, boolean previous, UserInfos user,
        Handler<Either<String, JsonArray>> results) {
    int maxMessageInThread = 15;
    String messagesFields = "m.id, m.parent_id, m.subject, m.body, m.from, m.\"fromName\", m.to, m.\"toName\", m.cc, m.\"ccName\", m.\"displayNames\", m.date, m.thread_id ";
    String condition, limit;/*from w w  w .ja v  a 2  s. co  m*/
    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();

    if (previous) {
        condition = " m.date < element.date ";
        limit = " LIMIT " + maxMessageInThread + " OFFSET 0";
    } else {
        condition = " m.date > element.date ";
        limit = "";
    }
    values.add(messageId);
    values.add(user.getUserId());

    String query = "WITH element AS ( " + " SELECT thread_id, date FROM " + messageTable + " WHERE id = ? ) "
            + "SELECT " + messagesFields + ", um.unread as unread FROM element, " + userMessageTable + " as um "
            + " JOIN " + messageTable + " as m ON um.message_id = m.id "
            + " WHERE um.user_id = ? AND m.thread_id = element.thread_id " + " AND " + condition
            + " AND m.state = 'SENT' AND um.trashed = false " + " ORDER BY m.date DESC" + limit;

    sql.prepared(query, values,
            SqlResult.validResultHandler(results, "to", "toName", "cc", "ccName", "displayNames"));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void trash(List<String> messagesId, UserInfos user, Handler<Either<String, JsonObject>> result) {
    if (validationParamsError(user, result))
        return;/*from   www .j a  v  a 2 s.c o  m*/

    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();

    StringBuilder query = new StringBuilder("UPDATE " + userMessageTable + " " + "SET trashed = true "
            + "WHERE trashed = false AND user_id = ? AND message_id IN (");

    values.add(user.getUserId());

    for (String id : messagesId) {
        query.append("?,");
        values.add(id);
    }
    if (messagesId.size() > 0)
        query.deleteCharAt(query.length() - 1);
    query.append(")");

    sql.prepared(query.toString(), values, SqlResult.validUniqueResultHandler(result));
}

From source file:org.entcore.conversation.service.impl.SqlConversationService.java

License:Open Source License

@Override
public void restore(List<String> messagesId, UserInfos user, Handler<Either<String, JsonObject>> result) {
    if (validationParamsError(user, result))
        return;//w  ww .  ja  va 2 s. co m

    JsonArray values = new fr.wseduc.webutils.collections.JsonArray();

    StringBuilder query = new StringBuilder("UPDATE " + userMessageTable + " " + "SET trashed = false "
            + "WHERE trashed = true AND user_id = ? AND message_id IN ");

    values.add(user.getUserId());

    query.append(generateInVars(messagesId, values));

    sql.prepared(query.toString(), values, SqlResult.validUniqueResultHandler(result));
}